mirror of
https://github.com/getgrav/grav-plugin-admin.git
synced 2025-11-02 03:16:11 +01:00
Optimize admin for speed (only load frontend pages on demand)
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
## mm/dd/2019
|
||||
|
||||
1. [](#improved)
|
||||
* Optimize getNotifications and getUpdates tasks for speed
|
||||
* Optimize admin for speed (only load frontend pages on demand)
|
||||
|
||||
# v1.10.0-beta.5
|
||||
## 08/11/2019
|
||||
|
||||
15
admin.php
15
admin.php
@@ -161,10 +161,7 @@ class AdminPlugin extends Plugin
|
||||
if ($this->isAdminPath()) {
|
||||
$pages = $this->grav['pages'];
|
||||
if (method_exists($pages, 'disablePages')) {
|
||||
$task = $this->grav['task'];
|
||||
if (in_array($task, ['getNotifications', 'getUpdates'])) {
|
||||
$pages->disablePages();
|
||||
}
|
||||
$pages->disablePages();
|
||||
}
|
||||
try {
|
||||
$this->grav['session']->init();
|
||||
@@ -436,8 +433,11 @@ 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();
|
||||
|
||||
@@ -452,13 +452,12 @@ class AdminPlugin extends Plugin
|
||||
if ($page) {
|
||||
$page->route($home);
|
||||
}
|
||||
*/
|
||||
// FIXME: STOP
|
||||
|
||||
// Make local copy of POST.
|
||||
$post = $this->grav['uri']->post();
|
||||
|
||||
// Initialize Page Types
|
||||
Pages::types();
|
||||
|
||||
// Handle tasks.
|
||||
$this->admin->task = $task = $this->grav['task'];
|
||||
if ($task) {
|
||||
@@ -475,8 +474,6 @@ class AdminPlugin extends Plugin
|
||||
// make sure page is not frozen!
|
||||
unset($this->grav['page']);
|
||||
|
||||
$this->admin->pagesCount();
|
||||
|
||||
// Replace page service with admin.
|
||||
$this->grav['page'] = function () use ($self) {
|
||||
$page = new Page();
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
namespace Grav\Plugin\Admin;
|
||||
|
||||
use DateTime;
|
||||
use Grav\Common\Cache;
|
||||
use Grav\Common\Data;
|
||||
use Grav\Common\File\CompiledYamlFile;
|
||||
use Grav\Common\GPM\GPM;
|
||||
@@ -330,7 +331,10 @@ class Admin
|
||||
|
||||
public function getCurrentRoute()
|
||||
{
|
||||
$pages = Grav::instance()['pages'];
|
||||
/** @var Pages $pages */
|
||||
$pages = $this->grav['pages'];
|
||||
$pages->enablePages();
|
||||
|
||||
$route = '/' . ltrim($this->route, '/');
|
||||
|
||||
/** @var PageInterface $page */
|
||||
@@ -423,7 +427,10 @@ class Admin
|
||||
$files = [];
|
||||
$grav = Grav::instance();
|
||||
|
||||
/** @var Pages $pages */
|
||||
$pages = $grav['pages'];
|
||||
$pages->enablePages();
|
||||
|
||||
$route = '/' . ltrim($grav['admin']->route, '/');
|
||||
|
||||
/** @var PageInterface $page */
|
||||
@@ -791,11 +798,15 @@ class Admin
|
||||
|
||||
$file = File::instance($filename);
|
||||
|
||||
/** @var Pages $pages */
|
||||
$pages = $this->grav['pages'];
|
||||
$pages->enablePages();
|
||||
|
||||
$obj = new \stdClass();
|
||||
$obj->title = $file->basename();
|
||||
$obj->path = $file->filename();
|
||||
$obj->file = $file;
|
||||
$obj->page = $this->grav['pages']->get(dirname($obj->path));
|
||||
$obj->page = $pages->get(dirname($obj->path));
|
||||
|
||||
$fileInfo = pathinfo($obj->title);
|
||||
$filename = str_replace(['@3x', '@2x'], '', $fileInfo['filename']);
|
||||
@@ -886,6 +897,7 @@ class Admin
|
||||
{
|
||||
/** @var Pages $pages */
|
||||
$pages = $this->grav['pages'];
|
||||
$pages->enablePages();
|
||||
|
||||
if ($unique) {
|
||||
$routes = array_unique($pages->routes());
|
||||
@@ -904,7 +916,19 @@ class Admin
|
||||
public function pagesCount()
|
||||
{
|
||||
if (!$this->pages_count) {
|
||||
$this->pages_count = count($this->grav['pages']->all());
|
||||
/** @var Cache $cache */
|
||||
$cache = $this->grav['cache'];
|
||||
$count = $cache->fetch('admin-pages-count');
|
||||
if (false === $count) {
|
||||
/** @var Pages $pages */
|
||||
$pages = $this->grav['pages'];
|
||||
$pages->enablePages();
|
||||
|
||||
$count = count($pages->all());
|
||||
$cache->save('admin-pages-count', $count);
|
||||
}
|
||||
|
||||
$this->pages_count = $count;
|
||||
}
|
||||
|
||||
return $this->pages_count;
|
||||
@@ -937,8 +961,12 @@ class Admin
|
||||
*/
|
||||
public function accessLevels()
|
||||
{
|
||||
if (method_exists($this->grav['pages'], 'accessLevels')) {
|
||||
return $this->grav['pages']->accessLevels();
|
||||
/** @var Pages $pages */
|
||||
$pages = $this->grav['pages'];
|
||||
$pages->enablePages();
|
||||
|
||||
if (method_exists($pages, 'accessLevels')) {
|
||||
return $pages->accessLevels();
|
||||
}
|
||||
|
||||
return [];
|
||||
@@ -1143,6 +1171,7 @@ class Admin
|
||||
{
|
||||
/** @var Pages $pages */
|
||||
$pages = $this->grav['pages'];
|
||||
$pages->enablePages();
|
||||
|
||||
$latest = [];
|
||||
|
||||
@@ -1691,6 +1720,7 @@ class Admin
|
||||
{
|
||||
/** @var Pages $pages */
|
||||
$pages = $this->grav['pages'];
|
||||
$pages->enablePages();
|
||||
|
||||
if ($path && $path[0] !== '/') {
|
||||
$path = "/{$path}";
|
||||
@@ -1779,8 +1809,12 @@ class Admin
|
||||
{
|
||||
$reports = new ArrayCollection();
|
||||
|
||||
/** @var Pages $pages */
|
||||
$pages = $this->grav['pages'];
|
||||
$pages->enablePages();
|
||||
|
||||
// Default to XSS Security Report
|
||||
$result = Security::detectXssFromPages($this->grav['pages'], true);
|
||||
$result = Security::detectXssFromPages($pages, true);
|
||||
|
||||
$reports['Grav Security Check'] = $this->grav['twig']->processTemplate('reports/security.html.twig', [
|
||||
'result' => $result,
|
||||
@@ -1847,7 +1881,9 @@ class Admin
|
||||
|
||||
if (!$page_files) {
|
||||
$page_files = [];
|
||||
/** @var Pages $pages */
|
||||
$pages = $this->grav['pages'];
|
||||
$pages->enablePages();
|
||||
|
||||
if ($param_page) {
|
||||
$page = $pages->dispatch($param_page);
|
||||
@@ -2051,11 +2087,14 @@ class Admin
|
||||
*/
|
||||
public function pages()
|
||||
{
|
||||
/** @var Collection $pages */
|
||||
$pages = $this->grav['pages']->all();
|
||||
/** @var Pages $pages */
|
||||
$pages = $this->grav['pages'];
|
||||
$pages->enablePages();
|
||||
|
||||
$collection = $pages->all();
|
||||
|
||||
$pagesWithFiles = [];
|
||||
foreach ($pages as $page) {
|
||||
foreach ($collection as $page) {
|
||||
if (count($page->media()->all())) {
|
||||
$pagesWithFiles[] = $page;
|
||||
}
|
||||
|
||||
@@ -1249,7 +1249,15 @@ class AdminController extends AdminBaseController
|
||||
if ($data['route'] === '' || $data['route'] === '/') {
|
||||
$path = $this->grav['locator']->findResource('page://');
|
||||
} else {
|
||||
$path = $this->grav['page']->find($data['route'])->path();
|
||||
/** @var Pages $pages */
|
||||
$pages = $this->grav['pages'];
|
||||
$pages->enablePages();
|
||||
|
||||
$page = $pages->find($data['route']);
|
||||
if (!$page) {
|
||||
return false;
|
||||
}
|
||||
$path = $page->path();
|
||||
}
|
||||
|
||||
$orderOfNewFolder = static::getNextOrderInFolder($path);
|
||||
@@ -1276,6 +1284,7 @@ class AdminController extends AdminBaseController
|
||||
|
||||
/** @var Pages $pages */
|
||||
$pages = $this->grav['pages'];
|
||||
$pages->enablePages();
|
||||
|
||||
// Find new parent page in order to build the path.
|
||||
$route = $data['route'] ?? dirname($this->admin->route);
|
||||
@@ -1400,6 +1409,7 @@ class AdminController extends AdminBaseController
|
||||
try {
|
||||
/** @var Pages $pages */
|
||||
$pages = $this->grav['pages'];
|
||||
$pages->enablePages();
|
||||
|
||||
// Get the current page.
|
||||
$original_page = $this->admin->page(true);
|
||||
@@ -1727,8 +1737,12 @@ class AdminController extends AdminBaseController
|
||||
$rawroute = $data['rawroute'] ?? null;
|
||||
|
||||
if ($rawroute) {
|
||||
/** @var Pages $pages */
|
||||
$pages = $this->grav['pages'];
|
||||
$pages->enablePages();
|
||||
|
||||
/** @var PageInterface $page */
|
||||
$page = $this->grav['pages']->dispatch($rawroute);
|
||||
$page = $pages->dispatch($rawroute);
|
||||
|
||||
if ($page) {
|
||||
$child_type = $page->childType();
|
||||
@@ -1766,8 +1780,12 @@ 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();
|
||||
|
||||
/** @var Collection $collection */
|
||||
$collection = $this->grav['pages']->all();
|
||||
$collection = $pages->all();
|
||||
|
||||
if (count($flags)) {
|
||||
// Filter by state
|
||||
@@ -2247,7 +2265,11 @@ class AdminController extends AdminBaseController
|
||||
// Valid types are dir|file|link
|
||||
$default_filters = ['type'=> ['root', 'dir'], 'name' => null, 'extension' => null];
|
||||
|
||||
$page_instances = Grav::instance()['pages']->instances();
|
||||
/** @var Pages $pages */
|
||||
$pages = $this->grav['pages'];
|
||||
$pages->enablePages();
|
||||
|
||||
$page_instances = $pages->instances();
|
||||
|
||||
$is_page = $data['page'] ?? true;
|
||||
$route = $data['route'] ?? null;
|
||||
@@ -2286,7 +2308,7 @@ class AdminController extends AdminBaseController
|
||||
|
||||
if ($is_page) {
|
||||
/** @var PageInterface $page */
|
||||
$page = $this->grav['pages']->dispatch($route);
|
||||
$page = $pages->dispatch($route);
|
||||
$path = $page ? $page->path() : null;
|
||||
} else {
|
||||
// Try a physical path
|
||||
@@ -2455,6 +2477,10 @@ class AdminController extends AdminBaseController
|
||||
{
|
||||
$input = (array)$this->data;
|
||||
|
||||
/** @var Pages $pages */
|
||||
$pages = $this->grav['pages'];
|
||||
$pages->enablePages();
|
||||
|
||||
if (isset($input['folder']) && $input['folder'] !== $page->value('folder')) {
|
||||
$order = $page->value('order');
|
||||
$ordering = $order ? sprintf('%02d.', $order) : '';
|
||||
@@ -2540,7 +2566,8 @@ class AdminController extends AdminBaseController
|
||||
*/
|
||||
protected function findFirstAvailable($item, PageInterface $page)
|
||||
{
|
||||
if (!$page->parent()->children()) {
|
||||
$parent = $page->parent();
|
||||
if (!$parent || !$parent->children()) {
|
||||
return $page->{$item}();
|
||||
}
|
||||
|
||||
@@ -2564,7 +2591,7 @@ class AdminController extends AdminBaseController
|
||||
};*/
|
||||
|
||||
$highest = 1;
|
||||
$siblings = $page->parent()->children();
|
||||
$siblings = $parent->children();
|
||||
$findCorrectAppendedNumber = function ($item, $page_item, $highest) use (
|
||||
$siblings,
|
||||
&$findCorrectAppendedNumber,
|
||||
|
||||
Reference in New Issue
Block a user