/** * Backup * * @param null $destination * @param callable|null $messager * * @return null|string */ public static function backup($destination = null, callable $messager = null) { if (!$destination) { $destination = Grav::instance()['locator']->findResource('backup://', true); if (!$destination) { throw new \RuntimeException('The backup folder is missing.'); } } $name = substr(strip_tags(Grav::instance()['config']->get('site.title', basename(GRAV_ROOT))), 0, 20); $inflector = new Inflector(); if (is_dir($destination)) { $date = date('YmdHis', time()); $filename = trim($inflector->hyphenize($name), '-') . '-' . $date . '.zip'; $destination = rtrim($destination, DS) . DS . $filename; } $messager && $messager(['type' => 'message', 'level' => 'info', 'message' => 'Creating new Backup "' . $destination . '"']); $messager && $messager(['type' => 'message', 'level' => 'info', 'message' => '']); $zip = new \ZipArchive(); $zip->open($destination, \ZipArchive::CREATE); $max_execution_time = ini_set('max_execution_time', 600); static::folderToZip(GRAV_ROOT, $zip, strlen(rtrim(GRAV_ROOT, DS) . DS), $messager); $messager && $messager(['type' => 'progress', 'percentage' => false, 'complete' => true]); $messager && $messager(['type' => 'message', 'level' => 'info', 'message' => '']); $messager && $messager(['type' => 'message', 'level' => 'info', 'message' => 'Saving and compressing archive...']); $zip->close(); if ($max_execution_time !== false) { ini_set('max_execution_time', $max_execution_time); } return $destination; }
/** * Session init */ public function init() { /** @var Uri $uri */ $uri = $this->grav['uri']; $config = $this->grav['config']; $is_admin = false; $base_url = $uri->rootUrl(false); $session_timeout = $config->get('system.session.timeout', 1800); $session_path = $config->get('system.session.path'); if (!$session_path) { $session_path = '/' . ltrim($base_url, '/'); } // Activate admin if we're inside the admin path. if ($config->get('plugins.admin.enabled')) { $route = $config->get('plugins.admin.route'); // Uri::route() is not processed yet, let's quickly get what we need $current_route = str_replace($base_url, '', parse_url($uri->url(true), PHP_URL_PATH)); $base = '/' . trim($route, '/'); if (substr($current_route, 0, strlen($base)) == $base || substr($current_route, 3, strlen($base)) == $base || substr($current_route, 6, strlen($base)) == $base) { //handle region specific language prefix (en-US) $session_timeout = $config->get('plugins.admin.session.timeout', 1800); $is_admin = true; } } if ($config->get('system.session.enabled') || $is_admin) { $domain = $uri->host(); if ($domain === 'localhost') { $domain = ''; } // Fix for HUGE session timeouts if ($session_timeout > 99999999999) { $session_timeout = 9999999999; } // Define session service. parent::__construct($session_timeout, $session_path, $domain); $secure = $config->get('system.session.secure', false); $httponly = $config->get('system.session.httponly', true); $unique_identifier = GRAV_ROOT; $inflector = new Inflector(); $session_name = $inflector->hyphenize($config->get('system.session.name', 'grav_site')) . '-' . substr(md5($unique_identifier), 0, 7); $split_session = $config->get('system.session.split', true); if ($is_admin && $split_session) { $session_name .= '-admin'; } $this->setName($session_name); $this->start(); setcookie(session_name(), session_id(), time() + $session_timeout, $session_path, $domain, $secure, $httponly); } }
/** * Create form for the given page. * * @param Page $page * @param null $name * @param null $form */ public function __construct(Page $page, $name = null, $form = null) { parent::__construct(); $this->page = $page->route(); $header = $page->header(); $this->rules = isset($header->rules) ? $header->rules : []; $this->header_data = isset($header->data) ? $header->data : []; if ($form) { $this->items = $form; } else { if (isset($header->form)) { $this->items = $header->form; // for backwards compatibility } } // Add form specific rules. if (!empty($this->items['rules']) && is_array($this->items['rules'])) { $this->rules += $this->items['rules']; } // Set form name if not set. if ($name && !is_int($name)) { $this->items['name'] = $name; } elseif (empty($this->items['name'])) { $this->items['name'] = $page->slug(); } // Set form id if not set. if (empty($this->items['id'])) { $inflector = new Inflector(); $this->items['id'] = $inflector->hyphenize($this->items['name']); } // Reset and initialize the form $this->reset(); }