mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
formatted install.php5 according to SilverStripe coding conventions (tabs instead of spaces, no 1 line if with else, ...)
This commit is contained in:
parent
c4810b8e0f
commit
0b4c3946ff
@ -51,34 +51,33 @@ if ($dirsToCheck[0] == $dirsToCheck[1]) {
|
||||
foreach ($dirsToCheck as $dir) {
|
||||
//check this dir and every parent dir (until we hit the base of the drive)
|
||||
// or until we hit a dir we can't read
|
||||
do {
|
||||
do {
|
||||
//add the trailing slash we need to concatenate properly
|
||||
$dir .= DIRECTORY_SEPARATOR;
|
||||
//if it's readable, go ahead
|
||||
if (@is_readable($dir)) {
|
||||
//if the file exists, then we include it, set relevant vars and break out
|
||||
if (file_exists($dir . $envFile)) {
|
||||
include_once($dir . $envFile);
|
||||
$envFileExists = true;
|
||||
//legacy variable assignment
|
||||
$usingEnv = true;
|
||||
//if the file exists, then we include it, set relevant vars and break out
|
||||
if (file_exists($dir . $envFile)) {
|
||||
include_once($dir . $envFile);
|
||||
$envFileExists = true;
|
||||
//legacy variable assignment
|
||||
$usingEnv = true;
|
||||
//break out of BOTH loops because we found the $envFile
|
||||
break(2);
|
||||
}
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
//break out of the while loop, we can't read the dir
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
//go up a directory
|
||||
$dir = dirname($dir);
|
||||
//here we need to check that the path of the last dir and the next one are
|
||||
//here we need to check that the path of the last dir and the next one are
|
||||
// not the same, if they are, we have hit the root of the drive
|
||||
} while (dirname($dir) != $dir);
|
||||
}
|
||||
|
||||
if($envFileExists) {
|
||||
if(!empty($_REQUEST['useEnv'])) {
|
||||
if ($envFileExists) {
|
||||
if (!empty($_REQUEST['useEnv'])) {
|
||||
$usingEnv = true;
|
||||
} else {
|
||||
$usingEnv = false;
|
||||
@ -91,71 +90,71 @@ require_once FRAMEWORK_NAME . '/dev/install/DatabaseAdapterRegistry.php';
|
||||
// Set default locale, but try and sniff from the user agent
|
||||
$defaultLocale = 'en_US';
|
||||
$locales = array(
|
||||
'af_ZA' => 'Afrikaans (South Africa)',
|
||||
'ar_EG' => 'Arabic (Egypt)',
|
||||
'hy_AM' => 'Armenian (Armenia)',
|
||||
'ast_ES' => 'Asturian (Spain)',
|
||||
'az_AZ' => 'Azerbaijani (Azerbaijan)',
|
||||
'bs_BA' => 'Bosnian (Bosnia and Herzegovina)',
|
||||
'bg_BG' => 'Bulgarian (Bulgaria)',
|
||||
'ca_ES' => 'Catalan (Spain)',
|
||||
'zh_CN' => 'Chinese (China)',
|
||||
'zh_TW' => 'Chinese (Taiwan)',
|
||||
'hr_HR' => 'Croatian (Croatia)',
|
||||
'cs_CZ' => 'Czech (Czech Republic)',
|
||||
'da_DK' => 'Danish (Denmark)',
|
||||
'nl_NL' => 'Dutch (Netherlands)',
|
||||
'en_GB' => 'English (United Kingdom)',
|
||||
'en_US' => 'English (United States)',
|
||||
'eo_XX' => 'Esperanto',
|
||||
'et_EE' => 'Estonian (Estonia)',
|
||||
'fo_FO' => 'Faroese (Faroe Islands)',
|
||||
'fi_FI' => 'Finnish (Finland)',
|
||||
'fr_FR' => 'French (France)',
|
||||
'de_DE' => 'German (Germany)',
|
||||
'el_GR' => 'Greek (Greece)',
|
||||
'he_IL' => 'Hebrew (Israel)',
|
||||
'hu_HU' => 'Hungarian (Hungary)',
|
||||
'is_IS' => 'Icelandic (Iceland)',
|
||||
'id_ID' => 'Indonesian (Indonesia)',
|
||||
'it_IT' => 'Italian (Italy)',
|
||||
'ja_JP' => 'Japanese (Japan)',
|
||||
'km_KH' => 'Khmer (Cambodia)',
|
||||
'lc_XX' => 'LOLCAT',
|
||||
'lv_LV' => 'Latvian (Latvia)',
|
||||
'lt_LT' => 'Lithuanian (Lithuania)',
|
||||
'ms_MY' => 'Malay (Malaysia)',
|
||||
'mi_NZ' => 'Maori (New Zealand)',
|
||||
'ne_NP' => 'Nepali (Nepal)',
|
||||
'nb_NO' => 'Norwegian',
|
||||
'fa_IR' => 'Persian (Iran)',
|
||||
'pl_PL' => 'Polish (Poland)',
|
||||
'pt_BR' => 'Portuguese (Brazil)',
|
||||
'pa_IN' => 'Punjabi (India)',
|
||||
'ro_RO' => 'Romanian (Romania)',
|
||||
'ru_RU' => 'Russian (Russia)',
|
||||
'sr_RS' => 'Serbian (Serbia)',
|
||||
'si_LK' => 'Sinhalese (Sri Lanka)',
|
||||
'sk_SK' => 'Slovak (Slovakia)',
|
||||
'sl_SI' => 'Slovenian (Slovenia)',
|
||||
'es_AR' => 'Spanish (Argentina)',
|
||||
'es_MX' => 'Spanish (Mexico)',
|
||||
'es_ES' => 'Spanish (Spain)',
|
||||
'sv_SE' => 'Swedish (Sweden)',
|
||||
'th_TH' => 'Thai (Thailand)',
|
||||
'tr_TR' => 'Turkish (Turkey)',
|
||||
'uk_UA' => 'Ukrainian (Ukraine)',
|
||||
'uz_UZ' => 'Uzbek (Uzbekistan)',
|
||||
'vi_VN' => 'Vietnamese (Vietnam)',
|
||||
'af_ZA' => 'Afrikaans (South Africa)',
|
||||
'ar_EG' => 'Arabic (Egypt)',
|
||||
'hy_AM' => 'Armenian (Armenia)',
|
||||
'ast_ES' => 'Asturian (Spain)',
|
||||
'az_AZ' => 'Azerbaijani (Azerbaijan)',
|
||||
'bs_BA' => 'Bosnian (Bosnia and Herzegovina)',
|
||||
'bg_BG' => 'Bulgarian (Bulgaria)',
|
||||
'ca_ES' => 'Catalan (Spain)',
|
||||
'zh_CN' => 'Chinese (China)',
|
||||
'zh_TW' => 'Chinese (Taiwan)',
|
||||
'hr_HR' => 'Croatian (Croatia)',
|
||||
'cs_CZ' => 'Czech (Czech Republic)',
|
||||
'da_DK' => 'Danish (Denmark)',
|
||||
'nl_NL' => 'Dutch (Netherlands)',
|
||||
'en_GB' => 'English (United Kingdom)',
|
||||
'en_US' => 'English (United States)',
|
||||
'eo_XX' => 'Esperanto',
|
||||
'et_EE' => 'Estonian (Estonia)',
|
||||
'fo_FO' => 'Faroese (Faroe Islands)',
|
||||
'fi_FI' => 'Finnish (Finland)',
|
||||
'fr_FR' => 'French (France)',
|
||||
'de_DE' => 'German (Germany)',
|
||||
'el_GR' => 'Greek (Greece)',
|
||||
'he_IL' => 'Hebrew (Israel)',
|
||||
'hu_HU' => 'Hungarian (Hungary)',
|
||||
'is_IS' => 'Icelandic (Iceland)',
|
||||
'id_ID' => 'Indonesian (Indonesia)',
|
||||
'it_IT' => 'Italian (Italy)',
|
||||
'ja_JP' => 'Japanese (Japan)',
|
||||
'km_KH' => 'Khmer (Cambodia)',
|
||||
'lc_XX' => 'LOLCAT',
|
||||
'lv_LV' => 'Latvian (Latvia)',
|
||||
'lt_LT' => 'Lithuanian (Lithuania)',
|
||||
'ms_MY' => 'Malay (Malaysia)',
|
||||
'mi_NZ' => 'Maori (New Zealand)',
|
||||
'ne_NP' => 'Nepali (Nepal)',
|
||||
'nb_NO' => 'Norwegian',
|
||||
'fa_IR' => 'Persian (Iran)',
|
||||
'pl_PL' => 'Polish (Poland)',
|
||||
'pt_BR' => 'Portuguese (Brazil)',
|
||||
'pa_IN' => 'Punjabi (India)',
|
||||
'ro_RO' => 'Romanian (Romania)',
|
||||
'ru_RU' => 'Russian (Russia)',
|
||||
'sr_RS' => 'Serbian (Serbia)',
|
||||
'si_LK' => 'Sinhalese (Sri Lanka)',
|
||||
'sk_SK' => 'Slovak (Slovakia)',
|
||||
'sl_SI' => 'Slovenian (Slovenia)',
|
||||
'es_AR' => 'Spanish (Argentina)',
|
||||
'es_MX' => 'Spanish (Mexico)',
|
||||
'es_ES' => 'Spanish (Spain)',
|
||||
'sv_SE' => 'Swedish (Sweden)',
|
||||
'th_TH' => 'Thai (Thailand)',
|
||||
'tr_TR' => 'Turkish (Turkey)',
|
||||
'uk_UA' => 'Ukrainian (Ukraine)',
|
||||
'uz_UZ' => 'Uzbek (Uzbekistan)',
|
||||
'vi_VN' => 'Vietnamese (Vietnam)',
|
||||
);
|
||||
|
||||
// Discover which databases are available
|
||||
DatabaseAdapterRegistry::autodiscover();
|
||||
|
||||
// Determine which external database modules are USABLE
|
||||
foreach(DatabaseAdapterRegistry::get_adapters() as $class => $details) {
|
||||
foreach (DatabaseAdapterRegistry::get_adapters() as $class => $details) {
|
||||
$databaseClasses[$class] = $details;
|
||||
if(file_exists($details['helperPath'])) {
|
||||
if (file_exists($details['helperPath'])) {
|
||||
$databaseClasses[$class]['hasModule'] = true;
|
||||
include_once($details['helperPath']);
|
||||
} else {
|
||||
@ -164,12 +163,12 @@ foreach(DatabaseAdapterRegistry::get_adapters() as $class => $details) {
|
||||
}
|
||||
|
||||
// Load database config
|
||||
if(isset($_REQUEST['db'])) {
|
||||
if(isset($_REQUEST['db']['type'])) $type = $_REQUEST['db']['type'];
|
||||
if (isset($_REQUEST['db'])) {
|
||||
if (isset($_REQUEST['db']['type'])) $type = $_REQUEST['db']['type'];
|
||||
else $type = $_REQUEST['db']['type'] = defined('SS_DATABASE_CLASS') ? SS_DATABASE_CLASS : 'MySQLDatabase';
|
||||
|
||||
// Disabled inputs don't submit anything - we need to use the environment (except the database name)
|
||||
if($usingEnv) {
|
||||
if ($usingEnv) {
|
||||
$_REQUEST['db'][$type] = $databaseConfig = array(
|
||||
"type" => defined('SS_DATABASE_CLASS') ? SS_DATABASE_CLASS : $type,
|
||||
"server" => defined('SS_DATABASE_SERVER') ? SS_DATABASE_SERVER : "localhost",
|
||||
@ -194,9 +193,9 @@ if(isset($_REQUEST['db'])) {
|
||||
);
|
||||
}
|
||||
|
||||
if(isset($_REQUEST['admin'])) {
|
||||
if (isset($_REQUEST['admin'])) {
|
||||
// Disabled inputs don't submit anything - we need to use the environment (except the database name)
|
||||
if($usingEnv) {
|
||||
if ($usingEnv) {
|
||||
$_REQUEST['admin'] = $adminConfig = array(
|
||||
'username' => defined('SS_DEFAULT_ADMIN_USERNAME') ? SS_DEFAULT_ADMIN_USERNAME : 'admin',
|
||||
'password' => defined('SS_DEFAULT_ADMIN_PASSWORD') ? SS_DEFAULT_ADMIN_PASSWORD : '',
|
||||
@ -212,19 +211,19 @@ if(isset($_REQUEST['admin'])) {
|
||||
}
|
||||
|
||||
$alreadyInstalled = false;
|
||||
if(file_exists('mysite/_config.php')) {
|
||||
if (file_exists('mysite/_config.php')) {
|
||||
// Find the $database variable in the relevant config file without having to execute the config file
|
||||
if(preg_match("/\\\$database\s*=\s*[^\n\r]+[\n\r]/", file_get_contents("mysite/_config.php"), $parts)) {
|
||||
if (preg_match("/\\\$database\s*=\s*[^\n\r]+[\n\r]/", file_get_contents("mysite/_config.php"), $parts)) {
|
||||
eval($parts[0]);
|
||||
if($database) $alreadyInstalled = true;
|
||||
// Assume that if $databaseConfig is defined in mysite/_config.php, then a non-environment-based installation has
|
||||
// already gone ahead
|
||||
} else if(preg_match("/\\\$databaseConfig\s*=\s*[^\n\r]+[\n\r]/", file_get_contents("mysite/_config.php"), $parts)) {
|
||||
if ($database) $alreadyInstalled = true;
|
||||
// Assume that if $databaseConfig is defined in mysite/_config.php, then a non-environment-based installation has
|
||||
// already gone ahead
|
||||
} else if (preg_match("/\\\$databaseConfig\s*=\s*[^\n\r]+[\n\r]/", file_get_contents("mysite/_config.php"), $parts)) {
|
||||
$alreadyInstalled = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(file_exists(FRAMEWORK_NAME . '/silverstripe_version')) {
|
||||
if (file_exists(FRAMEWORK_NAME . '/silverstripe_version')) {
|
||||
$silverstripe_version = file_get_contents(FRAMEWORK_NAME . '/silverstripe_version');
|
||||
} else {
|
||||
$silverstripe_version = "unknown";
|
||||
@ -235,23 +234,23 @@ $req = new InstallRequirements();
|
||||
$req->check();
|
||||
|
||||
$webserverConfigFile = '';
|
||||
if($req->isIIS()) {
|
||||
if ($req->isIIS()) {
|
||||
$webserverConfigFile = 'web.config';
|
||||
} else {
|
||||
$webserverConfigFile = '.htaccess';
|
||||
}
|
||||
|
||||
if($req->hasErrors()) {
|
||||
if ($req->hasErrors()) {
|
||||
$hasErrorOtherThanDatabase = true;
|
||||
$phpIniLocation = php_ini_loaded_file();
|
||||
}
|
||||
|
||||
if($databaseConfig) {
|
||||
if ($databaseConfig) {
|
||||
$dbReq = new InstallRequirements();
|
||||
$dbReq->checkDatabase($databaseConfig);
|
||||
}
|
||||
|
||||
if($adminConfig) {
|
||||
if ($adminConfig) {
|
||||
$adminReq = new InstallRequirements();
|
||||
$adminReq->checkAdminConfig($adminConfig);
|
||||
}
|
||||
@ -260,21 +259,21 @@ if($adminConfig) {
|
||||
$installFromCli = (isset($_SERVER['argv'][1]) && $_SERVER['argv'][1] == 'install');
|
||||
|
||||
// CLI-install error message. exit(1) will halt any makefile.
|
||||
if($installFromCli && ($req->hasErrors() || $dbReq->hasErrors())) {
|
||||
if ($installFromCli && ($req->hasErrors() || $dbReq->hasErrors())) {
|
||||
echo "Cannot install due to errors:\n";
|
||||
$req->listErrors();
|
||||
$dbReq->listErrors();
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if((isset($_REQUEST['go']) || $installFromCli) && !$req->hasErrors() && !$dbReq->hasErrors() && $adminConfig['username'] && $adminConfig['password']) {
|
||||
if ((isset($_REQUEST['go']) || $installFromCli) && !$req->hasErrors() && !$dbReq->hasErrors() && $adminConfig['username'] && $adminConfig['password']) {
|
||||
// Confirm before reinstalling
|
||||
if(!$installFromCli && $alreadyInstalled) {
|
||||
if (!$installFromCli && $alreadyInstalled) {
|
||||
include(FRAMEWORK_NAME . '/dev/install/config-form.html');
|
||||
|
||||
} else {
|
||||
$inst = new Installer();
|
||||
if($_REQUEST) $inst->install($_REQUEST);
|
||||
if ($_REQUEST) $inst->install($_REQUEST);
|
||||
else $inst->install(array(
|
||||
'db' => $databaseConfig,
|
||||
'admin' => $adminConfig,
|
||||
@ -303,7 +302,7 @@ class InstallRequirements {
|
||||
* continuing onto more difficult checks like database permissions.
|
||||
*/
|
||||
function checkDatabase($databaseConfig) {
|
||||
if($this->requireDatabaseFunctions(
|
||||
if ($this->requireDatabaseFunctions(
|
||||
$databaseConfig,
|
||||
array(
|
||||
"Database Configuration",
|
||||
@ -312,7 +311,7 @@ class InstallRequirements {
|
||||
$this->getDatabaseTypeNice($databaseConfig['type'])
|
||||
)
|
||||
)) {
|
||||
if($this->requireDatabaseServer(
|
||||
if ($this->requireDatabaseServer(
|
||||
$databaseConfig,
|
||||
array(
|
||||
"Database Configuration",
|
||||
@ -321,7 +320,7 @@ class InstallRequirements {
|
||||
$databaseConfig['type'] == 'SQLiteDatabase' ? $databaseConfig['path'] : $databaseConfig['server']
|
||||
)
|
||||
)) {
|
||||
if($this->requireDatabaseConnection(
|
||||
if ($this->requireDatabaseConnection(
|
||||
$databaseConfig,
|
||||
array(
|
||||
"Database Configuration",
|
||||
@ -329,7 +328,7 @@ class InstallRequirements {
|
||||
"That username/password doesn't work"
|
||||
)
|
||||
)) {
|
||||
if($this->requireDatabaseVersion(
|
||||
if ($this->requireDatabaseVersion(
|
||||
$databaseConfig,
|
||||
array(
|
||||
"Database Configuration",
|
||||
@ -353,10 +352,10 @@ class InstallRequirements {
|
||||
}
|
||||
|
||||
function checkAdminConfig($adminConfig) {
|
||||
if(!$adminConfig['username']) {
|
||||
if (!$adminConfig['username']) {
|
||||
$this->error(array('', 'Please enter a username!'));
|
||||
}
|
||||
if(!$adminConfig['password']) {
|
||||
if (!$adminConfig['password']) {
|
||||
$this->error(array('', 'Please enter a password!'));
|
||||
}
|
||||
}
|
||||
@ -366,7 +365,7 @@ class InstallRequirements {
|
||||
* @return boolean
|
||||
*/
|
||||
function isIIS($version = 7) {
|
||||
if(strpos($this->findWebserver(), 'IIS/' . $version) !== false) {
|
||||
if (strpos($this->findWebserver(), 'IIS/' . $version) !== false) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
@ -374,7 +373,7 @@ class InstallRequirements {
|
||||
}
|
||||
|
||||
function isApache() {
|
||||
if(strpos($this->findWebserver(), 'Apache') !== false) {
|
||||
if (strpos($this->findWebserver(), 'Apache') !== false) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
@ -388,9 +387,9 @@ class InstallRequirements {
|
||||
function findWebserver() {
|
||||
// Try finding from SERVER_SIGNATURE or SERVER_SOFTWARE
|
||||
$webserver = @$_SERVER['SERVER_SIGNATURE'];
|
||||
if(!$webserver) $webserver = @$_SERVER['SERVER_SOFTWARE'];
|
||||
if (!$webserver) $webserver = @$_SERVER['SERVER_SOFTWARE'];
|
||||
|
||||
if($webserver) return strip_tags(trim($webserver));
|
||||
if ($webserver) return strip_tags(trim($webserver));
|
||||
else return false;
|
||||
}
|
||||
|
||||
@ -404,13 +403,13 @@ class InstallRequirements {
|
||||
$webserver = $this->findWebserver();
|
||||
|
||||
$this->requirePHPVersion('5.3.4', '5.3.2', array(
|
||||
"PHP Configuration",
|
||||
"PHP5 installed",
|
||||
null,
|
||||
"PHP version " . phpversion()
|
||||
));
|
||||
"PHP Configuration",
|
||||
"PHP5 installed",
|
||||
null,
|
||||
"PHP version " . phpversion()
|
||||
));
|
||||
|
||||
// Check that we can identify the root folder successfully
|
||||
// Check that we can identify the root folder successfully
|
||||
$this->requireFile(FRAMEWORK_NAME . '/dev/install/config-form.html', array("File permissions",
|
||||
"Does the webserver know where files are stored?",
|
||||
"The webserver isn't letting me identify where files are stored.",
|
||||
@ -420,222 +419,222 @@ class InstallRequirements {
|
||||
$this->requireModule('mysite', array("File permissions", "mysite/ directory exists?"));
|
||||
$this->requireModule(FRAMEWORK_NAME, array("File permissions", FRAMEWORK_NAME . "/ directory exists?"));
|
||||
|
||||
if($isApache) {
|
||||
if ($isApache) {
|
||||
$this->checkApacheVersion(array(
|
||||
"Webserver Configuration",
|
||||
"Webserver is not Apache 1.x", "SilverStripe requires Apache version 2 or greater",
|
||||
$webserver
|
||||
));
|
||||
"Webserver Configuration",
|
||||
"Webserver is not Apache 1.x", "SilverStripe requires Apache version 2 or greater",
|
||||
$webserver
|
||||
));
|
||||
$this->requireWriteable('.htaccess', array("File permissions", "Is the .htaccess file writeable?", null));
|
||||
} elseif($isIIS) {
|
||||
} elseif ($isIIS) {
|
||||
$this->requireWriteable('web.config', array("File permissions", "Is the web.config file writeable?", null));
|
||||
}
|
||||
|
||||
$this->requireWriteable('mysite/_config.php', array(
|
||||
"File permissions",
|
||||
"Is the mysite/_config.php file writeable?",
|
||||
null
|
||||
));
|
||||
"File permissions",
|
||||
"Is the mysite/_config.php file writeable?",
|
||||
null
|
||||
));
|
||||
if (!$this->checkModuleExists('cms')) {
|
||||
$this->requireWriteable('mysite/code/RootURLController.php', array(
|
||||
"File permissions",
|
||||
"Is the mysite/code/RootURLController.php file writeable?",
|
||||
null
|
||||
));
|
||||
"File permissions",
|
||||
"Is the mysite/code/RootURLController.php file writeable?",
|
||||
null
|
||||
));
|
||||
}
|
||||
$this->requireWriteable('assets', array("File permissions", "Is the assets/ directory writeable?", null));
|
||||
|
||||
$tempFolder = $this->getTempFolder();
|
||||
$this->requireTempFolder(array('File permissions', 'Is a temporary directory available?', null, $tempFolder));
|
||||
if($tempFolder) {
|
||||
if ($tempFolder) {
|
||||
// in addition to the temp folder being available, check it is writable
|
||||
$this->requireWriteable($tempFolder, array(
|
||||
"File permissions",
|
||||
sprintf("Is the temporary directory writeable?", $tempFolder),
|
||||
null
|
||||
), true);
|
||||
"File permissions",
|
||||
sprintf("Is the temporary directory writeable?", $tempFolder),
|
||||
null
|
||||
), true);
|
||||
}
|
||||
|
||||
// Check for web server, unless we're calling the installer from the command-line
|
||||
$this->isRunningWebServer(array("Webserver Configuration", "Server software", "Unknown", $webserver));
|
||||
|
||||
if($isApache) {
|
||||
if ($isApache) {
|
||||
$this->requireApacheRewriteModule('mod_rewrite', array(
|
||||
"Webserver Configuration",
|
||||
"URL rewriting support",
|
||||
"You need mod_rewrite to use friendly URLs with SilverStripe, but it is not enabled."
|
||||
));
|
||||
} elseif($isIIS) {
|
||||
"Webserver Configuration",
|
||||
"URL rewriting support",
|
||||
"You need mod_rewrite to use friendly URLs with SilverStripe, but it is not enabled."
|
||||
));
|
||||
} elseif ($isIIS) {
|
||||
$this->requireIISRewriteModule('IIS_UrlRewriteModule', array(
|
||||
"Webserver Configuration",
|
||||
"URL rewriting support",
|
||||
"You need to enable the IIS URL Rewrite Module to use friendly URLs with SilverStripe, "
|
||||
. "but it is not installed or enabled. Download it for IIS 7 from http://www.iis.net/expand/URLRewrite"
|
||||
));
|
||||
"Webserver Configuration",
|
||||
"URL rewriting support",
|
||||
"You need to enable the IIS URL Rewrite Module to use friendly URLs with SilverStripe, "
|
||||
. "but it is not installed or enabled. Download it for IIS 7 from http://www.iis.net/expand/URLRewrite"
|
||||
));
|
||||
} else {
|
||||
$this->warning(array(
|
||||
"Webserver Configuration",
|
||||
"URL rewriting support",
|
||||
"I can't tell whether any rewriting module is running. You may need to configure a rewriting rule yourself."));
|
||||
"Webserver Configuration",
|
||||
"URL rewriting support",
|
||||
"I can't tell whether any rewriting module is running. You may need to configure a rewriting rule yourself."));
|
||||
}
|
||||
|
||||
$this->requireServerVariables(array('SCRIPT_NAME','HTTP_HOST','SCRIPT_FILENAME'), array(
|
||||
"Webserver Configuration",
|
||||
"Recognised webserver",
|
||||
"You seem to be using an unsupported webserver. "
|
||||
. "The server variables SCRIPT_NAME, HTTP_HOST, SCRIPT_FILENAME need to be set."
|
||||
));
|
||||
$this->requireServerVariables(array('SCRIPT_NAME', 'HTTP_HOST', 'SCRIPT_FILENAME'), array(
|
||||
"Webserver Configuration",
|
||||
"Recognised webserver",
|
||||
"You seem to be using an unsupported webserver. "
|
||||
. "The server variables SCRIPT_NAME, HTTP_HOST, SCRIPT_FILENAME need to be set."
|
||||
));
|
||||
|
||||
$this->requirePostSupport(array(
|
||||
"Webserver Configuration",
|
||||
"POST Support",
|
||||
'I can\'t find $_POST, make sure POST is enabled.'
|
||||
));
|
||||
"Webserver Configuration",
|
||||
"POST Support",
|
||||
'I can\'t find $_POST, make sure POST is enabled.'
|
||||
));
|
||||
|
||||
// Check for GD support
|
||||
if(!$this->requireFunction("imagecreatetruecolor", array(
|
||||
"PHP Configuration",
|
||||
"GD2 support",
|
||||
"PHP must have GD version 2."
|
||||
if (!$this->requireFunction("imagecreatetruecolor", array(
|
||||
"PHP Configuration",
|
||||
"GD2 support",
|
||||
"PHP must have GD version 2."
|
||||
))) {
|
||||
$this->requireFunction("imagecreate", array(
|
||||
"PHP Configuration",
|
||||
"GD2 support",
|
||||
"GD support for PHP not included."
|
||||
));
|
||||
}
|
||||
"PHP Configuration",
|
||||
"GD2 support",
|
||||
"GD support for PHP not included."
|
||||
));
|
||||
}
|
||||
|
||||
// Check for XML support
|
||||
// Check for XML support
|
||||
$this->requireFunction('xml_set_object', array(
|
||||
"PHP Configuration",
|
||||
"XML support",
|
||||
"XML support not included in PHP."
|
||||
));
|
||||
"PHP Configuration",
|
||||
"XML support",
|
||||
"XML support not included in PHP."
|
||||
));
|
||||
$this->requireClass('DOMDocument', array(
|
||||
"PHP Configuration",
|
||||
"DOM/XML support",
|
||||
"DOM/XML support not included in PHP."
|
||||
));
|
||||
"PHP Configuration",
|
||||
"DOM/XML support",
|
||||
"DOM/XML support not included in PHP."
|
||||
));
|
||||
$this->requireFunction('simplexml_load_file', array(
|
||||
'PHP Configuration',
|
||||
'SimpleXML support',
|
||||
'SimpleXML support not included in PHP.'
|
||||
));
|
||||
'PHP Configuration',
|
||||
'SimpleXML support',
|
||||
'SimpleXML support not included in PHP.'
|
||||
));
|
||||
|
||||
// Check for token_get_all
|
||||
$this->requireFunction('token_get_all', array(
|
||||
"PHP Configuration",
|
||||
"Tokenizer support",
|
||||
"Tokenizer support not included in PHP."
|
||||
));
|
||||
"PHP Configuration",
|
||||
"Tokenizer support",
|
||||
"Tokenizer support not included in PHP."
|
||||
));
|
||||
|
||||
// Check for CType support
|
||||
$this->requireFunction('ctype_digit', array(
|
||||
'PHP Configuration',
|
||||
'CType support',
|
||||
'CType support not included in PHP.'
|
||||
));
|
||||
'PHP Configuration',
|
||||
'CType support',
|
||||
'CType support not included in PHP.'
|
||||
));
|
||||
|
||||
// Check for session support
|
||||
$this->requireFunction('session_start', array(
|
||||
'PHP Configuration',
|
||||
'Session support',
|
||||
'Session support not included in PHP.'
|
||||
));
|
||||
'PHP Configuration',
|
||||
'Session support',
|
||||
'Session support not included in PHP.'
|
||||
));
|
||||
|
||||
// Check for iconv support
|
||||
$this->requireFunction('iconv', array(
|
||||
'PHP Configuration',
|
||||
'iconv support',
|
||||
'iconv support not included in PHP.'
|
||||
));
|
||||
'PHP Configuration',
|
||||
'iconv support',
|
||||
'iconv support not included in PHP.'
|
||||
));
|
||||
|
||||
// Check for hash support
|
||||
$this->requireFunction('hash', array('PHP Configuration', 'hash support', 'hash support not included in PHP.'));
|
||||
|
||||
// Check for mbstring support
|
||||
$this->requireFunction('mb_internal_encoding', array(
|
||||
'PHP Configuration',
|
||||
'mbstring support',
|
||||
'mbstring support not included in PHP.'
|
||||
));
|
||||
'PHP Configuration',
|
||||
'mbstring support',
|
||||
'mbstring support not included in PHP.'
|
||||
));
|
||||
|
||||
// Check for Reflection support
|
||||
$this->requireClass('ReflectionClass', array(
|
||||
'PHP Configuration',
|
||||
'Reflection support',
|
||||
'Reflection support not included in PHP.'
|
||||
));
|
||||
'PHP Configuration',
|
||||
'Reflection support',
|
||||
'Reflection support not included in PHP.'
|
||||
));
|
||||
|
||||
// Check for Standard PHP Library (SPL) support
|
||||
$this->requireFunction('spl_classes', array(
|
||||
'PHP Configuration',
|
||||
'SPL support',
|
||||
'Standard PHP Library (SPL) not included in PHP.'
|
||||
));
|
||||
'PHP Configuration',
|
||||
'SPL support',
|
||||
'Standard PHP Library (SPL) not included in PHP.'
|
||||
));
|
||||
|
||||
$this->requireDateTimezone(array(
|
||||
'PHP Configuration',
|
||||
'date.timezone setting and validity',
|
||||
'date.timezone option in php.ini must be set correctly.',
|
||||
ini_get('date.timezone')
|
||||
));
|
||||
'PHP Configuration',
|
||||
'date.timezone setting and validity',
|
||||
'date.timezone option in php.ini must be set correctly.',
|
||||
ini_get('date.timezone')
|
||||
));
|
||||
|
||||
$this->suggestClass('finfo', array(
|
||||
'PHP Configuration',
|
||||
'fileinfo support',
|
||||
'fileinfo should be enabled in PHP. SilverStripe uses it for MIME type detection of files. '
|
||||
. 'SilverStripe will still operate, but email attachments and sending files to browser '
|
||||
. '(e.g. export data to CSV) may not work correctly without finfo.'
|
||||
));
|
||||
'PHP Configuration',
|
||||
'fileinfo support',
|
||||
'fileinfo should be enabled in PHP. SilverStripe uses it for MIME type detection of files. '
|
||||
. 'SilverStripe will still operate, but email attachments and sending files to browser '
|
||||
. '(e.g. export data to CSV) may not work correctly without finfo.'
|
||||
));
|
||||
|
||||
$this->suggestFunction('curl_init', array(
|
||||
'PHP Configuration',
|
||||
'curl support',
|
||||
'curl should be enabled in PHP. SilverStripe uses it for consuming web services'
|
||||
. ' via the RestfulService class and many modules rely on it.'
|
||||
));
|
||||
'PHP Configuration',
|
||||
'curl support',
|
||||
'curl should be enabled in PHP. SilverStripe uses it for consuming web services'
|
||||
. ' via the RestfulService class and many modules rely on it.'
|
||||
));
|
||||
|
||||
$this->suggestClass('tidy', array(
|
||||
'PHP Configuration',
|
||||
'tidy support',
|
||||
'Tidy provides a library of code to clean up your html. '
|
||||
. 'SilverStripe will operate fine without tidy but HTMLCleaner will not be effective.'
|
||||
));
|
||||
'PHP Configuration',
|
||||
'tidy support',
|
||||
'Tidy provides a library of code to clean up your html. '
|
||||
. 'SilverStripe will operate fine without tidy but HTMLCleaner will not be effective.'
|
||||
));
|
||||
|
||||
$this->suggestPHPSetting('asp_tags', array(false), array(
|
||||
'PHP Configuration',
|
||||
'asp_tags option',
|
||||
'This should be turned off as it can cause issues with SilverStripe'
|
||||
));
|
||||
'PHP Configuration',
|
||||
'asp_tags option',
|
||||
'This should be turned off as it can cause issues with SilverStripe'
|
||||
));
|
||||
$this->requirePHPSetting('magic_quotes_gpc', array(false), array(
|
||||
'PHP Configuration',
|
||||
'magic_quotes_gpc option',
|
||||
'This should be turned off, as it can cause issues with cookies. '
|
||||
. 'More specifically, unserializing data stored in cookies.'
|
||||
));
|
||||
'PHP Configuration',
|
||||
'magic_quotes_gpc option',
|
||||
'This should be turned off, as it can cause issues with cookies. '
|
||||
. 'More specifically, unserializing data stored in cookies.'
|
||||
));
|
||||
$this->suggestPHPSetting('display_errors', array(false), array(
|
||||
'PHP Configuration',
|
||||
'display_errors option',
|
||||
'Unless you\'re in a development environment, this should be turned off, '
|
||||
. 'as it can expose sensitive data to website users.'
|
||||
));
|
||||
'PHP Configuration',
|
||||
'display_errors option',
|
||||
'Unless you\'re in a development environment, this should be turned off, '
|
||||
. 'as it can expose sensitive data to website users.'
|
||||
));
|
||||
// on some weirdly configured webservers arg_separator.output is set to &
|
||||
// which will results in links like ?param=value&foo=bar which will not be i
|
||||
// which will results in links like ?param=value&foo=bar which will not be i
|
||||
$this->suggestPHPSetting('arg_separator.output', array('&', ''), array(
|
||||
'PHP Configuration',
|
||||
'arg_separator.output option',
|
||||
'This option defines how URL parameters are concatenated. '
|
||||
. 'If not set to \'&\' this may cause issues with URL GET parameters'
|
||||
));
|
||||
'PHP Configuration',
|
||||
'arg_separator.output option',
|
||||
'This option defines how URL parameters are concatenated. '
|
||||
. 'If not set to \'&\' this may cause issues with URL GET parameters'
|
||||
));
|
||||
|
||||
// Check memory allocation
|
||||
$this->requireMemory(32*1024*1024, 64*1024*1024, array(
|
||||
"PHP Configuration",
|
||||
"Memory allocation (PHP config option 'memory_limit')",
|
||||
"SilverStripe needs a minimum of 32M allocated to PHP, but recommends 64M.",
|
||||
ini_get("memory_limit")
|
||||
));
|
||||
$this->requireMemory(32 * 1024 * 1024, 64 * 1024 * 1024, array(
|
||||
"PHP Configuration",
|
||||
"Memory allocation (PHP config option 'memory_limit')",
|
||||
"SilverStripe needs a minimum of 32M allocated to PHP, but recommends 64M.",
|
||||
ini_get("memory_limit")
|
||||
));
|
||||
|
||||
return $this->errors;
|
||||
}
|
||||
@ -645,14 +644,14 @@ class InstallRequirements {
|
||||
|
||||
// special case for display_errors, check the original value before
|
||||
// it was changed at the start of this script.
|
||||
if($settingName = 'display_errors') {
|
||||
if ($settingName = 'display_errors') {
|
||||
global $originalDisplayErrorsValue;
|
||||
$val = $originalDisplayErrorsValue;
|
||||
} else {
|
||||
$val = ini_get($settingName);
|
||||
}
|
||||
|
||||
if(!in_array($val, $settingValues) && $val != $settingValues) {
|
||||
if (!in_array($val, $settingValues) && $val != $settingValues) {
|
||||
$testDetails[2] = "$settingName is set to '$val' in php.ini. $testDetails[2]";
|
||||
$this->warning($testDetails);
|
||||
}
|
||||
@ -662,7 +661,7 @@ class InstallRequirements {
|
||||
$this->testing($testDetails);
|
||||
|
||||
$val = ini_get($settingName);
|
||||
if(!in_array($val, $settingValues) && $val != $settingValues) {
|
||||
if (!in_array($val, $settingValues) && $val != $settingValues) {
|
||||
$testDetails[2] = "$settingName is set to '$val' in php.ini. $testDetails[2]";
|
||||
$this->error($testDetails);
|
||||
}
|
||||
@ -671,7 +670,7 @@ class InstallRequirements {
|
||||
function suggestClass($class, $testDetails) {
|
||||
$this->testing($testDetails);
|
||||
|
||||
if(!class_exists($class)) {
|
||||
if (!class_exists($class)) {
|
||||
$this->warning($testDetails);
|
||||
}
|
||||
}
|
||||
@ -679,7 +678,7 @@ class InstallRequirements {
|
||||
function suggestFunction($class, $testDetails) {
|
||||
$this->testing($testDetails);
|
||||
|
||||
if(!function_exists($class)) {
|
||||
if (!function_exists($class)) {
|
||||
$this->warning($testDetails);
|
||||
}
|
||||
}
|
||||
@ -688,7 +687,7 @@ class InstallRequirements {
|
||||
$this->testing($testDetails);
|
||||
|
||||
$result = ini_get('date.timezone') && in_array(ini_get('date.timezone'), timezone_identifiers_list());
|
||||
if(!$result) {
|
||||
if (!$result) {
|
||||
$this->error($testDetails);
|
||||
}
|
||||
}
|
||||
@ -697,7 +696,7 @@ class InstallRequirements {
|
||||
$_SESSION['forcemem'] = false;
|
||||
|
||||
$mem = $this->getPHPMemory();
|
||||
if($mem < (64 * 1024 * 1024)) {
|
||||
if ($mem < (64 * 1024 * 1024)) {
|
||||
ini_set('memory_limit', '64M');
|
||||
$mem = $this->getPHPMemory();
|
||||
$testDetails[3] = ini_get("memory_limit");
|
||||
@ -705,15 +704,15 @@ class InstallRequirements {
|
||||
|
||||
$this->testing($testDetails);
|
||||
|
||||
if($mem < $min && $mem > 0) {
|
||||
if ($mem < $min && $mem > 0) {
|
||||
$testDetails[2] .= " You only have " . ini_get("memory_limit") . " allocated";
|
||||
$this->error($testDetails);
|
||||
} else if($mem < $recommended && $mem > 0) {
|
||||
} else if ($mem < $recommended && $mem > 0) {
|
||||
$testDetails[2] .= " You only have " . ini_get("memory_limit") . " allocated";
|
||||
$this->warning($testDetails);
|
||||
} elseif($mem == 0) {
|
||||
} elseif ($mem == 0) {
|
||||
$testDetails[2] .= " We can't determine how much memory you have allocated. "
|
||||
. "Install only if you're sure you've allocated at least 20 MB.";
|
||||
. "Install only if you're sure you've allocated at least 20 MB.";
|
||||
$this->warning($testDetails);
|
||||
}
|
||||
}
|
||||
@ -721,15 +720,15 @@ class InstallRequirements {
|
||||
function getPHPMemory() {
|
||||
$memString = ini_get("memory_limit");
|
||||
|
||||
switch(strtolower(substr($memString,-1))) {
|
||||
switch (strtolower(substr($memString, -1))) {
|
||||
case "k":
|
||||
return round(substr($memString,0,-1)*1024);
|
||||
return round(substr($memString, 0, -1) * 1024);
|
||||
|
||||
case "m":
|
||||
return round(substr($memString,0,-1)*1024*1024);
|
||||
return round(substr($memString, 0, -1) * 1024 * 1024);
|
||||
|
||||
case "g":
|
||||
return round(substr($memString,0,-1)*1024*1024*1024);
|
||||
return round(substr($memString, 0, -1) * 1024 * 1024 * 1024);
|
||||
|
||||
default:
|
||||
return round($memString);
|
||||
@ -737,35 +736,35 @@ class InstallRequirements {
|
||||
}
|
||||
|
||||
function listErrors() {
|
||||
if($this->errors) {
|
||||
if ($this->errors) {
|
||||
echo "<p>The following problems are preventing me from installing SilverStripe CMS:</p>\n\n";
|
||||
foreach($this->errors as $error) {
|
||||
foreach ($this->errors as $error) {
|
||||
echo "<li>" . htmlentities(implode(", ", $error), ENT_COMPAT, 'UTF-8') . "</li>\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function showTable($section = null) {
|
||||
if($section) {
|
||||
if ($section) {
|
||||
$tests = $this->tests[$section];
|
||||
$id = strtolower(str_replace(' ', '_', $section));
|
||||
echo "<table id=\"{$id}_results\" class=\"testResults\" width=\"100%\">";
|
||||
foreach($tests as $test => $result) {
|
||||
foreach ($tests as $test => $result) {
|
||||
echo "<tr class=\"$result[0]\"><td>$test</td><td>"
|
||||
. nl2br(htmlentities($result[1], ENT_COMPAT, 'UTF-8')) . "</td></tr>";
|
||||
. nl2br(htmlentities($result[1], ENT_COMPAT, 'UTF-8')) . "</td></tr>";
|
||||
}
|
||||
echo "</table>";
|
||||
|
||||
} else {
|
||||
foreach($this->tests as $section => $tests) {
|
||||
foreach ($this->tests as $section => $tests) {
|
||||
$failedRequirements = 0;
|
||||
$warningRequirements = 0;
|
||||
|
||||
$output = "";
|
||||
|
||||
foreach($tests as $test => $result) {
|
||||
if(isset($result['0'])) {
|
||||
switch($result['0']) {
|
||||
foreach ($tests as $test => $result) {
|
||||
if (isset($result['0'])) {
|
||||
switch ($result['0']) {
|
||||
case 'error':
|
||||
$failedRequirements++;
|
||||
break;
|
||||
@ -775,21 +774,20 @@ class InstallRequirements {
|
||||
}
|
||||
}
|
||||
$output .= "<tr class=\"$result[0]\"><td>$test</td><td>"
|
||||
. nl2br(htmlentities($result[1], ENT_COMPAT, 'UTF-8')) . "</td></tr>";
|
||||
. nl2br(htmlentities($result[1], ENT_COMPAT, 'UTF-8')) . "</td></tr>";
|
||||
}
|
||||
$className = "good";
|
||||
$text = "All Requirements Pass";
|
||||
$pluralWarnings = ($warningRequirements == 1) ? 'Warning' : 'Warnings';
|
||||
|
||||
if($failedRequirements > 0) {
|
||||
if ($failedRequirements > 0) {
|
||||
$className = "error";
|
||||
$pluralWarnings = ($warningRequirements == 1) ? 'Warning' : 'Warnings';
|
||||
|
||||
$text = $failedRequirements . ' Failed and '. $warningRequirements . ' '. $pluralWarnings;
|
||||
}
|
||||
else if($warningRequirements > 0) {
|
||||
$text = $failedRequirements . ' Failed and ' . $warningRequirements . ' ' . $pluralWarnings;
|
||||
} else if ($warningRequirements > 0) {
|
||||
$className = "warning";
|
||||
$text = "All Requirements Pass but ". $warningRequirements . ' '. $pluralWarnings;
|
||||
$text = "All Requirements Pass but " . $warningRequirements . ' ' . $pluralWarnings;
|
||||
}
|
||||
|
||||
echo "<h5 class='requirement $className'>$section <a href='#'>Show All Requirements</a> <span>$text</span></h5>";
|
||||
@ -803,16 +801,20 @@ class InstallRequirements {
|
||||
function requireFunction($funcName, $testDetails) {
|
||||
$this->testing($testDetails);
|
||||
|
||||
if(!function_exists($funcName)) {
|
||||
if (!function_exists($funcName)) {
|
||||
$this->error($testDetails);
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
else return true;
|
||||
}
|
||||
|
||||
function requireClass($className, $testDetails) {
|
||||
$this->testing($testDetails);
|
||||
if(!class_exists($className)) $this->error($testDetails);
|
||||
else return false;
|
||||
if (!class_exists($className)) {
|
||||
$this->error($testDetails);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -821,21 +823,22 @@ class InstallRequirements {
|
||||
function requireNoClasses($classNames, $testDetails) {
|
||||
$this->testing($testDetails);
|
||||
$badClasses = array();
|
||||
foreach($classNames as $className) {
|
||||
if(class_exists($className)) $badClasses[] = $className;
|
||||
foreach ($classNames as $className) {
|
||||
if (class_exists($className)) $badClasses[] = $className;
|
||||
}
|
||||
if($badClasses) {
|
||||
if ($badClasses) {
|
||||
$testDetails[2] .= ". The following classes are at fault: " . implode(', ', $badClasses);
|
||||
$this->error($testDetails);
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
else return true;
|
||||
}
|
||||
|
||||
function checkApacheVersion($testDetails) {
|
||||
$this->testing($testDetails);
|
||||
|
||||
$is1pointx = preg_match('#Apache[/ ]1\.#', $testDetails[3]);
|
||||
if($is1pointx) {
|
||||
if ($is1pointx) {
|
||||
$this->error($testDetails);
|
||||
}
|
||||
|
||||
@ -847,7 +850,7 @@ class InstallRequirements {
|
||||
|
||||
$installedVersion = phpversion();
|
||||
|
||||
if(version_compare($installedVersion, $requiredVersion, '<')) {
|
||||
if (version_compare($installedVersion, $requiredVersion, '<')) {
|
||||
$testDetails[2] = "SilverStripe requires PHP version $requiredVersion or later.\n
|
||||
PHP version $installedVersion is currently installed.\n
|
||||
While SilverStripe requires at least PHP version $requiredVersion, upgrading to $recommendedVersion or later is recommended.\n
|
||||
@ -856,7 +859,7 @@ class InstallRequirements {
|
||||
return;
|
||||
}
|
||||
|
||||
if(version_compare($installedVersion, $recommendedVersion, '<')) {
|
||||
if (version_compare($installedVersion, $recommendedVersion, '<')) {
|
||||
$testDetails[2] = "PHP version $installedVersion is currently installed.\n
|
||||
Upgrading to at least PHP version $recommendedVersion is recommended.\n
|
||||
SilverStripe should run, but you may run into issues. Future releases may require a later version of PHP.\n";
|
||||
@ -882,12 +885,12 @@ class InstallRequirements {
|
||||
function requireModule($dirname, $testDetails) {
|
||||
$this->testing($testDetails);
|
||||
$path = $this->getBaseDir() . $dirname;
|
||||
if(!file_exists($path)) {
|
||||
if (!file_exists($path)) {
|
||||
$testDetails[2] .= " Directory '$path' not found. Please make sure you have uploaded the SilverStripe files to your webserver correctly.";
|
||||
$this->error($testDetails);
|
||||
} elseif(!file_exists($path . '/_config.php') && $dirname != 'mysite') {
|
||||
} elseif (!file_exists($path . '/_config.php') && $dirname != 'mysite') {
|
||||
$testDetails[2] .= " Directory '$path' exists, but is missing files. Please make sure you have uploaded "
|
||||
. "the SilverStripe files to your webserver correctly.";
|
||||
. "the SilverStripe files to your webserver correctly.";
|
||||
$this->error($testDetails);
|
||||
}
|
||||
}
|
||||
@ -895,7 +898,7 @@ class InstallRequirements {
|
||||
function requireFile($filename, $testDetails) {
|
||||
$this->testing($testDetails);
|
||||
$filename = $this->getBaseDir() . $filename;
|
||||
if(!file_exists($filename)) {
|
||||
if (!file_exists($filename)) {
|
||||
$testDetails[2] .= " (file '$filename' not found)";
|
||||
$this->error($testDetails);
|
||||
}
|
||||
@ -904,44 +907,44 @@ class InstallRequirements {
|
||||
function requireWriteable($filename, $testDetails, $absolute = false) {
|
||||
$this->testing($testDetails);
|
||||
|
||||
if($absolute) {
|
||||
if ($absolute) {
|
||||
$filename = str_replace('/', DIRECTORY_SEPARATOR, $filename);
|
||||
} else {
|
||||
$filename = $this->getBaseDir() . str_replace('/', DIRECTORY_SEPARATOR, $filename);
|
||||
}
|
||||
|
||||
if(file_exists($filename)) $isWriteable = is_writeable($filename);
|
||||
if (file_exists($filename)) $isWriteable = is_writeable($filename);
|
||||
else $isWriteable = is_writeable(dirname($filename));
|
||||
|
||||
if(!$isWriteable) {
|
||||
if(function_exists('posix_getgroups')) {
|
||||
if (!$isWriteable) {
|
||||
if (function_exists('posix_getgroups')) {
|
||||
$userID = posix_geteuid();
|
||||
$user = posix_getpwuid($userID);
|
||||
|
||||
$currentOwnerID = fileowner(file_exists($filename) ? $filename : dirname($filename) );
|
||||
$currentOwnerID = fileowner(file_exists($filename) ? $filename : dirname($filename));
|
||||
$currentOwner = posix_getpwuid($currentOwnerID);
|
||||
|
||||
$testDetails[2] .= "User '$user[name]' needs to be able to write to this file:\n$filename\n\nThe "
|
||||
. "file is currently owned by '$currentOwner[name]'. ";
|
||||
. "file is currently owned by '$currentOwner[name]'. ";
|
||||
|
||||
if($user['name'] == $currentOwner['name']) {
|
||||
if ($user['name'] == $currentOwner['name']) {
|
||||
$testDetails[2] .= "We recommend that you make the file writeable.";
|
||||
} else {
|
||||
|
||||
$groups = posix_getgroups();
|
||||
$groupList = array();
|
||||
foreach($groups as $group) {
|
||||
foreach ($groups as $group) {
|
||||
$groupInfo = posix_getgrgid($group);
|
||||
if(in_array($currentOwner['name'], $groupInfo['members'])) $groupList[] = $groupInfo['name'];
|
||||
if (in_array($currentOwner['name'], $groupInfo['members'])) $groupList[] = $groupInfo['name'];
|
||||
}
|
||||
if($groupList) {
|
||||
if ($groupList) {
|
||||
$testDetails[2] .= " We recommend that you make the file group-writeable "
|
||||
. "and change the group to one of these groups:\n - ". implode("\n - ", $groupList)
|
||||
. "and change the group to one of these groups:\n - " . implode("\n - ", $groupList)
|
||||
. "\n\nFor example:\nchmod g+w $filename\nchgrp " . $groupList[0] . " $filename";
|
||||
} else {
|
||||
$testDetails[2] .= " There is no user-group that contains both the web-server user and the "
|
||||
. "owner of this file. Change the ownership of the file, create a new group, or "
|
||||
. "temporarily make the file writeable by everyone during the install process.";
|
||||
. "owner of this file. Change the ownership of the file, create a new group, or "
|
||||
. "temporarily make the file writeable by everyone during the install process.";
|
||||
}
|
||||
}
|
||||
|
||||
@ -958,19 +961,19 @@ class InstallRequirements {
|
||||
$worked = true;
|
||||
$ssTmp = "$sysTmp/silverstripe-cache";
|
||||
|
||||
if(!@file_exists($ssTmp)) {
|
||||
if (!@file_exists($ssTmp)) {
|
||||
$worked = @mkdir($ssTmp);
|
||||
}
|
||||
|
||||
if(!$worked) {
|
||||
if (!$worked) {
|
||||
$ssTmp = dirname($_SERVER['SCRIPT_FILENAME']) . '/silverstripe-cache';
|
||||
$worked = true;
|
||||
if(!@file_exists($ssTmp)) {
|
||||
if (!@file_exists($ssTmp)) {
|
||||
$worked = @mkdir($ssTmp);
|
||||
}
|
||||
}
|
||||
|
||||
if($worked) return $ssTmp;
|
||||
if ($worked) return $ssTmp;
|
||||
|
||||
return false;
|
||||
}
|
||||
@ -979,7 +982,7 @@ class InstallRequirements {
|
||||
$this->testing($testDetails);
|
||||
|
||||
$tempFolder = $this->getTempFolder();
|
||||
if(!$tempFolder) {
|
||||
if (!$tempFolder) {
|
||||
$testDetails[2] = "Permission problem gaining access to a temp directory. " .
|
||||
"Please create a folder named silverstripe-cache in the base directory " .
|
||||
"of the installation and ensure it has the adequate permissions.";
|
||||
@ -989,7 +992,7 @@ class InstallRequirements {
|
||||
|
||||
function requireApacheModule($moduleName, $testDetails) {
|
||||
$this->testing($testDetails);
|
||||
if(!in_array($moduleName, apache_get_modules())) {
|
||||
if (!in_array($moduleName, apache_get_modules())) {
|
||||
$this->error($testDetails);
|
||||
return false;
|
||||
} else {
|
||||
@ -998,9 +1001,9 @@ class InstallRequirements {
|
||||
}
|
||||
|
||||
function testApacheRewriteExists($moduleName = 'mod_rewrite') {
|
||||
if(function_exists('apache_get_modules') && in_array($moduleName, apache_get_modules())) {
|
||||
if (function_exists('apache_get_modules') && in_array($moduleName, apache_get_modules())) {
|
||||
return true;
|
||||
} elseif(isset($_SERVER['HTTP_MOD_REWRITE']) && $_SERVER['HTTP_MOD_REWRITE'] == 'On') {
|
||||
} elseif (isset($_SERVER['HTTP_MOD_REWRITE']) && $_SERVER['HTTP_MOD_REWRITE'] == 'On') {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
@ -1008,7 +1011,7 @@ class InstallRequirements {
|
||||
}
|
||||
|
||||
function testIISRewriteModuleExists($moduleName = 'IIS_UrlRewriteModule') {
|
||||
if(isset($_SERVER[$moduleName]) && $_SERVER[$moduleName]) {
|
||||
if (isset($_SERVER[$moduleName]) && $_SERVER[$moduleName]) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
@ -1017,7 +1020,7 @@ class InstallRequirements {
|
||||
|
||||
function requireApacheRewriteModule($moduleName, $testDetails) {
|
||||
$this->testing($testDetails);
|
||||
if($this->testApacheRewriteExists()) {
|
||||
if ($this->testApacheRewriteExists()) {
|
||||
return true;
|
||||
} else {
|
||||
$this->warning($testDetails);
|
||||
@ -1035,7 +1038,7 @@ class InstallRequirements {
|
||||
|
||||
function requireIISRewriteModule($moduleName, $testDetails) {
|
||||
$this->testing($testDetails);
|
||||
if($this->testIISRewriteModuleExists()) {
|
||||
if ($this->testIISRewriteModuleExists()) {
|
||||
return true;
|
||||
} else {
|
||||
$this->warning($testDetails);
|
||||
@ -1053,7 +1056,7 @@ class InstallRequirements {
|
||||
*/
|
||||
function getDatabaseConfigurationHelper($databaseClass) {
|
||||
$adapters = DatabaseAdapterRegistry::get_adapters();
|
||||
if(isset($adapters[$databaseClass])) {
|
||||
if (isset($adapters[$databaseClass])) {
|
||||
$helperPath = $adapters[$databaseClass]['helperPath'];
|
||||
$class = str_replace('.php', '', basename($helperPath));
|
||||
}
|
||||
@ -1064,7 +1067,7 @@ class InstallRequirements {
|
||||
$this->testing($testDetails);
|
||||
$helper = $this->getDatabaseConfigurationHelper($databaseConfig['type']);
|
||||
$result = $helper->requireDatabaseFunctions($databaseConfig);
|
||||
if($result) {
|
||||
if ($result) {
|
||||
return true;
|
||||
} else {
|
||||
$this->error($testDetails);
|
||||
@ -1076,7 +1079,7 @@ class InstallRequirements {
|
||||
$this->testing($testDetails);
|
||||
$helper = $this->getDatabaseConfigurationHelper($databaseConfig['type']);
|
||||
$result = $helper->requireDatabaseConnection($databaseConfig);
|
||||
if($result['success']) {
|
||||
if ($result['success']) {
|
||||
return true;
|
||||
} else {
|
||||
$testDetails[2] .= ": " . $result['error'];
|
||||
@ -1088,9 +1091,9 @@ class InstallRequirements {
|
||||
function requireDatabaseVersion($databaseConfig, $testDetails) {
|
||||
$this->testing($testDetails);
|
||||
$helper = $this->getDatabaseConfigurationHelper($databaseConfig['type']);
|
||||
if(method_exists($helper, 'requireDatabaseVersion')) {
|
||||
if (method_exists($helper, 'requireDatabaseVersion')) {
|
||||
$result = $helper->requireDatabaseVersion($databaseConfig);
|
||||
if($result['success']) {
|
||||
if ($result['success']) {
|
||||
return true;
|
||||
} else {
|
||||
$testDetails[2] .= $result['error'];
|
||||
@ -1106,7 +1109,7 @@ class InstallRequirements {
|
||||
$this->testing($testDetails);
|
||||
$helper = $this->getDatabaseConfigurationHelper($databaseConfig['type']);
|
||||
$result = $helper->requireDatabaseServer($databaseConfig);
|
||||
if($result['success']) {
|
||||
if ($result['success']) {
|
||||
return true;
|
||||
} else {
|
||||
$testDetails[2] .= ": " . $result['error'];
|
||||
@ -1119,13 +1122,13 @@ class InstallRequirements {
|
||||
$this->testing($testDetails);
|
||||
$helper = $this->getDatabaseConfigurationHelper($databaseConfig['type']);
|
||||
$result = $helper->requireDatabaseOrCreatePermissions($databaseConfig);
|
||||
if($result['success']) {
|
||||
if($result['alreadyExists']) $testDetails[3] = "Database $databaseConfig[database]";
|
||||
if ($result['success']) {
|
||||
if ($result['alreadyExists']) $testDetails[3] = "Database $databaseConfig[database]";
|
||||
else $testDetails[3] = "Able to create a new database";
|
||||
$this->testing($testDetails);
|
||||
return true;
|
||||
} else {
|
||||
if(!@$result['cannotCreate']) {
|
||||
if (!@$result['cannotCreate']) {
|
||||
$testDetails[2] .= ". Please create the database manually.";
|
||||
} else {
|
||||
$testDetails[2] .= " (user '$databaseConfig[username]' doesn't have CREATE DATABASE permissions.)";
|
||||
@ -1140,13 +1143,13 @@ class InstallRequirements {
|
||||
$this->testing($testDetails);
|
||||
$missing = array();
|
||||
|
||||
foreach($varNames as $varName) {
|
||||
if(!isset($_SERVER[$varName]) || !$_SERVER[$varName]) {
|
||||
foreach ($varNames as $varName) {
|
||||
if (!isset($_SERVER[$varName]) || !$_SERVER[$varName]) {
|
||||
$missing[] = '$_SERVER[' . $varName . ']';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(!$missing) {
|
||||
if (!$missing) {
|
||||
return true;
|
||||
} else {
|
||||
$testDetails[2] .= " (the following PHP variables are missing: " . implode(", ", $missing) . ")";
|
||||
@ -1158,7 +1161,7 @@ class InstallRequirements {
|
||||
function requirePostSupport($testDetails) {
|
||||
$this->testing($testDetails);
|
||||
|
||||
if(!isset($_POST)) {
|
||||
if (!isset($_POST)) {
|
||||
$this->error($testDetails);
|
||||
|
||||
return false;
|
||||
@ -1169,7 +1172,7 @@ class InstallRequirements {
|
||||
|
||||
function isRunningWebServer($testDetails) {
|
||||
$this->testing($testDetails);
|
||||
if($testDetails[3]) {
|
||||
if ($testDetails[3]) {
|
||||
return true;
|
||||
} else {
|
||||
$this->warning($testDetails);
|
||||
@ -1179,21 +1182,22 @@ class InstallRequirements {
|
||||
|
||||
// Must be PHP4 compatible
|
||||
var $baseDir;
|
||||
|
||||
function getBaseDir() {
|
||||
// Cache the value so that when the installer mucks with SCRIPT_FILENAME half way through, this method
|
||||
// still returns the correct value.
|
||||
if(!$this->baseDir) $this->baseDir = realpath(dirname($_SERVER['SCRIPT_FILENAME'])) . DIRECTORY_SEPARATOR;
|
||||
if (!$this->baseDir) $this->baseDir = realpath(dirname($_SERVER['SCRIPT_FILENAME'])) . DIRECTORY_SEPARATOR;
|
||||
return $this->baseDir;
|
||||
}
|
||||
|
||||
function testing($testDetails) {
|
||||
if(!$testDetails) return;
|
||||
if (!$testDetails) return;
|
||||
|
||||
$section = $testDetails[0];
|
||||
$test = $testDetails[1];
|
||||
|
||||
$message = "OK";
|
||||
if(isset($testDetails[3])) $message .= " ($testDetails[3])";
|
||||
if (isset($testDetails[3])) $message .= " ($testDetails[3])";
|
||||
|
||||
$this->tests[$section][$test] = array("good", $message);
|
||||
}
|
||||
@ -1231,19 +1235,20 @@ class Installer extends InstallRequirements {
|
||||
}
|
||||
|
||||
function install($config) {
|
||||
?>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>Installing SilverStripe...</title>
|
||||
<link rel="stylesheet" type="text/css" href="<?php echo FRAMEWORK_NAME; ?>/dev/install/css/install.css" />
|
||||
<script src="<?php echo FRAMEWORK_NAME; ?>/thirdparty/jquery/jquery.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
?>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8"/>
|
||||
<title>Installing SilverStripe...</title>
|
||||
<link rel="stylesheet" type="text/css" href="<?php echo FRAMEWORK_NAME; ?>/dev/install/css/install.css"/>
|
||||
<script src="<?php echo FRAMEWORK_NAME; ?>/thirdparty/jquery/jquery.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="install-header">
|
||||
<div class="inner">
|
||||
<div class="brand">
|
||||
<span class="logo"></span>
|
||||
|
||||
<h1>SilverStripe</h1>
|
||||
</div>
|
||||
</div>
|
||||
@ -1255,7 +1260,9 @@ class Installer extends InstallRequirements {
|
||||
<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
|
||||
@ -1266,8 +1273,8 @@ class Installer extends InstallRequirements {
|
||||
|
||||
flush();
|
||||
|
||||
if(isset($config['stats'])) {
|
||||
if(file_exists(FRAMEWORK_NAME . '/silverstripe_version')) {
|
||||
if (isset($config['stats'])) {
|
||||
if (file_exists(FRAMEWORK_NAME . '/silverstripe_version')) {
|
||||
$silverstripe_version = file_get_contents(FRAMEWORK_NAME . '/silverstripe_version');
|
||||
} else {
|
||||
$silverstripe_version = "unknown";
|
||||
@ -1280,20 +1287,20 @@ class Installer extends InstallRequirements {
|
||||
// Try to determine the database version from the helper
|
||||
$databaseVersion = $config['db']['type'];
|
||||
$helper = $this->getDatabaseConfigurationHelper($dbType);
|
||||
if($helper && method_exists($helper, 'getDatabaseVersion')) {
|
||||
if ($helper && method_exists($helper, 'getDatabaseVersion')) {
|
||||
$databaseVersion = urlencode($dbType . ': ' . $helper->getDatabaseVersion($config['db'][$dbType]));
|
||||
}
|
||||
|
||||
$url = "http://ss2stat.silverstripe.com/Installation/add?SilverStripe=$silverstripe_version&PHP=$phpVersion&Database=$databaseVersion&WebServer=$encWebserver";
|
||||
|
||||
if(isset($_SESSION['StatsID']) && $_SESSION['StatsID']) {
|
||||
if (isset($_SESSION['StatsID']) && $_SESSION['StatsID']) {
|
||||
$url .= '&ID=' . $_SESSION['StatsID'];
|
||||
}
|
||||
|
||||
@$_SESSION['StatsID'] = file_get_contents($url);
|
||||
}
|
||||
|
||||
if(file_exists('mysite/_config.php')) {
|
||||
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');
|
||||
@ -1306,8 +1313,8 @@ class Installer extends InstallRequirements {
|
||||
$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) {
|
||||
if (!isset($dbConfig['path'])) $dbConfig['path'] = '';
|
||||
if (!$dbConfig) {
|
||||
echo "<p style=\"color: red\">Bad config submitted</p><pre>";
|
||||
print_r($config);
|
||||
echo "</pre>";
|
||||
@ -1316,7 +1323,7 @@ class Installer extends InstallRequirements {
|
||||
|
||||
// Write the config file
|
||||
global $usingEnv;
|
||||
if($usingEnv) {
|
||||
if ($usingEnv) {
|
||||
|
||||
$this->statusMessage("Setting up 'mysite/_config.php' for use with _ss_environment.php...");
|
||||
$this->writeToFile("mysite/_config.php", <<<PHP
|
||||
@ -1376,11 +1383,11 @@ PHP
|
||||
}
|
||||
|
||||
// Write the appropriate web server configuration file for rewriting support
|
||||
if($this->hasRewritingCapability()) {
|
||||
if($isApache) {
|
||||
if ($this->hasRewritingCapability()) {
|
||||
if ($isApache) {
|
||||
$this->statusMessage("Setting up '.htaccess' file...");
|
||||
$this->createHtaccess();
|
||||
} elseif($isIIS) {
|
||||
} elseif ($isIIS) {
|
||||
$this->statusMessage("Setting up 'web.config' file...");
|
||||
$this->createWebConfig();
|
||||
}
|
||||
@ -1421,7 +1428,7 @@ PHP
|
||||
try {
|
||||
$this->statusMessage('Creating default CMS admin account...');
|
||||
$adminMember->write();
|
||||
} catch(Exception $e) {
|
||||
} catch (Exception $e) {
|
||||
$this->statusMessage(
|
||||
sprintf('Warning: Default CMS admin account could not be created (error: %s)', $e->getMessage())
|
||||
);
|
||||
@ -1432,7 +1439,7 @@ PHP
|
||||
try {
|
||||
$this->statusMessage('Creating initial filesystem assets...');
|
||||
Filesystem::sync();
|
||||
} catch(Exception $e) {
|
||||
} catch (Exception $e) {
|
||||
$this->statusMessage(
|
||||
sprintf('Warning: Creating initial filesystem assets failed (error: %s)', $e->getMessage())
|
||||
);
|
||||
@ -1441,8 +1448,8 @@ PHP
|
||||
$_SESSION['username'] = $config['admin']['username'];
|
||||
$_SESSION['password'] = $config['admin']['password'];
|
||||
|
||||
if(!$this->errors) {
|
||||
if(isset($_SERVER['HTTP_HOST']) && $this->hasRewritingCapability()) {
|
||||
if (!$this->errors) {
|
||||
if (isset($_SERVER['HTTP_HOST']) && $this->hasRewritingCapability()) {
|
||||
$this->statusMessage("Checking that friendly URLs work...");
|
||||
$this->checkRewrite();
|
||||
} else {
|
||||
@ -1474,7 +1481,7 @@ HTML;
|
||||
$base = $this->getBaseDir();
|
||||
$this->statusMessage("Setting up $base$filename");
|
||||
|
||||
if((@$fh = fopen($base . $filename, 'wb')) && fwrite($fh, $content) && fclose($fh)) {
|
||||
if ((@$fh = fopen($base . $filename, 'wb')) && fwrite($fh, $content) && fclose($fh)) {
|
||||
return true;
|
||||
} else {
|
||||
$this->error("Couldn't write to file $base$filename");
|
||||
@ -1486,10 +1493,10 @@ HTML;
|
||||
$end = "\n### SILVERSTRIPE END ###";
|
||||
|
||||
$base = dirname($_SERVER['SCRIPT_NAME']);
|
||||
if(defined('DIRECTORY_SEPARATOR')) $base = str_replace(DIRECTORY_SEPARATOR, '/', $base);
|
||||
if (defined('DIRECTORY_SEPARATOR')) $base = str_replace(DIRECTORY_SEPARATOR, '/', $base);
|
||||
else $base = str_replace("\\", '/', $base);
|
||||
|
||||
if($base != '.') $baseClause = "RewriteBase '$base'\n";
|
||||
if ($base != '.') $baseClause = "RewriteBase '$base'\n";
|
||||
else $baseClause = "";
|
||||
$modulePath = FRAMEWORK_NAME;
|
||||
$rewrite = <<<TEXT
|
||||
@ -1530,14 +1537,14 @@ ErrorDocument 500 /assets/error-500.html
|
||||
</IfModule>
|
||||
TEXT;
|
||||
|
||||
if(file_exists('.htaccess')) {
|
||||
if (file_exists('.htaccess')) {
|
||||
$htaccess = file_get_contents('.htaccess');
|
||||
|
||||
if(strpos($htaccess, '### SILVERSTRIPE START ###') === false && strpos($htaccess, '### SILVERSTRIPE END ###') === false) {
|
||||
if (strpos($htaccess, '### SILVERSTRIPE START ###') === false && strpos($htaccess, '### SILVERSTRIPE END ###') === false) {
|
||||
$htaccess .= "\n### SILVERSTRIPE START ###\n### SILVERSTRIPE END ###\n";
|
||||
}
|
||||
|
||||
if(strpos($htaccess, '### SILVERSTRIPE START ###') !== false && strpos($htaccess, '### SILVERSTRIPE END ###') !== false) {
|
||||
if (strpos($htaccess, '### SILVERSTRIPE START ###') !== false && strpos($htaccess, '### SILVERSTRIPE END ###') !== false) {
|
||||
$start = substr($htaccess, 0, strpos($htaccess, '### SILVERSTRIPE START ###')) . "### SILVERSTRIPE START ###\n";
|
||||
$end = "\n" . substr($htaccess, strpos($htaccess, '### SILVERSTRIPE END ###'));
|
||||
}
|
||||
@ -1635,7 +1642,7 @@ HTML;
|
||||
|
||||
function var_export_array_nokeys($array) {
|
||||
$retval = "array(\n";
|
||||
foreach($array as $item) {
|
||||
foreach ($array as $item) {
|
||||
$retval .= "\t'";
|
||||
$retval .= trim($item);
|
||||
$retval .= "',\n";
|
||||
|
Loading…
Reference in New Issue
Block a user