MINOR Added caching to SiteTree->getStatusFlags(), as its called twice for every node now in LeftAndMain->SiteTreeAsUL() (see #7410)

This commit is contained in:
Ingo Schommer 2012-06-12 15:55:05 +02:00
parent bc2fb3c900
commit e50936fe9f
2 changed files with 40 additions and 28 deletions

View File

@ -201,6 +201,8 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
*/
protected static $enforce_strict_hierarchy = true;
protected $_cache_statusFlags = null;
/**
* Determines if the system should avoid orphaned pages
* by deleting all children when the their parent is deleted (TRUE),
@ -1494,6 +1496,11 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
parent::onAfterDelete();
}
function flushCache($persistent = true) {
parent::flushCache($persistent);
$this->_cache_statusFlags = null;
}
function validate() {
$result = parent::validate();
@ -2470,9 +2477,11 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
* Example (with optional title attribute):
* "deletedonlive" => array('text' => "Deleted", 'title' => 'This page has been deleted')
*
* @param Boolean $cached
* @return array
*/
function getStatusFlags() {
function getStatusFlags($cached = true) {
if(!$this->_cache_statusFlags || !$cached) {
$flags = array();
if($this->IsDeletedFromStage) {
if($this->ExistsOnLive) {
@ -2500,7 +2509,10 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
$this->extend('updateStatusFlags', $flags);
return $flags;
$this->_cache_statusFlags = $flags;
}
return $this->_cache_statusFlags;
}

View File

@ -956,8 +956,8 @@ class SiteTreeTest_NotRoot extends Page implements TestOnly {
}
class SiteTreeTest_StageStatusInherit extends SiteTree implements TestOnly {
function getStatusFlags(){
$flags = parent::getStatusFlags();
function getStatusFlags($cached = true){
$flags = parent::getStatusFlags($cached);
$flags['inherited-class'] = "InheritedTitle";
return $flags;
}