Improved page initialization logic

This commit is contained in:
Matias Griese
2019-08-23 20:45:51 +03:00
parent fcc76d7470
commit 74236c6da5
3 changed files with 58 additions and 84 deletions

View File

@@ -420,9 +420,6 @@ class AdminPlugin extends Plugin
$this->session = $this->grav['session'];
// Set original route for the home page.
$home = '/' . trim($this->config->get('system.home.alias'), '/');
// set session variable if it's passed via the url
if ($this->uri->param('mode') === 'expert') {
$this->session->expert = true;
@@ -433,28 +430,6 @@ class AdminPlugin extends Plugin
$this->session->expert = $this->session->expert ?? false;
}
// FIXME: START
/** @var Pages $pages */
/*
$pages = $this->grav['pages'];
$pages->enablePages();
$this->grav['admin']->routes = $pages->routes();
// Remove default route from routes.
if (isset($this->grav['admin']->routes['/'])) {
unset($this->grav['admin']->routes['/']);
}
$page = $pages->dispatch('/', true);
// If page is null, the default page does not exist, and we cannot route to it
if ($page) {
$page->route($home);
}
*/
// FIXME: STOP
// Make local copy of POST.
$post = $this->grav['uri']->post();

View File

@@ -331,9 +331,7 @@ class Admin
public function getCurrentRoute()
{
/** @var Pages $pages */
$pages = $this->grav['pages'];
$pages->enablePages();
$pages = static::enablePages();
$route = '/' . ltrim($this->route, '/');
@@ -427,9 +425,7 @@ class Admin
$files = [];
$grav = Grav::instance();
/** @var Pages $pages */
$pages = $grav['pages'];
$pages->enablePages();
$pages = static::enablePages();
$route = '/' . ltrim($grav['admin']->route, '/');
@@ -798,9 +794,7 @@ class Admin
$file = File::instance($filename);
/** @var Pages $pages */
$pages = $this->grav['pages'];
$pages->enablePages();
$pages = static::enablePages();
$obj = new \stdClass();
$obj->title = $file->basename();
@@ -895,9 +889,7 @@ class Admin
*/
public function routes($unique = false)
{
/** @var Pages $pages */
$pages = $this->grav['pages'];
$pages->enablePages();
$pages = static::enablePages();
if ($unique) {
$routes = array_unique($pages->routes());
@@ -920,9 +912,7 @@ class Admin
$cache = $this->grav['cache'];
$count = $cache->fetch('admin-pages-count');
if (false === $count) {
/** @var Pages $pages */
$pages = $this->grav['pages'];
$pages->enablePages();
$pages = static::enablePages();
$count = count($pages->all());
$cache->save('admin-pages-count', $count);
@@ -961,9 +951,7 @@ class Admin
*/
public function accessLevels()
{
/** @var Pages $pages */
$pages = $this->grav['pages'];
$pages->enablePages();
$pages = static::enablePages();
if (method_exists($pages, 'accessLevels')) {
return $pages->accessLevels();
@@ -1169,9 +1157,7 @@ class Admin
*/
public function latestPages($count = 10)
{
/** @var Pages $pages */
$pages = $this->grav['pages'];
$pages->enablePages();
$pages = static::enablePages();
$latest = [];
@@ -1718,9 +1704,7 @@ class Admin
*/
public function getPage($path)
{
/** @var Pages $pages */
$pages = $this->grav['pages'];
$pages->enablePages();
$pages = static::enablePages();
if ($path && $path[0] !== '/') {
$path = "/{$path}";
@@ -1809,9 +1793,7 @@ class Admin
{
$reports = new ArrayCollection();
/** @var Pages $pages */
$pages = $this->grav['pages'];
$pages->enablePages();
$pages = static::enablePages();
// Default to XSS Security Report
$result = Security::detectXssFromPages($pages, true);
@@ -1881,9 +1863,7 @@ class Admin
if (!$page_files) {
$page_files = [];
/** @var Pages $pages */
$pages = $this->grav['pages'];
$pages->enablePages();
$pages = static::enablePages();
if ($param_page) {
$page = $pages->dispatch($param_page);
@@ -2087,9 +2067,7 @@ class Admin
*/
public function pages()
{
/** @var Pages $pages */
$pages = $this->grav['pages'];
$pages->enablePages();
$pages = static::enablePages();
$collection = $pages->all();
@@ -2103,6 +2081,43 @@ class Admin
return $pagesWithFiles;
}
/**
* @return Pages
*/
public static function enablePages()
{
static $pages;
if ($pages) {
return $pages;
}
$grav = Grav::instance();
$admin = $grav['admin'];
/** @var Pages $pages */
$pages = Grav::instance()['pages'];
$pages->enablePages();
// If page is null, the default page does not exist, and we cannot route to it
$page = $pages->dispatch('/', true);
if ($page) {
// Set original route for the home page.
$home = '/' . trim($grav['config']->get('system.home.alias'), '/');
$page->route($home);
}
$admin->routes = $pages->routes();
// Remove default route from routes.
if (isset($admin->routes['/'])) {
unset($admin->routes['/']);
}
return $pages;
}
/**
* Return HTTP_REFERRER if set
*

View File

@@ -1251,9 +1251,7 @@ class AdminController extends AdminBaseController
if ($data['route'] === '' || $data['route'] === '/') {
$path = $this->grav['locator']->findResource('page://');
} else {
/** @var Pages $pages */
$pages = $this->grav['pages'];
$pages->enablePages();
$pages = $this->admin::enablePages();
$page = $pages->find($data['route']);
if (!$page) {
@@ -1284,9 +1282,7 @@ class AdminController extends AdminBaseController
$data = (array)$this->data;
$this->grav['twig']->twig_vars['current_form_data'] = $data;
/** @var Pages $pages */
$pages = $this->grav['pages'];
$pages->enablePages();
$pages = $this->admin::enablePages();
// Find new parent page in order to build the path.
$route = $data['route'] ?? dirname($this->admin->route);
@@ -1409,9 +1405,7 @@ class AdminController extends AdminBaseController
}
try {
/** @var Pages $pages */
$pages = $this->grav['pages'];
$pages->enablePages();
$pages = $this->admin::enablePages();
// Get the current page.
$original_page = $this->admin->page(true);
@@ -1741,9 +1735,7 @@ class AdminController extends AdminBaseController
$rawroute = $data['rawroute'] ?? null;
if ($rawroute) {
/** @var Pages $pages */
$pages = $this->grav['pages'];
$pages->enablePages();
$pages = $this->admin::enablePages();
/** @var PageInterface $page */
$page = $pages->dispatch($rawroute);
@@ -1784,9 +1776,7 @@ class AdminController extends AdminBaseController
$flags = !empty($data['flags']) ? array_map('strtolower', explode(',', $data['flags'])) : [];
$queries = !empty($data['query']) ? explode(',', $data['query']) : [];
/** @var Pages $pages */
$pages = $this->grav['pages'];
$pages->enablePages();
$pages = $this->admin::enablePages();
/** @var Collection $collection */
$collection = $pages->all();
@@ -2269,9 +2259,7 @@ class AdminController extends AdminBaseController
// Valid types are dir|file|link
$default_filters = ['type'=> ['root', 'dir'], 'name' => null, 'extension' => null];
/** @var Pages $pages */
$pages = $this->grav['pages'];
$pages->enablePages();
$pages = $this->admin::enablePages();
$page_instances = $pages->instances();
@@ -2293,14 +2281,12 @@ class AdminController extends AdminBaseController
$root = false;
// Handle leaf_route
if ($leaf_route && $route != $leaf_route) {
if ($leaf_route && $route !== $leaf_route) {
$nodes = explode('/', $leaf_route);
$sub_route = '/' . implode('/', array_slice($nodes, 1, $data['level']++ ));
$sub_route = '/' . implode('/', array_slice($nodes, 1, $data['level']++));
$data['route'] = $sub_route;
[$status, $msg, $children, $extra] = $this->getLevelListing($data);
}
// Handle no route, assume page tree root
@@ -2405,7 +2391,7 @@ class AdminController extends AdminBaseController
}
// Add children if any
if ($filePath == $extra && is_array($children)) {
if ($filePath === $extra && is_array($children)) {
$payload['children'] = array_values($children);
}
@@ -2481,9 +2467,7 @@ class AdminController extends AdminBaseController
{
$input = (array)$this->data;
/** @var Pages $pages */
$pages = $this->grav['pages'];
$pages->enablePages();
$this->admin::enablePages();
if (isset($input['folder']) && $input['folder'] !== $page->value('folder')) {
$order = $page->value('order');