BUG Cache page icons (#2493)

This commit is contained in:
Adrian Humphreys 2019-11-13 10:21:52 +13:00 committed by Maxime Rainville
parent 84bea03cc2
commit 7045082a06
2 changed files with 35 additions and 2 deletions

View File

@ -12,4 +12,7 @@ SilverStripe\Core\Injector\Injector:
factory: SilverStripe\Core\Cache\CacheFactory factory: SilverStripe\Core\Cache\CacheFactory
constructor: constructor:
namespace: "SiteTree_CreatableChildren" namespace: "SiteTree_CreatableChildren"
Psr\SimpleCache\CacheInterface.SiteTree_PageIcons:
factory: SilverStripe\Core\Cache\CacheFactory
constructor:
namespace: "SiteTree_PageIcons"

View File

@ -2,32 +2,59 @@
namespace SilverStripe\CMS\Controllers; namespace SilverStripe\CMS\Controllers;
use Psr\SimpleCache\CacheInterface;
use Psr\SimpleCache\InvalidArgumentException;
use ReflectionException;
use SilverStripe\CMS\Model\SiteTree; use SilverStripe\CMS\Model\SiteTree;
use SilverStripe\Core\ClassInfo; use SilverStripe\Core\ClassInfo;
use SilverStripe\Core\Config\Config; use SilverStripe\Core\Config\Config;
use SilverStripe\Core\Convert; use SilverStripe\Core\Convert;
use SilverStripe\Core\Extension; use SilverStripe\Core\Extension;
use SilverStripe\Core\Flushable;
use SilverStripe\Core\Injector\Injector;
use SilverStripe\View\Requirements; use SilverStripe\View\Requirements;
/** /**
* Extension to include custom page icons * Extension to include custom page icons
*/ */
class LeftAndMainPageIconsExtension extends Extension class LeftAndMainPageIconsExtension extends Extension implements Flushable
{ {
/**
* @throws InvalidArgumentException
* @throws ReflectionException
*/
public function init() public function init()
{ {
Requirements::customCSS($this->generatePageIconsCss(), CMSMain::PAGE_ICONS_ID); Requirements::customCSS($this->generatePageIconsCss(), CMSMain::PAGE_ICONS_ID);
} }
/**
* Just broadly clears the cache on flush
*/
public static function flush()
{
Injector::inst()->get(CacheInterface::class . '.SiteTree_PageIcons')->clear();
}
/** /**
* Include CSS for page icons. We're not using the JSTree 'types' option * Include CSS for page icons. We're not using the JSTree 'types' option
* because it causes too much performance overhead just to add some icons. * because it causes too much performance overhead just to add some icons.
* *
* @return string CSS * @return string CSS
* @throws InvalidArgumentException
* @throws ReflectionException
*/ */
public function generatePageIconsCss() public function generatePageIconsCss()
{ {
/** @var CacheInterface $cache */
$cache = Injector::inst()->get(CacheInterface::class . '.SiteTree_PageIcons');
if ($cache->has('css')) {
return $cache->get('css');
}
$css = ''; $css = '';
$classes = ClassInfo::subclassesFor(SiteTree::class); $classes = ClassInfo::subclassesFor(SiteTree::class);
foreach ($classes as $class) { foreach ($classes as $class) {
@ -41,6 +68,9 @@ class LeftAndMainPageIconsExtension extends Extension
$css .= sprintf('%s { background: transparent url(\'%s\') 0 0 no-repeat; }', $selector, $iconURL); $css .= sprintf('%s { background: transparent url(\'%s\') 0 0 no-repeat; }', $selector, $iconURL);
} }
} }
$cache->set('css', $css);
return $css; return $css;
} }
} }