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 static $enforce_strict_hierarchy = true;
protected $_cache_statusFlags = null;
/** /**
* Determines if the system should avoid orphaned pages * Determines if the system should avoid orphaned pages
* by deleting all children when the their parent is deleted (TRUE), * by deleting all children when the their parent is deleted (TRUE),
@ -1494,6 +1496,11 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
parent::onAfterDelete(); parent::onAfterDelete();
} }
function flushCache($persistent = true) {
parent::flushCache($persistent);
$this->_cache_statusFlags = null;
}
function validate() { function validate() {
$result = parent::validate(); $result = parent::validate();
@ -2470,37 +2477,42 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
* Example (with optional title attribute): * Example (with optional title attribute):
* "deletedonlive" => array('text' => "Deleted", 'title' => 'This page has been deleted') * "deletedonlive" => array('text' => "Deleted", 'title' => 'This page has been deleted')
* *
* @param Boolean $cached
* @return array * @return array
*/ */
function getStatusFlags() { function getStatusFlags($cached = true) {
$flags = array(); if(!$this->_cache_statusFlags || !$cached) {
if($this->IsDeletedFromStage) { $flags = array();
if($this->ExistsOnLive) { if($this->IsDeletedFromStage) {
$flags['removedfromdraft'] = array( if($this->ExistsOnLive) {
'text' => _t('SiteTree.REMOVEDFROMDRAFTSHORT', 'Removed from draft'), $flags['removedfromdraft'] = array(
'title' => _t('SiteTree.REMOVEDFROMDRAFTHELP', 'Page is published, but has been deleted from draft'), 'text' => _t('SiteTree.REMOVEDFROMDRAFTSHORT', 'Removed from draft'),
'title' => _t('SiteTree.REMOVEDFROMDRAFTHELP', 'Page is published, but has been deleted from draft'),
);
} else {
$flags['deletedonlive'] = array(
'text' => _t('SiteTree.DELETEDPAGESHORT', 'Deleted'),
'title' => _t('SiteTree.DELETEDPAGEHELP', 'Page is no longer published'),
);
}
} else if($this->IsAddedToStage) {
$flags['addedtodraft'] = array(
'text' => _t('SiteTree.ADDEDTODRAFTSHORT', 'Draft'),
'title' => _t('SiteTree.ADDEDTODRAFTHELP', "Page has not been published yet")
); );
} else { } else if($this->IsModifiedOnStage) {
$flags['deletedonlive'] = array( $flags['modified'] = array(
'text' => _t('SiteTree.DELETEDPAGESHORT', 'Deleted'), 'text' => _t('SiteTree.MODIFIEDONDRAFTSHORT', 'Modified'),
'title' => _t('SiteTree.DELETEDPAGEHELP', 'Page is no longer published'), 'title' => _t('SiteTree.MODIFIEDONDRAFTHELP', 'Page has unpublished changes'),
); );
} }
} else if($this->IsAddedToStage) {
$flags['addedtodraft'] = array( $this->extend('updateStatusFlags', $flags);
'text' => _t('SiteTree.ADDEDTODRAFTSHORT', 'Draft'),
'title' => _t('SiteTree.ADDEDTODRAFTHELP', "Page has not been published yet") $this->_cache_statusFlags = $flags;
);
} else if($this->IsModifiedOnStage) {
$flags['modified'] = array(
'text' => _t('SiteTree.MODIFIEDONDRAFTSHORT', 'Modified'),
'title' => _t('SiteTree.MODIFIEDONDRAFTHELP', 'Page has unpublished changes'),
);
} }
$this->extend('updateStatusFlags', $flags); return $this->_cache_statusFlags;
return $flags;
} }

View File

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