diff --git a/main/install/install.lib.php b/main/install/install.lib.php index dd78704f4b..f1ba6063dc 100644 --- a/main/install/install.lib.php +++ b/main/install/install.lib.php @@ -27,25 +27,25 @@ define('SYSTEM_CONFIG_FILENAME', 'configuration.dist.php'); * @author Ivan Tcholakov, 2010; */ function is_already_installed_system() { - global $new_version; + global $new_version; - if (empty($new_version)) { - return true; // Must be initialized. - } + if (empty($new_version)) { + return true; // Must be initialized. + } - $current_config_file = api_get_path(CONFIGURATION_PATH).'configuration.php'; - if (!file_exists($current_config_file)) { - return false; // Configuration file does not exist, install the system. - } - require $current_config_file; + $current_config_file = api_get_path(CONFIGURATION_PATH).'configuration.php'; + if (!file_exists($current_config_file)) { + return false; // Configuration file does not exist, install the system. + } + require $current_config_file; - $current_version = trim($_configuration['dokeos_version']); - if (empty($current_version)) { - $current_version = trim($_configuration['system_version']); - } + $current_version = trim($_configuration['dokeos_version']); + if (empty($current_version)) { + $current_version = trim($_configuration['system_version']); + } - // If the current version is old, upgrading is assumed, the installer goes ahead. - return empty($current_version) ? false : version_compare($current_version, $new_version, '>='); + // If the current version is old, upgrading is assumed, the installer goes ahead. + return empty($current_version) ? false : version_compare($current_version, $new_version, '>='); } /** @@ -62,15 +62,15 @@ function is_already_installed_system() { * @version Dokeos 1.8.1, May 2007 */ function check_extension($extension_name, $return_success = 'Yes', $return_failure = 'No', $optional = false) { - if (extension_loaded($extension_name)) { - return ''.$return_success.''; - } else { - if ($optional) { - return ''.$return_failure.''; - } else { - return ''.$return_failure.''; - } - } + if (extension_loaded($extension_name)) { + return ''.$return_success.''; + } else { + if ($optional) { + return ''.$return_failure.''; + } else { + return ''.$return_failure.''; + } + } } /** @@ -80,12 +80,12 @@ function check_extension($extension_name, $return_success = 'Yes', $return_failu * @version Dokeos 1.8, august 2006 */ function check_php_setting($php_setting, $recommended_value, $return_success = false, $return_failure = false) { - $current_php_value = get_php_setting($php_setting); - if ($current_php_value == $recommended_value) { - return ''.$current_php_value.' '.$return_success.''; - } else { - return ''.$current_php_value.' '.$return_failure.''; - } + $current_php_value = get_php_setting($php_setting); + if ($current_php_value == $recommended_value) { + return ''.$current_php_value.' '.$return_success.''; + } else { + return ''.$current_php_value.' '.$return_failure.''; + } } /** @@ -96,7 +96,7 @@ function check_php_setting($php_setting, $recommended_value, $return_success = f * @author Joomla */ function get_php_setting($val) { - return ini_get($val) == '1' ? 'ON' : 'OFF'; + return ini_get($val) == '1' ? 'ON' : 'OFF'; } /** @@ -107,19 +107,19 @@ function get_php_setting($val) { * @author Christophe Gesché */ function true_false($var) { - return $var ? 'true' : 'false'; + return $var ? 'true' : 'false'; } /** * Removes memory and time limits as much as possible. */ function remove_memory_and_time_limits() { - if (function_exists('ini_set')) { - ini_set('memory_limit', -1); - ini_set('max_execution_time', 0); - } else { - error_log('Update-db script: could not change memory and time limits', 0); - } + if (function_exists('ini_set')) { + ini_set('memory_limit', -1); + ini_set('max_execution_time', 0); + } else { + error_log('Update-db script: could not change memory and time limits', 0); + } } /** @@ -128,83 +128,83 @@ function remove_memory_and_time_limits() { * @author Ivan Tcholakov, 2010 */ function detect_browser_language() { - static $language_index = array( - 'ar' => 'arabic', - 'ast' => 'asturian', - 'bg' => 'bulgarian', - 'bs' => 'bosnian', - 'ca' => 'catalan', - 'zh' => 'simpl_chinese', - 'zh-tw' => 'trad_chinese', - 'cs' => 'czech', - 'da' => 'danish', - 'prs' => 'dari', - 'de' => 'german', - 'el' => 'greek', - 'en' => 'english', - 'es' => 'spanish', - 'eo' => 'esperanto', - 'eu' => 'euskera', - 'fa' => 'persian', - 'fr' => 'french', - 'fur' => 'friulian', - 'gl' => 'galician', - 'ka' => 'georgian', - 'hr' => 'croatian', - 'he' => 'hebrew', - 'id' => 'indonesian', - 'it' => 'italian', - 'ko' => 'korean', - 'lv' => 'latvian', - 'lt' => 'lithuanian', - 'mk' => 'macedonian', - 'hu' => 'hungarian', - 'ms' => 'malay', - 'nl' => 'dutch', - 'ja' => 'japanese', - 'no' => 'norwegian', - 'oc' => 'occitan', - 'ps' => 'pashto', - 'pl' => 'polish', - 'pt' => 'portuguese', - 'pt-br' => 'brazilian', - 'ro' => 'romanian', - 'qu' => 'quechua_cusco', - 'ru' => 'russian', - 'sk' => 'slovak', - 'sl' => 'slovenian', - 'sr' => 'serbian', - 'fi' => 'finnish', - 'sv' => 'swedish', - 'th' => 'thai', - 'tr' => 'turkce', - 'uk' => 'ukrainian', - 'vi' => 'vietnamese', - 'sw' => 'swahili', - 'yo' => 'yoruba' - ); - - $system_available_languages = & get_language_folder_list(); - - $accept_languages = strtolower(str_replace('_', '-', $_SERVER['HTTP_ACCEPT_LANGUAGE'])); - foreach ($language_index as $code => $language) { - if (strpos($accept_languages, $code) === 0) { - if (!empty($system_available_languages[$language])) { - return $language; - } - } - } - - $user_agent = strtolower(str_replace('_', '-', $_SERVER['HTTP_USER_AGENT'])); - foreach ($language_index as $code => $language) { - if (preg_match("/[[( ]{$code}[;,_-)]/", $user_agent)) { - if (!empty($system_available_languages[$language])) { - return $language; - } - } - } - - return 'english'; + static $language_index = array( + 'ar' => 'arabic', + 'ast' => 'asturian', + 'bg' => 'bulgarian', + 'bs' => 'bosnian', + 'ca' => 'catalan', + 'zh' => 'simpl_chinese', + 'zh-tw' => 'trad_chinese', + 'cs' => 'czech', + 'da' => 'danish', + 'prs' => 'dari', + 'de' => 'german', + 'el' => 'greek', + 'en' => 'english', + 'es' => 'spanish', + 'eo' => 'esperanto', + 'eu' => 'euskera', + 'fa' => 'persian', + 'fr' => 'french', + 'fur' => 'friulian', + 'gl' => 'galician', + 'ka' => 'georgian', + 'hr' => 'croatian', + 'he' => 'hebrew', + 'id' => 'indonesian', + 'it' => 'italian', + 'ko' => 'korean', + 'lv' => 'latvian', + 'lt' => 'lithuanian', + 'mk' => 'macedonian', + 'hu' => 'hungarian', + 'ms' => 'malay', + 'nl' => 'dutch', + 'ja' => 'japanese', + 'no' => 'norwegian', + 'oc' => 'occitan', + 'ps' => 'pashto', + 'pl' => 'polish', + 'pt' => 'portuguese', + 'pt-br' => 'brazilian', + 'ro' => 'romanian', + 'qu' => 'quechua_cusco', + 'ru' => 'russian', + 'sk' => 'slovak', + 'sl' => 'slovenian', + 'sr' => 'serbian', + 'fi' => 'finnish', + 'sv' => 'swedish', + 'th' => 'thai', + 'tr' => 'turkce', + 'uk' => 'ukrainian', + 'vi' => 'vietnamese', + 'sw' => 'swahili', + 'yo' => 'yoruba' + ); + + $system_available_languages = & get_language_folder_list(); + + $accept_languages = strtolower(str_replace('_', '-', $_SERVER['HTTP_ACCEPT_LANGUAGE'])); + foreach ($language_index as $code => $language) { + if (strpos($accept_languages, $code) === 0) { + if (!empty($system_available_languages[$language])) { + return $language; + } + } + } + + $user_agent = strtolower(str_replace('_', '-', $_SERVER['HTTP_USER_AGENT'])); + foreach ($language_index as $code => $language) { + if (preg_match("/[[( ]{$code}[;,_-)]/", $user_agent)) { + if (!empty($system_available_languages[$language])) { + return $language; + } + } + } + + return 'english'; } @@ -214,15 +214,15 @@ function detect_browser_language() { * This function checks if the given folder is writable */ function check_writable($folder, $suggestion = false) { - if (is_writable(api_get_path(SYS_CODE_PATH).$folder)) { - return ''.get_lang('Writable').''; - } else { - if ($suggestion) { - return ''.get_lang('NotWritable').''; - } else { - return ''.get_lang('NotWritable').''; - } - } + if (is_writable(api_get_path(SYS_CODE_PATH).$folder)) { + return ''.get_lang('Writable').''; + } else { + if ($suggestion) { + return ''.get_lang('NotWritable').''; + } else { + return ''.get_lang('NotWritable').''; + } + } } /** @@ -232,19 +232,19 @@ function check_writable($folder, $suggestion = false) { * @return array The lines of the file returned as an array */ function file_to_array($filename) { - $fp = fopen($filename, 'rb'); - $buffer = fread($fp, filesize($filename)); - fclose($fp); - return explode('
', nl2br($buffer)); + $fp = fopen($filename, 'rb'); + $buffer = fread($fp, filesize($filename)); + fclose($fp); + return explode('
', nl2br($buffer)); } /** * We assume this function is called from install scripts that reside inside the install folder. */ function set_file_folder_permissions() { - @chmod('.', 0755); //set permissions on install dir - @chmod('..', 0755); //set permissions on parent dir of install dir - @chmod('country_data.csv.csv', 0755); + @chmod('.', 0755); //set permissions on install dir + @chmod('..', 0755); //set permissions on parent dir of install dir + @chmod('country_data.csv.csv', 0755); } /** @@ -252,14 +252,14 @@ function set_file_folder_permissions() { * @param string $url_append The path from your webroot to your chamilo root */ function write_courses_htaccess_file($url_append) { - $content = file_get_contents(dirname(__FILE__).'/'.COURSES_HTACCESS_FILENAME); - $content = str_replace('{CHAMILO_URL_APPEND_PATH}', $url_append, $content); - $fp = @ fopen(api_get_path(SYS_PATH).'courses/.htaccess', 'w'); - if ($fp) { - fwrite($fp, $content); - return fclose($fp); - } - return false; + $content = file_get_contents(dirname(__FILE__).'/'.COURSES_HTACCESS_FILENAME); + $content = str_replace('{CHAMILO_URL_APPEND_PATH}', $url_append, $content); + $fp = @ fopen(api_get_path(SYS_PATH).'courses/.htaccess', 'w'); + if ($fp) { + fwrite($fp, $content); + return fclose($fp); + } + return false; } /** @@ -268,125 +268,125 @@ function write_courses_htaccess_file($url_append) { */ function write_system_config_file($path) { - global $dbHostForm; - global $dbUsernameForm; - global $dbPassForm; - global $enableTrackingForm; - global $singleDbForm; - global $dbPrefixForm; - global $dbNameForm; - global $dbStatsForm; - global $dbScormForm; - global $dbUserForm; - global $urlForm; - global $pathForm; - global $urlAppendPath; - global $languageForm; - global $encryptPassForm; - global $installType; - global $updatePath; - global $session_lifetime; - global $new_version; - global $new_version_stable; - - $root_sys = api_add_trailing_slash(str_replace('\\', '/', realpath($pathForm))); - $content = file_get_contents(dirname(__FILE__).'/'.SYSTEM_CONFIG_FILENAME); - - $config['{DATE_GENERATED}'] = date('r'); - $config['{DATABASE_HOST}'] = $dbHostForm; - $config['{DATABASE_USER}'] = $dbUsernameForm; - $config['{DATABASE_PASSWORD}'] = $dbPassForm; - $config['TRACKING_ENABLED'] = true_false($enableTrackingForm); - $config['SINGLE_DATABASE'] = true_false($singleDbForm); - $config['{COURSE_TABLE_PREFIX}'] = ($singleDbForm ? 'crs_' : ''); - $config['{DATABASE_GLUE}'] = ($singleDbForm ? '_' : '`.`'); - $config['{DATABASE_PREFIX}'] = $dbPrefixForm; - $config['{DATABASE_MAIN}'] = $dbNameForm; - $config['{DATABASE_STATS}'] = (($singleDbForm && empty($dbStatsForm)) ? $dbNameForm : $dbStatsForm); - $config['{DATABASE_SCORM}'] = (($singleDbForm && empty($dbScormForm)) ? $dbNameForm : $dbScormForm); - $config['{DATABASE_PERSONAL}'] =(($singleDbForm && empty($dbUserForm)) ? $dbNameForm : $dbUserForm); - $config['{ROOT_WEB}'] = $urlForm; - $config['{ROOT_SYS}'] = $root_sys; - $config['{URL_APPEND_PATH}'] = $urlAppendPath; - $config['{PLATFORM_LANGUAGE}'] = $languageForm; - $config['{SECURITY_KEY}'] = md5(uniqid(rand().time())); - $config['{ENCRYPT_PASSWORD}'] = $encryptPassForm; - - $config['SESSION_LIFETIME'] = $session_lifetime; - $config['{NEW_VERSION}'] = $new_version; - $config['NEW_VERSION_STABLE'] = true_false($new_version_stable); - - foreach ($config as $key => $value) { - $content = str_replace($key, $value, $content); - } - - $fp = @ fopen($path, 'w'); - - if (!$fp) { - echo 'Your script doesn\'t have write access to the config directory
- ('.str_replace('\\', '/', realpath($path)).')

- You probably do not have write access on Chamilo root directory, - i.e. you should CHMOD 777 or 755 or 775.

- Your problems can be related on two possible causes:
- - Read about this problem in Support Forum

- Please go back to step 5. -

- '; - exit (); - } - - fwrite($fp, $content); - fclose($fp); + global $dbHostForm; + global $dbUsernameForm; + global $dbPassForm; + global $enableTrackingForm; + global $singleDbForm; + global $dbPrefixForm; + global $dbNameForm; + global $dbStatsForm; + global $dbScormForm; + global $dbUserForm; + global $urlForm; + global $pathForm; + global $urlAppendPath; + global $languageForm; + global $encryptPassForm; + global $installType; + global $updatePath; + global $session_lifetime; + global $new_version; + global $new_version_stable; + + $root_sys = api_add_trailing_slash(str_replace('\\', '/', realpath($pathForm))); + $content = file_get_contents(dirname(__FILE__).'/'.SYSTEM_CONFIG_FILENAME); + + $config['{DATE_GENERATED}'] = date('r'); + $config['{DATABASE_HOST}'] = $dbHostForm; + $config['{DATABASE_USER}'] = $dbUsernameForm; + $config['{DATABASE_PASSWORD}'] = $dbPassForm; + $config['TRACKING_ENABLED'] = true_false($enableTrackingForm); + $config['SINGLE_DATABASE'] = true_false($singleDbForm); + $config['{COURSE_TABLE_PREFIX}'] = ($singleDbForm ? 'crs_' : ''); + $config['{DATABASE_GLUE}'] = ($singleDbForm ? '_' : '`.`'); + $config['{DATABASE_PREFIX}'] = $dbPrefixForm; + $config['{DATABASE_MAIN}'] = $dbNameForm; + $config['{DATABASE_STATS}'] = (($singleDbForm && empty($dbStatsForm)) ? $dbNameForm : $dbStatsForm); + $config['{DATABASE_SCORM}'] = (($singleDbForm && empty($dbScormForm)) ? $dbNameForm : $dbScormForm); + $config['{DATABASE_PERSONAL}'] =(($singleDbForm && empty($dbUserForm)) ? $dbNameForm : $dbUserForm); + $config['{ROOT_WEB}'] = $urlForm; + $config['{ROOT_SYS}'] = $root_sys; + $config['{URL_APPEND_PATH}'] = $urlAppendPath; + $config['{PLATFORM_LANGUAGE}'] = $languageForm; + $config['{SECURITY_KEY}'] = md5(uniqid(rand().time())); + $config['{ENCRYPT_PASSWORD}'] = $encryptPassForm; + + $config['SESSION_LIFETIME'] = $session_lifetime; + $config['{NEW_VERSION}'] = $new_version; + $config['NEW_VERSION_STABLE'] = true_false($new_version_stable); + + foreach ($config as $key => $value) { + $content = str_replace($key, $value, $content); + } + + $fp = @ fopen($path, 'w'); + + if (!$fp) { + echo 'Your script doesn\'t have write access to the config directory
+ ('.str_replace('\\', '/', realpath($path)).')

+ You probably do not have write access on Chamilo root directory, + i.e. you should CHMOD 777 or 755 or 775.

+ Your problems can be related on two possible causes:
+ + Read about this problem in Support Forum

+ Please go back to step 5. +

+ '; + exit (); + } + + fwrite($fp, $content); + fclose($fp); } /** * Returns a list of language directories. */ function & get_language_folder_list() { - static $result; - if (!is_array($result)) { - $result = array(); - $exceptions = array('.', '..', 'CVS', '.svn'); - $search = array('_latin', '_unicode', '_corporate', '_org' , '_KM', '_'); - $replace_with = array(' (Latin)', ' (unicode)', ' (corporate)', ' (org)', ' (KM)', ' '); - $dirname = api_get_path(SYS_LANG_PATH); - $handle = opendir($dirname); - while ($entries = readdir($handle)) { - if (in_array($entries, $exceptions)) { - continue; - } - if (is_dir($dirname.$entries)) { - $result[$entries] = ucwords(str_replace($search, $replace_with, $entries)); - } - } - closedir($handle); - asort($result); - } - return $result; + static $result; + if (!is_array($result)) { + $result = array(); + $exceptions = array('.', '..', 'CVS', '.svn'); + $search = array('_latin', '_unicode', '_corporate', '_org' , '_KM', '_'); + $replace_with = array(' (Latin)', ' (unicode)', ' (corporate)', ' (org)', ' (KM)', ' '); + $dirname = api_get_path(SYS_LANG_PATH); + $handle = opendir($dirname); + while ($entries = readdir($handle)) { + if (in_array($entries, $exceptions)) { + continue; + } + if (is_dir($dirname.$entries)) { + $result[$entries] = ucwords(str_replace($search, $replace_with, $entries)); + } + } + closedir($handle); + asort($result); + } + return $result; } /** * TODO: my_directory_to_array() - maybe within the main API there is already a suitable function? */ function my_directory_to_array($directory) { - $array_items = array(); - if ($handle = opendir($directory)) { - while (false !== ($file = readdir($handle))) { - if ($file != "." && $file != "..") { - if (is_dir($directory. "/" . $file)) { - $array_items = array_merge($array_items, my_directory_to_array($directory. '/' . $file)); - $file = $directory . "/" . $file; - $array_items[] = preg_replace("/\/\//si", '/', $file); - } - } - } - closedir($handle); - } - return $array_items; + $array_items = array(); + if ($handle = opendir($directory)) { + while (false !== ($file = readdir($handle))) { + if ($file != "." && $file != "..") { + if (is_dir($directory. "/" . $file)) { + $array_items = array_merge($array_items, my_directory_to_array($directory. '/' . $file)); + $file = $directory . "/" . $file; + $array_items[] = preg_replace("/\/\//si", '/', $file); + } + } + } + closedir($handle); + } + return $array_items; } /** @@ -402,150 +402,150 @@ function my_directory_to_array($directory) { * @author Reworked by Ivan Tcholakov, 2010 */ function get_config_param($param, $updatePath = '') { - global $configFile, $updateFromConfigFile; - - // Look if we already have the queried parameter. - if (is_array($configFile) && isset($configFile[$param])) { - return $configFile[$param]; - } - if (empty($updatePath) && !empty($_POST['updatePath'])) { - $updatePath = $_POST['updatePath']; - } - if (empty($updatePath)) { - $updatePath = api_get_path(SYS_PATH); - } - $updatePath = api_add_trailing_slash(str_replace('\\', '/', realpath($updatePath))); - $updateFromInstalledVersionFile = ''; - - if (empty($updateFromConfigFile)) { - // If update from previous install was requested, - // try to recover old config file from dokeos 1.8.x. - if (file_exists($updatePath.'main/inc/conf/configuration.php')) { - $updateFromConfigFile = 'main/inc/conf/configuration.php'; - } elseif (file_exists($updatePath.'claroline/inc/conf/claro_main.conf.php')) { - $updateFromConfigFile = 'claroline/inc/conf/claro_main.conf.php'; - } else { - // Give up recovering. - error_log('Could not find config file in '.$updatePath.' in get_config_param()', 0); - return null; - } - } - - if (file_exists($updatePath.$updateFromConfigFile)) { - - // The parameter was not found among the global variables, so look into the old configuration file. - - // Make sure the installedVersion file is read first so it is overwritten - // by the config file if the config file contains the version (from 1.8.4). - $config_data_2 = array(); - if (file_exists($updatePath.$updateFromInstalledVersionFile)) { - $config_data_2 = file_to_array($updatePath.$updateFromInstalledVersionFile); - } - $configFile = array(); - $config_data = file_to_array($updatePath.$updateFromConfigFile); - $config_data = array_merge($config_data, $config_data_2); - $val = ''; - - // Parse the configuration file, statement by statement (line by line, actually). - foreach ($config_data as $php_statement) { - - if (strpos($php_statement, '=') !== false) { - // Variable assignment statement have been detected (probably). - // It is expected to be as follows: - // $variable = 'some_value'; // A comment that is not mandatory. - - // Split the statement into its left and right sides. - $php_statement = explode('=', $php_statement); - $variable = trim($php_statement[0]); - $value = $php_statement[1]; - - if (substr($variable, 0, 1) == '$') { - // We have for sure a php variable assignment detected. - - // On the left side: Retrieve the pure variable's name - $variable = trim(str_replace('$', '', $variable)); - - // On the right side: Remove the comment, if it exists. - list($value) = explode(' //', $value); - // Remove extra whitespace, if any. Remove the trailing semicolon (;). - $value = substr(trim($value), 0, -1); - // Remove surroundig quotes, restore escaped quotes. - $value = str_replace('\"', '"', preg_replace('/^"|"$/', '', $value)); - $value = str_replace('\'', '"', preg_replace('/^\'|\'$/', '', $value)); - - if (strtolower($value) == 'true') { - - // A boolean true value have been recognized. - $value = 1; - - } elseif (strtolower($value) == 'false') { - - // A boolean false value have been recognized. - $value = 0; - - } else { - - // Probably we have a string value, but also we have to check - // possible string concatenations that may include string values - // and other configuration variables. I this case we have to - // get the calculated result of the concatenation. - $implode_string = ' '; - if (!strstr($value, '." ".') && strstr($value, '.$')) { - // Yes, there is concatenation, insert a special separator string. - $value = str_replace('.$', '." ".$', $value); - $implode_string = ''; - } - - // Split the concatenated values, if they are more than one. - $sub_strings = explode('." ".', $value); - - // Seek for variables and retrieve their values. - foreach ($sub_strings as $key => & $sub_string) { - if (preg_match('/^\$[a-zA-Z_][a-zA-Z0-9_]*$/', $sub_string)) { - // A variable has been detected, read it by recursive call. - $sub_string = get_config_param(str_replace('$', '', $sub_string)); - } - } - - // Concatenate everything into the final, the calculated string value. - $value = implode($implode_string, $sub_strings); - } - - // Cache the result value. - $configFile[$variable] = $value; - - $a = explode("'", $variable); - $key_tmp = $a[1]; - if ($key_tmp == $param) { - $val = $value; - } - } - } - } - } - - //Special treatment for dokeos_version parameter due to Dokeos 1.8.3 have the dokeos_version in the main/inc/installedVersion.inc.php file - if ($param == 'dokeos_version') { - //dokeos_version from configuration.php if empty - $dokeos_version = $val; - - if (empty($dokeos_version)) { - //checking the dokeos_version value exists in main/inc/installedVersion.inc.php - if (file_exists($updatePath.'main/inc/installedVersion.inc.php')) { - $updateFromInstalledVersionFile = $updatePath.'main/inc/installedVersion.inc.php'; - require ($updateFromInstalledVersionFile); //there are only 2 variables here: $stable & $dokeos_version - $stable = false; - } - } - return $dokeos_version; - } else { - if (file_exists($updatePath.$updateFromConfigFile)) { - return $val; - } else { - error_log('Config array could not be found in get_config_param()', 0); - return null; - } - } + global $configFile, $updateFromConfigFile; + + // Look if we already have the queried parameter. + if (is_array($configFile) && isset($configFile[$param])) { + return $configFile[$param]; + } + if (empty($updatePath) && !empty($_POST['updatePath'])) { + $updatePath = $_POST['updatePath']; + } + if (empty($updatePath)) { + $updatePath = api_get_path(SYS_PATH); + } + $updatePath = api_add_trailing_slash(str_replace('\\', '/', realpath($updatePath))); + $updateFromInstalledVersionFile = ''; + + if (empty($updateFromConfigFile)) { + // If update from previous install was requested, + // try to recover old config file from dokeos 1.8.x. + if (file_exists($updatePath.'main/inc/conf/configuration.php')) { + $updateFromConfigFile = 'main/inc/conf/configuration.php'; + } elseif (file_exists($updatePath.'claroline/inc/conf/claro_main.conf.php')) { + $updateFromConfigFile = 'claroline/inc/conf/claro_main.conf.php'; + } else { + // Give up recovering. + error_log('Could not find config file in '.$updatePath.' in get_config_param()', 0); + return null; + } + } + + if (file_exists($updatePath.$updateFromConfigFile)) { + + // The parameter was not found among the global variables, so look into the old configuration file. + + // Make sure the installedVersion file is read first so it is overwritten + // by the config file if the config file contains the version (from 1.8.4). + $config_data_2 = array(); + if (file_exists($updatePath.$updateFromInstalledVersionFile)) { + $config_data_2 = file_to_array($updatePath.$updateFromInstalledVersionFile); + } + $configFile = array(); + $config_data = file_to_array($updatePath.$updateFromConfigFile); + $config_data = array_merge($config_data, $config_data_2); + $val = ''; + + // Parse the configuration file, statement by statement (line by line, actually). + foreach ($config_data as $php_statement) { + + if (strpos($php_statement, '=') !== false) { + // Variable assignment statement have been detected (probably). + // It is expected to be as follows: + // $variable = 'some_value'; // A comment that is not mandatory. + + // Split the statement into its left and right sides. + $php_statement = explode('=', $php_statement); + $variable = trim($php_statement[0]); + $value = $php_statement[1]; + + if (substr($variable, 0, 1) == '$') { + // We have for sure a php variable assignment detected. + + // On the left side: Retrieve the pure variable's name + $variable = trim(str_replace('$', '', $variable)); + + // On the right side: Remove the comment, if it exists. + list($value) = explode(' //', $value); + // Remove extra whitespace, if any. Remove the trailing semicolon (;). + $value = substr(trim($value), 0, -1); + // Remove surroundig quotes, restore escaped quotes. + $value = str_replace('\"', '"', preg_replace('/^"|"$/', '', $value)); + $value = str_replace('\'', '"', preg_replace('/^\'|\'$/', '', $value)); + + if (strtolower($value) == 'true') { + + // A boolean true value have been recognized. + $value = 1; + + } elseif (strtolower($value) == 'false') { + + // A boolean false value have been recognized. + $value = 0; + + } else { + + // Probably we have a string value, but also we have to check + // possible string concatenations that may include string values + // and other configuration variables. I this case we have to + // get the calculated result of the concatenation. + $implode_string = ' '; + if (!strstr($value, '." ".') && strstr($value, '.$')) { + // Yes, there is concatenation, insert a special separator string. + $value = str_replace('.$', '." ".$', $value); + $implode_string = ''; + } + + // Split the concatenated values, if they are more than one. + $sub_strings = explode('." ".', $value); + + // Seek for variables and retrieve their values. + foreach ($sub_strings as $key => & $sub_string) { + if (preg_match('/^\$[a-zA-Z_][a-zA-Z0-9_]*$/', $sub_string)) { + // A variable has been detected, read it by recursive call. + $sub_string = get_config_param(str_replace('$', '', $sub_string)); + } + } + + // Concatenate everything into the final, the calculated string value. + $value = implode($implode_string, $sub_strings); + } + + // Cache the result value. + $configFile[$variable] = $value; + + $a = explode("'", $variable); + $key_tmp = $a[1]; + if ($key_tmp == $param) { + $val = $value; + } + } + } + } + } + + //Special treatment for dokeos_version parameter due to Dokeos 1.8.3 have the dokeos_version in the main/inc/installedVersion.inc.php file + if ($param == 'dokeos_version') { + //dokeos_version from configuration.php if empty + $dokeos_version = $val; + + if (empty($dokeos_version)) { + //checking the dokeos_version value exists in main/inc/installedVersion.inc.php + if (file_exists($updatePath.'main/inc/installedVersion.inc.php')) { + $updateFromInstalledVersionFile = $updatePath.'main/inc/installedVersion.inc.php'; + require ($updateFromInstalledVersionFile); //there are only 2 variables here: $stable & $dokeos_version + $stable = false; + } + } + return $dokeos_version; + } else { + if (file_exists($updatePath.$updateFromConfigFile)) { + return $val; + } else { + error_log('Config array could not be found in get_config_param()', 0); + return null; + } + } } /* DATABASE RELATED FUNCTIONS */ @@ -561,39 +561,39 @@ function get_config_param($param, $updatePath = '') { */ function get_config_param_from_db($host, $login, $pass, $db_name, $param = '') { - Database::connect(array('server' => $host, 'username' => $login, 'password' => $pass)); - Database::query("set session sql_mode='';"); // Disabling special SQL modes (MySQL 5) - Database::select_db($db_name); - - if (($res = Database::query("SELECT * FROM settings_current WHERE variable = '$param'")) !== false) { - if (Database::num_rows($res) > 0) { - $row = Database::fetch_array($res); - return $row['selected_value']; - } - } - return null; + Database::connect(array('server' => $host, 'username' => $login, 'password' => $pass)); + Database::query("set session sql_mode='';"); // Disabling special SQL modes (MySQL 5) + Database::select_db($db_name); + + if (($res = Database::query("SELECT * FROM settings_current WHERE variable = '$param'")) !== false) { + if (Database::num_rows($res) > 0) { + $row = Database::fetch_array($res); + return $row['selected_value']; + } + } + return null; } /** * Connects to the database server. */ function database_server_connect() { - global $dbHostForm, $dbUsernameForm, $dbPassForm; - if (($res = @Database::connect(array('server' => $dbHostForm, 'username' => $dbUsernameForm, 'password' => $dbPassForm))) === false) { - $no = Database::errno(); - $msg = Database::error(); - echo '
#'.$no.': '.$msg.'
'; - echo get_lang('DBServerDoesntWorkOrLoginPassIsWrong').'.

'. - get_lang('PleaseCheckTheseValues').' :

'. - ''.get_lang('DBHost').' : '.$dbHostForm.'
'. - ''.get_lang('DBLogin').' : '.$dbUsernameForm.'
'. - ''.get_lang('DBPassword').' : '.$dbPassForm.'

'. - get_lang('PleaseGoBackToStep').' '. (defined('SYSTEM_INSTALLATION') ? '3' : '1').'.'. - '

'. - ''; - exit (); - } - @Database::query("set session sql_mode='';"); // Disabling special SQL modes (MySQL 5) + global $dbHostForm, $dbUsernameForm, $dbPassForm; + if (($res = @Database::connect(array('server' => $dbHostForm, 'username' => $dbUsernameForm, 'password' => $dbPassForm))) === false) { + $no = Database::errno(); + $msg = Database::error(); + echo '
#'.$no.': '.$msg.'
'; + echo get_lang('DBServerDoesntWorkOrLoginPassIsWrong').'.

'. + get_lang('PleaseCheckTheseValues').' :

'. + ''.get_lang('DBHost').' : '.$dbHostForm.'
'. + ''.get_lang('DBLogin').' : '.$dbUsernameForm.'
'. + ''.get_lang('DBPassword').' : '.$dbPassForm.'

'. + get_lang('PleaseGoBackToStep').' '. (defined('SYSTEM_INSTALLATION') ? '3' : '1').'.'. + '

'. + ''; + exit (); + } + @Database::query("set session sql_mode='';"); // Disabling special SQL modes (MySQL 5) } /** @@ -603,41 +603,41 @@ function database_server_connect() { * -1 when there is no connection established. */ function test_db_connect($dbHostForm, $dbUsernameForm, $dbPassForm, $singleDbForm, $dbPrefixForm) { - $dbConnect = -1; - if ($singleDbForm == 1) { - if (@Database::connect(array('server' => $dbHostForm, 'username' => $dbUsernameForm, 'password' => $dbPassForm)) !== false) { - $dbConnect = 1; - } else { - $dbConnect = -1; - } - } elseif ($singleDbForm == 0) { - if (@Database::connect(array('server' => $dbHostForm, 'username' => $dbUsernameForm, 'password' => $dbPassForm)) !== false) { - @Database::query("set session sql_mode='';"); // Disabling special SQL modes (MySQL 5) - $multipleDbCheck = @Database::query("CREATE DATABASE ".$dbPrefixForm."test_chamilo_connection"); - if ($multipleDbCheck !== false) { - $multipleDbCheck = @Database::query("DROP DATABASE IF EXISTS ".$dbPrefixForm."test_chamilo_connection"); - if ($multipleDbCheck !== false) { - $dbConnect = 1; - } else { - $dbConnect = 0; - } - } else { - $dbConnect = 0; - } - } else { - $dbConnect = -1; - } - } - return $dbConnect; //return "1"if no problems, "0" if, in case of multiDB we can't create a new DB and "-1" if there is no connection. + $dbConnect = -1; + if ($singleDbForm == 1) { + if (@Database::connect(array('server' => $dbHostForm, 'username' => $dbUsernameForm, 'password' => $dbPassForm)) !== false) { + $dbConnect = 1; + } else { + $dbConnect = -1; + } + } elseif ($singleDbForm == 0) { + if (@Database::connect(array('server' => $dbHostForm, 'username' => $dbUsernameForm, 'password' => $dbPassForm)) !== false) { + @Database::query("set session sql_mode='';"); // Disabling special SQL modes (MySQL 5) + $multipleDbCheck = @Database::query("CREATE DATABASE ".$dbPrefixForm."test_chamilo_connection"); + if ($multipleDbCheck !== false) { + $multipleDbCheck = @Database::query("DROP DATABASE IF EXISTS ".$dbPrefixForm."test_chamilo_connection"); + if ($multipleDbCheck !== false) { + $dbConnect = 1; + } else { + $dbConnect = 0; + } + } else { + $dbConnect = 0; + } + } else { + $dbConnect = -1; + } + } + return $dbConnect; //return "1"if no problems, "0" if, in case of multiDB we can't create a new DB and "-1" if there is no connection. } /** * Fills the countries table with a list of countries. */ function fill_track_countries_table($track_countries_table) { - $file_path = dirname(__FILE__).'/'.COUNTRY_DATA_FILENAME; - $add_country_sql = "LOAD DATA INFILE '".Database::escape_string($file_path)."' INTO TABLE $track_countries_table FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\'';"; - @ Database::query($add_country_sql); + $file_path = dirname(__FILE__).'/'.COUNTRY_DATA_FILENAME; + $add_country_sql = "LOAD DATA INFILE '".Database::escape_string($file_path)."' INTO TABLE $track_countries_table FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\'';"; + @ Database::query($add_country_sql); } /** @@ -650,32 +650,32 @@ function fill_track_countries_table($track_countries_table) { * @return void */ function load_main_database($installation_settings, $db_script = '') { - if (!empty($db_script)) { - if (file_exists($db_script)) { - $sql_text = file_get_contents($db_script); - } - } else { - $db_script = api_get_path(SYS_CODE_PATH).'install/'.SYSTEM_MAIN_DATABASE_FILE; - if (file_exists($db_script)) { - $sql_text = file_get_contents($db_script); - } - } - - //replace symbolic parameters with user-specified values - foreach ($installation_settings as $key => $value) { - $sql_text = str_replace($key, Database::escape_string($value), $sql_text); - } - - //split in array of sql strings - $sql_instructions = array(); - $success = split_sql_file($sql_instructions, $sql_text); - - //execute the sql instructions - $count = count($sql_instructions); - for ($i = 0; $i < $count; $i++) { - $this_sql_query = $sql_instructions[$i]['query']; - Database::query($this_sql_query); - } + if (!empty($db_script)) { + if (file_exists($db_script)) { + $sql_text = file_get_contents($db_script); + } + } else { + $db_script = api_get_path(SYS_CODE_PATH).'install/'.SYSTEM_MAIN_DATABASE_FILE; + if (file_exists($db_script)) { + $sql_text = file_get_contents($db_script); + } + } + + //replace symbolic parameters with user-specified values + foreach ($installation_settings as $key => $value) { + $sql_text = str_replace($key, Database::escape_string($value), $sql_text); + } + + //split in array of sql strings + $sql_instructions = array(); + $success = split_sql_file($sql_instructions, $sql_text); + + //execute the sql instructions + $count = count($sql_instructions); + for ($i = 0; $i < $count; $i++) { + $this_sql_query = $sql_instructions[$i]['query']; + Database::query($this_sql_query); + } } /** @@ -683,21 +683,21 @@ function load_main_database($installation_settings, $db_script = '') { * @param string Name of the file containing the SQL script inside the install directory */ function load_database_script($db_script) { - $db_script = api_get_path(SYS_CODE_PATH).'install/'.$db_script; - if (file_exists($db_script)) { - $sql_text = file_get_contents($db_script); - } - - //split in array of sql strings - $sql_instructions = array(); - $success = split_sql_file($sql_instructions, $sql_text); - - //execute the sql instructions - $count = count($sql_instructions); - for ($i = 0; $i < $count; $i++) { - $this_sql_query = $sql_instructions[$i]['query']; - Database::query($this_sql_query); - } + $db_script = api_get_path(SYS_CODE_PATH).'install/'.$db_script; + if (file_exists($db_script)) { + $sql_text = file_get_contents($db_script); + } + + //split in array of sql strings + $sql_instructions = array(); + $success = split_sql_file($sql_instructions, $sql_text); + + //execute the sql instructions + $count = count($sql_instructions); + for ($i = 0; $i < $count; $i++) { + $this_sql_query = $sql_instructions[$i]['query']; + Database::query($this_sql_query); + } } /** @@ -830,60 +830,60 @@ function split_sql_file(&$ret, $sql) { * @param boolean Print (true) or hide (false) error texts when they occur */ function get_sql_file_contents($file, $section, $print_errors = true) { - //check given parameters - if (empty($file)) { - $error = "Missing name of file to parse in get_sql_file_contents()"; - if ($print_errors) echo $error; - return false; - } - if (!in_array($section, array('main', 'user', 'stats', 'scorm', 'course'))) { - $error = "Section '$section' is not authorized in get_sql_file_contents()"; - if ($print_errors) echo $error; - return false; - } - $filepath = getcwd().'/'.$file; - if (!is_file($filepath) or !is_readable($filepath)) { - $error = "File $filepath not found or not readable in get_sql_file_contents()"; - if ($print_errors) echo $error; - return false; - } - //read the file in an array - $file_contents = file($filepath); - if (!is_array($file_contents) or count($file_contents) < 1) { - $error = "File $filepath looks empty in get_sql_file_contents()"; - if ($print_errors) echo $error; - return false; - } - - //prepare the resulting array - $section_contents = array(); - $record = false; - foreach ($file_contents as $index => $line) { - if (substr($line, 0, 2) == '--') { - //This is a comment. Check if section name, otherwise ignore - $result = array(); - if (preg_match('/^-- xx([A-Z]*)xx/', $line, $result)) { //we got a section name here - if ($result[1] == strtoupper($section)) { - //we have the section we are looking for, start recording - $record = true; - } else { - //we have another section's header. If we were recording, stop now and exit loop - if ($record) { - break; - } - $record = false; - } - } - } else { - if ($record) { - if (!empty($line)) { - $section_contents[] = $line; - } - } - } - } - //now we have our section's SQL statements group ready, return - return $section_contents; + //check given parameters + if (empty($file)) { + $error = "Missing name of file to parse in get_sql_file_contents()"; + if ($print_errors) echo $error; + return false; + } + if (!in_array($section, array('main', 'user', 'stats', 'scorm', 'course'))) { + $error = "Section '$section' is not authorized in get_sql_file_contents()"; + if ($print_errors) echo $error; + return false; + } + $filepath = getcwd().'/'.$file; + if (!is_file($filepath) or !is_readable($filepath)) { + $error = "File $filepath not found or not readable in get_sql_file_contents()"; + if ($print_errors) echo $error; + return false; + } + //read the file in an array + $file_contents = file($filepath); + if (!is_array($file_contents) or count($file_contents) < 1) { + $error = "File $filepath looks empty in get_sql_file_contents()"; + if ($print_errors) echo $error; + return false; + } + + //prepare the resulting array + $section_contents = array(); + $record = false; + foreach ($file_contents as $index => $line) { + if (substr($line, 0, 2) == '--') { + //This is a comment. Check if section name, otherwise ignore + $result = array(); + if (preg_match('/^-- xx([A-Z]*)xx/', $line, $result)) { //we got a section name here + if ($result[1] == strtoupper($section)) { + //we have the section we are looking for, start recording + $record = true; + } else { + //we have another section's header. If we were recording, stop now and exit loop + if ($record) { + break; + } + $record = false; + } + } + } else { + if ($record) { + if (!empty($line)) { + $section_contents[] = $line; + } + } + } + } + //now we have our section's SQL statements group ready, return + return $section_contents; } /** @@ -918,10 +918,10 @@ function add_document_180($_course, $path, $filetype, $filesize, $title, $commen * @author Patrick Cool , Ghent University */ function step_active($param) { - global $current_step; - if ($param == $current_step) { - echo 'class="current_step" '; - } + global $current_step; + if ($param == $current_step) { + echo 'class="current_step" '; + } } /** @@ -929,60 +929,60 @@ function step_active($param) { * @return string String that says 'Step X of Y' with the right values */ function display_step_sequence() { - global $current_step; - global $total_steps; - return get_lang('Step'.$current_step).' – '; + global $current_step; + global $total_steps; + return get_lang('Step'.$current_step).' – '; } /** * Displays a drop down box for selection the preferred language. */ function display_language_selection_box($name = 'language_list', $default_language = 'english') { - // Reading language list. - $language_list = get_language_folder_list(); - - /* - // Reduction of the number of languages shown. Enable this fragment of code for customization purposes. - // Modify the language list according to your preference. Don't exclude the 'english' item. - $language_to_display = array('asturian', 'bulgarian', 'english', 'italian', 'french', 'slovenian', 'slovenian_unicode', 'spanish'); - foreach ($language_list as $key => & $value) { - if (!in_array($key, $language_to_display)) { - unset($language_list[$key]); - } - } - */ - - // Sanity checks due to the possibility for customizations. - if (!is_array($language_list) || empty($language_list)) { - $language_list = array('english' => 'English'); - } - - // Sorting again, if it is necessary. - //asort($language_list); - - // More sanity checks. - if (!array_key_exists($default_language, $language_list)) { - if (array_key_exists('english', $language_list)) { - $default_language = 'english'; - } else { - $language_keys = array_keys($language_list); - $default_language = $language_keys[0]; - } - } - - // Displaying the box. - echo "\t\t\n"; + // Reading language list. + $language_list = get_language_folder_list(); + + /* + // Reduction of the number of languages shown. Enable this fragment of code for customization purposes. + // Modify the language list according to your preference. Don't exclude the 'english' item. + $language_to_display = array('asturian', 'bulgarian', 'english', 'italian', 'french', 'slovenian', 'slovenian_unicode', 'spanish'); + foreach ($language_list as $key => & $value) { + if (!in_array($key, $language_to_display)) { + unset($language_list[$key]); + } + } + */ + + // Sanity checks due to the possibility for customizations. + if (!is_array($language_list) || empty($language_list)) { + $language_list = array('english' => 'English'); + } + + // Sorting again, if it is necessary. + //asort($language_list); + + // More sanity checks. + if (!array_key_exists($default_language, $language_list)) { + if (array_key_exists('english', $language_list)) { + $default_language = 'english'; + } else { + $language_keys = array_keys($language_list); + $default_language = $language_keys[0]; + } + } + + // Displaying the box. + echo "\t\t\n"; } /** @@ -990,14 +990,14 @@ function display_language_selection_box($name = 'language_list', $default_langua * can be done in the language of the user */ function display_language_selection() { ?> -

-

-

:

-
+

+

+

:

+ - - -
+ + + * @author Patrick Cool , Ghent University */ function display_requirements($installType, $badUpdatePath, $updatePath = '', $update_from_version_8 = array(), $update_from_version_6 = array()) { - echo '

'.display_step_sequence().get_lang('Requirements')."

\n"; - - echo ''.get_lang('ReadThoroughly').'
'; - echo get_lang('MoreDetails').' '.get_lang('ReadTheInstallGuide').'.
'."\n"; - - // SERVER REQUIREMENTS - echo '

'.get_lang('ServerRequirements').'

'; - echo '
'.get_lang('ServerRequirementsInfo').'
'; - echo '
'; - echo ' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
'.get_lang('PHPVersion').'>= 5.0'; - if (phpversion() < '5.0') { - echo ''.get_lang('PHPVersionError').''; - } else { - echo ''.get_lang('PHPVersionOK'). ' '.phpversion().''; - } - echo '
Session '.get_lang('support').''.check_extension('session', get_lang('Yes'), get_lang('ExtensionSessionsNotAvailable')).'
MySQL '.get_lang('support').''.check_extension('mysql', get_lang('Yes'), get_lang('ExtensionMySQLNotAvailable')).'
Zlib '.get_lang('support').''.check_extension('zlib', get_lang('Yes'), get_lang('ExtensionZlibNotAvailable')).'
Perl-compatible regular expressions '.get_lang('support').''.check_extension('pcre', get_lang('Yes'), get_lang('ExtensionPCRENotAvailable')).'
XML '.get_lang('support').''.check_extension('xml', get_lang('Yes'), get_lang('No')).'
Multibyte string '.get_lang('support').' ('.get_lang('Optional').')'.check_extension('mbstring', get_lang('Yes'), get_lang('ExtensionMBStringNotAvailable'), true).'
Iconv '.get_lang('support').' ('.get_lang('Optional').')'.check_extension('iconv', get_lang('Yes'), get_lang('No'), true).'
Internationalization '.get_lang('support').' ('.get_lang('Optional').')'.check_extension('intl', get_lang('Yes'), get_lang('No'), true).'
GD '.get_lang('support').''.check_extension('gd', get_lang('Yes'), get_lang('ExtensionGDNotAvailable')).'
JSON '.get_lang('support').''.check_extension('json', get_lang('Yes'), get_lang('No')).'
LDAP '.get_lang('support').' ('.get_lang('Optional').')'.check_extension('ldap', get_lang('Yes'), get_lang('ExtensionLDAPNotAvailable'), true).'
Xapian '.get_lang('support').' ('.get_lang('Optional').')'.check_extension('xapian', get_lang('Yes'), get_lang('No'), true).'
'; - echo '
'; - echo '
'; - - // RECOMMENDED SETTINGS - // Note: these are the settings for Joomla, does this also apply for Chamilo? - // Note: also add upload_max_filesize here so that large uploads are possible - echo '

'.get_lang('RecommendedSettings').'

'; - echo '
'.get_lang('RecommendedSettingsInfo').'
'; - echo '
'; - echo ' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
'.get_lang('Setting').''.get_lang('Recommended').''.get_lang('Actual').'
Safe Mode'.check_php_setting('safe_mode','OFF').'
Display Errors'.check_php_setting('display_errors','OFF').'
File Uploads'.check_php_setting('file_uploads','ON').'
Magic Quotes GPC'.check_php_setting('magic_quotes_gpc','OFF').'
Magic Quotes Runtime'.check_php_setting('magic_quotes_runtime','OFF').'
Register Globals'.check_php_setting('register_globals','OFF').'
Session auto start'.check_php_setting('session.auto_start','OFF').'
Short Open Tag'.check_php_setting('short_open_tag','OFF').'
Maximum upload file size'.ini_get('upload_max_filesize').'
Maximum post size'.ini_get('post_max_size').'
'; - echo '
'; - echo '
'; - - // DIRECTORY AND FILE PERMISSIONS - echo '

'.get_lang('DirectoryAndFilePermissions').'

'; - echo '
'.get_lang('DirectoryAndFilePermissionsInfo').'
'; - echo '
'; - echo ' - - - - - - - - - - - - - - - - - - - - - - - - + echo '

'.display_step_sequence().get_lang('Requirements')."

\n"; + + echo ''.get_lang('ReadThoroughly').'
'; + echo get_lang('MoreDetails').' '.get_lang('ReadTheInstallGuide').'.
'."\n"; + + // SERVER REQUIREMENTS + echo '

'.get_lang('ServerRequirements').'

'; + echo '
'.get_lang('ServerRequirementsInfo').'
'; + echo '
'; + echo '
chamilo/main/inc/conf/'.check_writable('inc/conf/').'
chamilo/main/upload/users/'.check_writable('upload/users/').'
chamilo/main/default_course_document/images/'.check_writable('default_course_document/images/').'
chamilo/archive/'.check_writable('../archive/').'
chamilo/courses/'.check_writable('../courses/').'
chamilo/home/'.check_writable('../home/').'
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
'.get_lang('PHPVersion').'>= 5.0'; + if (phpversion() < '5.0') { + echo ''.get_lang('PHPVersionError').''; + } else { + echo ''.get_lang('PHPVersionOK'). ' '.phpversion().''; + } + echo '
Session '.get_lang('support').''.check_extension('session', get_lang('Yes'), get_lang('ExtensionSessionsNotAvailable')).'
MySQL '.get_lang('support').''.check_extension('mysql', get_lang('Yes'), get_lang('ExtensionMySQLNotAvailable')).'
Zlib '.get_lang('support').''.check_extension('zlib', get_lang('Yes'), get_lang('ExtensionZlibNotAvailable')).'
Perl-compatible regular expressions '.get_lang('support').''.check_extension('pcre', get_lang('Yes'), get_lang('ExtensionPCRENotAvailable')).'
XML '.get_lang('support').''.check_extension('xml', get_lang('Yes'), get_lang('No')).'
Multibyte string '.get_lang('support').' ('.get_lang('Optional').')'.check_extension('mbstring', get_lang('Yes'), get_lang('ExtensionMBStringNotAvailable'), true).'
Iconv '.get_lang('support').' ('.get_lang('Optional').')'.check_extension('iconv', get_lang('Yes'), get_lang('No'), true).'
Internationalization '.get_lang('support').' ('.get_lang('Optional').')'.check_extension('intl', get_lang('Yes'), get_lang('No'), true).'
GD '.get_lang('support').''.check_extension('gd', get_lang('Yes'), get_lang('ExtensionGDNotAvailable')).'
JSON '.get_lang('support').''.check_extension('json', get_lang('Yes'), get_lang('No')).'
LDAP '.get_lang('support').' ('.get_lang('Optional').')'.check_extension('ldap', get_lang('Yes'), get_lang('ExtensionLDAPNotAvailable'), true).'
Xapian '.get_lang('support').' ('.get_lang('Optional').')'.check_extension('xapian', get_lang('Yes'), get_lang('No'), true).'
'; + echo '
'; + echo '
'; + + // RECOMMENDED SETTINGS + // Note: these are the settings for Joomla, does this also apply for Chamilo? + // Note: also add upload_max_filesize here so that large uploads are possible + echo '

'.get_lang('RecommendedSettings').'

'; + echo '
'.get_lang('RecommendedSettingsInfo').'
'; + echo '
'; + echo ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
'.get_lang('Setting').''.get_lang('Recommended').''.get_lang('Actual').'
Safe Mode'.check_php_setting('safe_mode','OFF').'
Display Errors'.check_php_setting('display_errors','OFF').'
File Uploads'.check_php_setting('file_uploads','ON').'
Magic Quotes GPC'.check_php_setting('magic_quotes_gpc','OFF').'
Magic Quotes Runtime'.check_php_setting('magic_quotes_runtime','OFF').'
Register Globals'.check_php_setting('register_globals','OFF').'
Session auto start'.check_php_setting('session.auto_start','OFF').'
Short Open Tag'.check_php_setting('short_open_tag','OFF').'
Maximum upload file size'.ini_get('upload_max_filesize').'
Maximum post size'.ini_get('post_max_size').'
'; + echo '
'; + echo '
'; + + // DIRECTORY AND FILE PERMISSIONS + echo '

'.get_lang('DirectoryAndFilePermissions').'

'; + echo '
'.get_lang('DirectoryAndFilePermissionsInfo').'
'; + echo '
'; + echo ' + + + + + + + + + + + + + + + + + + + + + + + + @@ -1197,136 +1197,136 @@ function display_requirements($installType, $badUpdatePath, $updatePath = '', $u //' // // + // ? ''.get_lang('Writable').'' + // : ''.get_lang('NotWritable').'').' //'. ''; - echo '
chamilo/main/inc/conf/'.check_writable('inc/conf/').'
chamilo/main/upload/users/'.check_writable('upload/users/').'
chamilo/main/default_course_document/images/'.check_writable('default_course_document/images/').'
chamilo/archive/'.check_writable('../archive/').'
chamilo/courses/'.check_writable('../courses/').'
chamilo/home/'.check_writable('../home/').'
chamilo/main/css/ '.check_writable('css/', true).' ('.get_lang('SuggestionOnlyToEnableCSSUploadFeature').')
'.session_save_path().''.(is_writable(session_save_path()) - // ? ''.get_lang('Writable').'' - // : ''.get_lang('NotWritable').'').'
'; - echo '
'; - echo '
'; - - if ($installType == 'update' && (empty($updatePath) || $badUpdatePath)) { - if ($badUpdatePath) { ?> -
- !
- Chamilo . -
- '; - } - ?> - - - - - - - - -
:
- - - -
- '; + echo ' '; + echo ''; + + if ($installType == 'update' && (empty($updatePath) || $badUpdatePath)) { + if ($badUpdatePath) { ?> +
+ !
+ Chamilo . +
+ '; + } + ?> + + + + + + + + +
:
+ + + +
+ The user would have to adjust the permissions manually - if (count($notwritable) > 0) { - $error = true; - echo '
'; - echo get_lang('Warning').':
'; - printf(get_lang('NoWritePermissionPleaseReadInstallGuide'), '', ' '); - echo '
    '; - foreach ($notwritable as $value) { - echo '
  • '.$value.'
  • '; - } - echo '
'; - echo '
'; - } - - // Check wether a Chamilo configuration file already exists. - elseif (file_exists(api_get_path(CONFIGURATION_PATH).'configuration.php')) { - echo '
'; - echo get_lang('WarningExistingDokeosInstallationDetected'); - echo '
'; - } - - // And now display the choice buttons (go back or install) - ?> -

- - - - '.get_lang('UpgradeFromDokeos18x').''; - echo ''; - echo '

'; - } + if (file_exists($checked_writable) && !is_writable($checked_writable)) { + $notwritable[] = $checked_writable; + @chmod($checked_writable, $perm_file); + } + + // Second, if this fails, report an error + + //--> The user would have to adjust the permissions manually + if (count($notwritable) > 0) { + $error = true; + echo '
'; + echo get_lang('Warning').':
'; + printf(get_lang('NoWritePermissionPleaseReadInstallGuide'), '
', ' '); + echo '
    '; + foreach ($notwritable as $value) { + echo '
  • '.$value.'
  • '; + } + echo '
'; + echo '
'; + } + + // Check wether a Chamilo configuration file already exists. + elseif (file_exists(api_get_path(CONFIGURATION_PATH).'configuration.php')) { + echo '
'; + echo get_lang('WarningExistingDokeosInstallationDetected'); + echo '
'; + } + + // And now display the choice buttons (go back or install) + ?> +

+ + + + '.get_lang('UpgradeFromDokeos18x').''; + echo ''; + echo '

'; + } } /** @@ -1336,28 +1336,28 @@ function display_requirements($installType, $badUpdatePath, $updatePath = '', $u */ function display_license_agreement() { - echo '

'.display_step_sequence().get_lang('Licence').'

'; - echo '

'.get_lang('DokeosLicenseInfo').'

'; - echo '

'.get_lang('PrintVers').'

'; - ?> - -
+ echo '

'.display_step_sequence().get_lang('Licence').'

'; + echo '

'.get_lang('DokeosLicenseInfo').'

'; + echo '

'.get_lang('PrintVers').'

'; + ?> + + - + + @@ -1372,12 +1372,12 @@ function display_license_agreement() {
-
+


-  
-
+
 
*'.get_lang('FieldRequired').'
@@ -1517,19 +1517,19 @@ return $html; * @return void Direct output */ function display_database_parameter($install_type, $parameter_name, $form_field_name, $parameter_value, $extra_notice, $display_when_update = true, $tr_attribute = '') { - echo "
\n"; - echo "\n"; - if ($install_type == INSTALL_TYPE_UPDATE && $display_when_update) { - echo '\n"; - } else { - $inputtype = $form_field_name == 'dbPassForm' ? 'password' : 'text'; - - //Slightly limit the length of the database prefix to avoid having to cut down the databases names later on - $maxlength = $form_field_name == 'dbPrefixForm' ? '15' : MAX_FORM_FIELD_LENGTH; - echo '\n"; - echo "\n"; - } - echo "\n"; + echo "\n"; + echo "\n"; + if ($install_type == INSTALL_TYPE_UPDATE && $display_when_update) { + echo '\n"; + } else { + $inputtype = $form_field_name == 'dbPassForm' ? 'password' : 'text'; + + //Slightly limit the length of the database prefix to avoid having to cut down the databases names later on + $maxlength = $form_field_name == 'dbPrefixForm' ? '15' : MAX_FORM_FIELD_LENGTH; + echo '\n"; + echo "\n"; + } + echo "\n"; } /** @@ -1539,11 +1539,11 @@ function display_database_parameter($install_type, $parameter_name, $form_field_ */ function display_database_settings_form($installType, $dbHostForm, $dbUsernameForm, $dbPassForm, $dbPrefixForm, $enableTrackingForm, $singleDbForm, $dbNameForm, $dbStatsForm, $dbScormForm, $dbUserForm) { - if ($installType == 'update') { - global $_configuration, $update_from_version_6; + if ($installType == 'update') { + global $_configuration, $update_from_version_6; - if (in_array($_POST['old_version'], $update_from_version_6)) { - $dbHostForm = get_config_param('dbHost'); + if (in_array($_POST['old_version'], $update_from_version_6)) { + $dbHostForm = get_config_param('dbHost'); $dbUsernameForm = get_config_param('dbLogin'); $dbPassForm = get_config_param('dbPass'); $dbPrefixForm = get_config_param('dbNamePrefix'); @@ -1554,158 +1554,158 @@ function display_database_settings_form($installType, $dbHostForm, $dbUsernameFo $dbScormForm = get_config_param('scormDbName'); $dbUserForm = get_config_param('user_personal_database'); $dbScormExists = true; - } else { - $dbHostForm = $_configuration['db_host']; - $dbUsernameForm = $_configuration['db_user']; - $dbPassForm = $_configuration['db_password']; - $dbPrefixForm = $_configuration['db_prefix']; - $enableTrackingForm = $_configuration['tracking_enabled']; - $singleDbForm = $_configuration['single_database']; - $dbNameForm = $_configuration['main_database']; - $dbStatsForm = $_configuration['statistics_database']; - $dbScormForm = $_configuration['scorm_database']; - $dbUserForm = $_configuration['user_personal_database']; - $dbScormExists = true; - } - - if (empty($dbScormForm)) { - if ($singleDbForm) { - $dbScormForm = $dbNameForm; - } else { - $dbScormForm = $dbPrefixForm.'scorm'; - $dbScormExists = false; - } - } - if (empty($dbUserForm)) { - $dbUserForm = $singleDbForm ? $dbNameForm : $dbPrefixForm.'chamilo_user'; - } - echo '

' . display_step_sequence() .get_lang('DBSetting') . '

'; - echo get_lang('DBSettingUpgradeIntro'); - - } else { - - if (empty($dbPrefixForm)) { //make sure there is a default value for db prefix - $dbPrefixForm = 'chamilo_'; - } - echo '

' . display_step_sequence() .get_lang('DBSetting') . '

'; - echo get_lang('DBSettingIntro'); - } - - ?> -

- - - - + + + \n"; - if ($install_type == INSTALL_TYPE_UPDATE && $display_when_update) { - echo '\n"; - } else { - echo '\n"; - } - echo "\n"; + echo "\n"; + echo "\n"; + if ($install_type == INSTALL_TYPE_UPDATE && $display_when_update) { + echo '\n"; + } else { + echo '\n"; + } + echo "\n"; } /** * Displays step 4 of the installation - configuration settings about Chamilo itself. */ function display_configuration_settings_form($installType, $urlForm, $languageForm, $emailForm, $adminFirstName, $adminLastName, $adminPhoneForm, $campusForm, $institutionForm, $institutionUrlForm, $encryptPassForm, $allowSelfReg, $allowSelfRegProf, $loginForm, $passForm) { - if ($installType != 'update' && empty($languageForm)) { - $languageForm = $_SESSION['install_language']; - } + if ($installType != 'update' && empty($languageForm)) { + $languageForm = $_SESSION['install_language']; + } + + echo "

" . display_step_sequence() . get_lang("CfgSetting") . "

"; + echo '

'.get_lang('ConfigSettingsInfo').' main/inc/conf/configuration.php

'; - echo "

" . display_step_sequence() . get_lang("CfgSetting") . "

"; - echo '

'.get_lang('ConfigSettingsInfo').' main/inc/conf/configuration.php

'; + echo "\n

-

- - - - + + + +
- - - -
+ + + +
$parameter_name  '.$parameter_value."'."$extra_notice
$parameter_name  '.$parameter_value."'."$extra_notice
- - - - - - - - - - - - - - '; - display_database_parameter($installType, get_lang('MainDB'), 'dbNameForm', $dbNameForm, ' ', null, 'id="optional_param1" style="display:none;"'); - display_database_parameter($installType, get_lang('StatDB'), 'dbStatsForm', $dbStatsForm, ' ', null, 'id="optional_param2" style="display:none;"'); - if ($installType == 'update' && in_array($_POST['old_version'], $update_from_version_6)) { - display_database_parameter($installType, get_lang('ScormDB'), 'dbScormForm', $dbScormForm, ' ', null, 'id="optional_param3" style="display:none;"'); - } - display_database_parameter($installType, get_lang('UserDB'), 'dbUserForm', $dbUserForm, ' ', null, 'id="optional_param4" style="display:none;"'); - - /* Tracking is always available see #2066 - * - - - - - - - - - - - */ - ?> - - - - - - - - - - - - - - - - - - - - - - - - - - -
 
show-hide '.get_lang('OptionalParameters', '').'
-
- - - Database host info:
- Database server version:
- Database client version:
- Database protocol version: - -
-
-
-
- -
- Database error:
- '; ?> -
-
-
-
 
- ' . display_step_sequence() .get_lang('DBSetting') . ''; + echo get_lang('DBSettingUpgradeIntro'); + + } else { + + if (empty($dbPrefixForm)) { //make sure there is a default value for db prefix + $dbPrefixForm = 'chamilo_'; + } + echo '

' . display_step_sequence() .get_lang('DBSetting') . '

'; + echo get_lang('DBSettingIntro'); + } + + ?> +

+
+ + + + + + + + + + + + + + '; + display_database_parameter($installType, get_lang('MainDB'), 'dbNameForm', $dbNameForm, ' ', null, 'id="optional_param1" style="display:none;"'); + display_database_parameter($installType, get_lang('StatDB'), 'dbStatsForm', $dbStatsForm, ' ', null, 'id="optional_param2" style="display:none;"'); + if ($installType == 'update' && in_array($_POST['old_version'], $update_from_version_6)) { + display_database_parameter($installType, get_lang('ScormDB'), 'dbScormForm', $dbScormForm, ' ', null, 'id="optional_param3" style="display:none;"'); + } + display_database_parameter($installType, get_lang('UserDB'), 'dbUserForm', $dbUserForm, ' ', null, 'id="optional_param4" style="display:none;"'); + + /* Tracking is always available see #2066 + * + + + + + + + + + + + */ + ?> + + + + + + + + + + + + + + + + + + + + + + + + + + +
 
show-hide '.get_lang('OptionalParameters', '').'
+
+ + + Database host info:
+ Database server version:
+ Database client version:
+ Database protocol version: + +
+
+
+
+ +
+ Database error:
+ '; ?> +
+
+
+
 
+ \n"; - echo "
$parameter_name  '.$parameter_value."'."
$parameter_name  '.$parameter_value."'."
"; + echo ""; + + //First parameter: language + echo "\n"; + echo '\n"; + + if ($installType == 'update') { + + echo '\n"; + + } else { // new installation + + echo '\n"; + } + echo "\n"; - echo "\n\n"; + } else { + echo '\n"; + } + + echo "\n"; + + //Parameter 3: administrator's email + display_configuration_parameter($installType, get_lang('AdminEmail'), 'emailForm', $emailForm); + + //Parameters 4 and 5: administrator's names + if (api_is_western_name_order()) { + display_configuration_parameter($installType, get_lang('AdminFirstName'), 'adminFirstName', $adminFirstName); + display_configuration_parameter($installType, get_lang('AdminLastName'), 'adminLastName', $adminLastName); + } else { + display_configuration_parameter($installType, get_lang('AdminLastName'), 'adminLastName', $adminLastName); + display_configuration_parameter($installType, get_lang('AdminFirstName'), 'adminFirstName', $adminFirstName); + } + + //Parameter 6: administrator's telephone + display_configuration_parameter($installType, get_lang('AdminPhone'), 'adminPhoneForm', $adminPhoneForm); + + //Parameter 7: administrator's login + display_configuration_parameter($installType, get_lang('AdminLogin'), 'loginForm', $loginForm, $installType == 'update'); + + //Parameter 8: administrator's password + if ($installType != 'update') { + display_configuration_parameter($installType, get_lang('AdminPass'), 'passForm', $passForm, false); + } + + //Parameter 9: campus name + display_configuration_parameter($installType, get_lang('CampusName'), 'campusForm', $campusForm); + + //Parameter 10: institute (short) name + display_configuration_parameter($installType, get_lang('InstituteShortName'), 'institutionForm', $institutionForm); + + //Parameter 11: institute (short) name + display_configuration_parameter($installType, get_lang('InstituteURL'), 'institutionUrlForm', $institutionUrlForm); + + /* + //old method + + + + + + + + + + + */ + + ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
'.get_lang('MainLang')."  '.$languageForm."'; + + display_language_selection_box('languageForm', $languageForm); + + echo "
"; - echo ""; + //Second parameter: Chamilo URL + echo "\n"; + echo '\n"; - //First parameter: language - echo "\n"; - echo '\n"; - - if ($installType == 'update') { - - echo '\n"; - - } else { // new installation - - echo '\n"; - } - echo "\n"; - - //Second parameter: Chamilo URL - echo "\n"; - echo '\n"; - - if ($installType == 'update') { - echo '\n"; - } else { - echo '\n"; - } - - echo "\n"; - - //Parameter 3: administrator's email - display_configuration_parameter($installType, get_lang('AdminEmail'), 'emailForm', $emailForm); - - //Parameters 4 and 5: administrator's names - if (api_is_western_name_order()) { - display_configuration_parameter($installType, get_lang('AdminFirstName'), 'adminFirstName', $adminFirstName); - display_configuration_parameter($installType, get_lang('AdminLastName'), 'adminLastName', $adminLastName); - } else { - display_configuration_parameter($installType, get_lang('AdminLastName'), 'adminLastName', $adminLastName); - display_configuration_parameter($installType, get_lang('AdminFirstName'), 'adminFirstName', $adminFirstName); - } - - //Parameter 6: administrator's telephone - display_configuration_parameter($installType, get_lang('AdminPhone'), 'adminPhoneForm', $adminPhoneForm); - - //Parameter 7: administrator's login - display_configuration_parameter($installType, get_lang('AdminLogin'), 'loginForm', $loginForm, $installType == 'update'); - - //Parameter 8: administrator's password - if ($installType != 'update') { - display_configuration_parameter($installType, get_lang('AdminPass'), 'passForm', $passForm, false); - } - - //Parameter 9: campus name - display_configuration_parameter($installType, get_lang('CampusName'), 'campusForm', $campusForm); - - //Parameter 10: institute (short) name - display_configuration_parameter($installType, get_lang('InstituteShortName'), 'institutionForm', $institutionForm); - - //Parameter 11: institute (short) name - display_configuration_parameter($installType, get_lang('InstituteURL'), 'institutionUrlForm', $institutionUrlForm); - - /* - //old method - - - - - - - - - - - */ - - ?> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
'.get_lang('ChamiloURL').' ('.get_lang('ThisFieldIsRequired').")  
'.get_lang('MainLang')."  '.$languageForm."'; - - display_language_selection_box('languageForm', $languageForm); - - echo "
'.get_lang('ChamiloURL').' ('.get_lang('ThisFieldIsRequired').")  '.api_htmlentities($urlForm, ENT_QUOTES)."'."
: - /> - /> -
: - /> - /> - /> -
: - /> - /> -
: - /> - /> -
- '.api_htmlentities($urlForm, ENT_QUOTES)."
'."
: + /> + /> +
: + /> + /> + /> +
: + /> + /> +
: + /> + /> +
+ -

- - - -

- '; - //echo ''.get_lang('Warning').''; - echo ''.get_lang('SecurityAdvice').''; - echo ': '; - printf(get_lang('ToProtectYourSiteMakeXAndYReadOnly'), 'main/inc/conf/configuration.php', 'main/install/index.php'); - echo ''; - ?> - - - - +

+ + + +

+ '; + //echo ''.get_lang('Warning').''; + echo ''.get_lang('SecurityAdvice').''; + echo ': '; + printf(get_lang('ToProtectYourSiteMakeXAndYReadOnly'), 'main/inc/conf/configuration.php', 'main/install/index.php'); + echo ''; + ?> + + + +