then(function($chain) use ($token) { // First, if $_GET['flush'] was set, but no valid token, suppress the flush if ($token->reloadRequired()) { $token->suppress(); } else { $chain->setSuppression(false); } // Load in core require_once('core/Core.php'); if (isset($_GET['debug_profile'])) { Profiler::init(); Profiler::mark('all_execution'); Profiler::mark('main.php init'); } // Connect to database require_once('model/DB.php'); global $databaseConfig; if (isset($_GET['debug_profile'])) Profiler::mark('DB::connect'); if ($databaseConfig) DB::connect($databaseConfig); if (isset($_GET['debug_profile'])) Profiler::unmark('DB::connect'); // Then if a flush was requested, redirect to it if ($token->parameterProvided() && !$token->tokenProvided()) { // First, check if we're in dev mode, or the database doesn't have any security data $canFlush = Director::isDev(true) || !Security::database_is_ready(); // Otherwise, we start up the session if needed, then check for admin if (!$canFlush) { if(!isset($_SESSION) && (isset($_COOKIE[session_name()]) || isset($_REQUEST[session_name()]))) { Session::start(); } if (Permission::check('ADMIN')) { $canFlush = true; } else { $loginPage = Director::absoluteURL(Config::inst()->get('Security', 'login_url')); $loginPage .= "?BackURL=" . urlencode($_SERVER['REQUEST_URI']); header('location: '.$loginPage, true, 302); die; } } // And if we can flush, reload with an authority token if ($canFlush) $token->reloadWithToken(); } }) // Finally if a flush was requested but there was an error while figuring out if it's allowed, do it anyway ->thenIfErrored(function() use ($token){ if ($token->parameterProvided() && !$token->tokenProvided()) { $token->reloadWithToken(); } }) ->execute(); // Redirect to the installer if no database is selected if(!isset($databaseConfig) || !isset($databaseConfig['database']) || !$databaseConfig['database']) { if(!file_exists(BASE_PATH . '/install.php')) { die('SilverStripe Framework requires a $databaseConfig defined.'); } $s = (isset($_SERVER['SSL']) || (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off')) ? 's' : ''; $installURL = "http$s://" . $_SERVER['HTTP_HOST'] . BASE_URL . '/install.php'; // The above dirname() will equate to "\" on Windows when installing directly from http://localhost (not using // a sub-directory), this really messes things up in some browsers. Let's get rid of the backslashes $installURL = str_replace('\\', '', $installURL); header("Location: $installURL"); die(); } if (isset($_GET['debug_profile'])) Profiler::unmark('main.php init'); // Direct away - this is the "main" function, that hands control to the appropriate controller DataModel::set_inst(new DataModel()); Director::direct($url, DataModel::inst()); if (isset($_GET['debug_profile'])) { Profiler::unmark('all_execution'); if(!Director::isLive()) { Profiler::show(isset($_GET['profile_trace'])); } }