/** * When an error page is published, create a static HTML page with its * content, so the page can be shown even when SilverStripe is not * functioning correctly before publishing this page normally. * @param string|int $fromStage Place to copy from. Can be either a stage name or a version number. * @param string $toStage Place to copy to. Must be a stage name. * @param boolean $createNewVersion Set this to true to create a new version number. By default, the existing version number will be copied over. */ function doPublish() { parent::doPublish(); // Run the page (reset the theme, it might've been disabled by LeftAndMain::init()) $oldTheme = SSViewer::current_theme(); SSViewer::set_theme(SSViewer::current_custom_theme()); $response = Director::test(Director::makeRelative($this->Link())); SSViewer::set_theme($oldTheme); $errorContent = $response->getBody(); // Make the base tag dynamic. // $errorContent = preg_replace('/<base[^>]+href="' . str_replace('/','\\/', Director::absoluteBaseURL()) . '"[^>]*>/i', '<base href="$BaseURL" />', $errorContent); // Check we have an assets base directory, creating if it we don't if (!file_exists(ASSETS_PATH)) { mkdir(ASSETS_PATH, 02775); } // if the page is published in a language other than default language, // write a specific language version of the HTML page $filePath = self::get_filepath_for_errorcode($this->ErrorCode, $this->Locale); if ($fh = fopen($filePath, "w")) { fwrite($fh, $errorContent); fclose($fh); } else { $fileErrorText = sprintf(_t("ErrorPage.ERRORFILEPROBLEM", "Error opening file \"%s\" for writing. Please check file permissions."), $errorFile); FormResponse::status_message($fileErrorText, 'bad'); FormResponse::respond(); return; } }
public function init() { // In LeftAndMain::init() the current theme is unset. // we need to restore the current theme here for make the dropdown of template list. $theme = SSViewer::current_theme(); parent::init(); if (isset($theme) && $theme) { SSViewer::set_theme($theme); } Requirements::javascript(MCE_ROOT . 'tiny_mce_src.js'); Requirements::javascript(SAPPHIRE_DIR . '/javascript/tiny_mce_improvements.js'); //TODO what is going on here? where did that hover.js go? can't find it. //TODO We need to reimplement a hover.js? Requirements::javascript(CMS_DIR . '/javascript/hover.js'); Requirements::javascript(THIRDPARTY_DIR . '/scriptaculous/controls.js'); Requirements::javascript(CMS_DIR . '/javascript/LeftAndMain_left.js'); Requirements::javascript(CMS_DIR . '/javascript/LeftAndMain_right.js'); Requirements::javascript(CMS_DIR . '/javascript/CMSMain_left.js'); Requirements::javascript(CMS_DIR . '/javascript/SecurityAdmin.js'); Requirements::javascript(NEWSLETTER_DIR . '/javascript/NewsletterAdmin_left.js'); Requirements::javascript(NEWSLETTER_DIR . '/javascript/NewsletterAdmin_right.js'); Requirements::javascript(NEWSLETTER_DIR . '/javascript/ProgressBar.js'); // We don't want this showing up in every ajax-response, it should always be present in a CMS-environment if (!Director::is_ajax()) { Requirements::javascript(MCE_ROOT . 'tiny_mce_src.js'); HtmlEditorConfig::get('cms')->setOption('ContentCSS', project() . '/css/editor.css'); HtmlEditorConfig::get('cms')->setOption('Lang', i18n::get_tinymce_lang()); } // Always block the HtmlEditorField.js otherwise it will be sent with an ajax request Requirements::block(SAPPHIRE_DIR . '/javascript/HtmlEditorField.js'); Requirements::css(NEWSLETTER_DIR . '/css/NewsletterAdmin.css'); }
/** * Sets the theme to the current site theme **/ public function onAfterInit() { $site = Multisites::inst()->getCurrentSite(); if ($site && ($theme = $site->getSiteTheme())) { SSViewer::set_theme($theme); } }
/** * Sets the theme to the current site theme **/ function onBeforeSecurityLogin() { $site = Multisites::inst()->getCurrentSite(); if ($site && $site->Theme) { SSViewer::set_theme($site->Theme); } }
function controllerAugmentInit() { if ($subsite = Subsite::currentSubsite()) { if ($theme = $subsite->Theme) { SSViewer::set_theme($theme); } } }
function tearDown() { parent::tearDown(); unset($this->mainSession); // Re-enable theme, if previously disabled if($this->stat('disable_themes')) { SSViewer::set_theme($this->originalTheme); } }
public function tearDown() { SS_TemplateLoader::instance()->popManifest(); i18n::set_locale($this->originalLocale); Director::setBaseFolder(null); SSViewer::set_theme($this->_oldTheme); i18n::register_translator($this->origAdapter, 'core'); parent::tearDown(); }
/** * Sets the theme to the current site theme **/ public function onAfterInit() { if ($this->owner instanceof DevelopmentAdmin || $this->owner instanceof DevBuildController || $this->owner instanceof DatabaseAdmin) { return; } $site = Multisites::inst()->getCurrentSite(); if ($site && ($theme = $site->getSiteTheme())) { SSViewer::set_theme($theme); } }
function setUp() { parent::setUp(); $this->mainSession = new TestSession(); // Disable theme, if necessary if ($this->stat('disable_themes')) { SSViewer::set_theme(null); } // Switch to draft site, if necessary if ($this->stat('use_draft_site')) { $this->useDraftSite(); } }
function setUp() { parent::setUp(); $this->mainSession = new TestSession(); // Disable theme, if necessary if ($this->stat('disable_themes')) { SSViewer::set_theme(null); } // Switch to draft site, if necessary if ($this->stat('use_draft_site')) { $this->useDraftSite(); } // Unprotect the site, tests are running with the assumption it's off. They will enable it on a case-by-case basis. BasicAuth::protect_entire_site(false); SecurityToken::disable(); }
/** * Tests for {@link SSViewer::current_theme()} for different behaviour * of user defined themes via {@link SiteConfig} and default theme * when no user themes are defined. */ function testCurrentTheme() { $config = SiteConfig::current_site_config(); $oldTheme = $config->Theme; $config->Theme = ''; $config->write(); SSViewer::set_theme('mytheme'); $this->assertEquals('mytheme', SSViewer::current_theme(), 'Current theme is the default - user has not defined one'); $config->Theme = 'myusertheme'; $config->write(); // Pretent to load the page $c = new ContentController(); $c->init(); $this->assertEquals('myusertheme', SSViewer::current_theme(), 'Current theme is a user defined one'); // Set the theme back to the original $config->Theme = $oldTheme; $config->write(); }
/** * @uses LeftAndMainDecorator->init() * @uses LeftAndMainDecorator->accessedCMS() * @uses CMSMenu */ function init() { parent::init(); SSViewer::setOption('rewriteHashlinks', false); // set language $member = Member::currentUser(); if (!empty($member->Locale)) { i18n::set_locale($member->Locale); } if (!empty($member->DateFormat)) { i18n::set_date_format($member->DateFormat); } if (!empty($member->TimeFormat)) { i18n::set_time_format($member->TimeFormat); } // can't be done in cms/_config.php as locale is not set yet CMSMenu::add_link('Help', _t('LeftAndMain.HELP', 'Help', PR_HIGH, 'Menu title'), self::$help_link); // set reading lang if (Object::has_extension('SiteTree', 'Translatable') && !$this->isAjax()) { Translatable::choose_site_locale(array_keys(Translatable::get_existing_content_languages('SiteTree'))); } // Allow customisation of the access check by a decorator // Also all the canView() check to execute Director::redirect() if (!$this->canView() && !$this->response->isFinished()) { // When access /admin/, we should try a redirect to another part of the admin rather than be locked out $menu = $this->MainMenu(); foreach ($menu as $candidate) { if ($candidate->Link && $candidate->Link != $this->Link() && $candidate->MenuItem->controller && singleton($candidate->MenuItem->controller)->canView()) { return Director::redirect($candidate->Link); } } if (Member::currentUser()) { Session::set("BackURL", null); } // if no alternate menu items have matched, return a permission error $messageSet = array('default' => _t('LeftAndMain.PERMDEFAULT', "Please choose an authentication method and enter your credentials to access the CMS."), 'alreadyLoggedIn' => _t('LeftAndMain.PERMALREADY', "I'm sorry, but you can't access that part of the CMS. If you want to log in as someone else, do so below"), 'logInAgain' => _t('LeftAndMain.PERMAGAIN', "You have been logged out of the CMS. If you would like to log in again, enter a username and password below.")); return Security::permissionFailure($this, $messageSet); } // Don't continue if there's already been a redirection request. if (Director::redirected_to()) { return; } // Audit logging hook if (empty($_REQUEST['executeForm']) && !$this->isAjax()) { $this->extend('accessedCMS'); } // Set the members html editor config HtmlEditorConfig::set_active(Member::currentUser()->getHtmlEditorConfigForCMS()); // Set default values in the config if missing. These things can't be defined in the config // file because insufficient information exists when that is being processed $htmlEditorConfig = HtmlEditorConfig::get_active(); $htmlEditorConfig->setOption('language', i18n::get_tinymce_lang()); if (!$htmlEditorConfig->getOption('content_css')) { $cssFiles = 'cms/css/editor.css'; // Use theme from the site config if (($config = SiteConfig::current_site_config()) && $config->Theme) { $theme = $config->Theme; } elseif (SSViewer::current_theme()) { $theme = SSViewer::current_theme(); } else { $theme = false; } if ($theme) { $cssFiles .= ',' . THEMES_DIR . "/{$theme}/css/editor.css"; } else { if (project()) { $cssFiles .= ',' . project() . '/css/editor.css'; } } $htmlEditorConfig->setOption('content_css', $cssFiles); } Requirements::css(CMS_DIR . '/css/typography.css'); Requirements::css(CMS_DIR . '/css/layout.css'); Requirements::css(CMS_DIR . '/css/cms_left.css'); Requirements::css(CMS_DIR . '/css/cms_right.css'); Requirements::css(SAPPHIRE_DIR . '/css/Form.css'); if (isset($_REQUEST['debug_firebug'])) { // Firebug is a useful console for debugging javascript // Its available as a Firefox extension or a javascript library // for easy inclusion in other browsers (just append ?debug_firebug=1 to the URL) Requirements::javascript(SAPPHIRE_DIR . '/thirdparty/firebug-lite/firebug.js'); } else { // By default, we include fake-objects for all firebug calls // to avoid javascript errors when referencing console.log() etc in javascript code Requirements::javascript(SAPPHIRE_DIR . '/thirdparty/firebug-lite/firebugx.js'); } Requirements::javascript(SAPPHIRE_DIR . '/javascript/prototypefix/intro.js'); Requirements::javascript(SAPPHIRE_DIR . '/thirdparty/prototype/prototype.js'); Requirements::javascript(SAPPHIRE_DIR . '/javascript/prototypefix/outro.js'); Requirements::javascript(SAPPHIRE_DIR . '/thirdparty/jquery/jquery.js'); Requirements::javascript(SAPPHIRE_DIR . '/javascript/jquery_improvements.js'); Requirements::javascript(SAPPHIRE_DIR . '/thirdparty/jquery-ui/jquery-ui.js'); //import all of jquery ui Requirements::javascript(CMS_DIR . '/thirdparty/jquery-layout/jquery.layout.js'); Requirements::javascript(CMS_DIR . '/thirdparty/jquery-layout/jquery.layout.state.js'); Requirements::javascript(SAPPHIRE_DIR . '/thirdparty/json-js/json2.js'); Requirements::javascript(SAPPHIRE_DIR . '/thirdparty/jquery-metadata/jquery.metadata.js'); Requirements::javascript(CMS_DIR . '/javascript/jquery-fitheighttoparent/jquery.fitheighttoparent.js'); Requirements::javascript(CMS_DIR . '/javascript/ssui.core.js'); // @todo Load separately so the CSS files can be inlined Requirements::css(SAPPHIRE_DIR . '/thirdparty/jquery-ui-themes/smoothness/jquery.ui.all.css'); // entwine Requirements::javascript(SAPPHIRE_DIR . '/thirdparty/jquery-entwine/dist/jquery.entwine-dist.js'); // Required for TreeTools panel above tree Requirements::javascript(SAPPHIRE_DIR . '/javascript/TabSet.js'); Requirements::javascript(SAPPHIRE_DIR . '/thirdparty/behaviour/behaviour.js'); Requirements::javascript(SAPPHIRE_DIR . '/thirdparty/jquery-cookie/jquery.cookie.js'); Requirements::javascript(CMS_DIR . '/thirdparty/jquery-notice/jquery.notice.js'); Requirements::javascript(SAPPHIRE_DIR . '/javascript/jquery-ondemand/jquery.ondemand.js'); Requirements::javascript(CMS_DIR . '/javascript/jquery-changetracker/lib/jquery.changetracker.js'); Requirements::add_i18n_javascript(SAPPHIRE_DIR . '/javascript/lang'); Requirements::add_i18n_javascript(CMS_DIR . '/javascript/lang'); Requirements::javascript(SAPPHIRE_DIR . '/thirdparty/scriptaculous/effects.js'); Requirements::javascript(SAPPHIRE_DIR . '/thirdparty/scriptaculous/dragdrop.js'); Requirements::javascript(SAPPHIRE_DIR . '/thirdparty/scriptaculous/controls.js'); Requirements::javascript(THIRDPARTY_DIR . '/tree/tree.js'); Requirements::css(THIRDPARTY_DIR . '/tree/tree.css'); Requirements::javascript(CMS_DIR . '/javascript/LeftAndMain.js'); Requirements::javascript(CMS_DIR . '/javascript/LeftAndMain.Tree.js'); Requirements::javascript(CMS_DIR . '/javascript/LeftAndMain.EditForm.js'); Requirements::javascript(CMS_DIR . '/javascript/LeftAndMain.AddForm.js'); Requirements::javascript(CMS_DIR . '/javascript/LeftAndMain.BatchActions.js'); // navigator Requirements::css(SAPPHIRE_DIR . '/css/SilverStripeNavigator.css'); Requirements::javascript(SAPPHIRE_DIR . '/javascript/SilverStripeNavigator.js'); Requirements::themedCSS('typography'); foreach (self::$extra_requirements['javascript'] as $file) { Requirements::javascript($file[0]); } foreach (self::$extra_requirements['css'] as $file) { Requirements::css($file[0], $file[1]); } foreach (self::$extra_requirements['themedcss'] as $file) { Requirements::themedCSS($file[0], $file[1]); } Requirements::css(CMS_DIR . '/css/unjquery.css'); // Javascript combined files Requirements::combine_files('base.js', array('sapphire/thirdparty/prototype/prototype.js', 'sapphire/thirdparty/behaviour/behaviour.js', 'sapphire/thirdparty/jquery/jquery.js', 'sapphire/thirdparty/jquery-livequery/jquery.livequery.js', 'sapphire/javascript/jquery-ondemand/jquery.ondemand.js', 'sapphire/thirdparty/jquery-ui/jquery-ui.js', 'sapphire/thirdparty/firebug-lite/firebug.js', 'sapphire/thirdparty/firebug-lite/firebugx.js', 'sapphire/javascript/i18n.js')); Requirements::combine_files('leftandmain.js', array('sapphire/thirdparty/scriptaculous/effects.js', 'sapphire/thirdparty/scriptaculous/dragdrop.js', 'sapphire/thirdparty/scriptaculous/controls.js', 'cms/javascript/LeftAndMain.js', 'sapphire/javascript/tree/tree.js', 'sapphire/javascript/TreeSelectorField.js', 'cms/javascript/ThumbnailStripField.js')); $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. SSViewer::set_theme(null); }
<?php global $project; $project = 'mysite'; global $databaseConfig; $databaseConfig = array("type" => 'MySQLDatabase', "server" => 'localhost', "username" => 'root', "password" => 'omega', "database" => 'vp', "path" => ''); MySQLDatabase::set_connection_charset('utf8'); // Set the current theme. More themes can be downloaded from // http://www.silverstripe.org/themes/ SSViewer::set_theme('simple'); // Set the site locale i18n::set_locale('en_US'); FulltextSearchable::enable(); // Enable nested URLs for this site (e.g. page/sub-page/) if (class_exists('SiteTree')) { SiteTree::enable_nested_urls(); } Director::set_environment_type("dev"); // add a button to remove formatting HtmlEditorConfig::get('cms')->insertButtonsBefore('styleselect', 'removeformat'); // tell the button which tags it may remove HtmlEditorConfig::get('cms')->setOption('removeformat_selector', 'b,strong,em,i,span,ins'); //remove font->span conversion HtmlEditorConfig::get('cms')->setOption('convert_fonts_to_spans', 'false,'); HtmlEditorConfig::get('cms')->setOptions(array('valid_elements' => "@[id|class|style|title],#a[id|rel|rev|dir|tabindex|accesskey|type|name|href|target|title|class],-strong/-b[class],-em/-i[class],-strike[class],-u[class],#p[id|dir|class|align|style],-ol[class],-ul[class],-li[class],br,img[id|dir|longdesc|usemap|class|src|border|alt=|title|width|height|align],-sub[class],-sup[class],-blockquote[dir|class],-table[border=0|cellspacing|cellpadding|width|height|class|align|summary|dir|id|style],-tr[id|dir|class|rowspan|width|height|align|valign|bgcolor|background|bordercolor|style],tbody[id|class|style],thead[id|class|style],tfoot[id|class|style],#td[id|dir|class|colspan|rowspan|width|height|align|valign|scope|style],-th[id|dir|class|colspan|rowspan|width|height|align|valign|scope|style],caption[id|dir|class],-h1[id|dir|class|align|style],-h2[id|dir|class|align|style],-h3[id|dir|class|align|style],-h4[id|dir|class|align|style],-h5[id|dir|class|align|style],-h6[id|dir|class|align|style],hr[class],dd[id|class|title|dir],dl[id|class|title|dir],dt[id|class|title|dir],@[id,style,class],small", 'extended_valid_elements' => "img[class|src|alt|title|hspace|vspace|width|height|align|onmouseover|onmouseout|name|usemap],#iframe[src|name|width|height|align|frameborder|marginwidth|marginheight|scrolling],object[width|height|data|type],param[name|value],map[class|name|id],area[shape|coords|href|target|alt]")); // TinyMCE cleanup on paste HtmlEditorConfig::get('cms')->setOption('paste_auto_cleanup_on_paste', 'true'); HtmlEditorConfig::get('cms')->setOption('paste_remove_styles', 'true'); HtmlEditorConfig::get('cms')->setOption('paste_remove_styles_if_webkit', 'true'); HtmlEditorConfig::get('cms')->setOption('paste_strip_class_attributes', 'true'); GD::set_default_quality(80);
<?php global $project; $project = 'mysite'; global $databaseConfig; $databaseConfig = array( "type" => "MySQLDatabase", "server" => "localhost", "username" => "root", "password" => "", "database" => "SS_mysite", ); // Sites running on the following servers will be // run in development mode. See // http://doc.silverstripe.com/doku.php?id=devmode // for a description of what dev mode does. Director::set_dev_servers(array( 'localhost', '127.0.0.1', )); // This line set's the current theme. More themes can be // downloaded from http://www.silverstripe.com/themes/ SSViewer::set_theme('mysite'); Security::setDefaultAdmin('admin', 'password'); ?>
<?php global $project; $project = 'mysite'; global $database; $database = "silverstripe_book_11_flash"; require_once("conf/ConfigureFromEnv.php"); // Sites running on the following servers will be // run in development mode. See // http://doc.silverstripe.com/doku.php?id=devmode // for a description of what dev mode does. Director::set_dev_servers(array( 'localhost', '127.0.0.1', )); // This line set's the current theme. More themes can be // downloaded from http://www.silverstripe.com/themes/ SSViewer::set_theme('blackcandy'); ?>
<?php global $project; $project = 'mysite'; global $database; $database = 'SS_ssnewdocstest'; require_once 'conf/ConfigureFromEnv.php'; MySQLDatabase::set_connection_charset('utf8'); // This line set's the current theme. More themes can be // downloaded from http://www.silverstripe.org/themes/ SSViewer::set_theme('docs'); // enable nested URLs for this site (e.g. page/sub-page/) SiteTree::enable_nested_urls(); // render the user documentation first Director::addRules(20, array('Security//$Action/$ID/$OtherID' => 'Security')); DocumentationViewer::set_link_base(''); DocumentationViewer::$check_permission = false; Director::addRules(10, array('$Action' => 'DocumentationViewer', '' => '->current/en/cms')); DocumentationService::set_automatic_registration(false); DocumentationService::register("cms", realpath("../../master/cms/docs/"), '2.4'); // We want this to be reviewed by the whole community BasicAuth::protect_entire_site(false);
/** * Tests for {@link SSViewer::current_theme()} for different behaviour * of user defined themes via {@link SiteConfig} and default theme * when no user themes are defined. */ public function testCurrentTheme() { //TODO: SiteConfig moved to CMS SSViewer::set_theme('mytheme'); $this->assertEquals('mytheme', SSViewer::current_theme(), 'Current theme is the default - user has not defined one'); }
function testCollectFromThemesTemplates() { $c = new i18nTextCollector(); $theme = SSViewer::current_theme(); SSViewer::set_theme('testtheme1'); $templateFilePath = $this->alternateBasePath . '/themes/testtheme1/templates/Layout/i18nTestTheme1.ss'; $html = file_get_contents($templateFilePath); $matches = $c->collectFromTemplate($html, 'themes/testtheme1', 'i18nTestTheme1.ss'); // all entities from i18nTestTheme1.ss $this->assertEquals( $matches['i18nTestTheme1.LAYOUTTEMPLATE'], array('Theme1 Layout Template') ); $this->assertArrayHasKey('i18nTestTheme1.ss.LAYOUTTEMPLATENONAMESPACE', $matches); $this->assertEquals( $matches['i18nTestTheme1.ss.LAYOUTTEMPLATENONAMESPACE'], array('Theme1 Layout Template no namespace') ); $this->assertEquals( $matches['i18nTestTheme1.SPRINTFNAMESPACE'], array('Theme1 My replacement: %s') ); $this->assertArrayHasKey('i18nTestTheme1.ss.SPRINTFNONAMESPACE', $matches); $this->assertEquals( $matches['i18nTestTheme1.ss.SPRINTFNONAMESPACE'], array('Theme1 My replacement no namespace: %s') ); // all entities from i18nTestTheme1Include.ss $this->assertEquals( $matches['i18nTestTheme1Include.WITHNAMESPACE'], array('Theme1 Include Entity with Namespace') ); $this->assertArrayHasKey('i18nTestTheme1Include.ss.NONAMESPACE', $matches); $this->assertEquals( $matches['i18nTestTheme1Include.ss.NONAMESPACE'], array('Theme1 Include Entity without Namespace') ); $this->assertEquals( $matches['i18nTestTheme1Include.SPRINTFINCLUDENAMESPACE'], array('Theme1 My include replacement: %s') ); $this->assertArrayHasKey('i18nTestTheme1Include.ss.SPRINTFINCLUDENONAMESPACE', $matches); $this->assertEquals( $matches['i18nTestTheme1Include.ss.SPRINTFINCLUDENONAMESPACE'], array('Theme1 My include replacement no namespace: %s') ); SSViewer::set_theme($theme); }
SortableDataObject::add_sortable_class('CleanUpSponsor'); SortableDataObject::add_sortable_class('GetInvolvedDownload'); SortableDataObject::add_sortable_class('LearnDownload'); SortableDataObject::add_sortable_class('LearnLink'); SortableDataObject::add_sortable_class('Staff'); SortableDataObject::add_sortable_class('Collaborator'); SortableDataObject::add_sortable_class('KeyContact'); SortableDataObject::add_sortable_class('MediaReleaseDownload'); SortableDataObject::add_sortable_class('MediaReleaseLink'); SortableDataObject::add_sortable_class('YoutubeLink'); SortableDataObject::add_sortable_class('ActionLink'); SortableDataObject::add_sortable_class('FormCategory'); SortableDataObject::add_sortable_class('FormItem'); // This line set's the current theme. More themes can be // downloaded from http://www.silverstripe.org/themes/ SSViewer::set_theme('lyc'); // Add custom SiteConfig data DataObject::add_extension('SiteConfig', 'CustomSiteConfig'); Object::add_extension('DataObjectSet', 'DataObjectSetExtension'); //Object::add_extension('Member','MemberProfileExtension'); // log errors and warnings //SS_Log::add_writer(new SS_LogFileWriter('/log'), SS_Log::WARN, '<='); // or just errors //SS_Log::add_writer(new SS_LogFileWriter('/log'), SS_Log::ERR); ini_set('memory_limit', '1000M'); define('TESTING_ENTRY_FORM', false); define('TESTING_EMAIL', '*****@*****.**'); define('EMAIL_ADMINS', 'davis.dimalen@gmail.com, davis.dimalen@gmail.com'); define('TOAST_ADMIN', '*****@*****.**'); $zend_lib_path = realpath('..' . DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . '_lib/ZendFramework/library'; set_include_path($zend_lib_path . PATH_SEPARATOR . get_include_path());
public function onBeforeInit() { $applied = $partial = ''; if ($this->owner->hasMethod('appliedTheme')) { $applied = $this->owner->appliedTheme(); } if ($this->owner->hasMethod('appliedPartialTheme')) { $partial = $this->owner->appliedPartialTheme(); } if (strlen($applied)) { SSViewer::set_theme($applied); if ($helper = $this->getThemeHelper($applied)) { $helper->beforeInit(); } } if (strlen($partial)) { if ($helper = $this->getThemeHelper($partial)) { $helper->beforeInit(); } } }
/** * @uses LeftAndMainExtension->init() * @uses LeftAndMainExtension->accessedCMS() * @uses CMSMenu */ function init() { parent::init(); SSViewer::setOption('rewriteHashlinks', false); // set language $member = Member::currentUser(); if (!empty($member->Locale)) { i18n::set_locale($member->Locale); } if (!empty($member->DateFormat)) { i18n::set_date_format($member->DateFormat); } if (!empty($member->TimeFormat)) { i18n::set_time_format($member->TimeFormat); } // can't be done in cms/_config.php as locale is not set yet CMSMenu::add_link('Help', _t('LeftAndMain.HELP', 'Help', 'Menu title'), self::$help_link); // Allow customisation of the access check by a extension // Also all the canView() check to execute Controller::redirect() if (!$this->canView() && !$this->response->isFinished()) { // When access /admin/, we should try a redirect to another part of the admin rather than be locked out $menu = $this->MainMenu(); foreach ($menu as $candidate) { if ($candidate->Link && $candidate->Link != $this->Link() && $candidate->MenuItem->controller && singleton($candidate->MenuItem->controller)->canView()) { return $this->redirect($candidate->Link); } } if (Member::currentUser()) { Session::set("BackURL", null); } // if no alternate menu items have matched, return a permission error $messageSet = array('default' => _t('LeftAndMain.PERMDEFAULT', "Please choose an authentication method and enter your credentials to access the CMS."), 'alreadyLoggedIn' => _t('LeftAndMain.PERMALREADY', "I'm sorry, but you can't access that part of the CMS. If you want to log in as someone else, do so below"), 'logInAgain' => _t('LeftAndMain.PERMAGAIN', "You have been logged out of the CMS. If you would like to log in again, enter a username and password below.")); return Security::permissionFailure($this, $messageSet); } // Don't continue if there's already been a redirection request. if ($this->redirectedTo()) { return; } // Audit logging hook if (empty($_REQUEST['executeForm']) && !$this->request->isAjax()) { $this->extend('accessedCMS'); } // Set the members html editor config HtmlEditorConfig::set_active(Member::currentUser()->getHtmlEditorConfigForCMS()); // Set default values in the config if missing. These things can't be defined in the config // file because insufficient information exists when that is being processed $htmlEditorConfig = HtmlEditorConfig::get_active(); $htmlEditorConfig->setOption('language', i18n::get_tinymce_lang()); if (!$htmlEditorConfig->getOption('content_css')) { $cssFiles = array(); $cssFiles[] = FRAMEWORK_ADMIN_DIR . '/css/editor.css'; // Use theme from the site config if (class_exists('SiteConfig') && ($config = SiteConfig::current_site_config()) && $config->Theme) { $theme = $config->Theme; } elseif (SSViewer::current_theme()) { $theme = SSViewer::current_theme(); } else { $theme = false; } if ($theme) { $cssFiles[] = THEMES_DIR . "/{$theme}/css/editor.css"; } else { if (project()) { $cssFiles[] = project() . '/css/editor.css'; } } // Remove files that don't exist foreach ($cssFiles as $k => $cssFile) { if (!file_exists(BASE_PATH . '/' . $cssFile)) { unset($cssFiles[$k]); } } $htmlEditorConfig->setOption('content_css', implode(',', $cssFiles)); } // Using uncompressed files as they'll be processed by JSMin in the Requirements class. // Not as effective as other compressors or pre-compressed+finetuned files, // but overall the unified minification into a single file brings more performance benefits // than a couple of saved bytes (after gzip) in individual files. // We also re-compress already compressed files through JSMin as this causes weird runtime bugs. Requirements::combine_files('lib.js', array(THIRDPARTY_DIR . '/jquery/jquery.js', FRAMEWORK_DIR . '/javascript/jquery-ondemand/jquery.ondemand.js', FRAMEWORK_ADMIN_DIR . '/javascript/lib.js', THIRDPARTY_DIR . '/jquery-ui/jquery-ui.js', THIRDPARTY_DIR . '/json-js/json2.js', THIRDPARTY_DIR . '/jquery-entwine/dist/jquery.entwine-dist.js', THIRDPARTY_DIR . '/jquery-cookie/jquery.cookie.js', THIRDPARTY_DIR . '/jquery-query/jquery.query.js', THIRDPARTY_DIR . '/jquery-form/jquery.form.js', FRAMEWORK_ADMIN_DIR . '/thirdparty/jquery-notice/jquery.notice.js', FRAMEWORK_ADMIN_DIR . '/thirdparty/jsizes/lib/jquery.sizes.js', FRAMEWORK_ADMIN_DIR . '/thirdparty/jlayout/lib/jlayout.border.js', FRAMEWORK_ADMIN_DIR . '/thirdparty/jlayout/lib/jquery.jlayout.js', FRAMEWORK_ADMIN_DIR . '/thirdparty/history-js/scripts/uncompressed/history.js', FRAMEWORK_ADMIN_DIR . '/thirdparty/history-js/scripts/uncompressed/history.adapter.jquery.js', FRAMEWORK_ADMIN_DIR . '/thirdparty/history-js/scripts/uncompressed/history.html4.js', THIRDPARTY_DIR . '/jstree/jquery.jstree.js', FRAMEWORK_ADMIN_DIR . '/thirdparty/chosen/chosen/chosen.jquery.js', FRAMEWORK_ADMIN_DIR . '/thirdparty/jquery-hoverIntent/jquery.hoverIntent.js', FRAMEWORK_ADMIN_DIR . '/javascript/jquery-changetracker/lib/jquery.changetracker.js', FRAMEWORK_DIR . '/javascript/TreeDropdownField.js', FRAMEWORK_DIR . '/javascript/DateField.js', FRAMEWORK_DIR . '/javascript/HtmlEditorField.js', FRAMEWORK_DIR . '/javascript/TabSet.js', FRAMEWORK_DIR . '/javascript/i18n.js', FRAMEWORK_ADMIN_DIR . '/javascript/ssui.core.js', FRAMEWORK_DIR . '/javascript/GridField.js')); if (Director::isDev()) { Requirements::javascript(FRAMEWORK_ADMIN_DIR . '/javascript/leaktools.js'); } HTMLEditorField::include_js(); Requirements::combine_files('leftandmain.js', array_unique(array_merge(array(FRAMEWORK_ADMIN_DIR . '/javascript/LeftAndMain.js', FRAMEWORK_ADMIN_DIR . '/javascript/LeftAndMain.Panel.js', FRAMEWORK_ADMIN_DIR . '/javascript/LeftAndMain.Tree.js', FRAMEWORK_ADMIN_DIR . '/javascript/LeftAndMain.Ping.js', FRAMEWORK_ADMIN_DIR . '/javascript/LeftAndMain.Content.js', FRAMEWORK_ADMIN_DIR . '/javascript/LeftAndMain.EditForm.js', FRAMEWORK_ADMIN_DIR . '/javascript/LeftAndMain.Menu.js', FRAMEWORK_ADMIN_DIR . '/javascript/LeftAndMain.AddForm.js', FRAMEWORK_ADMIN_DIR . '/javascript/LeftAndMain.Preview.js', FRAMEWORK_ADMIN_DIR . '/javascript/LeftAndMain.BatchActions.js', FRAMEWORK_ADMIN_DIR . '/javascript/LeftAndMain.FieldHelp.js', FRAMEWORK_ADMIN_DIR . '/javascript/LeftAndMain.TreeDropdownField.js'), Requirements::add_i18n_javascript(FRAMEWORK_DIR . '/javascript/lang', true, true), Requirements::add_i18n_javascript(FRAMEWORK_ADMIN_DIR . '/javascript/lang', true, true)))); // TODO Confuses jQuery.ondemand through document.write() if (Director::isDev()) { Requirements::javascript(THIRDPARTY_DIR . '/jquery-entwine/src/jquery.entwine.inspector.js'); } Requirements::css(FRAMEWORK_ADMIN_DIR . '/thirdparty/jquery-notice/jquery.notice.css'); Requirements::css(THIRDPARTY_DIR . '/jquery-ui-themes/smoothness/jquery-ui.css'); Requirements::css(FRAMEWORK_ADMIN_DIR . '/thirdparty/chosen/chosen/chosen.css'); Requirements::css(THIRDPARTY_DIR . '/jstree/themes/apple/style.css'); Requirements::css(FRAMEWORK_DIR . '/css/TreeDropdownField.css'); Requirements::css(FRAMEWORK_ADMIN_DIR . '/css/screen.css'); Requirements::css(FRAMEWORK_DIR . '/css/GridField.css'); // Browser-specific requirements $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'); } } } // Custom requirements foreach (self::$extra_requirements['javascript'] as $file) { Requirements::javascript($file[0]); } foreach (self::$extra_requirements['css'] as $file) { Requirements::css($file[0], $file[1]); } foreach (self::$extra_requirements['themedcss'] as $file) { Requirements::themedCSS($file[0], $file[1]); } $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. SSViewer::set_theme(null); }
/** * Called by ContentController::init(); */ static function contentcontrollerInit($controller) { $subsite = Subsite::currentSubsite(); if ($subsite && $subsite->Theme) { SSViewer::set_theme(Subsite::currentSubsite()->Theme); } }
<?php global $project; $project = 'mysite'; global $databaseConfig; $databaseConfig = array("type" => 'MySQLDatabase', "server" => 'localhost', "username" => 'silvertest2', "password" => 'silvertest', "database" => 'silvertest2', "path" => ''); MySQLDatabase::set_connection_charset('utf8'); // This line set's the current theme. More themes can be // downloaded from http://www.silverstripe.org/themes/ SSViewer::set_theme('tutorial'); // Set the site locale i18n::set_locale('de_DE'); // enable nested URLs for this site (e.g. page/sub-page/) SiteTree::enable_nested_urls();
/** * @uses LeftAndMainExtension->init() * @uses LeftAndMainExtension->accessedCMS() * @uses CMSMenu */ function init() { parent::init(); SSViewer::setOption('rewriteHashlinks', false); // set language $member = Member::currentUser(); if (!empty($member->Locale)) { i18n::set_locale($member->Locale); } if (!empty($member->DateFormat)) { i18n::set_date_format($member->DateFormat); } if (!empty($member->TimeFormat)) { i18n::set_time_format($member->TimeFormat); } // can't be done in cms/_config.php as locale is not set yet CMSMenu::add_link('Help', _t('LeftAndMain.HELP', 'Help', PR_HIGH, 'Menu title'), self::$help_link); // Allow customisation of the access check by a extension // Also all the canView() check to execute Director::redirect() if (!$this->canView() && !$this->response->isFinished()) { // When access /admin/, we should try a redirect to another part of the admin rather than be locked out $menu = $this->MainMenu(); foreach ($menu as $candidate) { if ($candidate->Link && $candidate->Link != $this->Link() && $candidate->MenuItem->controller && singleton($candidate->MenuItem->controller)->canView()) { return Director::redirect($candidate->Link); } } if (Member::currentUser()) { Session::set("BackURL", null); } // if no alternate menu items have matched, return a permission error $messageSet = array('default' => _t('LeftAndMain.PERMDEFAULT', "Please choose an authentication method and enter your credentials to access the CMS."), 'alreadyLoggedIn' => _t('LeftAndMain.PERMALREADY', "I'm sorry, but you can't access that part of the CMS. If you want to log in as someone else, do so below"), 'logInAgain' => _t('LeftAndMain.PERMAGAIN', "You have been logged out of the CMS. If you would like to log in again, enter a username and password below.")); return Security::permissionFailure($this, $messageSet); } // Don't continue if there's already been a redirection request. if (Director::redirected_to()) { return; } // Audit logging hook if (empty($_REQUEST['executeForm']) && !$this->isAjax()) { $this->extend('accessedCMS'); } // Requirements Requirements::combine_files('lib.js', array(THIRDPARTY_DIR . '/prototype/prototype.js', THIRDPARTY_DIR . '/behaviour/behaviour.js', THIRDPARTY_DIR . '/jquery/jquery.js', SAPPHIRE_DIR . '/javascript/jquery_improvements.js', THIRDPARTY_DIR . '/jquery-livequery/jquery.livequery.js', SAPPHIRE_DIR . '/javascript/jquery-ondemand/jquery.ondemand.js', THIRDPARTY_DIR . '/jquery-ui/jquery-ui.js', THIRDPARTY_DIR . '/json-js/json2.js', THIRDPARTY_DIR . '/jquery-entwine/dist/jquery.entwine-dist.js', THIRDPARTY_DIR . '/jquery-cookie/jquery.cookie.js', THIRDPARTY_DIR . '/jquery-query/jquery.query.js', SAPPHIRE_ADMIN_DIR . '/thirdparty/jquery-notice/jquery.notice.js', THIRDPARTY_DIR . '/jquery-metadata/jquery.metadata.js', SAPPHIRE_ADMIN_DIR . '/thirdparty/jsizes/lib/jquery.sizes.js', SAPPHIRE_ADMIN_DIR . '/thirdparty/jlayout/lib/jlayout.border.js', SAPPHIRE_ADMIN_DIR . '/thirdparty/jlayout/lib/jquery.jlayout.js', SAPPHIRE_ADMIN_DIR . '/thirdparty/history-js/scripts/uncompressed/history.js', SAPPHIRE_ADMIN_DIR . '/thirdparty/history-js/scripts/uncompressed/history.adapter.jquery.js', SAPPHIRE_ADMIN_DIR . '/thirdparty/history-js/scripts/uncompressed/history.html4.js', THIRDPARTY_DIR . '/jstree/jquery.jstree.js', SAPPHIRE_ADMIN_DIR . '/thirdparty/chosen/chosen/chosen.jquery.js', SAPPHIRE_ADMIN_DIR . '/thirdparty/jquery-hoverIntent/jquery.hoverIntent.js', SAPPHIRE_ADMIN_DIR . '/javascript/jquery-changetracker/lib/jquery.changetracker.js', SAPPHIRE_DIR . '/javascript/TreeDropdownField.js', SAPPHIRE_DIR . "/thirdparty/jquery-form/jquery.form.js", SAPPHIRE_DIR . '/javascript/DateField.js', SAPPHIRE_DIR . '/javascript/HtmlEditorField.js', SAPPHIRE_DIR . '/javascript/TabSet.js', SAPPHIRE_DIR . '/javascript/Validator.js', SAPPHIRE_DIR . '/javascript/i18n.js', SAPPHIRE_ADMIN_DIR . '/javascript/ssui.core.js')); Requirements::combine_files('leftandmain.js', array(SAPPHIRE_ADMIN_DIR . '/javascript/LeftAndMain.js', SAPPHIRE_ADMIN_DIR . '/javascript/LeftAndMain.Panel.js', SAPPHIRE_ADMIN_DIR . '/javascript/LeftAndMain.Tree.js', SAPPHIRE_ADMIN_DIR . '/javascript/LeftAndMain.Ping.js', SAPPHIRE_ADMIN_DIR . '/javascript/LeftAndMain.Content.js', SAPPHIRE_ADMIN_DIR . '/javascript/LeftAndMain.EditForm.js', SAPPHIRE_ADMIN_DIR . '/javascript/LeftAndMain.Menu.js', SAPPHIRE_ADMIN_DIR . '/javascript/LeftAndMain.AddForm.js', SAPPHIRE_ADMIN_DIR . '/javascript/LeftAndMain.Preview.js', SAPPHIRE_ADMIN_DIR . '/javascript/LeftAndMain.BatchActions.js')); Requirements::add_i18n_javascript(SAPPHIRE_DIR . '/javascript/lang'); Requirements::add_i18n_javascript(SAPPHIRE_ADMIN_DIR . '/javascript/lang'); Requirements::combine_files('lib.css', array(THIRDPARTY_DIR . '/jquery-ui-themes/smoothness/jquery-ui.css', SAPPHIRE_ADMIN_DIR . '/thirdparty/chosen/chosen/chosen.css', THIRDPARTY_DIR . '/jstree/themes/apple/style.css', SAPPHIRE_DIR . '/javascript/TreeDropdownField.css', SAPPHIRE_ADMIN_DIR . '/css/unjquery.css')); Requirements::css(SAPPHIRE_ADMIN_DIR . '/css/screen.css'); // Set the members html editor config HtmlEditorConfig::set_active(Member::currentUser()->getHtmlEditorConfigForCMS()); // Set default values in the config if missing. These things can't be defined in the config // file because insufficient information exists when that is being processed $htmlEditorConfig = HtmlEditorConfig::get_active(); $htmlEditorConfig->setOption('language', i18n::get_tinymce_lang()); if (!$htmlEditorConfig->getOption('content_css')) { $cssFiles = array(); $cssFiles[] = 'sapphire/admin/css/editor.css'; // Use theme from the site config if (class_exists('SiteConfig') && ($config = SiteConfig::current_site_config()) && $config->Theme) { $theme = $config->Theme; } elseif (SSViewer::current_theme()) { $theme = SSViewer::current_theme(); } else { $theme = false; } if ($theme) { $cssFiles[] = THEMES_DIR . "/{$theme}/css/editor.css"; } else { if (project()) { $cssFiles[] = project() . '/css/editor.css'; } } // Remove files that don't exist foreach ($cssFiles as $k => $cssFile) { if (!file_exists(BASE_PATH . '/' . $cssFile)) { unset($cssFiles[$k]); } } $htmlEditorConfig->setOption('content_css', implode(',', $cssFiles)); } foreach (self::$extra_requirements['javascript'] as $file) { Requirements::javascript($file[0]); } foreach (self::$extra_requirements['css'] as $file) { Requirements::css($file[0], $file[1]); } foreach (self::$extra_requirements['themedcss'] as $file) { Requirements::themedCSS($file[0], $file[1]); } $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. SSViewer::set_theme(null); }
function tearDown() { // Preserve memory settings ini_set('memory_limit', $this->originalMemoryLimit ? $this->originalMemoryLimit : -1); // Restore email configuration Email::set_mailer($this->originalMailer); $this->originalMailer = null; $this->mailer = null; // Restore password validation Member::set_password_validator($this->originalMemberPasswordValidator); // Restore requirements Requirements::set_backend($this->originalRequirements); // Mark test as no longer being run - we use originalIsRunningTest to allow for nested SapphireTest calls self::$is_running_test = $this->originalIsRunningTest; $this->originalIsRunningTest = null; // Reset theme setting SSViewer::set_theme($this->originalTheme); // Reset mocked datetime SS_Datetime::clear_mock_now(); // Restore nested_urls state if ($this->originalNestedURLsState) { SiteTree::enable_nested_urls(); } else { SiteTree::disable_nested_urls(); } // Stop the redirection that might have been requested in the test. // Note: Ideally a clean Controller should be created for each test. // Now all tests executed in a batch share the same controller. $controller = Controller::has_curr() ? Controller::curr() : null; if ($controller && $controller->response && $controller->response->getHeader('Location')) { $controller->response->setStatusCode(200); $controller->response->removeHeader('Location'); } }
<?php global $project; $project = 'mysite'; global $databaseConfig; $databaseConfig = array("type" => "MySQLDatabase", "server" => "127.0.0.1", "username" => "root", "password" => "", "database" => "skyviewpartners"); // Sites running on the following servers will be // run in development mode. See // http://doc.silverstripe.com/doku.php?id=devmode // for a description of what dev mode does. Director::set_dev_servers(array('localhost', '127.0.0.1')); // This line set's the current theme. More themes can be // downloaded from http://www.silverstripe.com/cms-themes-and-skin SSViewer::set_theme('skyviewpartners');
function testStaticPublisherTheme() { //This will be the name of the default theme of this particular project $default_theme = SSViewer::current_theme(); $p1 = new Page(); $p1->URLSegment = strtolower(__CLASS__) . '-page-1'; $p1->HomepageForDomain = ''; $p1->write(); $p1->doPublish(); $current_theme = SSViewer::current_custom_theme(); $this->assertEquals($current_theme, $default_theme, 'After a standard publication, the theme is correct'); //The CMS sometimes sets the theme to null. Check that the $current_custom_theme is still the default SSViewer::set_theme(null); $current_theme = SSViewer::current_custom_theme(); $this->assertEquals($current_theme, $default_theme, 'After a setting the theme to null, the default theme is correct'); //We can set the static_publishing theme to something completely different: //Static publishing will use this one instead of the current_custom_theme if it is not false StaticPublisher::set_static_publisher_theme('otherTheme'); $current_theme = StaticPublisher::static_publisher_theme(); $this->assertNotEquals($current_theme, $default_theme, 'The static publisher theme overrides the custom theme'); }
/** * Override the default behavior to ensure that if this is a mobile device * or if they are on the configured mobile domain then they receive the mobile site. */ public function onAfterInit() { self::$is_mobile = false; $config = SiteConfig::current_site_config(); $request = $this->owner->getRequest(); // If we've accessed the homepage as /home/, then we redirect to / and don't want to double redirect here if ($this->owner->redirectedTo()) { return; } // Enforce the site (cookie expires in 30 minutes) $fullSite = $request->getVar('fullSite'); if (is_numeric($fullSite)) { Cookie::set('fullSite', (int) $fullSite); // use the host of the desktop version of the site to set cross-(sub)domain cookie if (!empty($config->FullSiteDomain)) { $parsedURL = parse_url($config->FullSiteDomain); if (!headers_sent($file, $line)) { setcookie('fullSite', $fullSite, time() + self::$cookie_expire_time, null, '.' . $parsedURL['host']); } else { user_error(sprintf('Cookie \'fullSite\' can\'t be set. Output started at line %s in %s', $line, $file)); } } else { // otherwise just use a normal cookie with the default domain if (!headers_sent($file, $line)) { setcookie('fullSite', $fullSite, time() + self::$cookie_expire_time); } else { user_error(sprintf('Cookie \'fullSite\' can\'t be set. Output started at line %s in %s', $line, $file)); } } } // Site is being forced via flag or cookie $fullSiteCookie = Cookie::get('fullSite'); if (is_numeric($fullSiteCookie)) { // Full site requested if ($fullSiteCookie) { if ($this->onMobileDomain() && $config->MobileSiteType == 'RedirectToDomain') { return $this->owner->redirect($config->FullSiteDomain, 301); } return; } else { if (!$this->onMobileDomain() && $config->MobileSiteType == 'RedirectToDomain') { return $this->owner->redirect($config->MobileDomain, 301); } SSViewer::set_theme($config->MobileTheme); self::$is_mobile = true; return; } } // If the user requested the mobile domain, set the right theme if ($this->onMobileDomain()) { SSViewer::set_theme($config->MobileTheme); self::$is_mobile = true; } // User just wants to see a theme, but no redirect occurs if (MobileBrowserDetector::is_mobile() && $config->MobileSiteType == 'MobileThemeOnly') { SSViewer::set_theme($config->MobileTheme); self::$is_mobile = true; } // If on a mobile device, but not on the mobile domain and has been setup for redirection if (!$this->onMobileDomain() && MobileBrowserDetector::is_mobile() && $config->MobileSiteType == 'RedirectToDomain') { return $this->owner->redirect($config->MobileDomain, 301); } }
public function init() { parent::init(); // If we've accessed the homepage as /home/, then we should redirect to /. if ($this->dataRecord && $this->dataRecord instanceof SiteTree && RootURLController::should_be_on_root($this->dataRecord) && (!isset($this->urlParams['Action']) || !$this->urlParams['Action']) && !$_POST && !$_FILES && !Director::redirected_to()) { $getVars = $_GET; unset($getVars['url']); if ($getVars) { $url = "?" . http_build_query($getVars); } else { $url = ""; } Director::redirect($url, 301); return; } if ($this->dataRecord) { $this->dataRecord->extend('contentcontrollerInit', $this); } else { singleton('SiteTree')->extend('contentcontrollerInit', $this); } if (Director::redirected_to()) { return; } // Check page permissions if ($this->dataRecord && $this->URLSegment != 'Security' && !$this->dataRecord->canView()) { return Security::permissionFailure($this); } // Draft/Archive security check - only CMS users should be able to look at stage/archived content if ($this->URLSegment != 'Security' && !Session::get('unsecuredDraftSite') && (Versioned::current_archived_date() || Versioned::current_stage() && Versioned::current_stage() != 'Live')) { if (!$this->dataRecord->canViewStage(Versioned::current_stage())) { $link = $this->Link(); $message = _t("ContentController.DRAFT_SITE_ACCESS_RESTRICTION", 'You must log in with your CMS password in order to view the draft or archived content. <a href="%s">Click here to go back to the published site.</a>'); Session::clear('currentStage'); Session::clear('archiveDate'); return Security::permissionFailure($this, sprintf($message, Controller::join_links($link, "?stage=Live"))); } } // Use theme from the site config if (($config = SiteConfig::current_site_config()) && $config->Theme) { SSViewer::set_theme($config->Theme); } }
function publishPages($urls) { // Do we need to map these? // Detect a numerically indexed arrays if (is_numeric(join('', array_keys($urls)))) { $urls = $this->urlsToPaths($urls); } // This can be quite memory hungry and time-consuming // @todo - Make a more memory efficient publisher increase_time_limit_to(); increase_memory_limit_to(); // Set the appropriate theme for this publication batch. // This may have been set explicitly via StaticPublisher::static_publisher_theme, // or we can use the last non-null theme. if (!StaticPublisher::static_publisher_theme()) { SSViewer::set_theme(SSViewer::current_custom_theme()); } else { SSViewer::set_theme(StaticPublisher::static_publisher_theme()); } $currentBaseURL = Director::baseURL(); if (self::$static_base_url) { Director::setBaseURL(self::$static_base_url); } if ($this->fileExtension == 'php') { SSViewer::setOption('rewriteHashlinks', 'php'); } if (StaticPublisher::echo_progress()) { echo $this->class . ": Publishing to " . self::$static_base_url . "\n"; } $files = array(); $i = 0; $totalURLs = sizeof($urls); foreach ($urls as $url => $path) { if (self::$static_base_url) { Director::setBaseURL(self::$static_base_url); } $i++; if ($url && !is_string($url)) { user_error("Bad url:" . var_export($url, true), E_USER_WARNING); continue; } if (StaticPublisher::echo_progress()) { echo " * Publishing page {$i}/{$totalURLs}: {$url}\n"; flush(); } Requirements::clear(); if ($url == "") { $url = "/"; } if (Director::is_relative_url($url)) { $url = Director::absoluteURL($url); } $response = Director::test(str_replace('+', ' ', $url)); Requirements::clear(); singleton('DataObject')->flushCache(); //skip any responses with a 404 status code. We don't want to turn those into statically cached pages if (!$response || $response->getStatusCode() == '404') { continue; } // Generate file content // PHP file caching will generate a simple script from a template if ($this->fileExtension == 'php') { if (is_object($response)) { if ($response->getStatusCode() == '301' || $response->getStatusCode() == '302') { $content = $this->generatePHPCacheRedirection($response->getHeader('Location')); } else { $content = $this->generatePHPCacheFile($response->getBody(), HTTP::get_cache_age(), date('Y-m-d H:i:s')); } } else { $content = $this->generatePHPCacheFile($response . '', HTTP::get_cache_age(), date('Y-m-d H:i:s')); } // HTML file caching generally just creates a simple file } else { if (is_object($response)) { if ($response->getStatusCode() == '301' || $response->getStatusCode() == '302') { $absoluteURL = Director::absoluteURL($response->getHeader('Location')); $content = "<meta http-equiv=\"refresh\" content=\"2; URL={$absoluteURL}\">"; } else { $content = $response->getBody(); } } else { $content = $response . ''; } } $files[] = array('Content' => $content, 'Folder' => dirname($path) . '/', 'Filename' => basename($path)); // Add externals /* $externals = $this->externalReferencesFor($content); if($externals) foreach($externals as $external) { // Skip absolute URLs if(preg_match('/^[a-zA-Z]+:\/\//', $external)) continue; // Drop querystring parameters $external = strtok($external, '?'); if(file_exists("../" . $external)) { // Break into folder and filename if(preg_match('/^(.*\/)([^\/]+)$/', $external, $matches)) { $files[$external] = array( "Copy" => "../$external", "Folder" => $matches[1], "Filename" => $matches[2], ); } else { user_error("Can't parse external: $external", E_USER_WARNING); } } else { $missingFiles[$external] = true; } }*/ } if (self::$static_base_url) { Director::setBaseURL($currentBaseURL); } if ($this->fileExtension == 'php') { SSViewer::setOption('rewriteHashlinks', true); } $base = BASE_PATH . "/{$this->destFolder}"; foreach ($files as $file) { Filesystem::makeFolder("{$base}/{$file['Folder']}"); if (isset($file['Content'])) { $fh = fopen("{$base}/{$file['Folder']}{$file['Filename']}", "w"); fwrite($fh, $file['Content']); fclose($fh); } else { if (isset($file['Copy'])) { copy($file['Copy'], "{$base}/{$file['Folder']}{$file['Filename']}"); } } } }