예제 #1
0
 /**
  * This attempts to find media, other files, and download them
  * @param $page
  * @param $path
  */
 protected function fallbackUrl($page, $path)
 {
     /** @var Uri $uri */
     $uri = $this['uri'];
     /** @var Config $config */
     $config = $this['config'];
     $uri_extension = $uri->extension();
     $fallback_types = $config->get('system.media.allowed_fallback_types', null);
     $supported_types = $config->get('media');
     // Check whitelist first, then ensure extension is a valid media type
     if (!empty($fallback_types) && !in_array($uri_extension, $fallback_types)) {
         return;
     } elseif (!array_key_exists($uri_extension, $supported_types)) {
         return;
     }
     $path_parts = pathinfo($path);
     $page = $this['pages']->dispatch($path_parts['dirname'], true);
     if ($page) {
         $media = $page->media()->all();
         $parsed_url = parse_url(urldecode($uri->basename()));
         $media_file = $parsed_url['path'];
         // if this is a media object, try actions first
         if (isset($media[$media_file])) {
             $medium = $media[$media_file];
             foreach ($uri->query(null, true) as $action => $params) {
                 if (in_array($action, ImageMedium::$magic_actions)) {
                     call_user_func_array(array(&$medium, $action), explode(',', $params));
                 }
             }
             Utils::download($medium->path(), false);
         }
         // unsupported media type, try to download it...
         if ($uri_extension) {
             $extension = $uri_extension;
         } else {
             if (isset($path_parts['extension'])) {
                 $extension = $path_parts['extension'];
             } else {
                 $extension = null;
             }
         }
         if ($extension) {
             $download = true;
             if (in_array(ltrim($extension, '.'), $config->get('system.media.unsupported_inline_types', []))) {
                 $download = false;
             }
             Utils::download($page->path() . DIRECTORY_SEPARATOR . $uri->basename(), $download);
         }
     }
 }
예제 #2
0
파일: controller.php 프로젝트: clee03/metal
 /**
  * Handle the backup action
  *
  * @return bool True if the action was performed.
  */
 protected function taskBackup()
 {
     $param_sep = $this->grav['config']->get('system.param_sep', ':');
     if (!$this->authorizeTask('backup', ['admin.maintenance', 'admin.super'])) {
         return;
     }
     $download = $this->grav['uri']->param('download');
     if ($download) {
         Utils::download(base64_decode(urldecode($download)), true);
     }
     $log = JsonFile::instance($this->grav['locator']->findResource("log://backup.log", true, true));
     try {
         $backup = ZipBackup::backup();
     } catch (\Exception $e) {
         $this->admin->json_response = ['status' => 'error', 'message' => $this->admin->translate('PLUGIN_ADMIN.AN_ERROR_OCCURRED') . '. ' . $e->getMessage()];
         return true;
     }
     $download = urlencode(base64_encode($backup));
     $url = rtrim($this->grav['uri']->rootUrl(true), '/') . '/' . trim($this->admin->base, '/') . '/task' . $param_sep . 'backup/download' . $param_sep . $download . '/admin-nonce' . $param_sep . Utils::getNonce('admin-form');
     $log->content(['time' => time(), 'location' => $backup]);
     $log->save();
     $this->admin->json_response = ['status' => 'success', 'message' => $this->admin->translate('PLUGIN_ADMIN.YOUR_BACKUP_IS_READY_FOR_DOWNLOAD') . '. <a href="' . $url . '" class="button">' . $this->admin->translate('PLUGIN_ADMIN.DOWNLOAD_BACKUP') . '</a>', 'toastr' => ['timeOut' => 0, 'closeButton' => true]];
     return true;
 }
예제 #3
0
 /**
  * Handle the backup action
  *
  * @return bool True if the action was performed.
  */
 protected function taskBackup()
 {
     if (!$this->authoriseTask('backup', ['admin.maintenance', 'admin.super'])) {
         return;
     }
     $download = $this->grav['uri']->param('download');
     if ($download) {
         Utils::download(base64_decode(urldecode($download)), true);
     }
     $log = JsonFile::instance($this->grav['locator']->findResource("log://backup.log", true, true));
     try {
         $backup = ZipBackup::backup();
     } catch (\Exception $e) {
         $this->admin->json_response = ['status' => 'error', 'message' => 'An error occured. ' . $e->getMessage()];
         return true;
     }
     $download = urlencode(base64_encode($backup));
     $url = rtrim($this->grav['uri']->rootUrl(true), '/') . '/' . trim($this->admin->base, '/') . '/task:backup/download:' . $download;
     $log->content(['time' => time(), 'location' => $backup]);
     $log->save();
     $this->admin->json_response = ['status' => 'success', 'message' => 'Your backup is ready for download. <a href="' . $url . '" class="button">Download backup</a>', 'toastr' => ['timeOut' => 0, 'closeButton' => true]];
     return true;
 }
예제 #4
0
파일: Grav.php 프로젝트: rikusv/grav
 /**
  * This attempts to fine media, other files, and download them
  * @param $page
  * @param $path
  */
 protected function fallbackUrl($page, $path)
 {
     /** @var Uri $uri */
     $uri = $this['uri'];
     $path_parts = pathinfo($path);
     $page = $this['pages']->dispatch($path_parts['dirname'], true);
     if ($page) {
         $media = $page->media()->all();
         $parsed_url = parse_url(urldecode($uri->basename()));
         $media_file = $parsed_url['path'];
         // if this is a media object, try actions first
         if (isset($media[$media_file])) {
             $medium = $media[$media_file];
             foreach ($uri->query(null, true) as $action => $params) {
                 if (in_array($action, ImageMedium::$magic_actions)) {
                     call_user_func_array(array(&$medium, $action), explode(',', $params));
                 }
             }
             Utils::download($medium->path(), false);
         }
         // unsupported media type, try to download it...
         $extension = $uri->extension() ?: isset($path_parts['extension']) ? $path_parts['extension'] : null;
         if ($extension) {
             $download = true;
             if (in_array(ltrim($extension, '.'), $this['config']->get('system.media.unsupported_inline_types'))) {
                 $download = false;
             }
             Utils::download($page->path() . DIRECTORY_SEPARATOR . $uri->basename(), $download);
         }
     }
 }
예제 #5
0
파일: Grav.php 프로젝트: re-pe/grav
 protected static function load(array $values)
 {
     $container = new static($values);
     $container['grav'] = $container;
     $container['debugger'] = new Debugger();
     $container['debugger']->startTimer('_init', 'Initialize');
     $container->register(new LoggerServiceProvider());
     $container->register(new ErrorServiceProvider());
     $container['uri'] = function ($c) {
         return new Uri($c);
     };
     $container['task'] = function ($c) {
         return !empty($_POST['task']) ? $_POST['task'] : $c['uri']->param('task');
     };
     $container['events'] = function ($c) {
         return new EventDispatcher();
     };
     $container['cache'] = function ($c) {
         return new Cache($c);
     };
     $container['plugins'] = function ($c) {
         return new Plugins();
     };
     $container['themes'] = function ($c) {
         return new Themes($c);
     };
     $container['twig'] = function ($c) {
         return new Twig($c);
     };
     $container['taxonomy'] = function ($c) {
         return new Taxonomy($c);
     };
     $container['pages'] = function ($c) {
         return new Page\Pages($c);
     };
     $container['assets'] = function ($c) {
         return new Assets();
     };
     $container['page'] = function ($c) {
         /** @var Pages $pages */
         $pages = $c['pages'];
         /** @var Uri $uri */
         $uri = $c['uri'];
         $path = rtrim($uri->path(), '/');
         $path = $path ?: '/';
         $page = $pages->dispatch($path);
         if (!$page || !$page->routable()) {
             $path_parts = pathinfo($path);
             $page = $c['pages']->dispatch($path_parts['dirname'], true);
             if ($page) {
                 $media = $page->media()->all();
                 $parsed_url = parse_url(urldecode($uri->basename()));
                 $media_file = $parsed_url['path'];
                 // if this is a media object, try actions first
                 if (isset($media[$media_file])) {
                     $medium = $media[$media_file];
                     foreach ($uri->query(null, true) as $action => $params) {
                         if (in_array($action, ImageMedium::$magic_actions)) {
                             call_user_func_array(array(&$medium, $action), explode(',', $params));
                         }
                     }
                     Utils::download($medium->path(), false);
                 } else {
                     Utils::download($page->path() . DIRECTORY_SEPARATOR . $uri->basename(), true);
                 }
             }
             // If no page found, fire event
             $event = $c->fireEvent('onPageNotFound');
             if (isset($event->page)) {
                 $page = $event->page;
             } else {
                 throw new \RuntimeException('Page Not Found', 404);
             }
         }
         return $page;
     };
     $container['output'] = function ($c) {
         return $c['twig']->processSite($c['uri']->extension());
     };
     $container['browser'] = function ($c) {
         return new Browser();
     };
     $container['base_url_absolute'] = function ($c) {
         return $c['config']->get('system.base_url_absolute') ?: $c['uri']->rootUrl(true);
     };
     $container['base_url_relative'] = function ($c) {
         return $c['config']->get('system.base_url_relative') ?: $c['uri']->rootUrl(false);
     };
     $container['base_url'] = function ($c) {
         return $c['config']->get('system.absolute_urls') ? $c['base_url_absolute'] : $c['base_url_relative'];
     };
     $container->register(new StreamsServiceProvider());
     $container->register(new ConfigServiceProvider());
     $container['debugger']->stopTimer('_init');
     return $container;
 }