From d16a65ebd75a4e4733d4b75625c345fa9224196a Mon Sep 17 00:00:00 2001 From: Matias Griese Date: Thu, 25 Feb 2021 17:39:41 +0200 Subject: [PATCH] Flex Pages optimizations --- CHANGELOG.md | 3 +++ .../Flex/Pages/Traits/PageAuthorsTrait.php | 18 ++++++++++++------ .../Flex/Pages/Traits/PageRoutableTrait.php | 16 ++++++++++------ 3 files changed, 25 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 196719d87..21b548d11 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,9 @@ 1. [](#new) * Added `ControllerResponseTrait::createDownloadResponse()` method +1. [](#improved) + * Optimized `Flex Pages` parent method when using multi-language + * Optimized `Flex Pages` permissions lookups # v1.7.7 ## 02/23/2021 diff --git a/system/src/Grav/Framework/Flex/Pages/Traits/PageAuthorsTrait.php b/system/src/Grav/Framework/Flex/Pages/Traits/PageAuthorsTrait.php index d7af40fa9..5d3e96803 100644 --- a/system/src/Grav/Framework/Flex/Pages/Traits/PageAuthorsTrait.php +++ b/system/src/Grav/Framework/Flex/Pages/Traits/PageAuthorsTrait.php @@ -27,6 +27,8 @@ trait PageAuthorsTrait { /** @var array */ private $_authors; + /** @var array|null */ + private $_permissionsCache; /** * Returns true if object has the named author. @@ -70,15 +72,19 @@ trait PageAuthorsTrait */ public function getPermissions(bool $inherit = false) { - $permissions = []; - if ($inherit && $this->getNestedProperty('header.permissions.inherit', true)) { - $parent = $this->parent(); - if ($parent && method_exists($parent, 'getPermissions')) { - $permissions = $parent->getPermissions($inherit); + if (null === $this->_permissionsCache) { + $permissions = []; + if ($inherit && $this->getNestedProperty('header.permissions.inherit', true)) { + $parent = $this->parent(); + if ($parent && method_exists($parent, 'getPermissions')) { + $permissions = $parent->getPermissions($inherit); + } } + + $this->_permissionsCache = $this->loadPermissions($permissions); } - return $this->loadPermissions($permissions); + return $this->_permissionsCache; } /** diff --git a/system/src/Grav/Framework/Flex/Pages/Traits/PageRoutableTrait.php b/system/src/Grav/Framework/Flex/Pages/Traits/PageRoutableTrait.php index 002973982..40df455b9 100644 --- a/system/src/Grav/Framework/Flex/Pages/Traits/PageRoutableTrait.php +++ b/system/src/Grav/Framework/Flex/Pages/Traits/PageRoutableTrait.php @@ -32,6 +32,8 @@ trait PageRoutableTrait private $_route; /** @var string|null */ private $_path; + /** @var PageInterface|null */ + private $_parentCache; /** * Returns the page extension, got from the page `url_extension` config and falls back to the @@ -413,8 +415,8 @@ trait PageRoutableTrait throw new RuntimeException(__METHOD__ . '(PageInterface): Not Implemented'); } - if ($this->root()) { - return null; + if ($this->_parentCache || $this->root()) { + return $this->_parentCache; } $filesystem = Filesystem::getInstance(false); @@ -427,12 +429,14 @@ trait PageRoutableTrait $parent = $parent->getTranslation($language) ?? $parent; } - return $parent; + $this->_parentCache = $parent; + } else { + $index = $directory->getIndex(); + + $this->_parentCache = method_exists($index, 'getRoot') ? $index->getRoot() : null; } - $index = $directory->getIndex(); - - return method_exists($index, 'getRoot') ? $index->getRoot() : null; + return $this->_parentCache; } /**