diff --git a/_register_database.php b/_register_database.php index eecb487bc..ea68b83ab 100644 --- a/_register_database.php +++ b/_register_database.php @@ -1,11 +1,13 @@ 'MySQLDatabase', 'title' => 'MySQL 5.0+', - 'helperPath' => FRAMEWORK_PATH . '/dev/install/MySQLDatabaseConfigurationHelper.php', + 'helperPath' => $frameworkPath . '/dev/install/MySQLDatabaseConfigurationHelper.php', 'supported' => function_exists('mysql_connect'), ) ); diff --git a/core/Core.php b/core/Core.php index ce9ad15f8..57632b827 100644 --- a/core/Core.php +++ b/core/Core.php @@ -327,6 +327,14 @@ function getTempFolder($base = null) { } } + if(!$worked) { + throw new Exception( + 'Permission problem gaining access to a temp folder. ' . + 'Please create a folder named silverstripe-cache in the base folder ' . + 'of the installation and ensure it has the correct permissions' + ); + } + return $ssTmp; } diff --git a/dev/install/install.php5 b/dev/install/install.php5 index 3283ac1f5..1175f107f 100644 --- a/dev/install/install.php5 +++ b/dev/install/install.php5 @@ -19,6 +19,8 @@ ini_set('mysql.connect_timeout', 5); ini_set('max_execution_time', 0); +error_reporting(E_ALL | E_STRICT); + // Include environment files $usingEnv = false; $envFileExists = false; @@ -40,21 +42,95 @@ if($envFileExists) { } } -// include the core of the framework, we need this for dependencies like i18n, include paths etc -include_once(FRAMEWORK_NAME . '/core/Core.php'); +require_once FRAMEWORK_NAME . '/dev/install/DatabaseConfigurationHelper.php'; +require_once FRAMEWORK_NAME . '/dev/install/DatabaseAdapterRegistry.php'; // Set default locale, but try and sniff from the user agent -$locales = i18n::$common_locales; -$defaultLocale = i18n::get_locale(); -if(isset($_SERVER['HTTP_USER_AGENT'])) { - foreach($locales as $code => $details) { - $bits = explode('_', $code); - if(preg_match("/{$bits[0]}.{$bits[1]}/", $_SERVER['HTTP_USER_AGENT'])) { - $defaultLocale = $code; - break; - } - } -} +$defaultLocale = 'en_US'; +$locales = array( + 'af_ZA' => array('Afrikaans', 'Afrikaans'), + 'sq_AL' => array('Albanian', 'shqip'), + 'ar_EG' => array('Arabic', 'العربية'), + 'eu_ES' => array('Basque', 'euskera'), + 'be_BY' => array('Belarusian', 'Беларуская мова'), + 'bn_BD' => array('Bengali', 'বাংলা'), + 'bg_BG' => array('Bulgarian', 'български'), + 'ca_ES' => array('Catalan', 'català'), + 'zh_yue' => array('Chinese (Cantonese)', '廣東話 [广东话]'), + 'zh_cmn' => array('Chinese (Mandarin)', '普通話 [普通话]'), + 'hr_HR' => array('Croatian', 'Hrvatski'), + 'cs_CZ' => array('Czech', 'čeština'), + 'cy_GB' => array('Welsh', 'Welsh/Cymraeg'), + 'da_DK' => array('Danish', 'dansk'), + 'nl_NL' => array('Dutch', 'Nederlands'), + 'en_NZ' => array('English (NZ)', 'English (NZ)'), + 'en_US' => array('English (US)', 'English (US)'), + 'en_GB' => array('English (UK)', 'English (UK)'), + 'eo_XX' => array('Esperanto', 'Esperanto'), + 'et_EE' => array('Estonian', 'eesti keel'), + 'fo_FO' => array('Faroese', 'Føroyska'), + 'fi_FI' => array('Finnish', 'suomi'), + 'fr_FR' => array('French', 'français'), + 'gd_GB' => array('Gaelic', 'Gaeilge'), + 'gl_ES' => array('Galician', 'Galego'), + 'de_DE' => array('German', 'Deutsch'), + 'el_GR' => array('Greek', 'ελληνικά'), + 'gu_IN' => array('Gujarati', 'ગુજરાતી'), + 'ha_NG' => array('Hausa', 'حَوْسَ'), + 'he_IL' => array('Hebrew', 'עברית'), + 'hi_IN' => array('Hindi', 'हिन्दी'), + 'hu_HU' => array('Hungarian', 'magyar'), + 'is_IS' => array('Icelandic', 'Íslenska'), + 'id_ID' => array('Indonesian', 'Bahasa Indonesia'), + 'ga_IE' => array('Irish', 'Irish'), + 'it_IT' => array('Italian', 'italiano'), + 'ja_JP' => array('Japanese', '日本語'), + 'jv_ID' => array('Javanese', 'basa Jawa'), + 'ko_KR' => array('Korean', '한국어 [韓國語]'), + 'ku_IQ' => array('Kurdish', 'Kurdí'), + 'lv_LV' => array('Latvian', 'latviešu'), + 'lt_LT' => array('Lithuanian', 'lietuviškai'), + 'mk_MK' => array('Macedonian', 'македонски'), + 'mi_NZ' => array('Maori', 'Maori'), + 'ms_MY' => array('Malay', 'Bahasa melayu'), + 'mt_MT' => array('Maltese', 'Malti'), + 'mr_IN' => array('Marathi', 'मराठी'), + 'ne_NP' => array('Nepali', 'नेपाली'), + 'nb_NO' => array('Norwegian', 'Norsk'), + 'om_ET' => array('Oromo', 'Afaan Oromo'), + 'fa_IR' => array('Persian', 'فارسى'), + 'pl_PL' => array('Polish', 'polski'), + 'pt_PT' => array('Portuguese (Portugal)', 'português (Portugal)'), + 'pt_BR' => array('Portuguese (Brazil)', 'português (Brazil)'), + 'pa_IN' => array('Punjabi', 'ਪੰਜਾਬੀ'), + 'qu_PE' => array('Quechua', 'Quechua'), + 'rm_CH' => array('Romansh', 'rumantsch'), + 'ro_RO' => array('Romanian', 'român'), + 'ru_RU' => array('Russian', 'Русский'), + 'sco_SCO' => array('Scots', 'Scoats leid, Lallans'), + 'sr_RS' => array('Serbian', 'српски'), + 'sk_SK' => array('Slovak', 'slovenčina'), + 'sl_SI' => array('Slovenian', 'slovenščina'), + 'es_ES' => array('Spanish', 'español'), + 'sv_SE' => array('Swedish', 'Svenska'), + 'tl_PH' => array('Tagalog', 'Tagalog'), + 'ta_IN' => array('Tamil', 'தமிழ்'), + 'te_IN' => array('Telugu', 'తెలుగు'), + 'to_TO' => array('Tonga', 'chiTonga'), + 'ts_ZA' => array('Tsonga', 'xiTshonga'), + 'tn_ZA' => array('Tswana', 'seTswana'), + 'tr_TR' => array('Turkish', 'Türkçe'), + 'tk_TM' => array('Turkmen', 'түркmенче'), + 'tw_GH' => array('Twi', 'twi'), + 'uk_UA' => array('Ukrainian', 'Українська'), + 'ur_PK' => array('Urdu', 'اردو'), + 'uz_UZ' => array('Uzbek', 'ўзбек'), + 've_ZA' => array('Venda', 'tshiVenḓa'), + 'vi_VN' => array('Vietnamese', 'tiếng việt'), + 'wo_SN' => array('Wolof', 'Wollof'), + 'xh_ZA' => array('Xhosa', 'isiXhosa'), + 'zu_ZA' => array('Zulu', 'isiZulu'), +); // Discover which databases are available DatabaseAdapterRegistry::autodiscover(); @@ -339,7 +415,7 @@ class InstallRequirements { } $this->requireWriteable('assets', array("File permissions", "Is the assets/ directory writeable?", null)); - $tempFolder = getTempFolder(); + $tempFolder = $this->getTempFolder(); $this->requireTempFolder(array('File permissions', 'Is a temporary directory available?', null, $tempFolder)); if($tempFolder) { // in addition to the temp folder being available, check it is writable @@ -653,14 +729,36 @@ class InstallRequirements { } } + function getTempFolder() { + $sysTmp = sys_get_temp_dir(); + $worked = true; + $ssTmp = "$sysTmp/silverstripe-cache"; + + if(!@file_exists($ssTmp)) { + @$worked = mkdir($ssTmp); + } + + if(!$worked) { + $ssTmp = dirname($_SERVER['SCRIPT_FILENAME']) . '/silverstripe-cache'; + $worked = true; + if(!@file_exists($ssTmp)) { + @$worked = mkdir($ssTmp); + } + } + + if($worked) return $ssTmp; + + return false; + } + function requireTempFolder($testDetails) { $this->testing($testDetails); - $tempFolder = getTempFolder(); + $tempFolder = $this->getTempFolder(); 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"; + "of the installation and ensure it has the adequate permissions."; $this->error($testDetails); } } @@ -1071,6 +1169,8 @@ PHP $this->statusMessage("Building database schema..."); + require_once 'core/Core.php'; + // Build database $con = new Controller(); $con->pushCurrent();