예제 #1
0
 /**
  * Set all twig variables for generating output.
  */
 public function onTwigSiteVariables()
 {
     $twig = $this->grav['twig'];
     // Dynamic type support
     $format = $this->uri->extension();
     $ext = '.' . ($format ? $format : 'html') . TWIG_EXT;
     $twig->twig_vars['location'] = $this->template;
     $twig->twig_vars['base_url_relative_frontend'] = $twig->twig_vars['base_url_relative'] ?: '/';
     $twig->twig_vars['admin_route'] = trim($this->config->get('plugins.admin.route'), '/');
     $twig->twig_vars['base_url_relative'] .= ($twig->twig_vars['base_url_relative'] != '/' ? '/' : '') . $twig->twig_vars['admin_route'];
     $twig->twig_vars['theme_url'] = '/user/plugins/admin/themes/' . $this->theme;
     $twig->twig_vars['base_url'] = $twig->twig_vars['base_url_relative'];
     $twig->twig_vars['base_path'] = GRAV_ROOT;
     $twig->twig_vars['admin'] = $this->admin;
     switch ($this->template) {
         case 'dashboard':
             $twig->twig_vars['popularity'] = $this->popularity;
             break;
         case 'pages':
             $page = $this->admin->page(true);
             if ($page != null) {
                 $twig->twig_vars['file'] = File::instance($page->filePath());
                 $twig->twig_vars['media_types'] = str_replace('defaults,', '', implode(',.', array_keys($this->config->get('media'))));
             }
             break;
     }
 }
예제 #2
0
 /**
  * Save the current page in a different language. Automatically switches to that language.
  *
  * @return bool True if the action was performed.
  */
 protected function taskSaveas()
 {
     if (!$this->authorizeTask('save', $this->dataPermissions())) {
         return;
     }
     // $reorder = false;
     $data = $this->post;
     $language = $data['lang'];
     if ($language) {
         $this->grav['session']->admin_lang = $language ?: 'en';
     }
     // /** @var Page\Pages $pages */
     $pages = $this->grav['pages'];
     $uri = $this->grav['uri'];
     $obj = $this->admin->page($uri->route());
     $this->preparePage($obj, false, $language);
     $file = $obj->file();
     if ($file) {
         $filename = substr($obj->name(), 0, -strlen($obj->extension()));
         $path = $obj->path() . DS . $filename . '.' . $language . '.md';
         $aFile = File::instance($path);
         $aFile->save();
         $aPage = new Page\Page();
         $aPage->init(new \SplFileInfo($path), $language . '.md');
         $aPage->header($obj->header());
         $aPage->rawMarkdown($obj->rawMarkdown());
         $aPage->validate();
         $aPage->filter();
         $aPage->save();
     }
     $this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.SUCCESSFULLY_SWITCHED_LANGUAGE'), 'info');
     $this->setRedirect('/' . $language . $uri->route());
     return true;
 }
예제 #3
0
 /**
  * Delete page.
  *
  * @return bool True if the action was performed.
  * @throws \RuntimeException
  */
 protected function taskDelete()
 {
     if (!$this->authoriseTask('delete page', ['admin.pages', 'admin.super'])) {
         return;
     }
     // Only applies to pages.
     if ($this->view != 'pages') {
         return false;
     }
     /** @var Uri $uri */
     $uri = $this->grav['uri'];
     try {
         $page = $this->admin->page();
         Folder::delete($page->path());
         $results = Cache::clearCache('standard');
         // Set redirect to either referrer or pages list.
         $redirect = $uri->referrer();
         if ($redirect == $uri->route()) {
             $redirect = 'pages';
         }
         $this->admin->setMessage('Successfully deleted', 'info');
         $this->setRedirect($redirect);
     } catch (\Exception $e) {
         throw new \RuntimeException('Deleting page failed on error: ' . $e->getMessage());
     }
     return true;
 }
예제 #4
0
 /**
  * Handle deleting a file from a blueprint
  *
  * @return bool True if the action was performed.
  */
 protected function taskRemoveFileFromBlueprint()
 {
     $uri = $this->grav['uri'];
     $blueprint = base64_decode($uri->param('blueprint'));
     $path = base64_decode($uri->param('path'));
     $proute = base64_decode($uri->param('proute'));
     $type = $uri->param('type');
     $field = $uri->param('field');
     $this->taskRemoveMedia();
     if ($type == 'pages') {
         $page = $this->admin->page(true, $proute);
         $keys = explode('.', preg_replace('/^header./', '', $field));
         $header = (array) $page->header();
         $data_path = implode('.', $keys);
         $data = Utils::getDotNotation($header, $data_path);
         if (isset($data[$path])) {
             unset($data[$path]);
             Utils::setDotNotation($header, $data_path, $data);
             $page->header($header);
         }
         $page->save();
     } else {
         $blueprint_prefix = $type == 'config' ? '' : $type . '.';
         $blueprint_name = str_replace('/blueprints', '', str_replace('config/', '', $blueprint));
         $blueprint_field = $blueprint_prefix . $blueprint_name . '.' . $field;
         $files = $this->grav['config']->get($blueprint_field);
         foreach ($files as $key => $value) {
             if ($key == $path) {
                 unset($files[$key]);
             }
         }
         $this->grav['config']->set($blueprint_field, $files);
         switch ($type) {
             case 'config':
                 $data = $this->grav['config']->get($blueprint_name);
                 $config = $this->admin->data($blueprint, $data);
                 $config->save();
                 break;
             case 'themes':
                 Theme::saveConfig($blueprint_name);
                 break;
             case 'plugins':
                 Plugin::saveConfig($blueprint_name);
                 break;
         }
     }
     $this->admin->json_response = ['status' => 'success', 'message' => $this->admin->translate('PLUGIN_ADMIN.REMOVE_SUCCESSFUL')];
     return true;
 }