silverstripe-cms/code/Controllers/LeftAndMainPageIconsExtension.php

62 lines
1.4 KiB
PHP
Raw Normal View History

<?php
2016-07-22 01:32:32 +02:00
namespace SilverStripe\CMS\Controllers;
use Extension;
use Requirements;
use ClassInfo;
use Director;
/**
* Extension to include custom page icons
2016-03-08 21:50:55 +01:00
*
* @package cms
* @subpackage controller
*/
class LeftAndMainPageIconsExtension extends Extension {
public function init() {
Requirements::customCSS($this->generatePageIconsCss());
}
/**
* 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.
2016-03-08 21:50:55 +01:00
*
* @return string CSS
*/
public function generatePageIconsCss() {
2016-03-08 21:50:55 +01:00
$css = '';
2016-07-22 01:32:32 +02:00
$classes = ClassInfo::subclassesFor('SilverStripe\\CMS\\Model\\SiteTree');
foreach($classes as $class) {
2016-03-08 21:50:55 +01:00
$obj = singleton($class);
$iconSpec = $obj->stat('icon');
2016-08-10 06:08:39 +02:00
if(!$iconSpec) {
continue;
}
// Legacy support: We no longer need separate icon definitions for folders etc.
$iconFile = (is_array($iconSpec)) ? $iconSpec[0] : $iconSpec;
// Legacy support: Add file extension if none exists
2016-08-10 06:08:39 +02:00
if(!pathinfo($iconFile, PATHINFO_EXTENSION)) {
$iconFile .= '-file.gif';
}
$selector = ".page-icon.class-$class, li.class-$class > a .jstree-pageicon";
if(Director::fileExists($iconFile)) {
$css .= "$selector { background: transparent url('$iconFile') 0 0 no-repeat; }\n";
} else {
// Support for more sophisticated rules, e.g. sprited icons
$css .= "$selector { $iconFile }\n";
}
}
return $css;
}
2016-03-08 21:50:55 +01:00
}