Index: typo3/classes/class.clearcachemenu.php =================================================================== --- typo3/classes/class.clearcachemenu.php (revision 4534) +++ typo3/classes/class.clearcachemenu.php (working copy) @@ -38,6 +38,7 @@ class ClearCacheMenu implements backend_toolbarItem { protected $cacheActions; + protected $optionValues; /** * reference back to the backend object @@ -54,6 +55,7 @@ public function __construct(TYPO3backend &$backendReference = null) { $this->backendReference = $backendReference; $this->cacheActions = array(); + $this->optionValues = array('all', 'pages'); // Clear cache for ALL tables! if($GLOBALS['BE_USER']->isAdmin() || $GLOBALS['BE_USER']->getTSConfigVal('options.clearCache.all')) { @@ -88,6 +90,19 @@ ); } + // hook for manipulate cacheActions + if(is_array($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['additionalBackendItems']['cacheActions'])) { + foreach($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['additionalBackendItems']['cacheActions'] as $cacheAction) { + $hookObject = &t3lib_div::getUserObj($cacheAction); + + if(!($hookObject instanceof backend_cacheActionsHook)) { + throw new UnexpectedValueException('$hookObject must implement interface backend_cacheActionsHook', 1228262000); + } + + $hookObject->manipulateCacheActions($this->cacheActions, $this->optionValues); + } + } + } /** @@ -96,11 +111,20 @@ * @return boolean true if user has access, false if not */ public function checkAccess() { - return ( - $GLOBALS['BE_USER']->isAdmin() - || $GLOBALS['BE_USER']->getTSConfigVal('options.clearCache.pages') - || $GLOBALS['BE_USER']->getTSConfigVal('options.clearCache.all') - ); + + if ($GLOBALS['BE_USER']->isAdmin()) { + return true; + } + + if (is_array($this->optionValues)) { + foreach($this->optionValues as $value) { + if ($GLOBALS['BE_USER']->getTSConfigVal('options.clearCache.' . $value)) { + return true; + } + } + } + return false; + } /** Index: typo3/interfaces/interface.backend_cacheActionsHook.php =================================================================== --- typo3/interfaces/interface.backend_cacheActionsHook.php (revision 0) +++ typo3/interfaces/interface.backend_cacheActionsHook.php (revision 0) @@ -0,0 +1,49 @@ + +* All rights reserved +* +* This script is part of the TYPO3 project. The TYPO3 project is +* free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* The GNU General Public License can be found at +* http://www.gnu.org/copyleft/gpl.html. +* A copy is found in the textfile GPL.txt and important notices to the license +* from the author is found in LICENSE.txt distributed with these scripts. +* +* +* This script is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* This copyright notice MUST APPEAR in all copies of the script! +***************************************************************/ + + +/** + * interface for classes which hook into ClearCacheMenu and manipulate CacheMenuItems array + * + * @author Steffen Kamper + * @package TYPO3 + * @subpackage backend + */ +interface backend_cacheActionsHook { + + /** + * modifies CacheMenuItems array + * + * @param array array of CacheMenuItems + * @param array array of AccessConfigurations-identifiers (typically used by userTS with options.clearCache.identifier) + * @return + */ + public function manipulateCacheActions(&$cacheActions, &$optionValues); + +} + +?> \ No newline at end of file