, Ghent University */ function step_active($param) { global $current_step; if ($param == $current_step) { echo 'class="current_step" '; } } /** * This function displays the Step X of Y - * @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).' – '; } /** * This function checks if a php extension exists or not and returns an HTML * status string. * * @param string Name of the PHP extension to be checked * @param string Text to show when extension is available (defaults to 'OK') * @param string Text to show when extension is available (defaults to 'KO') * @param boolean Whether this extension is optional (in this case show unavailable text in orange rather than red) * @return string HTML string reporting the status of this extension. Language-aware. * @author Christophe Gesché * @author Patrick Cool , Ghent University * @author Yannick Warnier * @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.''; } } } /** * This function checks whether a php setting matches the recommended value * * @author Patrick Cool , Ghent University * @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.''; } } /** * Returns a textual value ('ON' or 'OFF') based on a requester 2-state ini- configuration setting. * * @param string $val a php ini value * @return boolean: ON or OFF * @author Joomla */ function get_php_setting($val) { return ini_get($val) == '1' ? 'ON' : 'OFF'; } /** * This function checks if the given folder is writable */ function check_writable($folder, $suggestion = false) { if (is_writable('../'.$folder)) { return ''.get_lang('Writable').''; } else { if ($suggestion) { return ''.get_lang('NotWritable').''; } else { return ''.get_lang('NotWritable').''; } } } /** * This function returns a string "true" or "false" according to the passed parameter. * * @param integer $var The variable to present as text * @return string the string "true" or "false" * @author Christophe Gesché */ function true_false($var) { return $var ? 'true' : 'false'; } /** * This function is similar to the core file() function, except that it * works with line endings in Windows (which is not the case of file()) * @param string File path * @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)); } /** * This function returns the value of a parameter from the configuration file * * WARNING - this function relies heavily on global variables $updateFromConfigFile * and $configFile, and also changes these globals. This can be rewritten. * * @param string $param the parameter of which the value is returned * @param string If we want to give the path rather than take it from POST * @return string the value of the parameter * @author Olivier Brouckaert * @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']; } $updatePath = 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.'main/inc/installedVersion.inc.php')) { $updateFromInstalledVersionFile = $updatePath.'main/inc/installedVersion.inc.php'; } elseif (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; } } } } return $val; } else { error_log('Config array could not be found in get_config_param()', 0); return null; } } /** * Get the config param from the database. If not found, return null * @param string DB Host * @param string DB login * @param string DB pass * @param string DB name * @param string Name of param we want * @return mixed The parameter value or null if not found */ 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; } /* ============================================================================== DISPLAY FUNCTIONS ============================================================================== */ /** * 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"; } /** * This function displays a language dropdown box so that the installatioin * can be done in the language of the user */ function display_language_selection() { ?>

:

, 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 Dokeos? // 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 '
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').')
chamilo/main/lang/ '.check_writable('lang/',true).' ('.get_lang('SuggestionOnlyToEnableSubLanguageFeature').')
dokeos/searchdb/'.check_writable('../searchdb/').'
'.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 .
'; } ?>
:
the user will 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('../inc/conf/configuration.php')) { echo '
'; echo get_lang('WarningExistingDokeosInstallationDetected'); echo '
'; } //and now display the choice buttons (go back or install) ?>

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

'; } } /** * Displays the license (GNU GPL) as step 2, with * - an "I accept" button named step3 to proceed to step 3; * - a "Back" button named step1 to go back to the first step. */ function display_license_agreement() { echo '

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

'; echo '

'.get_lang('DokeosLicenseInfo').'

'; echo '

'.get_lang('PrintVers').'

'; ?>

element * @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 "$parameter_name  \n"; if ($install_type == INSTALL_TYPE_UPDATE && $display_when_update) { echo ''.$parameter_value."\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 "$extra_notice\n"; } echo "\n"; } /** * Displays step 3 - a form where the user can enter the installation settings * regarding the databases - login and password, names, prefixes, single * or multiple databases, tracking or not... */ 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 (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'); $enableTrackingForm = get_config_param('is_trackingEnabled'); $singleDbForm = get_config_param('singleDbEnabled'); $dbNameForm = get_config_param('mainDbName'); $dbStatsForm = get_config_param('statsDbName'); $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'); } ?>

'; 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;"'); ?>
 
show-hide '.get_lang('OptionalParameters', '').'
Database host info:
Database server version:
Database client version:
Database protocol version:
Database error:
'; ?>
 
\n"; echo "$parameter_name  \n"; if ($install_type == INSTALL_TYPE_UPDATE && $display_when_update) { echo ''.$parameter_value."\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']; } echo "

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

"; echo '

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

'; echo "\n"; echo ""; //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('MainLang')."  '.$languageForm."'; display_language_selection_box('languageForm', $languageForm); echo "
'.get_lang('ChamiloURL').' ('.get_lang('ThisFieldIsRequired').")  '.api_htmlentities($urlForm, ENT_QUOTES)."'."
: /> />
: /> /> />
: /> />
: /> />

MAX_COURSE_TRANSFER): ?>

: ', ''); ?>

'; //echo ''.get_lang('Warning').''; echo ''.get_lang('SecurityAdvice').''; echo ': '; printf(get_lang('ToProtectYourSiteMakeXAndYReadOnly'), 'main/inc/conf/configuration.php', 'main/install/index.php'); echo ''; ?> $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. }