diff --git a/code/Controllers/CMSMain.php b/code/Controllers/CMSMain.php index 71a3feb1..c6e53309 100644 --- a/code/Controllers/CMSMain.php +++ b/code/Controllers/CMSMain.php @@ -2369,7 +2369,11 @@ class CMSMain extends LeftAndMain implements CurrentPageIdentifier, PermissionPr */ protected function generateHintsCacheKey($memberID) { - return md5($memberID . '_' . __CLASS__); + $baseKey = $memberID . '_' . __CLASS__; + + $this->extend('updateHintsCacheKey', $baseKey); + + return md5($baseKey); } /** diff --git a/code/Controllers/CMSPageAddController.php b/code/Controllers/CMSPageAddController.php index 47f1009b..0546c02e 100644 --- a/code/Controllers/CMSPageAddController.php +++ b/code/Controllers/CMSPageAddController.php @@ -43,15 +43,26 @@ class CMSPageAddController extends CMSPageEditController public function AddForm() { $pageTypes = array(); + $defaultIcon = Config::inst()->get(SiteTree::class, 'icon_class'); + foreach ($this->PageTypes() as $type) { + $class = $type->getField('ClassName'); + $icon = Config::inst()->get($class, 'icon_class') ?: $defaultIcon; + + // If the icon is the SiteTree default and there's some specific icon being provided by `getPageIconURL` + // then we don't need to add the icon class. Otherwise the class take precedence. + if ($icon === $defaultIcon && !empty(singleton($class)->getPageIconURL())) { + $icon = ''; + } + $html = sprintf( '%s%s', - Config::inst()->get($type->getField('ClassName'), 'icon_class'), - Convert::raw2htmlid($type->getField('ClassName')), + $icon, + Convert::raw2htmlid($class), $type->getField('AddAction'), $type->getField('Description') ); - $pageTypes[$type->getField('ClassName')] = DBField::create_field('HTMLFragment', $html); + $pageTypes[$class] = DBField::create_field('HTMLFragment', $html); } // Ensure generic page type shows on top if (isset($pageTypes['Page'])) { diff --git a/code/Controllers/LeftAndMainPageIconsExtension.php b/code/Controllers/LeftAndMainPageIconsExtension.php index 95db76c9..6cc5e74d 100644 --- a/code/Controllers/LeftAndMainPageIconsExtension.php +++ b/code/Controllers/LeftAndMainPageIconsExtension.php @@ -31,6 +31,9 @@ class LeftAndMainPageIconsExtension extends Extension $css = ''; $classes = ClassInfo::subclassesFor(SiteTree::class); foreach ($classes as $class) { + if (!empty(Config::inst()->get($class, 'icon_class', Config::UNINHERITED))) { + continue; + } $iconURL = SiteTree::singleton($class)->getPageIconURL(); if ($iconURL) { $cssClass = Convert::raw2htmlid($class); diff --git a/code/Model/VirtualPage.php b/code/Model/VirtualPage.php index 6cd09e0c..090ae7e7 100644 --- a/code/Model/VirtualPage.php +++ b/code/Model/VirtualPage.php @@ -279,7 +279,7 @@ class VirtualPage extends Page $fields->addFieldToTab("Root.Main", new LiteralField( 'VirtualPageMessage', - '
' . implode('. ', $msgs) . '.
' + '
' . implode('. ', $msgs) . '.
' ), 'CopyContentFromID'); });