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