public function build($request) { if (Director::is_cli()) { $da = DatabaseAdmin::create(); return $da->handleRequest($request, $this->model); } else { $renderer = DebugView::create(); $renderer->writeHeader(); $renderer->writeInfo("Environment Builder", Director::absoluteBaseURL()); echo "<div class=\"build\">"; $da = DatabaseAdmin::create(); $response = $da->handleRequest($request, $this->model); echo "</div>"; $renderer->writeFooter(); return $response; } }
/** * Check if database needs to be built, and build it if it does. */ public static function autoBuild() { $dataClasses = ClassInfo::subclassesFor('SilverStripe\\ORM\\DataObject'); $lastBuilt = self::lastBuilt(); foreach ($dataClasses as $class) { if (filemtime(getClassFile($class)) > $lastBuilt) { $da = new DatabaseAdmin(); $da->doBuild(true); return; } } }
/** * Build the default data, calling requireDefaultRecords on all * DataObject classes * Should match the $url_handlers rule: * 'build/defaults' => 'buildDefaults', */ public function buildDefaults() { $da = DatabaseAdmin::create(); $renderer = null; if (!Director::is_cli()) { $renderer = DebugView::create(); echo $renderer->renderHeader(); echo $renderer->renderInfo("Defaults Builder", Director::absoluteBaseURL()); echo "<div style=\"margin: 0 2em\">"; } $da->buildDefaults(); if (!Director::is_cli()) { echo "</div>"; echo $renderer->renderFooter(); } }
public function install($config) { ?> <html> <head> <meta charset="utf-8"/> <title>Installing SilverStripe...</title> <link rel="stylesheet" type="text/css" href="<?php echo FRAMEWORK_NAME; ?> /src/Dev/Install/client/dist/styles/install.css"/> <script src="//code.jquery.com/jquery-1.7.2.min.js"></script> </head> <body> <div class="install-header"> <div class="inner"> <div class="brand"> <span class="logo"></span> <h1>SilverStripe</h1> </div> </div> </div> <div id="Navigation"> </div> <div class="clear"><!-- --></div> <div class="main"> <div class="inner"> <h2>Installing SilverStripe...</h2> <p>I am now running through the installation steps (this should take about 30 seconds)</p> <p>If you receive a fatal error, refresh this page to continue the installation</p> <ul> <?php $webserver = $this->findWebserver(); $isIIS = $this->isIIS(); $isApache = $this->isApache(); flush(); if (isset($config['stats'])) { if (file_exists(FRAMEWORK_NAME . '/silverstripe_version')) { $silverstripe_version = file_get_contents(FRAMEWORK_NAME . '/silverstripe_version'); } else { $silverstripe_version = "unknown"; } $phpVersion = urlencode(phpversion()); $encWebserver = urlencode($webserver); $dbType = $config['db']['type']; // Try to determine the database version from the helper $databaseVersion = $config['db']['type']; $helper = $this->getDatabaseConfigurationHelper($dbType); if ($helper && method_exists($helper, 'getDatabaseVersion')) { $versionConfig = $config['db'][$dbType]; $versionConfig['type'] = $dbType; $databaseVersion = urlencode($dbType . ': ' . $helper->getDatabaseVersion($versionConfig)); } $url = "http://ss2stat.silverstripe.com/Installation/add?SilverStripe={$silverstripe_version}&PHP={$phpVersion}&Database={$databaseVersion}&WebServer={$encWebserver}"; if (isset($_SESSION['StatsID']) && $_SESSION['StatsID']) { $url .= '&ID=' . $_SESSION['StatsID']; } @($_SESSION['StatsID'] = file_get_contents($url)); } if (file_exists('mysite/_config.php')) { // Truncate the contents of _config instead of deleting it - we can't re-create it because Windows handles permissions slightly // differently to UNIX based filesystems - it takes the permissions from the parent directory instead of retaining them $fh = fopen('mysite/_config.php', 'wb'); fclose($fh); } // Escape user input for safe insertion into PHP file $theme = isset($_POST['template']) ? addcslashes($_POST['template'], "\\'") : 'simple'; $locale = isset($_POST['locale']) ? addcslashes($_POST['locale'], "\\'") : 'en_US'; $type = addcslashes($config['db']['type'], "\\'"); $dbConfig = $config['db'][$type]; $dbConfig = array_map(create_function('$v', 'return addcslashes($v, "\\\'");'), $dbConfig); if (!isset($dbConfig['path'])) { $dbConfig['path'] = ''; } if (!$dbConfig) { echo "<p style=\"color: red\">Bad config submitted</p><pre>"; print_r($config); echo "</pre>"; die; } // Write the config file global $usingEnv; if ($usingEnv) { $this->statusMessage("Setting up 'mysite/_config.php' for use with _ss_environment.php..."); $this->writeToFile("mysite/_config.php", <<<PHP <?php global \$project; \$project = 'mysite'; global \$database; \$database = '{$dbConfig['database']}'; require_once('conf/ConfigureFromEnv.php'); PHP ); } else { $this->statusMessage("Setting up 'mysite/_config.php'..."); // Create databaseConfig $lines = array($lines[] = "\t'type' => '{$type}'"); foreach ($dbConfig as $key => $value) { $lines[] = "\t'{$key}' => '{$value}'"; } $databaseConfigContent = implode(",\n", $lines); $this->writeToFile("mysite/_config.php", <<<PHP <?php global \$project; \$project = 'mysite'; global \$databaseConfig; \$databaseConfig = array( {$databaseConfigContent} ); PHP ); } $this->statusMessage("Setting up 'mysite/_config/config.yml'"); $this->writeToFile("mysite/_config/config.yml", <<<YML --- Name: mysite After: - 'framework/*' - 'cms/*' --- # YAML configuration for SilverStripe # See http://doc.silverstripe.org/framework/en/topics/configuration # Caution: Indentation through two spaces, not tabs SilverStripe\\View\\SSViewer: themes: - '{$theme}' - '\$default' SilverStripe\\i18n\\i18n: default_locale: '{$locale}' YML ); if (!$this->checkModuleExists('cms')) { $this->writeToFile("mysite/code/RootURLController.php", <<<PHP <?php use SilverStripe\\Control\\Controller; class RootURLController extends Controller { \tpublic function index() { \t\techo "<html>Your site is now set up. Start adding controllers to mysite to get started.</html>"; \t} } PHP ); } // Write the appropriate web server configuration file for rewriting support if ($this->hasRewritingCapability()) { if ($isApache) { $this->statusMessage("Setting up '.htaccess' file..."); $this->createHtaccess(); } elseif ($isIIS) { $this->statusMessage("Setting up 'web.config' file..."); $this->createWebConfig(); } } // Load the SilverStripe runtime $_SERVER['SCRIPT_FILENAME'] = dirname(realpath($_SERVER['SCRIPT_FILENAME'])) . '/' . FRAMEWORK_NAME . '/main.php'; chdir(FRAMEWORK_NAME); // Rebuild the manifest $_GET['flush'] = true; // Show errors as if you're in development mode $_SESSION['isDev'] = 1; $this->statusMessage("Building database schema..."); require_once 'Core/Core.php'; // Build database $con = new Controller(); $con->pushCurrent(); global $databaseConfig; DB::connect($databaseConfig); $dbAdmin = new DatabaseAdmin(); $dbAdmin->doInit(); $dbAdmin->doBuild(true); // Create default administrator user and group in database // (not using Security::setDefaultAdmin()) $adminMember = Security::findAnAdministrator(); $adminMember->Email = $config['admin']['username']; $adminMember->Password = $config['admin']['password']; $adminMember->PasswordEncryption = Security::config()->encryption_algorithm; try { $this->statusMessage('Creating default CMS admin account...'); $adminMember->write(); } catch (Exception $e) { $this->statusMessage(sprintf('Warning: Default CMS admin account could not be created (error: %s)', $e->getMessage())); } $_SESSION['username'] = $config['admin']['username']; $_SESSION['password'] = $config['admin']['password']; if (!$this->errors) { if (isset($_SERVER['HTTP_HOST']) && $this->hasRewritingCapability()) { $this->statusMessage("Checking that friendly URLs work..."); $this->checkRewrite(); } else { require_once 'Core/Startup/ParameterConfirmationToken.php'; $token = new ParameterConfirmationToken('flush'); $params = http_build_query($token->params()); $destinationURL = 'index.php/' . ($this->checkModuleExists('cms') ? "home/successfullyinstalled?{$params}" : "?{$params}"); echo <<<HTML \t\t\t\t<li>SilverStripe successfully installed; I am now redirecting you to your SilverStripe site...</li> \t\t\t\t<script> \t\t\t\t\tsetTimeout(function() { \t\t\t\t\t\twindow.location = "{$destinationURL}"; \t\t\t\t\t}, 2000); \t\t\t\t</script> \t\t\t\t<noscript> \t\t\t\t<li><a href="{$destinationURL}">Click here to access your site.</a></li> \t\t\t\t</noscript> HTML; } } return $this->errors; }