diff --git a/admin/code/LeftAndMain.php b/admin/code/LeftAndMain.php index 750153883..25189dbc0 100644 --- a/admin/code/LeftAndMain.php +++ b/admin/code/LeftAndMain.php @@ -378,29 +378,58 @@ class LeftAndMain extends Controller implements PermissionProvider { $ie = isset($_SERVER['HTTP_USER_AGENT']) ? strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') : false; if($ie) { $version = substr($_SERVER['HTTP_USER_AGENT'], $ie + 5, 3); - if($version == 7) Requirements::css(FRAMEWORK_ADMIN_DIR . '/css/ie7.css'); - else if($version == 8) Requirements::css(FRAMEWORK_ADMIN_DIR . '/css/ie8.css'); + + if($version == 7) { + Requirements::css(FRAMEWORK_ADMIN_DIR . '/css/ie7.css'); + } else if($version == 8) { + Requirements::css(FRAMEWORK_ADMIN_DIR . '/css/ie8.css'); + } } // Custom requirements $extraJs = $this->stat('extra_requirements_javascript'); - if($extraJs) foreach($extraJs as $file => $config) { - Requirements::javascript($file); + if($extraJs) { + foreach($extraJs as $file => $config) { + if(is_numeric($file)) { + $file = $config; + } + + Requirements::javascript($file); + } } + $extraCss = $this->stat('extra_requirements_css'); - if($extraCss) foreach($extraCss as $file => $config) { - Requirements::css($file, isset($config['media']) ? $config['media'] : null); + + if($extraCss) { + foreach($extraCss as $file => $config) { + if(is_numeric($file)) { + $file = $config; + $config = array(); + } + + Requirements::css($file, isset($config['media']) ? $config['media'] : null); + } } + $extraThemedCss = $this->stat('extra_requirements_themedCss'); - if($extraThemedCss) foreach ($extraThemedCss as $file => $config) { - Requirements::themedCSS($file, isset($config['media']) ? $config['media'] : null); + + if($extraThemedCss) { + foreach ($extraThemedCss as $file => $config) { + if(is_numeric($file)) { + $file = $config; + $config = array(); + } + + Requirements::themedCSS($file, isset($config['media']) ? $config['media'] : null); + } } $dummy = null; $this->extend('init', $dummy); - // The user's theme shouldn't affect the CMS, if, for example, they have replaced TableListField.ss or Form.ss. + // The user's theme shouldn't affect the CMS, if, for example, they have + // replaced TableListField.ss or Form.ss. Config::inst()->update('SSViewer', 'theme_enabled', false); } diff --git a/admin/tests/LeftAndMainTest.php b/admin/tests/LeftAndMainTest.php index 2b971a335..23ae15fb9 100644 --- a/admin/tests/LeftAndMainTest.php +++ b/admin/tests/LeftAndMainTest.php @@ -1,6 +1,7 @@ autoFollowRedirection = false; CMSMenu::populate_menu(); + + $this->backupCss = Config::inst()->get('LeftAndMain', 'extra_requirements_css'); + $this->backupJs = Config::inst()->get('LeftAndMain', 'extra_requirements_javascript'); + $this->backupCombined = Requirements::get_combined_files_enabled(); + + Config::inst()->update('LeftAndMain', 'extra_requirements_css', array( + FRAMEWORK_DIR . '/tests/assets/LeftAndMainTest.css' + )); + + Config::inst()->update('LeftAndMain', 'extra_requirements_javascript', array( + FRAMEWORK_DIR . '/tests/assets/LeftAndMainTest.js' + )); + + Requirements::set_combined_files_enabled(false); + } + + public function tearDown() { + parent::tearDown(); + + Config::inst()->update('LeftAndMain', 'extra_requirements_css', $this->backupCss); + Config::inst()->update('LeftAndMain', 'extra_requirements_javascript', $this->backupJs); + + Requirements::set_combined_files_enabled($this->backupCombined); } + + public function testExtraCssAndJavascript() { + $admin = $this->objFromFixture('Member', 'admin'); + $this->session()->inst_set('loggedInAs', $admin->ID); + $response = $this->get('LeftAndMainTest_Controller'); + + $this->assertRegExp('/tests\/assets\/LeftAndMainTest.css/i', $response->getBody(), "body should contain custom css"); + $this->assertRegExp('/tests\/assets\/LeftAndMainTest.js/i', $response->getBody(), "body should contain custom js"); + } + /** * Note: This test would typically rely on SiteTree and CMSMain, but is mocked by * LeftAndMain_Controller and LeftAndMain_Object here to remove this dependency. @@ -158,15 +194,22 @@ class LeftAndMainTest extends FunctionalTest { $this->session()->inst_set('loggedInAs', null); } - } +/** + * @package framework + * @subpackage tests + */ class LeftAndMainTest_Controller extends LeftAndMain implements TestOnly { protected $template = 'BlankPage'; private static $tree_class = 'LeftAndMainTest_Object'; } +/** + * @package framework + * @subpackage tests + */ class LeftAndMainTest_Object extends DataObject implements TestOnly { private static $db = array( diff --git a/docs/en/howto/extend-cms-interface.md b/docs/en/howto/extend-cms-interface.md index 5460583d6..08f31a592 100644 --- a/docs/en/howto/extend-cms-interface.md +++ b/docs/en/howto/extend-cms-interface.md @@ -67,7 +67,7 @@ Load the new CSS file into the CMS, by setting the `LeftAndMain.extra_requiremen :::yml LeftAndMain: extra_requirements_css: - mysite/css/BookmarkedPages.css: + - mysite/css/BookmarkedPages.css: ## Create a "bookmark" flag on pages ## diff --git a/docs/en/reference/preview.md b/docs/en/reference/preview.md index fde31481d..8245d7f7a 100644 --- a/docs/en/reference/preview.md +++ b/docs/en/reference/preview.md @@ -69,7 +69,7 @@ to the `LeftAndMain.extra_requirements_javascript` [configuration value](/topics :::yml LeftAndMain extra_requirements_javascript: - mysite/javascript/MyLeftAndMain.Preview.js: + - mysite/javascript/MyLeftAndMain.Preview.js: In order to find out which configuration values are available, the source code is your best reference at the moment - have a look in `framework/admin/javascript/LeftAndMain.Preview.js`. diff --git a/tests/assets/LeftAndMainTest.css b/tests/assets/LeftAndMainTest.css new file mode 100644 index 000000000..e69de29bb diff --git a/tests/assets/LeftAndMainTest.js b/tests/assets/LeftAndMainTest.js new file mode 100644 index 000000000..e69de29bb