cfasanando 15 years ago
parent
commit
7d6bce0420
2 changed files with 2051 additions and 2051 deletions
  1. 820 820
      main/install/index.php
  2. 1231 1231
      main/install/install_functions.inc.php

+ 820 - 820
main/install/index.php

@@ -1,820 +1,820 @@
-<?php //$id: $
-/* For licensing terms, see /dokeos_license.txt */
-/**
-==============================================================================
-* GOAL : Dokeos installation
-* As seen from the user, the installation proceeds in 6 steps.
-* The user is presented with several webpages where he/she has to make choices
-* and/or fill in data.
-*
-* The aim is, as always, to have good default settings and suggestions.
-*
-* @todo	reduce high level of duplication in this code
-* @todo (busy) organise code into functions
-* @package dokeos.install
-==============================================================================
-*/
-
-/*
-==============================================================================
-		PHP VERSION CHECK & MBSTRING EXTENSION CHECK
-==============================================================================
-*/
-
-if ( !function_exists('version_compare') || version_compare( phpversion(), '5', '<' )) {
-	$error_message_php_version = <<<EOM
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
-		<head>
-			<title>Wrong PHP version!</title>
-			<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-			<style type="text/css" media="screen, projection">
-				/*<![CDATA[*/
-				@import "../css/dokeos_blue/default.css";
-				/*]]>*/
-			</style>
-		</head>
-		<body>
-			<div id="wrapper">
-				<div id="header">
-					<div id="header1"><a href="http://www.dokeos.com" target="_blank">Dokeos Homepage</a></div>
-					<div class="clear"></div>
-					<div id="header2">&nbsp;</div>
-					<div id="header3">
-						<ul id="logout">
-							<li><a href="" target="_top"><span>&nbsp;</span></a></li>
-						</ul>
-						<ul>
-							<li id="current"><a href="#"><span>Installation</span></a></li>
-						</ul>
-						<div style="clear:both;" class="clear"></div>
-					</div>
-					<div id="header4">&nbsp;</div>
-				</div>
-
-				<div style="text-align: center;"><br /><br />
-						The version of scripting language on your server is wrong. Your server has to support PHP 5.x.x .<br />
-						<a href="../../documentation/installation_guide.html" target="_blank">Read the installation guide</a><br /><br />
-				</div>
-				<div id="push"></div>
-				</div>
-				
-			<div id="footer">
-				<div class="copyright">Platform <a href="http://www.dokeos.com" target="_blank"> Dokeos </a> &copy; 2009 </div>
-				&nbsp;
-			</div>
-			
-		</body>
-</html>
-EOM;
-	header('Content-Type: text/html; charset=UTF-8');
-	die($error_message_php_version);
-}
-
-/*
-==============================================================================
-		INIT SECTION
-==============================================================================
-*/
-session_start();
-// Including necessary files
-@include '../inc/installedVersion.inc.php';
-require '../inc/lib/main_api.lib.php';
-
-require '../lang/english/trad4all.inc.php';
-require '../lang/english/install.inc.php';
-
-if (!empty($_POST['language_list'])) {
-	$search = array('../','\\0');
-	$install_language = str_replace($search,'',urldecode($_POST['language_list']));
-	if(!is_dir('../lang/'.$install_language)){$install_language = 'english';}
-	include_once "../lang/$install_language/trad4all.inc.php";
-	include_once "../lang/$install_language/install.inc.php";
-	api_session_register('install_language');
-} elseif ( isset($_SESSION['install_language']) && $_SESSION['install_language'] ) {
-	$install_language = $_SESSION['install_language'];
-	include_once "../lang/$install_language/trad4all.inc.php";
-	include_once "../lang/$install_language/install.inc.php";
-}
-
-// These global variables must be set for proper working of the function get_lang(...) during the installation.
-$language_interface = $install_language;
-$language_interface_initial_value = $install_language;
-
-/* TODO: Obsolete logic, to be removed.
-$charset = '';
-//force ISO-8859-15 for European languages. Leave Apache determine the encoding for others (HTML declaring UTF-8)
-$euro_langs = array('english','french','french_KM','french_corporate','french_org','dutch','spanish','german','italian','greek','danish','swedish','norwegian','polish','galician','catalan','czech','finnish');
-if (isset($install_language))
-{
-	if(in_array($install_language,$euro_langs))
-	{
-		$charset = 'ISO-8859-15'; // TODO: This should be UTF-8 for some languages.
-		header('Content-Type: text/html; charset='. $charset);
-	}
-}
-*/
-
-// Character set during installation: ISO-8859-15 for Latin 1 languages, UTF-8 for other languages.
-$charset = 'UTF-8';
-if (isset($install_language)) {
-	if (strpos($install_language, 'unicode') === false && api_is_latin1_compatible($install_language))
-	{
-		// TODO: This is for backward compatibility. Actually, all the languages may use UTF-8.
-		$charset = 'ISO-8859-15';
-	}
-}
-header('Content-Type: text/html; charset='. $charset);
-
-// Initialization of the multibyte string library.
-api_initialize_string_library();
-// Initialization of the default encoding that will be used by the multibyte string routines.
-api_set_string_library_default_encoding($charset);
-
-require_once 'install_upgrade.lib.php'; //also defines constants
-require_once 'install_functions.inc.php';
-
-// Some constants
-define('DOKEOS_INSTALL',1);
-define('MAX_COURSE_TRANSFER',100);
-define('INSTALL_TYPE_UPDATE', 'update');
-define('FORM_FIELD_DISPLAY_LENGTH', 40);
-define('DATABASE_FORM_FIELD_DISPLAY_LENGTH', 25);
-define('MAX_FORM_FIELD_LENGTH', 80);
-define('DEFAULT_LANGUAGE', 'english');
-
-// setting the error reporting
-error_reporting(E_COMPILE_ERROR | E_ERROR | E_CORE_ERROR);
-
-// overriding the timelimit (for large campusses that have to be migrated)
-@set_time_limit(0);
-
-//upgrading from any subversion of 1.6 is just like upgrading from 1.6.5 
-$update_from_version_6=array('1.6','1.6.1','1.6.2','1.6.3','1.6.4','1.6.5');
-//upgrading from any subversion of 1.8 avoids the additional step of upgrading from 1.6
-$update_from_version_8=array('1.8','1.8.2','1.8.3','1.8.4','1.8.5','1.8.6');
-$my_old_version = '';
-$tmp_version = get_config_param('dokeos_version');
-if(!empty($_POST['old_version'])) {
-	$my_old_version = $_POST['old_version'];
-} elseif(!empty($tmp_version)) {
-    $my_old_version = $tmp_version;
-}
-elseif(!empty($dokeos_version)) //variable coming from installedVersion, normally
-{
-	$my_old_version = $dokeos_version;
-}
-
-$new_version = '1.8.6.1';
-$new_version_stable = true;
-$new_version_major = false;
-/*
-==============================================================================
-		STEP 1 : INITIALIZES FORM VARIABLES IF IT IS THE FIRST VISIT
-==============================================================================
-*/
-
-//Is valid request
-$is_valid_request=$_REQUEST['is_executable'];
-foreach ($_POST as $request_index=>$request_value) {
-	if (substr($request_index,0,4)=='step') {
-		if ($request_index<>$is_valid_request) {
-			unset($_POST[$request_index]);
-		}
-	}
-}
-
-$badUpdatePath=false;
-$emptyUpdatePath=true;
-$proposedUpdatePath = '';
-if(!empty($_POST['updatePath']))
-{
-	$proposedUpdatePath = $_POST['updatePath'];	
-}
-
-if ($_POST['step2_install'] || $_POST['step2_update_8'] || $_POST['step2_update_6']) {
-	if ($_POST['step2_install']) {
-		$installType='new';
-
-		$_POST['step2']=1;
-	} else {
-		$installType='update';
-		if($_POST['step2_update_8'])
-		{
-			$emptyUpdatePath = false;
-			if(empty($_POST['updatePath']))
-			{
-				$proposedUpdatePath = $_SERVER['DOCUMENT_ROOT'];
-			}
-			else
-			{
-				$proposedUpdatePath = $_POST['updatePath'];
-			}
-			if(substr($proposedUpdatePath,-1) != '/')
-			{
-				$proposedUpdatePath.='/';
-			}			
-			if(file_exists($proposedUpdatePath))
-			{
-				if(in_array($my_old_version,$update_from_version_8))
-				{
-					$_POST['step2']=1;
-				}
-				else
-				{
-					$badUpdatePath=true;
-				}
-			}
-			else
-			{
-				$badUpdatePath=true;
-			}
-		}
-		else //step2_update_6, presumably
-		{
-			if(empty($_POST['updatePath']))
-			{
-				$_POST['step1']=1;
-			}
-			else
-			{
-				$emptyUpdatePath = false;
-				if(substr($_POST['updatePath'],-1) != '/')
-				{
-					$_POST['updatePath'].='/';
-				}
-	
-				if(file_exists($_POST['updatePath']))
-				{
-					//1.6.x
-					$my_old_version = get_config_param('clarolineVersion',$_POST['updatePath']);
-					if(in_array($my_old_version,$update_from_version_6))
-					{
-						$_POST['step2']=1;
-						$proposedUpdatePath = $_POST['updatePath'];
-					}
-					else
-					{
-						$badUpdatePath=true;
-					}
-				}
-				else
-				{
-					$badUpdatePath=true;
-				}
-			}
-		}
-	}
-}
-elseif($_POST['step1'])
-{
-	$_POST['updatePath']='';
-	$installType='';
-	$updateFromConfigFile='';
-	unset($_GET['running']);
-}
-else
-{
-	$installType=$_GET['installType'];
-	$updateFromConfigFile=$_GET['updateFromConfigFile'];
-}
-
-if($installType=='update' && in_array($my_old_version,$update_from_version_8))
-{
-	include_once '../inc/conf/configuration.php';
-}
-
-if(!isset($_GET['running'])) {
-	$dbHostForm='localhost';
-	$dbUsernameForm='root';
-	$dbPassForm='';
- 	$dbPrefixForm='';
-	$dbNameForm='dokeos_main';
-	$dbStatsForm='dokeos_stats';
-	$dbScormForm='dokeos_scorm';
-	$dbUserForm='dokeos_user';
-
-	// extract the path to append to the url if Dokeos is not installed on the web root directory
-	$urlAppendPath=str_replace('/main/install/index.php','',api_get_self());
-  	$urlForm='http://'.$_SERVER['HTTP_HOST'].$urlAppendPath.'/';
-	$pathForm=str_replace('\\','/',realpath('../..')).'/';
-
-	$emailForm=$_SERVER['SERVER_ADMIN'];
-	$email_parts = explode('@',$emailForm);
-	if($email_parts[1] == 'localhost')
-	{
-		$emailForm .= '.localdomain';
-	}
-	$adminLastName='Doe';
-	$adminFirstName='John';
-	$loginForm='admin';
-	$passForm=api_generate_password();
-
-	$campusForm='My campus';
-	$educationForm='Albert Einstein';
-	$adminPhoneForm='(000) 001 02 03';
-	$institutionForm='My Organisation';
-	$institutionUrlForm='http://www.dokeos.com';
-
-	$languageForm='english';
-
-	$checkEmailByHashSent=0;
-	$ShowEmailnotcheckedToStudent=1;
-	$userMailCanBeEmpty=1;
-	$allowSelfReg=1;
-	$allowSelfRegProf=1;
-	$enableTrackingForm=1;
-	$singleDbForm=0;
-	$encryptPassForm='md5';
-	$session_lifetime=360000;
-}
-else
-{
-	foreach($_POST as $key=>$val)
-	{
-		$magic_quotes_gpc=ini_get('magic_quotes_gpc')?true:false;
-
-		if(is_string($val))
-		{
-			if($magic_quotes_gpc)
-			{
-				$val=stripslashes($val);
-			}
-
-			$val=trim($val);
-
-			$_POST[$key]=$val;
-		}
-		elseif(is_array($val))
-		{
-			foreach($val as $key2=>$val2)
-			{
-				if($magic_quotes_gpc)
-				{
-					$val2=stripslashes($val2);
-				}
-
-				$val2=trim($val2);
-
-				$_POST[$key][$key2]=$val2;
-			}
-		}
-
-		$GLOBALS[$key]=$_POST[$key];
-	}
-}
-
-// The Steps
-$total_steps=7;
-if (!$_POST)
-{
-	$current_step=1;
-}
-elseif (!empty($_POST['language_list']) or !empty($_POST['step1']) or ((!empty($_POST['step2_update_8']) or (!empty($_POST['step2_update_6'])))  && ($emptyUpdatePath or $badUpdatePath)))
-{
-	$current_step=2;
-}
-elseif (!empty($_POST['step2']) or (!empty($_POST['step2_update_8']) or (!empty($_POST['step2_update_6'])) ))
-{
-	$current_step=3;
-}
-elseif (!empty($_POST['step3']))
-{
-	$current_step=4;
-}
-elseif (!empty($_POST['step4']))
-{
-	$current_step=5;
-}
-elseif (!empty($_POST['step5']))
-{
-	$current_step=6;
-}
-
-
-// Managing the $encryptPassForm 
-if ($encryptPassForm=='1' ) {
-	$encryptPassForm = 'md5'; 
-} elseif ($encryptPassForm=='0') {	  	
-	$encryptPassForm = 'none';
-}
-
-?>
-<!DOCTYPE html
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-	<title>&mdash; <?php echo get_lang('DokeosInstallation').' &mdash; '.get_lang('Version_').' '.$new_version; ?></title>
-	<style type="text/css" media="screen, projection">
-		/*<![CDATA[*/
-		@import "../css/dokeos_blue/default.css";
-		/*]]>*/
-	</style>
-	<script type="text/javascript" src="../inc/lib/javascript/jquery.js"></script>
-	<script type="text/javascript" >
-		$(document).ready( function() {
-			 //checked
-			if ($('#singleDb1').attr('checked')==false) {
-					$('#dbStatsForm').removeAttr('disabled');
-					$('#dbUserForm').removeAttr('disabled');
-					$('#dbStatsForm').attr('value','dokeos_stats');
-					$('#dbUserForm').attr('value','dokeos_user');			
-			} else if($('#singleDb1').attr('checked')==true){
-					$('#dbStatsForm').attr('disabled','disabled');
-					$('#dbUserForm').attr('disabled','disabled');
-					$('#dbStatsForm').attr('value','dokeos_main');
-					$('#dbUserForm').attr('value','dokeos_main');												
-			}
-		//Allow dokeos install in IE
-		$("button").click(function() {
-			$("#is_executable").attr("value",$(this).attr("name"));
-		});
-			
-	 	} ); 	
-	</script>
-	<script type="text/javascript">
-
-		function show_hide_tracking_and_user_db (my_option) {
-			if (my_option=='singleDb1') {
-				$('#dbStatsForm').attr('disabled','true');
-				$('#dbUserForm').attr('disabled','true');
-				$('#dbStatsForm').attr('value','dokeos_main');
-				$('#dbUserForm').attr('value','dokeos_main');								
-			} else if (my_option=='singleDb0') {
-				$('#dbStatsForm').removeAttr('disabled');
-				$('#dbUserForm').removeAttr('disabled');
-				$('#dbStatsForm').attr('value','dokeos_stats');
-				$('#dbUserForm').attr('value','dokeos_user');											
-			}
-		}
-	</script>	
-	<script language="javascript">
-		init_visibility=0;
-		function show_hide_option() {
-			if(init_visibility == 0) {
-				document.getElementById('optional_param1').style.display = '';
-				document.getElementById('optional_param2').style.display = '';
-				if(document.getElementById('optional_param3'))
-				{
-					document.getElementById('optional_param3').style.display = '';
-				}
-				document.getElementById('optional_param4').style.display = '';
-				document.getElementById('optional_param5').style.display = '';
-				document.getElementById('optional_param6').style.display = '';
-				init_visibility = 1;
-			document.getElementById('optionalparameters').innerHTML='<img style="vertical-align:middle;" src="../img/div_show.gif" alt="" /> <?php echo get_lang('OptionalParameters'); ?>';
-			} else {
-				document.getElementById('optional_param1').style.display = 'none';
-				document.getElementById('optional_param2').style.display = 'none';
-				if(document.getElementById('optional_param3')) {
-					document.getElementById('optional_param3').style.display = 'none';
-				}
-				document.getElementById('optional_param4').style.display = 'none';
-				document.getElementById('optional_param5').style.display = 'none';
-				document.getElementById('optional_param6').style.display = 'none';
-			document.getElementById('optionalparameters').innerHTML='<img style="vertical-align:middle;" src="../img/div_hide.gif" alt="" /> <?php echo get_lang('OptionalParameters'); ?>';
-				init_visibility = 0;				
-			}
-		}
-	</script>
-<?php if(!empty($charset)){ ?>
-	<meta http-equiv="Content-Type" content="text/html; charset=<?php echo $charset ?>" />
-<?php } ?>
-</head>
-<body dir="<?php echo $text_dir ?>">
-
-<div id="wrapper">
-
-<div id="header">
-	<div id="header1"><?php echo get_lang('DokeosInstallation').' &mdash; '.get_lang('Version_').' '.$new_version; ?><?php if($installType == 'new') echo ' &ndash; '.get_lang('NewInstallation'); else if($installType == 'update') echo ' &ndash; '.get_lang('UpdateFromDokeosVersion').(is_array($update_from_version)?implode('|',$update_from_version):''); ?></div>
-	<div id="header2">&nbsp;</div>
-	<div id="header3">
-		<ul>
-			<li id="current"><a href="#"><span>Installation</span></a></li>
-		</ul>	
-	</div>
-</div>
-
-
-<form style="padding: 0px; margin: 0px;" method="post" action="<?php echo api_get_self(); ?>?running=1&amp;installType=<?php echo $installType; ?>&amp;updateFromConfigFile=<?php echo urlencode($updateFromConfigFile); ?>">
-
-<div id="installation_steps" style="width:240px">
-	<img src="../img/bluelogo.gif" hspace="10" vspace="10" alt="Dokeos logo" />
-	<ol>
-		<li <?php step_active('1'); ?>><?php echo get_lang('InstallationLanguage'); ?></li>
-		<li <?php step_active('2'); ?>><?php echo get_lang('Requirements'); ?></li>
-		<li <?php step_active('3'); ?>><?php echo get_lang('Licence'); ?></li>
-		<li <?php step_active('4'); ?>><?php echo get_lang('DBSetting'); ?></li>
-		<li <?php step_active('5'); ?>><?php echo get_lang('CfgSetting'); ?></li>
-		<li <?php step_active('6'); ?>><?php echo get_lang('PrintOverview'); ?></li>
-		<li <?php step_active('7'); ?>><?php echo get_lang('Installing'); ?></li>
-	</ol>
-</div>
-
-<table cellpadding="6" cellspacing="0" border="0" width="72%" align="center">
-<tr>
-<td>
-	<div id="note" style="float:right;">
-		<a href="../../documentation/installation_guide.html" target="_blank">Read the installation guide</a>
-	</div>
-</td>
-</tr>
-<tr>
-  <td>
-	<input type="hidden" name="updatePath"           value="<?php if(!$badUpdatePath) echo api_htmlentities($proposedUpdatePath, ENT_QUOTES, $charset); ?>" />
-	<input type="hidden" name="urlAppendPath"        value="<?php echo api_htmlentities($urlAppendPath, ENT_QUOTES, $charset); ?>" />
-	<input type="hidden" name="pathForm"             value="<?php echo api_htmlentities($pathForm, ENT_QUOTES, $charset); ?>" />
-	<input type="hidden" name="urlForm"              value="<?php echo api_htmlentities($urlForm, ENT_QUOTES, $charset); ?>" />
-	<input type="hidden" name="dbHostForm"           value="<?php echo api_htmlentities($dbHostForm, ENT_QUOTES, $charset); ?>" />
-	<input type="hidden" name="dbUsernameForm"       value="<?php echo api_htmlentities($dbUsernameForm, ENT_QUOTES, $charset); ?>" />
-	<input type="hidden" name="dbPassForm"           value="<?php echo api_htmlentities($dbPassForm, ENT_QUOTES, $charset); ?>" />
-	<input type="hidden" name="singleDbForm"         value="<?php echo api_htmlentities($singleDbForm, ENT_QUOTES, $charset); ?>" />
-	<input type="hidden" name="dbPrefixForm"         value="<?php echo api_htmlentities($dbPrefixForm, ENT_QUOTES, $charset); ?>" />
-	<input type="hidden" name="dbNameForm"           value="<?php echo api_htmlentities($dbNameForm, ENT_QUOTES, $charset); ?>" />
-<?php
-	if($installType == 'update' OR $singleDbForm == 0)
-	{
-?>
-	<input type="hidden" name="dbStatsForm"          value="<?php echo api_htmlentities($dbStatsForm, ENT_QUOTES, $charset); ?>" />
-	<input type="hidden" name="dbScormForm"          value="<?php echo api_htmlentities($dbScormForm, ENT_QUOTES, $charset); ?>" />
-	<input type="hidden" name="dbUserForm"           value="<?php echo api_htmlentities($dbUserForm, ENT_QUOTES, $charset); ?>" />
-<?php
-	}
-	else
-	{
-?>
-	<input type="hidden" name="dbStatsForm"          value="<?php echo api_htmlentities($dbNameForm, ENT_QUOTES, $charset); ?>" />
-	<input type="hidden" name="dbUserForm"           value="<?php echo api_htmlentities($dbNameForm, ENT_QUOTES, $charset); ?>" />
-<?php
-	}
-?>
-	<input type="hidden" name="enableTrackingForm"   value="<?php echo api_htmlentities($enableTrackingForm, ENT_QUOTES, $charset); ?>" />
-	<input type="hidden" name="allowSelfReg"         value="<?php echo api_htmlentities($allowSelfReg, ENT_QUOTES, $charset); ?>" />
-	<input type="hidden" name="allowSelfRegProf"     value="<?php echo api_htmlentities($allowSelfRegProf, ENT_QUOTES, $charset); ?>" />
-	<input type="hidden" name="emailForm"            value="<?php echo api_htmlentities($emailForm, ENT_QUOTES, $charset); ?>" />
-	<input type="hidden" name="adminLastName"        value="<?php echo api_htmlentities($adminLastName, ENT_QUOTES, $charset); ?>" />
-	<input type="hidden" name="adminFirstName"       value="<?php echo api_htmlentities($adminFirstName, ENT_QUOTES, $charset); ?>" />
-	<input type="hidden" name="adminPhoneForm"       value="<?php echo api_htmlentities($adminPhoneForm, ENT_QUOTES, $charset); ?>" />
-	<input type="hidden" name="loginForm"            value="<?php echo api_htmlentities($loginForm, ENT_QUOTES, $charset); ?>" />
-	<input type="hidden" name="passForm"             value="<?php echo api_htmlentities($passForm, ENT_QUOTES, $charset); ?>" />
-	<input type="hidden" name="languageForm"         value="<?php echo api_htmlentities($languageForm, ENT_QUOTES, $charset); ?>" />
-	<input type="hidden" name="campusForm"           value="<?php echo api_htmlentities($campusForm, ENT_QUOTES, $charset); ?>" />
-	<input type="hidden" name="educationForm"        value="<?php echo api_htmlentities($educationForm, ENT_QUOTES, $charset); ?>" />
-	<input type="hidden" name="institutionForm"      value="<?php echo api_htmlentities($institutionForm, ENT_QUOTES, $charset); ?>" />
-	<input type="hidden" name="institutionUrlForm"   value="<?php echo api_stristr($institutionUrlForm, 'http://', false, $charset) ? api_htmlentities($institutionUrlForm, ENT_QUOTES, $charset) : api_stristr($institutionUrlForm, 'https://', false, $charset) ? api_htmlentities($institutionUrlForm, ENT_QUOTES, $charset) : 'http://'.api_htmlentities($institutionUrlForm, ENT_QUOTES, $charset); ?>" />
-	<input type="hidden" name="checkEmailByHashSent" value="<?php echo api_htmlentities($checkEmailByHashSent, ENT_QUOTES, $charset); ?>" />
-	<input type="hidden" name="ShowEmailnotcheckedToStudent" value="<?php echo api_htmlentities($ShowEmailnotcheckedToStudent, ENT_QUOTES, $charset); ?>" />
-	<input type="hidden" name="userMailCanBeEmpty"   value="<?php echo api_htmlentities($userMailCanBeEmpty, ENT_QUOTES, $charset); ?>" />
-	<input type="hidden" name="encryptPassForm"      value="<?php echo api_htmlentities($encryptPassForm, ENT_QUOTES, $charset); ?>" />
-	<input type="hidden" name="session_lifetime"  value="<?php echo api_htmlentities($session_lifetime, ENT_QUOTES, $charset); ?>" />
-	<input type="hidden" name="old_version"  value="<?php echo api_htmlentities($my_old_version, ENT_QUOTES, $charset); ?>" />
-	<input type="hidden" name="new_version"  value="<?php echo api_htmlentities($new_version, ENT_QUOTES, $charset); ?>" />
-
-
-
-
-<?php
-if($_POST['step2'])
-{
-	//STEP 3 : LICENSE
-	display_license_agreement();
-}
-elseif($_POST['step3'])
-{
-	//STEP 4 : MYSQL DATABASE SETTINGS
-	display_database_settings_form($installType, $dbHostForm, $dbUsernameForm, $dbPassForm, $dbPrefixForm, $enableTrackingForm, $singleDbForm, $dbNameForm, $dbStatsForm, $dbScormForm, $dbUserForm);
-}
-elseif($_POST['step4'])
-{
-
-	//STEP 5 : CONFIGURATION SETTINGS
-	//if update, try getting settings from the database...
-	if($installType == 'update')
-	{
-		$db_name = $dbNameForm;
-		$tmp = get_config_param_from_db($dbHostForm,$dbUsernameForm,$dbPassForm,$db_name,'platformLanguage');
-		if(!empty($tmp)) $languageForm = $tmp;
-		$tmp = get_config_param_from_db($dbHostForm,$dbUsernameForm,$dbPassForm,$db_name,'emailAdministrator');
-		if(!empty($tmp)) $emailForm = $tmp;
-		$tmp = get_config_param_from_db($dbHostForm,$dbUsernameForm,$dbPassForm,$db_name,'administratorName');
-		if(!empty($tmp)) $adminFirstName = $tmp;
-		$tmp = get_config_param_from_db($dbHostForm,$dbUsernameForm,$dbPassForm,$db_name,'administratorSurname');
-		if(!empty($tmp)) $adminLastName = $tmp;
-		$tmp = get_config_param_from_db($dbHostForm,$dbUsernameForm,$dbPassForm,$db_name,'administratorTelephone');
-		if(!empty($tmp)) $adminPhoneForm = $tmp;
-		$tmp = get_config_param_from_db($dbHostForm,$dbUsernameForm,$dbPassForm,$db_name,'siteName');
-		if(!empty($tmp)) $campusForm = $tmp;
-		$tmp = get_config_param_from_db($dbHostForm,$dbUsernameForm,$dbPassForm,$db_name,'Institution');
-		if(!empty($tmp)) $institutionForm = $tmp;
-		$tmp = get_config_param_from_db($dbHostForm,$dbUsernameForm,$dbPassForm,$db_name,'InstitutionUrl');
-		if(!empty($tmp)) $institutionUrlForm = $tmp;
-		if(in_array($my_old_version,$update_from_version_6))
-		{   //for version 1.6
-			$urlForm = get_config_param('rootWeb');
-			$encryptPassForm = get_config_param('userPasswordCrypted');
-			// Managing the $encryptPassForm 
-			if ($encryptPassForm=='1' ) {
-				$encryptPassForm = 'md5'; 
-			} elseif ($encryptPassForm=='0') {	  	
-				$encryptPassForm = 'none';
-			}
-			
-			$allowSelfReg = get_config_param('allowSelfReg');
-			$allowSelfRegProf = get_config_param('allowSelfRegProf');
-		}
-		else
-		{   //for version 1.8
-			$urlForm = $_configuration['root_web'];
-			$encryptPassForm = get_config_param('userPasswordCrypted');
-			// Managing the $encryptPassForm 
-			if ($encryptPassForm=='1' ) {
-				$encryptPassForm = 'md5'; 
-			} elseif ($encryptPassForm=='0') {	  	
-				$encryptPassForm = 'none';
-			}
-			
-			$allowSelfReg = false;
-			$tmp = get_config_param_from_db($dbHostForm,$dbUsernameForm,$dbPassForm,$db_name,'allow_registration');
-			if(!empty($tmp)) $allowSelfReg = $tmp;
-			$allowSelfRegProf = false;
-			$tmp = get_config_param_from_db($dbHostForm,$dbUsernameForm,$dbPassForm,$db_name,'allow_registration_as_teacher');
-			if(!empty($tmp)) $allowSelfRegProf = $tmp;
-		}
-	}
-	display_configuration_settings_form($installType, $urlForm, $languageForm, $emailForm, $adminFirstName, $adminLastName, $adminPhoneForm, $campusForm, $institutionForm, $institutionUrlForm, $encryptPassForm, $allowSelfReg, $allowSelfRegProf, $loginForm, $passForm);
-}
-elseif($_POST['step5'])
-{
-	//STEP 6 : LAST CHECK BEFORE INSTALL
-?>
-
-	<h2><?php echo display_step_sequence().get_lang('LastCheck'); ?></h2>
-
-	<?php echo get_lang('HereAreTheValuesYouEntered');?>
-	<br />
-	<b><?php echo get_lang('PrintThisPageToRememberPassAndOthers');?></b>
-
-	<blockquote>
-
-	<?php echo get_lang('MainLang').' : '.$languageForm; ?><br /><br />
-
-	<?php echo get_lang('DBHost').' : '.$dbHostForm; ?><br />
-	<?php echo get_lang('DBLogin').' : '.$dbUsernameForm; ?><br />
-	<?php echo get_lang('DBPassword').' : '.str_repeat('*',strlen($dbPassForm)); ?><br />
-	<?php if(!empty($dbPrefixForm)) echo get_lang('DbPrefixForm').' : '.$dbPrefixForm.'<br />'; ?>
-	<?php echo get_lang('MainDB').' : <b>'.$dbNameForm; ?></b><?php if($installType == 'new') echo ' (<font color="#cc0033">'.get_lang('ReadWarningBelow').'</font>)'; ?><br />
-	<?php 
-	if(!$singleDbForm) 
-	{
-		echo get_lang('StatDB').' : <b>'.$dbStatsForm.'</b>';
-		if($installType == 'new')
-		{
-			echo ' (<font color="#cc0033">'.get_lang('ReadWarningBelow').'</font>)';
-		}
-		echo '<br />';
-
-		echo get_lang('UserDB').' : <b>'.$dbUserForm.'</b>';
-		if($installType == 'new')
-		{
-			echo ' (<font color="#cc0033">'.get_lang('ReadWarningBelow').'</font>)';
-		}
-		echo '<br />';
-	}
-	?>
-	<?php echo get_lang('EnableTracking').' : '.($enableTrackingForm?get_lang('Yes'):get_lang('No')); ?><br />
-	<?php echo get_lang('SingleDb').' : '.($singleDbForm?get_lang('One'):get_lang('Several')); ?><br /><br />
-
-	<?php echo get_lang('AllowSelfReg').' : '.($allowSelfReg?get_lang('Yes'):get_lang('No')); ?><br />
-	<?php echo get_lang('EncryptMethodUserPass').' : ';
-  	echo $encryptPassForm;
-	?><br /><br/>
-
-	<?php echo get_lang('AdminEmail').' : '.$emailForm; ?><br />
-	<?php
-	if (api_is_western_name_order()) {
-		echo get_lang('AdminFirstName').' : '.$adminFirstName, '<br />', get_lang('AdminLastName').' : '.$adminLastName, '<br />';
-	} else {
-		echo get_lang('AdminLastName').' : '.$adminLastName, '<br />', get_lang('AdminFirstName').' : '.$adminFirstName, '<br />';
-	}
-	?>
-	<?php echo get_lang('AdminPhone').' : '.$adminPhoneForm; ?><br />
-
-	<?php if($installType == 'new'): ?>
-	<?php echo get_lang('AdminLogin').' : <b>'.$loginForm; ?></b><br />
-	<?php echo get_lang('AdminPass').' : <b>'.$passForm; ?></b><br /><br />
-	<?php else: ?>
-	<br />
-	<?php endif; ?>
-
-	<?php echo get_lang('CampusName').' : '.$campusForm; ?><br />
-	<?php echo get_lang('InstituteShortName').' : '.$institutionForm; ?><br />
-	<?php echo get_lang('InstituteURL').' : '.$institutionUrlForm; ?><br />
-	<?php echo get_lang('DokeosURL').' : '.$urlForm; ?><br />
-
-	</blockquote>
-
-	<?php if($installType == 'new'): ?>
-	<div style="background-color:#FFFFFF">
-	<p align="center"><b><font color="red">
-	<?php echo get_lang('Warning');?> !<br />
-	<?php echo get_lang('TheInstallScriptWillEraseAllTables');?>
-	</font></b></p>
-	</div>
-	<?php endif; ?>
-
-	<table width="100%">
-	<tr>
-	  <td><button type="submit" class="back" name="step4" value="&lt; <?php echo get_lang('Previous'); ?>" /><?php echo get_lang('Previous'); ?></button></td>
-	  <td align="right"><input type="hidden" name="is_executable" id="is_executable" value="-" /><button class="save" type="submit" name="step6" value="<?php echo get_lang('InstallDokeos'); ?> &gt;" onclick="javascript:if(this.value == '<?php $msg = get_lang('PleaseWait');?>...') return false; else this.value='<?php $msg = get_lang('InstallDokeos');?>...';" ><?php echo $msg; ?></button></td>
-	</tr>
-	</table>
-
-<?php
-}
-elseif($_POST['step6'])
-{
-	//STEP 6 : INSTALLATION PROCESS
-	if($installType == 'update')
-	{
-		if(empty($my_old_version)){$my_old_version='1.8.6';} //we guess
-		$_configuration['main_database'] = $dbNameForm;
-		//$urlAppendPath = get_config_param('urlAppend');
-        error_log('Starting migration process from '.$my_old_version.' ('.time().')',0);
-        
-    	if ($userPasswordCrypted=='1' ) {
-			$userPasswordCrypted = 'md5'; 
-		} elseif ($userPasswordCrypted=='0') {	  	
-			$userPasswordCrypted = 'none'; 
-		} 
-			
-		switch($my_old_version)
-		{
-			case '1.6':
-			case '1.6.0':
-			case '1.6.1':
-			case '1.6.2':
-			case '1.6.3':
-			case '1.6.4':
-			case '1.6.5':
-				include('update-db-1.6.x-1.8.0.inc.php');
-				include('update-files-1.6.x-1.8.0.inc.php');
-				//intentionally no break to continue processing
-			case '1.8':
-			case '1.8.0':
-				include('update-db-1.8.0-1.8.2.inc.php');
-				//intentionally no break to continue processing
-			case '1.8.2':
-				include('update-db-1.8.2-1.8.3.inc.php');
-				//intentionally no break to continue processing
-			case '1.8.3':
-				include('update-db-1.8.3-1.8.4.inc.php');
-				include('update-files-1.8.3-1.8.4.inc.php');
-			case '1.8.4':
-				include('update-db-1.8.4-1.8.5.inc.php');
-                include('update-files-1.8.4-1.8.5.inc.php');
-			case '1.8.5':
-				include('update-db-1.8.5-1.8.6.inc.php');
-                include('update-files-1.8.5-1.8.6.inc.php'); 
-            case '1.8.6':
-                include('update-db-1.8.6-1.8.6.1.inc.php');
-                include('update-files-1.8.6-1.8.6.1.inc.php'); 
-            default:
-                
-				break;
-		}
-	}
-	else
-	{
-		include('install_db.inc.php');
-		include('install_files.inc.php');
-	}
-
-	display_after_install_message($installType, $nbr_courses);
-}
-elseif($_POST['step1'] || $badUpdatePath)
-{
-	//STEP 1 : REQUIREMENTS
-	//make sure that proposed path is set, shouldn't be necessary but...
-	if(empty($proposedUpdatePath)){$proposedUpdatePath = $_POST['updatePath'];}
-	display_requirements($installType, $badUpdatePath, $proposedUpdatePath, $update_from_version_8, $update_from_version_6);
-}
-else
-{
-	//start screen
-	display_language_selection();
-}
-?>
-  </td>
-</tr>
-</table>
-</form>
-<br style="clear:both;" />
-<div class="push"></div>
-</div><!-- wrapper end-->
-<div id="footer">
-	<div class="copyright"><?php echo get_lang('Platform');?> <a href="http://www.dokeos.com" target="_blank"> Dokeos <?php echo $new_version ?></a> &copy; <?php echo date('Y'); ?> </div>
-	&nbsp;
-</div>
-</body>
-</html>
+<?php //$id: $
+/* For licensing terms, see /dokeos_license.txt */
+/**
+==============================================================================
+* GOAL : Dokeos installation
+* As seen from the user, the installation proceeds in 6 steps.
+* The user is presented with several webpages where he/she has to make choices
+* and/or fill in data.
+*
+* The aim is, as always, to have good default settings and suggestions.
+*
+* @todo	reduce high level of duplication in this code
+* @todo (busy) organise code into functions
+* @package dokeos.install
+==============================================================================
+*/
+
+/*
+==============================================================================
+		PHP VERSION CHECK & MBSTRING EXTENSION CHECK
+==============================================================================
+*/
+
+if ( !function_exists('version_compare') || version_compare( phpversion(), '5', '<' )) {
+	$error_message_php_version = <<<EOM
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+		<head>
+			<title>Wrong PHP version!</title>
+			<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+			<style type="text/css" media="screen, projection">
+				/*<![CDATA[*/
+				@import "../css/dokeos_blue/default.css";
+				/*]]>*/
+			</style>
+		</head>
+		<body>
+			<div id="wrapper">
+				<div id="header">
+					<div id="header1"><a href="http://www.dokeos.com" target="_blank">Dokeos Homepage</a></div>
+					<div class="clear"></div>
+					<div id="header2">&nbsp;</div>
+					<div id="header3">
+						<ul id="logout">
+							<li><a href="" target="_top"><span>&nbsp;</span></a></li>
+						</ul>
+						<ul>
+							<li id="current"><a href="#"><span>Installation</span></a></li>
+						</ul>
+						<div style="clear:both;" class="clear"></div>
+					</div>
+					<div id="header4">&nbsp;</div>
+				</div>
+
+				<div style="text-align: center;"><br /><br />
+						The version of scripting language on your server is wrong. Your server has to support PHP 5.x.x .<br />
+						<a href="../../documentation/installation_guide.html" target="_blank">Read the installation guide</a><br /><br />
+				</div>
+				<div id="push"></div>
+				</div>
+				
+			<div id="footer">
+				<div class="copyright">Platform <a href="http://www.dokeos.com" target="_blank"> Dokeos </a> &copy; 2009 </div>
+				&nbsp;
+			</div>
+			
+		</body>
+</html>
+EOM;
+	header('Content-Type: text/html; charset=UTF-8');
+	die($error_message_php_version);
+}
+
+/*
+==============================================================================
+		INIT SECTION
+==============================================================================
+*/
+session_start();
+// Including necessary files
+@include '../inc/installedVersion.inc.php';
+require '../inc/lib/main_api.lib.php';
+
+require '../lang/english/trad4all.inc.php';
+require '../lang/english/install.inc.php';
+
+if (!empty($_POST['language_list'])) {
+	$search = array('../','\\0');
+	$install_language = str_replace($search,'',urldecode($_POST['language_list']));
+	if(!is_dir('../lang/'.$install_language)){$install_language = 'english';}
+	include_once "../lang/$install_language/trad4all.inc.php";
+	include_once "../lang/$install_language/install.inc.php";
+	api_session_register('install_language');
+} elseif ( isset($_SESSION['install_language']) && $_SESSION['install_language'] ) {
+	$install_language = $_SESSION['install_language'];
+	include_once "../lang/$install_language/trad4all.inc.php";
+	include_once "../lang/$install_language/install.inc.php";
+}
+
+// These global variables must be set for proper working of the function get_lang(...) during the installation.
+$language_interface = $install_language;
+$language_interface_initial_value = $install_language;
+
+/* TODO: Obsolete logic, to be removed.
+$charset = '';
+//force ISO-8859-15 for European languages. Leave Apache determine the encoding for others (HTML declaring UTF-8)
+$euro_langs = array('english','french','french_KM','french_corporate','french_org','dutch','spanish','german','italian','greek','danish','swedish','norwegian','polish','galician','catalan','czech','finnish');
+if (isset($install_language))
+{
+	if(in_array($install_language,$euro_langs))
+	{
+		$charset = 'ISO-8859-15'; // TODO: This should be UTF-8 for some languages.
+		header('Content-Type: text/html; charset='. $charset);
+	}
+}
+*/
+
+// Character set during installation: ISO-8859-15 for Latin 1 languages, UTF-8 for other languages.
+$charset = 'UTF-8';
+if (isset($install_language)) {
+	if (strpos($install_language, 'unicode') === false && api_is_latin1_compatible($install_language))
+	{
+		// TODO: This is for backward compatibility. Actually, all the languages may use UTF-8.
+		$charset = 'ISO-8859-15';
+	}
+}
+header('Content-Type: text/html; charset='. $charset);
+
+// Initialization of the multibyte string library.
+api_initialize_string_library();
+// Initialization of the default encoding that will be used by the multibyte string routines.
+api_set_string_library_default_encoding($charset);
+
+require_once 'install_upgrade.lib.php'; //also defines constants
+require_once 'install_functions.inc.php';
+
+// Some constants
+define('DOKEOS_INSTALL',1);
+define('MAX_COURSE_TRANSFER',100);
+define('INSTALL_TYPE_UPDATE', 'update');
+define('FORM_FIELD_DISPLAY_LENGTH', 40);
+define('DATABASE_FORM_FIELD_DISPLAY_LENGTH', 25);
+define('MAX_FORM_FIELD_LENGTH', 80);
+define('DEFAULT_LANGUAGE', 'english');
+
+// setting the error reporting
+error_reporting(E_COMPILE_ERROR | E_ERROR | E_CORE_ERROR);
+
+// overriding the timelimit (for large campusses that have to be migrated)
+@set_time_limit(0);
+
+//upgrading from any subversion of 1.6 is just like upgrading from 1.6.5 
+$update_from_version_6=array('1.6','1.6.1','1.6.2','1.6.3','1.6.4','1.6.5');
+//upgrading from any subversion of 1.8 avoids the additional step of upgrading from 1.6
+$update_from_version_8=array('1.8','1.8.2','1.8.3','1.8.4','1.8.5','1.8.6');
+$my_old_version = '';
+$tmp_version = get_config_param('dokeos_version');
+if(!empty($_POST['old_version'])) {
+	$my_old_version = $_POST['old_version'];
+} elseif(!empty($tmp_version)) {
+    $my_old_version = $tmp_version;
+}
+elseif(!empty($dokeos_version)) //variable coming from installedVersion, normally
+{
+	$my_old_version = $dokeos_version;
+}
+
+$new_version = '1.8.6.1';
+$new_version_stable = true;
+$new_version_major = false;
+/*
+==============================================================================
+		STEP 1 : INITIALIZES FORM VARIABLES IF IT IS THE FIRST VISIT
+==============================================================================
+*/
+
+//Is valid request
+$is_valid_request=$_REQUEST['is_executable'];
+foreach ($_POST as $request_index=>$request_value) {
+	if (substr($request_index,0,4)=='step') {
+		if ($request_index<>$is_valid_request) {
+			unset($_POST[$request_index]);
+		}
+	}
+}
+
+$badUpdatePath=false;
+$emptyUpdatePath=true;
+$proposedUpdatePath = '';
+if(!empty($_POST['updatePath']))
+{
+	$proposedUpdatePath = $_POST['updatePath'];	
+}
+
+if ($_POST['step2_install'] || $_POST['step2_update_8'] || $_POST['step2_update_6']) {
+	if ($_POST['step2_install']) {
+		$installType='new';
+
+		$_POST['step2']=1;
+	} else {
+		$installType='update';
+		if($_POST['step2_update_8'])
+		{
+			$emptyUpdatePath = false;
+			if(empty($_POST['updatePath']))
+			{
+				$proposedUpdatePath = $_SERVER['DOCUMENT_ROOT'];
+			}
+			else
+			{
+				$proposedUpdatePath = $_POST['updatePath'];
+			}
+			if(substr($proposedUpdatePath,-1) != '/')
+			{
+				$proposedUpdatePath.='/';
+			}			
+			if(file_exists($proposedUpdatePath))
+			{
+				if(in_array($my_old_version,$update_from_version_8))
+				{
+					$_POST['step2']=1;
+				}
+				else
+				{
+					$badUpdatePath=true;
+				}
+			}
+			else
+			{
+				$badUpdatePath=true;
+			}
+		}
+		else //step2_update_6, presumably
+		{
+			if(empty($_POST['updatePath']))
+			{
+				$_POST['step1']=1;
+			}
+			else
+			{
+				$emptyUpdatePath = false;
+				if(substr($_POST['updatePath'],-1) != '/')
+				{
+					$_POST['updatePath'].='/';
+				}
+	
+				if(file_exists($_POST['updatePath']))
+				{
+					//1.6.x
+					$my_old_version = get_config_param('clarolineVersion',$_POST['updatePath']);
+					if(in_array($my_old_version,$update_from_version_6))
+					{
+						$_POST['step2']=1;
+						$proposedUpdatePath = $_POST['updatePath'];
+					}
+					else
+					{
+						$badUpdatePath=true;
+					}
+				}
+				else
+				{
+					$badUpdatePath=true;
+				}
+			}
+		}
+	}
+}
+elseif($_POST['step1'])
+{
+	$_POST['updatePath']='';
+	$installType='';
+	$updateFromConfigFile='';
+	unset($_GET['running']);
+}
+else
+{
+	$installType=$_GET['installType'];
+	$updateFromConfigFile=$_GET['updateFromConfigFile'];
+}
+
+if($installType=='update' && in_array($my_old_version,$update_from_version_8))
+{
+	include_once '../inc/conf/configuration.php';
+}
+
+if(!isset($_GET['running'])) {
+	$dbHostForm='localhost';
+	$dbUsernameForm='root';
+	$dbPassForm='';
+ 	$dbPrefixForm='';
+	$dbNameForm='dokeos_main';
+	$dbStatsForm='dokeos_stats';
+	$dbScormForm='dokeos_scorm';
+	$dbUserForm='dokeos_user';
+
+	// extract the path to append to the url if Dokeos is not installed on the web root directory
+	$urlAppendPath=str_replace('/main/install/index.php','',api_get_self());
+  	$urlForm='http://'.$_SERVER['HTTP_HOST'].$urlAppendPath.'/';
+	$pathForm=str_replace('\\','/',realpath('../..')).'/';
+
+	$emailForm=$_SERVER['SERVER_ADMIN'];
+	$email_parts = explode('@',$emailForm);
+	if($email_parts[1] == 'localhost')
+	{
+		$emailForm .= '.localdomain';
+	}
+	$adminLastName='Doe';
+	$adminFirstName='John';
+	$loginForm='admin';
+	$passForm=api_generate_password();
+
+	$campusForm='My campus';
+	$educationForm='Albert Einstein';
+	$adminPhoneForm='(000) 001 02 03';
+	$institutionForm='My Organisation';
+	$institutionUrlForm='http://www.dokeos.com';
+
+	$languageForm='english';
+
+	$checkEmailByHashSent=0;
+	$ShowEmailnotcheckedToStudent=1;
+	$userMailCanBeEmpty=1;
+	$allowSelfReg=1;
+	$allowSelfRegProf=1;
+	$enableTrackingForm=1;
+	$singleDbForm=0;
+	$encryptPassForm='md5';
+	$session_lifetime=360000;
+}
+else
+{
+	foreach($_POST as $key=>$val)
+	{
+		$magic_quotes_gpc=ini_get('magic_quotes_gpc')?true:false;
+
+		if(is_string($val))
+		{
+			if($magic_quotes_gpc)
+			{
+				$val=stripslashes($val);
+			}
+
+			$val=trim($val);
+
+			$_POST[$key]=$val;
+		}
+		elseif(is_array($val))
+		{
+			foreach($val as $key2=>$val2)
+			{
+				if($magic_quotes_gpc)
+				{
+					$val2=stripslashes($val2);
+				}
+
+				$val2=trim($val2);
+
+				$_POST[$key][$key2]=$val2;
+			}
+		}
+
+		$GLOBALS[$key]=$_POST[$key];
+	}
+}
+
+// The Steps
+$total_steps=7;
+if (!$_POST)
+{
+	$current_step=1;
+}
+elseif (!empty($_POST['language_list']) or !empty($_POST['step1']) or ((!empty($_POST['step2_update_8']) or (!empty($_POST['step2_update_6'])))  && ($emptyUpdatePath or $badUpdatePath)))
+{
+	$current_step=2;
+}
+elseif (!empty($_POST['step2']) or (!empty($_POST['step2_update_8']) or (!empty($_POST['step2_update_6'])) ))
+{
+	$current_step=3;
+}
+elseif (!empty($_POST['step3']))
+{
+	$current_step=4;
+}
+elseif (!empty($_POST['step4']))
+{
+	$current_step=5;
+}
+elseif (!empty($_POST['step5']))
+{
+	$current_step=6;
+}
+
+
+// Managing the $encryptPassForm 
+if ($encryptPassForm=='1' ) {
+	$encryptPassForm = 'md5'; 
+} elseif ($encryptPassForm=='0') {	  	
+	$encryptPassForm = 'none';
+}
+
+?>
+<!DOCTYPE html
+     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title>&mdash; <?php echo get_lang('DokeosInstallation').' &mdash; '.get_lang('Version_').' '.$new_version; ?></title>
+	<style type="text/css" media="screen, projection">
+		/*<![CDATA[*/
+		@import "../css/dokeos_blue/default.css";
+		/*]]>*/
+	</style>
+	<script type="text/javascript" src="../inc/lib/javascript/jquery.js"></script>
+	<script type="text/javascript" >
+		$(document).ready( function() {
+			 //checked
+			if ($('#singleDb1').attr('checked')==false) {
+					$('#dbStatsForm').removeAttr('disabled');
+					$('#dbUserForm').removeAttr('disabled');
+					$('#dbStatsForm').attr('value','dokeos_stats');
+					$('#dbUserForm').attr('value','dokeos_user');			
+			} else if($('#singleDb1').attr('checked')==true){
+					$('#dbStatsForm').attr('disabled','disabled');
+					$('#dbUserForm').attr('disabled','disabled');
+					$('#dbStatsForm').attr('value','dokeos_main');
+					$('#dbUserForm').attr('value','dokeos_main');												
+			}
+		//Allow dokeos install in IE
+		$("button").click(function() {
+			$("#is_executable").attr("value",$(this).attr("name"));
+		});
+			
+	 	} ); 	
+	</script>
+	<script type="text/javascript">
+
+		function show_hide_tracking_and_user_db (my_option) {
+			if (my_option=='singleDb1') {
+				$('#dbStatsForm').attr('disabled','true');
+				$('#dbUserForm').attr('disabled','true');
+				$('#dbStatsForm').attr('value','dokeos_main');
+				$('#dbUserForm').attr('value','dokeos_main');								
+			} else if (my_option=='singleDb0') {
+				$('#dbStatsForm').removeAttr('disabled');
+				$('#dbUserForm').removeAttr('disabled');
+				$('#dbStatsForm').attr('value','dokeos_stats');
+				$('#dbUserForm').attr('value','dokeos_user');											
+			}
+		}
+	</script>	
+	<script language="javascript">
+		init_visibility=0;
+		function show_hide_option() {
+			if(init_visibility == 0) {
+				document.getElementById('optional_param1').style.display = '';
+				document.getElementById('optional_param2').style.display = '';
+				if(document.getElementById('optional_param3'))
+				{
+					document.getElementById('optional_param3').style.display = '';
+				}
+				document.getElementById('optional_param4').style.display = '';
+				document.getElementById('optional_param5').style.display = '';
+				document.getElementById('optional_param6').style.display = '';
+				init_visibility = 1;
+			document.getElementById('optionalparameters').innerHTML='<img style="vertical-align:middle;" src="../img/div_hide.gif" alt="" /> <?php echo get_lang('OptionalParameters'); ?>';
+			} else {
+				document.getElementById('optional_param1').style.display = 'none';
+				document.getElementById('optional_param2').style.display = 'none';
+				if(document.getElementById('optional_param3')) {
+					document.getElementById('optional_param3').style.display = 'none';
+				}
+				document.getElementById('optional_param4').style.display = 'none';
+				document.getElementById('optional_param5').style.display = 'none';
+				document.getElementById('optional_param6').style.display = 'none';
+			document.getElementById('optionalparameters').innerHTML='<img style="vertical-align:middle;" src="../img/div_show.gif" alt="" /> <?php echo get_lang('OptionalParameters'); ?>';
+				init_visibility = 0;				
+			}
+		}
+	</script>
+<?php if(!empty($charset)){ ?>
+	<meta http-equiv="Content-Type" content="text/html; charset=<?php echo $charset ?>" />
+<?php } ?>
+</head>
+<body dir="<?php echo $text_dir ?>">
+
+<div id="wrapper">
+
+<div id="header">
+	<div id="header1"><?php echo get_lang('DokeosInstallation').' &mdash; '.get_lang('Version_').' '.$new_version; ?><?php if($installType == 'new') echo ' &ndash; '.get_lang('NewInstallation'); else if($installType == 'update') echo ' &ndash; '.get_lang('UpdateFromDokeosVersion').(is_array($update_from_version)?implode('|',$update_from_version):''); ?></div>
+	<div id="header2">&nbsp;</div>
+	<div id="header3">
+		<ul>
+			<li id="current"><a href="#"><span>Installation</span></a></li>
+		</ul>	
+	</div>
+</div>
+
+
+<form style="padding: 0px; margin: 0px;" method="post" action="<?php echo api_get_self(); ?>?running=1&amp;installType=<?php echo $installType; ?>&amp;updateFromConfigFile=<?php echo urlencode($updateFromConfigFile); ?>">
+
+<div id="installation_steps" style="width:240px">
+	<img src="../img/bluelogo.gif" hspace="10" vspace="10" alt="Dokeos logo" />
+	<ol>
+		<li <?php step_active('1'); ?>><?php echo get_lang('InstallationLanguage'); ?></li>
+		<li <?php step_active('2'); ?>><?php echo get_lang('Requirements'); ?></li>
+		<li <?php step_active('3'); ?>><?php echo get_lang('Licence'); ?></li>
+		<li <?php step_active('4'); ?>><?php echo get_lang('DBSetting'); ?></li>
+		<li <?php step_active('5'); ?>><?php echo get_lang('CfgSetting'); ?></li>
+		<li <?php step_active('6'); ?>><?php echo get_lang('PrintOverview'); ?></li>
+		<li <?php step_active('7'); ?>><?php echo get_lang('Installing'); ?></li>
+	</ol>
+</div>
+
+<table cellpadding="6" cellspacing="0" border="0" width="72%" align="center">
+<tr>
+<td>
+	<div id="note" style="float:right;">
+		<a href="../../documentation/installation_guide.html" target="_blank">Read the installation guide</a>
+	</div>
+</td>
+</tr>
+<tr>
+  <td>
+	<input type="hidden" name="updatePath"           value="<?php if(!$badUpdatePath) echo api_htmlentities($proposedUpdatePath, ENT_QUOTES, $charset); ?>" />
+	<input type="hidden" name="urlAppendPath"        value="<?php echo api_htmlentities($urlAppendPath, ENT_QUOTES, $charset); ?>" />
+	<input type="hidden" name="pathForm"             value="<?php echo api_htmlentities($pathForm, ENT_QUOTES, $charset); ?>" />
+	<input type="hidden" name="urlForm"              value="<?php echo api_htmlentities($urlForm, ENT_QUOTES, $charset); ?>" />
+	<input type="hidden" name="dbHostForm"           value="<?php echo api_htmlentities($dbHostForm, ENT_QUOTES, $charset); ?>" />
+	<input type="hidden" name="dbUsernameForm"       value="<?php echo api_htmlentities($dbUsernameForm, ENT_QUOTES, $charset); ?>" />
+	<input type="hidden" name="dbPassForm"           value="<?php echo api_htmlentities($dbPassForm, ENT_QUOTES, $charset); ?>" />
+	<input type="hidden" name="singleDbForm"         value="<?php echo api_htmlentities($singleDbForm, ENT_QUOTES, $charset); ?>" />
+	<input type="hidden" name="dbPrefixForm"         value="<?php echo api_htmlentities($dbPrefixForm, ENT_QUOTES, $charset); ?>" />
+	<input type="hidden" name="dbNameForm"           value="<?php echo api_htmlentities($dbNameForm, ENT_QUOTES, $charset); ?>" />
+<?php
+	if($installType == 'update' OR $singleDbForm == 0)
+	{
+?>
+	<input type="hidden" name="dbStatsForm"          value="<?php echo api_htmlentities($dbStatsForm, ENT_QUOTES, $charset); ?>" />
+	<input type="hidden" name="dbScormForm"          value="<?php echo api_htmlentities($dbScormForm, ENT_QUOTES, $charset); ?>" />
+	<input type="hidden" name="dbUserForm"           value="<?php echo api_htmlentities($dbUserForm, ENT_QUOTES, $charset); ?>" />
+<?php
+	}
+	else
+	{
+?>
+	<input type="hidden" name="dbStatsForm"          value="<?php echo api_htmlentities($dbNameForm, ENT_QUOTES, $charset); ?>" />
+	<input type="hidden" name="dbUserForm"           value="<?php echo api_htmlentities($dbNameForm, ENT_QUOTES, $charset); ?>" />
+<?php
+	}
+?>
+	<input type="hidden" name="enableTrackingForm"   value="<?php echo api_htmlentities($enableTrackingForm, ENT_QUOTES, $charset); ?>" />
+	<input type="hidden" name="allowSelfReg"         value="<?php echo api_htmlentities($allowSelfReg, ENT_QUOTES, $charset); ?>" />
+	<input type="hidden" name="allowSelfRegProf"     value="<?php echo api_htmlentities($allowSelfRegProf, ENT_QUOTES, $charset); ?>" />
+	<input type="hidden" name="emailForm"            value="<?php echo api_htmlentities($emailForm, ENT_QUOTES, $charset); ?>" />
+	<input type="hidden" name="adminLastName"        value="<?php echo api_htmlentities($adminLastName, ENT_QUOTES, $charset); ?>" />
+	<input type="hidden" name="adminFirstName"       value="<?php echo api_htmlentities($adminFirstName, ENT_QUOTES, $charset); ?>" />
+	<input type="hidden" name="adminPhoneForm"       value="<?php echo api_htmlentities($adminPhoneForm, ENT_QUOTES, $charset); ?>" />
+	<input type="hidden" name="loginForm"            value="<?php echo api_htmlentities($loginForm, ENT_QUOTES, $charset); ?>" />
+	<input type="hidden" name="passForm"             value="<?php echo api_htmlentities($passForm, ENT_QUOTES, $charset); ?>" />
+	<input type="hidden" name="languageForm"         value="<?php echo api_htmlentities($languageForm, ENT_QUOTES, $charset); ?>" />
+	<input type="hidden" name="campusForm"           value="<?php echo api_htmlentities($campusForm, ENT_QUOTES, $charset); ?>" />
+	<input type="hidden" name="educationForm"        value="<?php echo api_htmlentities($educationForm, ENT_QUOTES, $charset); ?>" />
+	<input type="hidden" name="institutionForm"      value="<?php echo api_htmlentities($institutionForm, ENT_QUOTES, $charset); ?>" />
+	<input type="hidden" name="institutionUrlForm"   value="<?php echo api_stristr($institutionUrlForm, 'http://', false, $charset) ? api_htmlentities($institutionUrlForm, ENT_QUOTES, $charset) : api_stristr($institutionUrlForm, 'https://', false, $charset) ? api_htmlentities($institutionUrlForm, ENT_QUOTES, $charset) : 'http://'.api_htmlentities($institutionUrlForm, ENT_QUOTES, $charset); ?>" />
+	<input type="hidden" name="checkEmailByHashSent" value="<?php echo api_htmlentities($checkEmailByHashSent, ENT_QUOTES, $charset); ?>" />
+	<input type="hidden" name="ShowEmailnotcheckedToStudent" value="<?php echo api_htmlentities($ShowEmailnotcheckedToStudent, ENT_QUOTES, $charset); ?>" />
+	<input type="hidden" name="userMailCanBeEmpty"   value="<?php echo api_htmlentities($userMailCanBeEmpty, ENT_QUOTES, $charset); ?>" />
+	<input type="hidden" name="encryptPassForm"      value="<?php echo api_htmlentities($encryptPassForm, ENT_QUOTES, $charset); ?>" />
+	<input type="hidden" name="session_lifetime"  value="<?php echo api_htmlentities($session_lifetime, ENT_QUOTES, $charset); ?>" />
+	<input type="hidden" name="old_version"  value="<?php echo api_htmlentities($my_old_version, ENT_QUOTES, $charset); ?>" />
+	<input type="hidden" name="new_version"  value="<?php echo api_htmlentities($new_version, ENT_QUOTES, $charset); ?>" />
+
+
+
+
+<?php
+if($_POST['step2'])
+{
+	//STEP 3 : LICENSE
+	display_license_agreement();
+}
+elseif($_POST['step3'])
+{
+	//STEP 4 : MYSQL DATABASE SETTINGS
+	display_database_settings_form($installType, $dbHostForm, $dbUsernameForm, $dbPassForm, $dbPrefixForm, $enableTrackingForm, $singleDbForm, $dbNameForm, $dbStatsForm, $dbScormForm, $dbUserForm);
+}
+elseif($_POST['step4'])
+{
+
+	//STEP 5 : CONFIGURATION SETTINGS
+	//if update, try getting settings from the database...
+	if($installType == 'update')
+	{
+		$db_name = $dbNameForm;
+		$tmp = get_config_param_from_db($dbHostForm,$dbUsernameForm,$dbPassForm,$db_name,'platformLanguage');
+		if(!empty($tmp)) $languageForm = $tmp;
+		$tmp = get_config_param_from_db($dbHostForm,$dbUsernameForm,$dbPassForm,$db_name,'emailAdministrator');
+		if(!empty($tmp)) $emailForm = $tmp;
+		$tmp = get_config_param_from_db($dbHostForm,$dbUsernameForm,$dbPassForm,$db_name,'administratorName');
+		if(!empty($tmp)) $adminFirstName = $tmp;
+		$tmp = get_config_param_from_db($dbHostForm,$dbUsernameForm,$dbPassForm,$db_name,'administratorSurname');
+		if(!empty($tmp)) $adminLastName = $tmp;
+		$tmp = get_config_param_from_db($dbHostForm,$dbUsernameForm,$dbPassForm,$db_name,'administratorTelephone');
+		if(!empty($tmp)) $adminPhoneForm = $tmp;
+		$tmp = get_config_param_from_db($dbHostForm,$dbUsernameForm,$dbPassForm,$db_name,'siteName');
+		if(!empty($tmp)) $campusForm = $tmp;
+		$tmp = get_config_param_from_db($dbHostForm,$dbUsernameForm,$dbPassForm,$db_name,'Institution');
+		if(!empty($tmp)) $institutionForm = $tmp;
+		$tmp = get_config_param_from_db($dbHostForm,$dbUsernameForm,$dbPassForm,$db_name,'InstitutionUrl');
+		if(!empty($tmp)) $institutionUrlForm = $tmp;
+		if(in_array($my_old_version,$update_from_version_6))
+		{   //for version 1.6
+			$urlForm = get_config_param('rootWeb');
+			$encryptPassForm = get_config_param('userPasswordCrypted');
+			// Managing the $encryptPassForm 
+			if ($encryptPassForm=='1' ) {
+				$encryptPassForm = 'md5'; 
+			} elseif ($encryptPassForm=='0') {	  	
+				$encryptPassForm = 'none';
+			}
+			
+			$allowSelfReg = get_config_param('allowSelfReg');
+			$allowSelfRegProf = get_config_param('allowSelfRegProf');
+		}
+		else
+		{   //for version 1.8
+			$urlForm = $_configuration['root_web'];
+			$encryptPassForm = get_config_param('userPasswordCrypted');
+			// Managing the $encryptPassForm 
+			if ($encryptPassForm=='1' ) {
+				$encryptPassForm = 'md5'; 
+			} elseif ($encryptPassForm=='0') {	  	
+				$encryptPassForm = 'none';
+			}
+			
+			$allowSelfReg = false;
+			$tmp = get_config_param_from_db($dbHostForm,$dbUsernameForm,$dbPassForm,$db_name,'allow_registration');
+			if(!empty($tmp)) $allowSelfReg = $tmp;
+			$allowSelfRegProf = false;
+			$tmp = get_config_param_from_db($dbHostForm,$dbUsernameForm,$dbPassForm,$db_name,'allow_registration_as_teacher');
+			if(!empty($tmp)) $allowSelfRegProf = $tmp;
+		}
+	}
+	display_configuration_settings_form($installType, $urlForm, $languageForm, $emailForm, $adminFirstName, $adminLastName, $adminPhoneForm, $campusForm, $institutionForm, $institutionUrlForm, $encryptPassForm, $allowSelfReg, $allowSelfRegProf, $loginForm, $passForm);
+}
+elseif($_POST['step5'])
+{
+	//STEP 6 : LAST CHECK BEFORE INSTALL
+?>
+
+	<h2><?php echo display_step_sequence().get_lang('LastCheck'); ?></h2>
+
+	<?php echo get_lang('HereAreTheValuesYouEntered');?>
+	<br />
+	<b><?php echo get_lang('PrintThisPageToRememberPassAndOthers');?></b>
+
+	<blockquote>
+
+	<?php echo get_lang('MainLang').' : '.$languageForm; ?><br /><br />
+
+	<?php echo get_lang('DBHost').' : '.$dbHostForm; ?><br />
+	<?php echo get_lang('DBLogin').' : '.$dbUsernameForm; ?><br />
+	<?php echo get_lang('DBPassword').' : '.str_repeat('*',strlen($dbPassForm)); ?><br />
+	<?php if(!empty($dbPrefixForm)) echo get_lang('DbPrefixForm').' : '.$dbPrefixForm.'<br />'; ?>
+	<?php echo get_lang('MainDB').' : <b>'.$dbNameForm; ?></b><?php if($installType == 'new') echo ' (<font color="#cc0033">'.get_lang('ReadWarningBelow').'</font>)'; ?><br />
+	<?php 
+	if(!$singleDbForm) 
+	{
+		echo get_lang('StatDB').' : <b>'.$dbStatsForm.'</b>';
+		if($installType == 'new')
+		{
+			echo ' (<font color="#cc0033">'.get_lang('ReadWarningBelow').'</font>)';
+		}
+		echo '<br />';
+
+		echo get_lang('UserDB').' : <b>'.$dbUserForm.'</b>';
+		if($installType == 'new')
+		{
+			echo ' (<font color="#cc0033">'.get_lang('ReadWarningBelow').'</font>)';
+		}
+		echo '<br />';
+	}
+	?>
+	<?php echo get_lang('EnableTracking').' : '.($enableTrackingForm?get_lang('Yes'):get_lang('No')); ?><br />
+	<?php echo get_lang('SingleDb').' : '.($singleDbForm?get_lang('One'):get_lang('Several')); ?><br /><br />
+
+	<?php echo get_lang('AllowSelfReg').' : '.($allowSelfReg?get_lang('Yes'):get_lang('No')); ?><br />
+	<?php echo get_lang('EncryptMethodUserPass').' : ';
+  	echo $encryptPassForm;
+	?><br /><br/>
+
+	<?php echo get_lang('AdminEmail').' : '.$emailForm; ?><br />
+	<?php
+	if (api_is_western_name_order()) {
+		echo get_lang('AdminFirstName').' : '.$adminFirstName, '<br />', get_lang('AdminLastName').' : '.$adminLastName, '<br />';
+	} else {
+		echo get_lang('AdminLastName').' : '.$adminLastName, '<br />', get_lang('AdminFirstName').' : '.$adminFirstName, '<br />';
+	}
+	?>
+	<?php echo get_lang('AdminPhone').' : '.$adminPhoneForm; ?><br />
+
+	<?php if($installType == 'new'): ?>
+	<?php echo get_lang('AdminLogin').' : <b>'.$loginForm; ?></b><br />
+	<?php echo get_lang('AdminPass').' : <b>'.$passForm; ?></b><br /><br />
+	<?php else: ?>
+	<br />
+	<?php endif; ?>
+
+	<?php echo get_lang('CampusName').' : '.$campusForm; ?><br />
+	<?php echo get_lang('InstituteShortName').' : '.$institutionForm; ?><br />
+	<?php echo get_lang('InstituteURL').' : '.$institutionUrlForm; ?><br />
+	<?php echo get_lang('DokeosURL').' : '.$urlForm; ?><br />
+
+	</blockquote>
+
+	<?php if($installType == 'new'): ?>
+	<div style="background-color:#FFFFFF">
+	<p align="center"><b><font color="red">
+	<?php echo get_lang('Warning');?> !<br />
+	<?php echo get_lang('TheInstallScriptWillEraseAllTables');?>
+	</font></b></p>
+	</div>
+	<?php endif; ?>
+
+	<table width="100%">
+	<tr>
+	  <td><button type="submit" class="back" name="step4" value="&lt; <?php echo get_lang('Previous'); ?>" /><?php echo get_lang('Previous'); ?></button></td>
+	  <td align="right"><input type="hidden" name="is_executable" id="is_executable" value="-" /><button class="save" type="submit" name="step6" value="<?php echo get_lang('InstallDokeos'); ?> &gt;" onclick="javascript:if(this.value == '<?php $msg = get_lang('PleaseWait');?>...') return false; else this.value='<?php $msg = get_lang('InstallDokeos');?>...';" ><?php echo $msg; ?></button></td>
+	</tr>
+	</table>
+
+<?php
+}
+elseif($_POST['step6'])
+{
+	//STEP 6 : INSTALLATION PROCESS
+	if($installType == 'update')
+	{
+		if(empty($my_old_version)){$my_old_version='1.8.6';} //we guess
+		$_configuration['main_database'] = $dbNameForm;
+		//$urlAppendPath = get_config_param('urlAppend');
+        error_log('Starting migration process from '.$my_old_version.' ('.time().')',0);
+        
+    	if ($userPasswordCrypted=='1' ) {
+			$userPasswordCrypted = 'md5'; 
+		} elseif ($userPasswordCrypted=='0') {	  	
+			$userPasswordCrypted = 'none'; 
+		} 
+			
+		switch($my_old_version)
+		{
+			case '1.6':
+			case '1.6.0':
+			case '1.6.1':
+			case '1.6.2':
+			case '1.6.3':
+			case '1.6.4':
+			case '1.6.5':
+				include('update-db-1.6.x-1.8.0.inc.php');
+				include('update-files-1.6.x-1.8.0.inc.php');
+				//intentionally no break to continue processing
+			case '1.8':
+			case '1.8.0':
+				include('update-db-1.8.0-1.8.2.inc.php');
+				//intentionally no break to continue processing
+			case '1.8.2':
+				include('update-db-1.8.2-1.8.3.inc.php');
+				//intentionally no break to continue processing
+			case '1.8.3':
+				include('update-db-1.8.3-1.8.4.inc.php');
+				include('update-files-1.8.3-1.8.4.inc.php');
+			case '1.8.4':
+				include('update-db-1.8.4-1.8.5.inc.php');
+                include('update-files-1.8.4-1.8.5.inc.php');
+			case '1.8.5':
+				include('update-db-1.8.5-1.8.6.inc.php');
+                include('update-files-1.8.5-1.8.6.inc.php'); 
+            case '1.8.6':
+                include('update-db-1.8.6-1.8.6.1.inc.php');
+                include('update-files-1.8.6-1.8.6.1.inc.php'); 
+            default:
+                
+				break;
+		}
+	}
+	else
+	{
+		include('install_db.inc.php');
+		include('install_files.inc.php');
+	}
+
+	display_after_install_message($installType, $nbr_courses);
+}
+elseif($_POST['step1'] || $badUpdatePath)
+{
+	//STEP 1 : REQUIREMENTS
+	//make sure that proposed path is set, shouldn't be necessary but...
+	if(empty($proposedUpdatePath)){$proposedUpdatePath = $_POST['updatePath'];}
+	display_requirements($installType, $badUpdatePath, $proposedUpdatePath, $update_from_version_8, $update_from_version_6);
+}
+else
+{
+	//start screen
+	display_language_selection();
+}
+?>
+  </td>
+</tr>
+</table>
+</form>
+<br style="clear:both;" />
+<div class="push"></div>
+</div><!-- wrapper end-->
+<div id="footer">
+	<div class="copyright"><?php echo get_lang('Platform');?> <a href="http://www.dokeos.com" target="_blank"> Dokeos <?php echo $new_version ?></a> &copy; <?php echo date('Y'); ?> </div>
+	&nbsp;
+</div>
+</body>
+</html>

+ 1231 - 1231
main/install/install_functions.inc.php

@@ -1,1231 +1,1231 @@
-<?php
-/**
- * This function prints class=active_step $current_step=$param
- * @author Patrick Cool <patrick.cool@UGent.be>, 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).' &ndash; ';
-}
-/**
- * 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 Gesche
- * @author 	Patrick Cool <patrick.cool@UGent.be>, Ghent University
- * @author	Yannick Warnier <yannick.warnier@dokeos.com>
- * @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 '<strong><font color="green">'.$return_success.'</font></strong>';
-	}
-	else
-	{
-		if($optional===true)
-		{
-			return '<strong><font color="#ff9900">'.$return_failure.'</font></strong>';
-		}
-		else
-		{
-			return '<strong><font color="red">'.$return_failure.'</font></strong>';
-		}
-	}
-}
-
-
-/**
- * This function checks whether a php setting matches the recommended value
- *
- * @author Patrick Cool <patrick.cool@UGent.be>, 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 '<strong><font color="green">'.$current_php_value.' '.$return_success.'</font></strong>';
-	}
-	else
-	{
-		return '<strong><font color="red">'.$current_php_value.' '.$return_failure.'</font></strong>';
-	}
-}
-/**
- * Enter description here...
- *
- * @param string $val a php ini value
- * @return boolean: ON or OFF
- * @author Joomla <http://www.joomla.org>
- */
-function get_php_setting($val) {
-	$r =  (ini_get($val) == '1' ? 1 : 0);
-	return $r ? 'ON' : 'OFF';
-}
-
-/**
- * This function checks if the given folder is writable
- */
-function check_writable($folder)
-{
-	if (is_writable('../'.$folder))
-	{
-		return '<strong><font color="green">'.get_lang('Writable').'</font></strong>';
-	}
-	else
-	{
-		return '<strong><font color="red">'.get_lang('NotWritable').'</font></strong>';
-	}
-}
-
-/**
- * this function returns a string "FALSE" or "TRUE" according to the variable in parameter
- *
- * @param integer  $var  the variable to convert
- * @return  string  the string "FALSE" or "TRUE"
- * @author Christophe Gesche
- */
-function trueFalse($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);
-	$result = explode('<br />',nl2br($buffer));
-	return $result;
-}
-
-/**
- * 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
- */
-function get_config_param($param,$updatePath='')
-{
-	global $configFile, $updateFromConfigFile;
-	//look if we already have the queried param
-	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';
-		}
-		//give up recovering
-		else
-		{
-			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';
-	}
-	//the param was not found in global vars, so look into the old config file
-	elseif(file_exists($updatePath.$updateFromConfigFile))
-	{
-		//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)
-		$temp2 = array();
-		if(file_exists($updatePath.$updateFromInstalledVersionFile))
-		{
-			$temp2 = file_to_array($updatePath.$updateFromInstalledVersionFile);
-		}		
-		$configFile=array();
-		$temp=file_to_array($updatePath.$updateFromConfigFile);
-		$temp = array_merge($temp,$temp2);
-		$val='';
-
-		//parse the config file (TODO clarify why it has to be so complicated)
-		foreach($temp as $enreg)
-		{
-			if(strstr($enreg,'='))
-			{
-				$enreg=explode('=',$enreg);
-				$enreg[0] = trim($enreg[0]);
-				if($enreg[0][0] == '$')
-				{
-					list($enreg[1])=explode(' //',$enreg[1]);
-
-					$enreg[0]=trim(str_replace('$','',$enreg[0]));
-					$enreg[1]=str_replace('\"','"',ereg_replace('(^"|"$)','',substr(trim($enreg[1]),0,-1)));
-					$enreg[1]=str_replace('\'','"',ereg_replace('(^\'|\'$)','',$enreg[1]));
-					if(strtolower($enreg[1]) == 'true')
-					{
-						$enreg[1]=1;
-					}
-					if(strtolower($enreg[1]) == 'false')
-					{
-						$enreg[1]=0;
-					}
-					else
-					{
-						$implode_string=' ';
-
-						if(!strstr($enreg[1],'." ".') && strstr($enreg[1],'.$'))
-						{
-							$enreg[1]=str_replace('.$','." ".$',$enreg[1]);
-							$implode_string='';
-						}
-
-						$tmp=explode('." ".',$enreg[1]);
-
-						foreach($tmp as $tmp_key=>$tmp_val)
-						{
-							if(eregi('^\$[a-z_][a-z0-9_]*$',$tmp_val))
-							{
-								$tmp[$tmp_key]=get_config_param(str_replace('$','',$tmp_val));
-							}
-						}
-
-						$enreg[1]=implode($implode_string,$tmp);
-					}
-
-					$configFile[$enreg[0]]=$enreg[1];
-
-					$a=explode("'",$enreg[0]);
-					$key_tmp=$a[1];							
-					if($key_tmp== $param)					
-					{					
-						$val=$enreg[1];					
-					} 
-				}
-			}
-		}
-
-		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='')
-{
-	$mydb = mysql_connect($host,$login,$pass);
-
-	// The Dokeos system has not been designed to use special SQL modes that were introduced since MySQL 5
-	@mysql_query("set session sql_mode='';");
-
-	$myconnect = mysql_select_db($db_name);
-	$sql = "SELECT * FROM settings_current WHERE variable = '$param'";
-	$res = mysql_query($sql);
-	if($res===false){return null;}
-	if(mysql_num_rows($res)>0)
-	{
-		$row = mysql_fetch_array($res);
-		$value = $row['selected_value'];
-		return $value;
-	}
-	return null;
-}
-
-/**
-*	Return a list of language directories.
-*	@todo function does not belong here, move to code library,
-*	also see infocours.php which contains similar function
-*/
-function get_language_folder_list($dirname)
-{
-	if ($dirname[strlen($dirname)-1] != '/') $dirname .= '/';
-	$handle = opendir($dirname);
-	$language_list = array();
-
-	while ($entries = readdir($handle))
-	{
-		if ($entries=='.' || $entries=='..' || $entries=='CVS'  || $entries == '.svn') continue;
-		if (is_dir($dirname.$entries))
-		{
-			$language_list[] = $entries;
-		}
-	}
-
-	closedir($handle);
-
-	return $language_list;
-}
-
-/*
-==============================================================================
-		DISPLAY FUNCTIONS
-==============================================================================
-*/
-
-
-/**
-*	Displays a form (drop down menu) so the user can select
-*	his/her preferred language.
-*/
-function display_language_selection_box()
-{
-	//get language list
-	$dirname = '../lang/';
-	$language_list = get_language_folder_list($dirname);
-	sort($language_list);
-	//Reduce the number of languages shown to only show those with higher than 90% translation in DLTT
-	//This option can be easily removed later on. The aim is to test people response to less choice
-	//$language_to_display = $language_list;
-	$language_to_display = array('asturian','english','italian','french','slovenian','slovenian_unicode','spanish');
-
-	//display
-	echo "\t\t<select name=\"language_list\">\n";
-
-	$default_language = 'english';
-	foreach ($language_to_display as $key => $value)
-	{
-		if ($value == $default_language) $option_end = ' selected="selected">';
-		else $option_end = '>';
-		echo "\t\t\t<option value=\"$value\"$option_end";
-
-		echo api_ucfirst($value);
-		echo "</option>\n";
-	}
-
-	echo "\t\t</select>\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()
-{ ?>
-	<h1><?php get_lang('WelcomeToTheDokeosInstaller');?></h1>
-	<h2><?php echo display_step_sequence(); ?><?php echo get_lang('InstallationLanguage');?></h2>
-	<p><?php echo get_lang('PleaseSelectInstallationProcessLanguage');?>:</p>
-	<form id="lang_form" method="post" action="<?php echo api_get_self(); ?>">
-<?php display_language_selection_box(); ?>
-	<button type="submit" name="step1" class="next" value="<?php get_lang('Next');?> &gt;"><?php echo get_lang('Next');?></button>
-	<input type="hidden" name="is_executable" id="is_executable" value="-" />
-	</form>
-<?php }
-
-/**
- * This function displays the requirements for installing Dokeos.
- *
- * @param string $installType
- * @param boolean $badUpdatePath
- * @param string The updatePath given (if given)
- * @param array $update_from_version_8 The different subversions from version 1.8
- * @param array	$update_from_version_6 The different subversions from version 1.6
- *
- * @author unknow
- * @author Patrick Cool <patrick.cool@UGent.be>, Ghent University
-*/
-function display_requirements($installType, $badUpdatePath, $updatePath='', $update_from_version_8=array(), $update_from_version_6=array())
-{
-	echo '<h2>'.display_step_sequence().get_lang('Requirements')."</h2>\n";
-
-	echo '<strong>'.get_lang('ReadThoroughly').'</strong><br />';
-	echo get_lang('MoreDetails').' <a href="../../documentation/installation_guide.html" target="_blank">'.get_lang('ReadTheInstallGuide').'</a>.<br />'."\n";
-
-	//	SERVER REQUIREMENTS
-	echo '<div class="RequirementHeading"><h1>'.get_lang('ServerRequirements').'</h1>';
-	echo '<div class="RequirementText">'.get_lang('ServerRequirementsInfo').'</div>';
-	echo '<div class="RequirementContent">';
-	echo '<table class="requirements">
-			<tr>
-				<td class="requirements-item">'.get_lang('PHPVersion').'>= 5.0</td>
-				<td class="requirements-value">';
-					if (phpversion() < '5.0')
-					{
-						echo '<strong><font color="red">'.get_lang('PHPVersionError').'</font></strong>';
-					}
-					else
-					{
-						echo '<strong><font color="green">'.get_lang('PHPVersionOK'). ' '.phpversion().'</font></strong>';
-					}
-	echo '		</td>
-			</tr>
-			<tr>
-				<td class="requirements-item"><a href="http://php.net/manual/en/book.session.php" target="_blank">Session</a> '.get_lang('support').'</td>
-				<td class="requirements-value">'.check_extension('session', get_lang('Yes'), get_lang('ExtensionSessionsNotAvailable')).'</td>
-			</tr>
-			<tr>
-				<td class="requirements-item"><a href="http://php.net/manual/en/book.mysql.php" target="_blank">MySQL</a> '.get_lang('support').'</td>
-				<td class="requirements-value">'.check_extension('mysql', get_lang('Yes'), get_lang('ExtensionMySQLNotAvailable')).'</td>
-			</tr>
-			<tr>
-				<td class="requirements-item"><a href="http://php.net/manual/en/book.zlib.php" target="_blank">Zlib</a> '.get_lang('support').'</td>
-				<td class="requirements-value">'.check_extension('zlib', get_lang('Yes'), get_lang('ExtensionZlibNotAvailable')).'</td>
-			</tr>
-			<tr>
-				<td class="requirements-item"><a href="http://php.net/manual/en/book.pcre.php" target="_blank">Perl-compatible regular expressions</a> '.get_lang('support').'</td>
-				<td class="requirements-value">'.check_extension('pcre', get_lang('Yes'), get_lang('ExtensionPCRENotAvailable')).'</td>
-			</tr>
-			<tr>
-				<td class="requirements-item"><a href="http://php.net/manual/en/book.xml.php" target="_blank">XML</a> '.get_lang('support').'</td>
-				<td class="requirements-value">'.check_extension('xml', get_lang('Yes'), get_lang('No')).'</td>
-			</tr>
-			<tr>
-				<td class="requirements-item"><a href="http://php.net/manual/en/book.mbstring.php" target="_blank">Multibyte string</a> '.get_lang('support').' ('.get_lang('Optional').')</td>
-				<td class="requirements-value">'.check_extension('mbstring', get_lang('Yes'), get_lang('ExtensionMBStringNotAvailable'), true).'</td>
-			</tr>
-			<tr>
-				<td class="requirements-item"><a href="http://php.net/manual/en/book.iconv.php" target="_blank">Iconv</a> '.get_lang('support').' ('.get_lang('Optional').')</td>
-				<td class="requirements-value">'.check_extension('iconv', get_lang('Yes'), get_lang('No'), true).'</td>
-			</tr>
-			<tr>
-				<td class="requirements-item"><a href="http://php.net/manual/en/book.intl.php" target="_blank">Internationalization</a> '.get_lang('support').' ('.get_lang('Optional').')</td>
-				<td class="requirements-value">'.check_extension('intl', get_lang('Yes'), get_lang('No'), true).'</td>
-			</tr>
-			<tr>
-				<td class="requirements-item"><a href="http://php.net/manual/en/book.image.php" target="_blank">GD</a> '.get_lang('support').'</td>
-				<td class="requirements-value">'.check_extension('gd', get_lang('Yes'), get_lang('ExtensionGDNotAvailable')).'</td>
-			</tr>
-			<tr>
-				<td class="requirements-item"><a href="http://php.net/manual/en/book.json.php" target="_blank">JSON</a> '.get_lang('support').'</td>
-				<td class="requirements-value">'.check_extension('json', get_lang('Yes'), get_lang('No')).'</td>
-			</tr>
-			<tr>
-				<td class="requirements-item"><a href="http://php.net/manual/en/book.ldap.php" target="_blank">LDAP</a> '.get_lang('support').' ('.get_lang('Optional').')</td>
-				<td class="requirements-value">'.check_extension('ldap', get_lang('Yes'), get_lang('ExtensionLDAPNotAvailable'), true).'</td>
-			</tr>
-			<tr>
-				<td class="requirements-item"><a href="http://xapian.org/" target="_blank">Xapian</a> '.get_lang('support').' ('.get_lang('Optional').')</td>
-				<td class="requirements-value">'.check_extension('xapian', get_lang('Yes'), get_lang('No'), true).'</td>
-			</tr>
-				
-		  </table>';
-	echo '	</div>';
-	echo '</div>';
-
-	// 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 '<div class="RequirementHeading"><h1>'.get_lang('RecommendedSettings').'</h1>';
-	echo '<div class="RequirementText">'.get_lang('RecommendedSettingsInfo').'</div>';
-	echo '<div class="RequirementContent">';
-	echo '<table class="requirements">
-			<tr>
-				<th>'.get_lang('Setting').'</th>
-				<th>'.get_lang('Recommended').'</th>
-				<th>'.get_lang('Actual').'</th>
-			</tr>
-			<tr>
-				<td class="requirements-item"><a href="http://php.net/manual/features.safe-mode.php">Safe Mode</a></td>
-				<td class="requirements-recommended">OFF</td>
-				<td class="requirements-value">'.check_php_setting('safe_mode','OFF').'</td>
-			</tr>
-			<tr>
-				<td class="requirements-item"><a href="http://php.net/manual/ref.errorfunc.php#ini.display-errors">Display Errors</a></td>
-				<td class="requirements-recommended">OFF</td>
-				<td class="requirements-value">'.check_php_setting('display_errors','OFF').'</td>
-			</tr>
-			<tr>
-				<td class="requirements-item"><a href="http://php.net/manual/ini.core.php#ini.file-uploads">File Uploads</a></td>
-				<td class="requirements-recommended">ON</td>
-				<td class="requirements-value">'.check_php_setting('file_uploads','ON').'</td>
-			</tr>
-			<tr>
-				<td class="requirements-item"><a href="http://php.net/manual/ref.info.php#ini.magic-quotes-gpc">Magic Quotes GPC</a></td>
-				<td class="requirements-recommended">OFF</td>
-				<td class="requirements-value">'.check_php_setting('magic_quotes_gpc','OFF').'</td>
-			</tr>
-			<tr>
-				<td class="requirements-item"><a href="http://php.net/manual/ref.info.php#ini.magic-quotes-runtime">Magic Quotes Runtime</a></td>
-				<td class="requirements-recommended">OFF</td>
-				<td class="requirements-value">'.check_php_setting('magic_quotes_runtime','OFF').'</td>
-			</tr>
-			<tr>
-				<td class="requirements-item"><a href="http://php.net/manual/security.globals.php">Register Globals</a></td>
-				<td class="requirements-recommended">OFF</td>
-				<td class="requirements-value">'.check_php_setting('register_globals','OFF').'</td>
-			</tr>
-			<tr>
-				<td class="requirements-item"><a href="http://php.net/manual/ref.session.php#ini.session.auto-start">Session auto start</a></td>
-				<td class="requirements-recommended">OFF</td>
-				<td class="requirements-value">'.check_php_setting('session.auto_start','OFF').'</td>
-			</tr>
-			<tr>
-				<td class="requirements-item"><a href="http://php.net/manual/ini.core.php#ini.short-open-tag">Short Open Tag</a></td>
-				<td class="requirements-recommended">OFF</td>
-				<td class="requirements-value">'.check_php_setting('short_open_tag','OFF').'</td>
-			</tr>
-			<tr>
-				<td class="requirements-item"><a href="http://php.net/manual/ini.core.php#ini.upload-max-filesize">Maximum upload file size</a></td>
-				<td class="requirements-recommended">10M-100M</td>
-				<td class="requirements-value">'.ini_get('upload_max_filesize').'</td>
-			</tr>
-			<tr>
-				<td class="requirements-item"><a href="http://php.net/manual/ini.core.php#ini.post-max-size">Maximum post size</a></td>
-				<td class="requirements-recommended">10M-100M</td>
-				<td class="requirements-value">'.ini_get('post_max_size').'</td>
-			</tr>
-		  </table>';
-	echo '	</div>';
-	echo '</div>';
-
-	// DIRECTORY AND FILE PERMISSIONS
-	echo '<div class="RequirementHeading"><h1>'.get_lang('DirectoryAndFilePermissions').'</h1>';
-	echo '<div class="RequirementText">'.get_lang('DirectoryAndFilePermissionsInfo').'</div>';
-	echo '<div class="RequirementContent">';
-	echo '<table class="requirements">
-			<tr>
-				<td class="requirements-item">dokeos/main/inc/conf/</td>
-				<td class="requirements-value">'.check_writable('inc/conf/').'</td>
-			</tr>
-			<tr>
-				<td class="requirements-item">dokeos/main/upload/users/</td>
-				<td class="requirements-value">'.check_writable('upload/users/').'</td>
-			</tr>
-			<tr>
-				<td class="requirements-item">dokeos/main/default_course_document/images/</td>
-				<td class="requirements-value">'.check_writable('default_course_document/images/').'</td>
-			</tr>
-			<tr>
-				<td class="requirements-item">dokeos/archive/</td>
-				<td class="requirements-value">'.check_writable('../archive/').'</td>
-			</tr>
-			<tr>
-				<td class="requirements-item">dokeos/courses/</td>
-				<td class="requirements-value">'.check_writable('../courses/').'</td>
-			</tr>
-			<tr>
-				<td class="requirements-item">dokeos/home/</td>
-				<td class="requirements-value">'.check_writable('../home/').'</td>
-			</tr>'.
-            //'<tr>
-            //    <td class="requirements-item">dokeos/searchdb/</td>
-            //    <td class="requirements-value">'.check_writable('../searchdb/').'</td>
-            //</tr>'.
-            //'<tr>
-            //    <td class="requirements-item">'.session_save_path().'</td>
-            //    <td class="requirements-value">'.(is_writable(session_save_path()) 
-			//		? '<strong><font color="green">'.get_lang('Writable').'</font></strong>'
-			//		: '<strong><font color="red">'.get_lang('NotWritable').'</font></strong>').'</td>
-            //</tr>'.
-            '';
-	echo '    </table>';
-	echo '	</div>';
-	echo '</div>';
-
-	if($installType == 'update' && (empty($updatePath) || $badUpdatePath))
-	{
-		if($badUpdatePath)
-		{ ?>
-			<div style="color:red; background-color:white; font-weight:bold; text-align:center;">
-				<?php echo get_lang('Error');?>!<br />
-				Dokeos <?php echo (isset($_POST['step2_update_6'])?implode('|',$update_from_version_6):implode('|',$update_from_version_8)).' '.get_lang('HasNotBeenFoundInThatDir'); ?>.
-			</div>
-		<?php }
-		else
-		{
-			echo '<br />';
-		}
-		?>
-			<table border="0" cellpadding="5" align="center">
-			<tr>
-			<td><?php echo get_lang('OldVersionRootPath');?>:</td>
-			<td><input type="text" name="updatePath" size="50" value="<?php echo ($badUpdatePath && !empty($updatePath))?htmlentities($updatePath):$_SERVER['DOCUMENT_ROOT'].'/old_version/'; ?>" /></td>
-			</tr>
-			<tr>
-			<td colspan="2" align="center">
-				<button type="submit" class="back" name="step1" value="&lt; <?php echo get_lang('Back');?>" ><?php echo get_lang('Back');?></button>
-				<input type="hidden" name="is_executable" id="is_executable" value="-" />	
-				<button type="submit" class="next" name="<?php echo (isset($_POST['step2_update_6'])?'step2_update_6':'step2_update_8');?>" value="<?php echo get_lang('Next');?> &gt;" ><?php echo get_lang('Next');?></button>
-			</td>
-			</tr>
-			</table>
-		<?php
-	}
-	else
-	{
-		$error=false;
-
-		$perm = api_get_setting('permissions_for_new_directories');
-		$perm = octdec(!empty($perm)?$perm:'0770');
-		$perm_file = api_get_setting('permissions_for_new_files');
-		$perm_file = octdec(!empty($perm_file)?$perm_file:'0660');
-
-		//First, attempt to set writing permissions if we don't have them yet
-		//0xxx is an octal number, this is the required format
-		$notwritable = array();
-        $curdir = getcwd();
-		if(!is_writable('../inc/conf'))
-		{
-			$notwritable[] = realpath($curdir.'/../inc/conf');
-			@chmod('../inc/conf',$perm);
-		}
-
-		if(!is_writable('../upload/users'))
-		{
-			$notwritable[] = realpath($curdir.'/../upload/users');
-			@chmod('../upload/users', $perm);
-		}
-
-        if(!is_writable('../default_course_document/images/'))
-        {
-            $notwritable[] = realpath($curdir.'/../default_course_document/images/');
-            @chmod('../default_course_document/images/', $perm);
-        }
-
-		if(!is_writable('../../archive'))
-		{
-			$notwritable[] = realpath($curdir.'/../../archive');
-			@chmod('../../archive',$perm);
-		}
-
-		if(!is_writable('../../courses'))
-		{
-			$notwritable[] = realpath($curdir.'/../../courses');
-			@chmod('../../courses',$perm);
-		}
-
-		if(!is_writable('../../home'))
-		{
-			$notwritable[] = realpath($curdir.'/../../home');
-			@chmod('../../home',$perm);
-		}
-
-		if(file_exists('../inc/conf/configuration.php') && !is_writable('../inc/conf/configuration.php'))
-		{
-			$notwritable[]= realpath($curdir.'/../inc/conf/configuration.php');
-			@chmod('../inc/conf/configuration.php',$perm_file);
-		}
-
-		//Second, if this fails, report an error
-		//--> the user will have to adjust the permissions manually
-		if(count($notwritable)>0)
-		{
-			$error=true;
-			echo '<div style="color:red; background-color:white; font-weight:bold; text-align:center;">';
-			echo get_lang('Warning').':<br />';
-			printf(get_lang('NoWritePermissionPleaseReadInstallGuide'),'</font><a href="../../documentation/installation_guide.html" target="blank">','</a> <font color="red">');
-			echo '<ul>';
-			foreach ($notwritable as $value)
-			{
-				echo '<li>'.$value.'</li>';
-			}
-			echo '</ul>';
-			echo '</div>';			
-		}
-		// check wether a Dokeos configuration file already exists.
-		elseif(file_exists('../inc/conf/configuration.php'))
-		{
-				echo '<div style="color:red; background-color:white; font-weight:bold; text-align:center;">';
-				echo get_lang('WarningExistingDokeosInstallationDetected');
-				echo '</div>';
-		}
-		//and now display the choice buttons (go back or install)
-		?>
-		<p align="center">
-		<button type="submit" name="step1" class="back" onclick="window.location='index.php';return false;" value="&lt; <?php echo get_lang('Previous'); ?>" ><?php echo get_lang('Previous'); ?></button>
-		<button type="submit" name="step2_install" class="add" value="<?php echo get_lang("NewInstallation"); ?>" <?php if($error) if($error)echo 'disabled="disabled"'; ?> ><?php echo get_lang('NewInstallation'); ?></button>
-		<input type="hidden" name="is_executable" id="is_executable" value="-" />
-		<?php
-		//real code
-		echo '<button type="submit" class="save" name="step2_update_8" value="Upgrade from Dokeos 1.8.x"';
-		if($error) echo ' disabled="disabled"';
-		//temporary code for alpha version, disabling upgrade
-		//echo '<input type="submit" name="step2_update" value="Upgrading is not possible in this beta version"';
-		//echo ' disabled="disabled"';
-		//end temp code
-		echo ' >'.get_lang('UpgradeFromDokeos18x').'</button>';
-		echo '<button type="submit" class="save" name="step2_update_6" value="Upgrade from Dokeos 1.6.x"';
-		if($error) echo ' disabled="disabled"';
-		echo ' >'.get_lang('UpgradeFromDokeos16x').'</button>';
-		echo '</p>';
-	}
-}
-
-/**
-* 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 '<h2>'.display_step_sequence().get_lang('Licence').'</h2>';
-	echo '<p>'.get_lang('DokeosLicenseInfo').'</p>';
-	echo '<p><a href="../../documentation/license.html" target="_blank">'.get_lang('PrintVers').'</a></p>';
-	?>
-	<table><tr><td>
-		<p><textarea cols="75" rows="15" ><?php htmlentities(include('../../documentation/license.txt')); ?></textarea></p>
-		</td>
-		</tr>
-		<tr>
-		<td>
-		<p><?php echo get_lang('DokeosArtLicense');?></p>
-		</td>
-		</tr>
-		<td>
-		<table width="100%">
-			<tr>
-				<td></td>
-				<td align="center">
-					<button type="submit" class="back" name="step1" value="&lt; <?php echo get_lang('Previous'); ?>" ><?php echo get_lang('Previous'); ?></button>
-					<input type="hidden" name="is_executable" id="is_executable" value="-" />
-					<button type="submit" class="next" name="step3" value="<?php echo get_lang('IAccept'); ?> &gt;" ><?php echo get_lang('IAccept'); ?></button>
-				</td>
-			</tr>
-		</table>
-	</td></tr></table>
-	<?php
-}
-
-/**
-* Displays a parameter in a table row.
-* Used by the display_database_settings_form function.
-* @param	string	Type of install
-* @param	string	Name of parameter
-* @param	string	Field name (in the HTML form)
-* @param	string	Field value
-* @param	string	Extra notice (to show on the right side)
-* @param	boolean	Whether to display in update mode
-* @param	string	Additional attribute for the <tr> 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 "<tr ".$tr_attribute.">\n";
-	echo "<td>$parameter_name&nbsp;&nbsp;</td>\n";
-	if ($install_type == INSTALL_TYPE_UPDATE && $display_when_update)
-	{
-		echo '<td><input type="hidden" name="'.$form_field_name.'" id="'.$form_field_name.'" value="'.htmlentities($parameter_value).'" />'.$parameter_value."</td>\n";
-	}
-	else
-	{
-		if ($form_field_name=='dbPassForm') { 
-			$inputtype = 'password';
-		} else {
-			$inputtype = 'text';
-		}
-		
-		//Slightly limit the length of the database prefix to avoid
-		//having to cut down the databases names later on
-		if ($form_field_name=='dbPrefixForm') { 
-			$maxlength = '15';
-		} else {
-			$maxlength = MAX_FORM_FIELD_LENGTH;
-		}
-
-		echo '<td><input type="'.$inputtype.'" size="'.DATABASE_FORM_FIELD_DISPLAY_LENGTH.'" maxlength="'.$maxlength.'" name="'.$form_field_name.'" id="'.$form_field_name.'" value="'.htmlentities($parameter_value).'" />'."</td>\n";
-		echo "<td>$extra_notice</td>\n";
-	}
-	echo "</tr>\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))
-		{
-			if($singleDbForm)
-			{
-				$dbUserForm=$dbNameForm;
-			}
-			else
-			{
-				$dbUserForm=$dbPrefixForm.'dokeos_user';
-			}
-		}
-		echo "<h2>" . display_step_sequence() .get_lang("DBSetting") . "</h2>";
-		echo get_lang("DBSettingUpgradeIntro");
-	}else{
-		if(empty($dbPrefixForm)) //make sure there is a default value for db prefix
-		{
-			$dbPrefixForm = 'dokeos_';
-		}
-		echo "<h2>" . display_step_sequence() .get_lang("DBSetting") . "</h2>";
-		echo get_lang("DBSettingIntro");
-	}
-	
-	?>
-	<br /><br />
-	</td>
-	</tr>
-	<tr>
-	<td>
-	<table width="100%">
-	<tr>
-	  <td width="40%"><?php echo get_lang('DBHost'); ?> </td>
-
-	  <?php if($installType == 'update'): ?>
-	  <td width="30%"><input type="hidden" name="dbHostForm" value="<?php echo htmlentities($dbHostForm); ?>" /><?php echo $dbHostForm; ?></td>
-	  <td width="30%">&nbsp;</td>
-	  <?php else: ?>
-	  <td width="30%"><input type="text" size="25" maxlength="50" name="dbHostForm" value="<?php echo htmlentities($dbHostForm); ?>" /></td>
-	  <td width="30%"><?php echo get_lang('EG').' localhost'; ?></td>
-	  <?php endif; ?>
-
-	</tr>
-	<?php
-	//database user username
-	$example_login = get_lang('EG').' root';
-	display_database_parameter($installType, get_lang('DBLogin'), 'dbUsernameForm', $dbUsernameForm, $example_login);
-	//database user password
-	$example_password = get_lang('EG').' '.api_generate_password();
-	display_database_parameter($installType, get_lang('DBPassword'), 'dbPassForm', $dbPassForm, $example_password);
-	//database prefix
-	display_database_parameter($installType, get_lang('DbPrefixForm'), 'dbPrefixForm', $dbPrefixForm, get_lang('DbPrefixCom'));
-	//fields for the four standard Dokeos databases
-	echo '<tr><td colspan="3"><a href="" onclick="javascript: show_hide_option();return false;" id="optionalparameters"><img style="vertical-align:middle;" src="../img/div_hide.gif" alt="show-hide" /> '.get_lang('OptionalParameters','').'</a></td></tr>';
-	display_database_parameter($installType, get_lang('MainDB'), 'dbNameForm', $dbNameForm, '&nbsp;',null,'id="optional_param1" style="display:none;"');
-	display_database_parameter($installType, get_lang('StatDB'), 'dbStatsForm', $dbStatsForm, '&nbsp;',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, '&nbsp;',null,'id="optional_param3" style="display:none;"');
-	}
-	display_database_parameter($installType, get_lang('UserDB'), 'dbUserForm', $dbUserForm, '&nbsp;',null,'id="optional_param4" style="display:none;"');
-	?>
-	<tr id="optional_param5" style="display:none;">
-	  <td><?php echo get_lang('EnableTracking'); ?> </td>
-
-	  <?php if($installType == 'update'): ?>
-	  <td><input type="hidden" name="enableTrackingForm" value="<?php echo $enableTrackingForm; ?>" /><?php echo $enableTrackingForm? get_lang('Yes') : get_lang('No'); ?></td>
-	  <?php else: ?>
-	  <td>
-		<input class="checkbox" type="radio" name="enableTrackingForm" value="1" id="enableTracking1" <?php echo $enableTrackingForm?'checked="checked" ':''; ?>/> <label for="enableTracking1"><?php echo get_lang('Yes'); ?></label>
-		<input class="checkbox" type="radio" name="enableTrackingForm" value="0" id="enableTracking0" <?php echo $enableTrackingForm?'':'checked="checked" '; ?>/> <label for="enableTracking0"><?php echo get_lang('No'); ?></label>
-	  </td>
-	  <?php endif; ?>
-
-	  <td>&nbsp;</td>
-	</tr>
-	<tr id="optional_param6" style="display:none;">
-	  <td><?php echo get_lang('SingleDb'); ?> </td>
-
-	  <?php if($installType == 'update'): ?>
-	  <td><input type="hidden" name="singleDbForm" value="<?php echo $singleDbForm; ?>" /><?php echo $singleDbForm? get_lang('One') : get_lang('Several'); ?></td>
-	  <?php else: ?>
-	  <td>
-		<input class="checkbox" type="radio" name="singleDbForm" value="1" id="singleDb1" <?php echo $singleDbForm?'checked="checked" ':''; ?> onclick="show_hide_tracking_and_user_db(this.id);" /> <label for="singleDb1"><?php echo get_lang('One'); ?></label>
-		<input class="checkbox" type="radio" name="singleDbForm" value="0" id="singleDb0" <?php echo $singleDbForm?'':'checked="checked" '; ?> onclick="show_hide_tracking_and_user_db(this.id);" /> <label for="singleDb0"><?php echo get_lang('Several'); ?></label>
-	  </td>
-	  <?php endif; ?>
-
-	  <td>&nbsp;</td>
-	</tr>
-	</div>
-	<tr>
-		<td><button type="submit" class="login" name="step3" value="<?php echo get_lang('CheckDatabaseConnection'); ?>" ><?php echo get_lang('CheckDatabaseConnection'); ?></button></td>
-		<?php $dbConnect = test_db_connect ($dbHostForm, $dbUsernameForm, $dbPassForm, $singleDbForm, $dbPrefixForm);
-		if($dbConnect==1): ?>
-		<td colspan="2">
-			<div class="confirmation-message">
-				<!--<div  style="float:left; margin-right:10px;">
-				<img src="../img/message_confirmation.png" alt="Confirmation" />
-				</div>-->
-				<!--<div style="float:left;">-->
-				MySQL host info: <?php echo mysql_get_host_info(); ?><br />
-				MySQL server version: <?php echo mysql_get_server_info(); ?><br />
-				MySQL protocol version: <?php echo mysql_get_proto_info(); ?>
-				<!--</div>-->
-				<div style="clear:both;"></div>
-			</div>
-		</td>
-		<?php else: ?>
-		<td colspan="2">
-			<div style="float:left;" class="error-message">
-				<!--<div  style="float:left; margin-right:10px;">
-				<img src="../img/message_error.png" alt="Error" />
-				</div>-->
-				<div style="float:left;">
-				<strong>MySQL error: <?php echo mysql_errno(); ?></strong><br />
-				<?php echo mysql_error().'<br/>'; ?>
-				<strong><?php echo get_lang('Details').': '. get_lang('FailedConectionDatabase'); ?></strong><br />
-				</div>
-			</div>
-		</td>
-		<?php endif; ?>
-	</tr>
-	<tr>
-	  <td><button type="submit" name="step2" class="back" value="&lt; <?php echo get_lang('Previous'); ?>" ><?php echo get_lang('Previous'); ?></button></td>
-	  <td>&nbsp;</td>
-	  <td align="right"><input type="hidden" name="is_executable" id="is_executable" value="-" /><button type="submit" class="next" name="step4" value="<?php echo get_lang('Next'); ?> &gt;" /><?php echo get_lang('Next'); ?></button></td>
-	</tr>
-	</table>
-	<?php
-}
-
-/**
-* Displays a parameter in a table row.
-* Used by the display_configuration_settings_form function.
-*/
-function display_configuration_parameter($install_type, $parameter_name, $form_field_name, $parameter_value, $display_when_update = 'true')
-{
-	global $charset;
-
-	echo "<tr>\n";
-	echo "<td>$parameter_name&nbsp;&nbsp;</td>\n";
-	if ($install_type == INSTALL_TYPE_UPDATE && $display_when_update)
-	{
-		echo '<td><input type="hidden" name="'.$form_field_name.'" value="'.api_htmlentities($parameter_value, ENT_QUOTES, $charset).'" />'.$parameter_value."</td>\n";
-	}
-	else
-	{
-		echo '<td><input type="text" size="'.FORM_FIELD_DISPLAY_LENGTH.'" maxlength="'.MAX_FORM_FIELD_LENGTH.'" name="'.$form_field_name.'" value="'.api_htmlentities($parameter_value, ENT_QUOTES, $charset).'" />'."</td>\n";
-	}
-	echo "</tr>\n";
-}
-
-/**
- * Displays step 4 of the installation - configuration settings about Dokeos itself.
- */
-function display_configuration_settings_form($installType, $urlForm, $languageForm, $emailForm, $adminFirstName, $adminLastName, $adminPhoneForm, $campusForm, $institutionForm, $institutionUrlForm, $encryptPassForm, $allowSelfReg, $allowSelfRegProf, $loginForm, $passForm)
-{
-	global $charset;
-
-	if($installType != 'update' && empty($languageForm))
-	{
-		$languageForm = $_SESSION['install_language'];
-	}
-
-	echo "<h2>" . display_step_sequence() . get_lang("CfgSetting") . "</h2>";
-	echo '<p>'.get_lang('ConfigSettingsInfo').' <b>main/inc/conf/configuration.php</b></p>';
-
-	echo "</td></tr>\n<tr><td>";
-	echo "<table width=\"100%\">";
-
-	//First parameter: language
-	echo "<tr>\n";
-	echo '<td>'.get_lang('MainLang')."&nbsp;&nbsp;</td>\n";
-	if($installType == 'update')
-	{		
-		echo '<td><input type="hidden" name="languageForm" value="'.api_htmlentities($languageForm, ENT_QUOTES, $charset).'" />'.$languageForm."</td>\n";
-	}
-	else // new installation
-	{
-		
-	echo '<td>';
-	
-	$array_lang = array('asturian','english','italian','french','slovenian','spanish');
-
-	////Only display Language have 90% +
-	echo "\t\t<select name=\"languageForm\">\n";	
-				
-	foreach ($array_lang as $key => $value)	{
-		echo '<option value="'.$value.'"';
-		if($value == $languageForm) echo ' selected="selected"';
-		echo ">$value</option>\n";
-	}
-
-	echo "\t\t</select>\n";
-	
-	//Display all language
-	/*echo "<select name=\"languageForm\">\n";
-		$dirname='../lang/';
-		
-		if ($dir=@opendir($dirname)) {
-			$lang_files = array();
-				while (($file = readdir($dir)) !== false) {
-					if($file != '.' && $file != '..' && $file != 'CVS' && $file != '.svn' && is_dir($dirname.$file)){
-						array_push($lang_files, $file);
-					}
-				}
-			closedir($dir);
-		}
-		sort($lang_files);
-				
-		
-		foreach ($lang_files as $file) {
-			echo '<option value="'.$file.'"';
-				if($file == $languageForm) echo ' selected="selected"';
-				echo ">$file</option>\n";
-		}
-
-
-		echo '</select>';*/
-		echo "</td>\n";
-	}
-	echo "</tr>\n";
-
-	//Second parameter: Dokeos URL
-	echo "<tr>\n";
-	echo '<td>'.get_lang('DokeosURL').' (<font color="red">'.get_lang('ThisFieldIsRequired')."</font>)&nbsp;&nbsp;</td>\n";
-	
-	if($installType == 'update') echo '<td>'.api_htmlentities($urlForm, ENT_QUOTES, $charset)."</td>\n";
-	else echo '<td><input type="text" size="40" maxlength="100" name="urlForm" value="'.api_htmlentities($urlForm, ENT_QUOTES, $charset).'" />'."</td>\n";
-	
-	echo "</tr>\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' ? true : false));
-
-	//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
-	  	<tr>
-	  <td><?php echo get_lang("EncryptUserPass"); ?> :</td>
-
-	  <?php if($installType == 'update'): ?>
-	  <td><input type="hidden" name="encryptPassForm" value="<?php echo $encryptPassForm; ?>" /><?php echo $encryptPassForm? get_lang("Yes") : get_lang("No"); ?></td>
-	  <?php else: ?>
-	  <td>
-		<input class="checkbox" type="radio" name="encryptPassForm" value="1" id="encryptPass1" <?php echo $encryptPassForm?'checked="checked" ':''; ?>/> <label for="encryptPass1"><?php echo get_lang("Yes"); ?></label>
-		<input class="checkbox" type="radio" name="encryptPassForm" value="0" id="encryptPass0" <?php echo $encryptPassForm?'':'checked="checked" '; ?>/> <label for="encryptPass0"><?php echo get_lang("No"); ?></label>
-	  </td>
-	  <?php endif; ?>
-	</tr>
-	
-	 */
-	
-	?>
-	<tr>
-	  <td><?php echo get_lang("EncryptMethodUserPass"); ?> :</td>
- 
-	  <?php if($installType == 'update'): ?>
-	  <td><input type="hidden" name="encryptPassForm" value="<?php echo $encryptPassForm; ?>" /><?php  echo $encryptPassForm; ?></td>
-	  <?php else: ?>
-	  <td>
-		<input class="checkbox" type="radio" name="encryptPassForm" value="md5" id="encryptPass0" <?php echo $encryptPassForm?'checked="checked" ':''; ?>/> <label for="encryptPass0"><?php echo "md5"; ?></label>
-		<input class="checkbox" type="radio" name="encryptPassForm" value="sha1" id="encryptPass1" <?php echo $encryptPassForm?'':'checked="checked" '; ?>/> <label for="encryptPass1"><?php echo "sha1"; ?></label>
-		<input class="checkbox" type="radio" name="encryptPassForm" value="none" id="encryptPass2" <?php echo $encryptPassForm?'':'checked="checked" '; ?>/> <label for="encryptPass2"><?php echo get_lang("None"); ?></label>
-	  </td>
-	  <?php endif; ?>
-	</tr>
-	
-
-	
-	
-	
-	<tr>
-	  <td><?php echo get_lang("AllowSelfReg"); ?> :</td>
-
-	  <?php if($installType == 'update'): ?>
-	  <td><input type="hidden" name="allowSelfReg" value="<?php echo $allowSelfReg; ?>" /><?php echo $allowSelfReg? get_lang("Yes") : get_lang("No"); ?></td>
-	  <?php else: ?>
-	  <td>
-		<input class="checkbox" type="radio" name="allowSelfReg" value="1" id="allowSelfReg1" <?php echo $allowSelfReg?'checked="checked" ':''; ?>/> <label for="allowSelfReg1"><?php echo get_lang("Yes").' '.get_lang("Recommended"); ?></label>
-		<input class="checkbox" type="radio" name="allowSelfReg" value="0" id="allowSelfReg0" <?php echo $allowSelfReg?'':'checked="checked" '; ?>/> <label for="allowSelfReg0"><?php echo get_lang("No"); ?></label>
-	  </td>
-	  <?php endif; ?>
-
-	</tr>
-	<tr>
-	  <td><?php echo get_lang("AllowSelfRegProf"); ?> :</td>
-
-	  <?php if($installType == 'update'): ?>
-	  <td><input type="hidden" name="allowSelfRegProf" value="<?php echo $allowSelfRegProf; ?>" /><?php echo $allowSelfRegProf? get_lang("Yes") : get_lang("No"); ?></td>
-	  <?php else: ?>
-	  <td>
-		<input class="checkbox" type="radio" name="allowSelfRegProf" value="1" id="allowSelfRegProf1" <?php echo $allowSelfRegProf?'checked="checked" ':''; ?>/> <label for="allowSelfRegProf1"><?php echo get_lang("Yes"); ?></label>
-		<input class="checkbox" type="radio" name="allowSelfRegProf" value="0" id="allowSelfRegProf0" <?php echo $allowSelfRegProf?'':'checked="checked" '; ?>/> <label for="allowSelfRegProf0"><?php echo get_lang("No"); ?></label>
-	  </td>
-	  <?php endif; ?>
-
-	</tr>
-	<tr>
-	  <td><button type="submit" class="back" name="step3" value="&lt; <?php echo get_lang('Previous'); ?>" /><?php echo get_lang('Previous'); ?></button></td>
-	  <td align="right"><input type="hidden" name="is_executable" id="is_executable" value="-" /><button class="next" type="submit" name="step5" value="<?php echo get_lang('Next'); ?> &gt;" /><?php echo get_lang('Next'); ?></button></td>
-	</tr>
-	</table>
-	<?php
-}
-
-/**
-* After installation is completed (step 6), this message is displayed.
-*/
-function display_after_install_message($installType, $nbr_courses)
-{
-	?>
-	<h2><?php echo display_step_sequence() . get_lang("CfgSetting"); ?></h2>
-
-	<?php echo get_lang('FirstUseTip'); ?>
-
-	<?php if($installType == 'update' && $nbr_courses > MAX_COURSE_TRANSFER): ?>
-	<br /><br />
-	<font color="red"><b><?php echo get_lang('Warning');?> :</b> <?php printf(get_lang('YouHaveMoreThanXCourses'),MAX_COURSE_TRANSFER,MAX_COURSE_TRANSFER,'<a href="update_courses.php"><font color="red">','</font></a>');?></font>
-	<?php endif; ?>
-
-	<br /><br />
-	<?php
-	echo '<div class="warning-message">';
-	//echo '<img src="../img/message_warning.png" style="float:left; margin-right:10px;" alt="'.get_lang('Warning').'"/>';
-	echo '<b>'.get_lang('SecurityAdvice').'</b>';
-	echo ': ';
-	printf(get_lang('ToProtectYourSiteMakeXAndYReadOnly'),'main/inc/conf/configuration.php','main/install/index.php');
-	echo '</div>';
-	?>
-
-
-	</form>
-	<a class="portal" href="../../index.php"><?php echo get_lang('GoToYourNewlyCreatedPortal'); ?></a>
-	<?php
-}
-
-/**
-* In step 3. Test the connection to the DB in case of single or multy DB.
-* 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.
-*/
-function test_db_connect ($dbHostForm, $dbUsernameForm, $dbPassForm, $singleDbForm, $dbPrefixForm) {
-	$dbConnect = -1;
-	if ($singleDbForm == 1) {
-		if(@mysql_connect($dbHostForm, $dbUsernameForm, $dbPassForm) !== false) {
-			$dbConnect = 1;
-		} else {
-			$dbConnect = -1;
-		}
-	} elseif ($singleDbForm == 0) {
-		$res=@mysql_connect($dbHostForm, $dbUsernameForm, $dbPassForm);
-		if ($res===false) {
-			return $res;
-		}
-		if ($res !== false) {
-			// The Dokeos system has not been designed to use special SQL modes that were introduced since MySQL 5
-			@mysql_query("set session sql_mode='';");
-
-			$multipleDbCheck = @mysql_query("CREATE DATABASE ".$dbPrefixForm."test_dokeos_connection");
-			if ($multipleDbCheck !== false) {
-				$multipleDbCheck = @mysql_query("DROP DATABASE IF EXISTS ".$dbPrefixForm."test_dokeos_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.
-}
-?>
+<?php
+/**
+ * This function prints class=active_step $current_step=$param
+ * @author Patrick Cool <patrick.cool@UGent.be>, 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).' &ndash; ';
+}
+/**
+ * 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 Gesche
+ * @author 	Patrick Cool <patrick.cool@UGent.be>, Ghent University
+ * @author	Yannick Warnier <yannick.warnier@dokeos.com>
+ * @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 '<strong><font color="green">'.$return_success.'</font></strong>';
+	}
+	else
+	{
+		if($optional===true)
+		{
+			return '<strong><font color="#ff9900">'.$return_failure.'</font></strong>';
+		}
+		else
+		{
+			return '<strong><font color="red">'.$return_failure.'</font></strong>';
+		}
+	}
+}
+
+
+/**
+ * This function checks whether a php setting matches the recommended value
+ *
+ * @author Patrick Cool <patrick.cool@UGent.be>, 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 '<strong><font color="green">'.$current_php_value.' '.$return_success.'</font></strong>';
+	}
+	else
+	{
+		return '<strong><font color="red">'.$current_php_value.' '.$return_failure.'</font></strong>';
+	}
+}
+/**
+ * Enter description here...
+ *
+ * @param string $val a php ini value
+ * @return boolean: ON or OFF
+ * @author Joomla <http://www.joomla.org>
+ */
+function get_php_setting($val) {
+	$r =  (ini_get($val) == '1' ? 1 : 0);
+	return $r ? 'ON' : 'OFF';
+}
+
+/**
+ * This function checks if the given folder is writable
+ */
+function check_writable($folder)
+{
+	if (is_writable('../'.$folder))
+	{
+		return '<strong><font color="green">'.get_lang('Writable').'</font></strong>';
+	}
+	else
+	{
+		return '<strong><font color="red">'.get_lang('NotWritable').'</font></strong>';
+	}
+}
+
+/**
+ * this function returns a string "FALSE" or "TRUE" according to the variable in parameter
+ *
+ * @param integer  $var  the variable to convert
+ * @return  string  the string "FALSE" or "TRUE"
+ * @author Christophe Gesche
+ */
+function trueFalse($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);
+	$result = explode('<br />',nl2br($buffer));
+	return $result;
+}
+
+/**
+ * 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
+ */
+function get_config_param($param,$updatePath='')
+{
+	global $configFile, $updateFromConfigFile;
+	//look if we already have the queried param
+	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';
+		}
+		//give up recovering
+		else
+		{
+			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';
+	}
+	//the param was not found in global vars, so look into the old config file
+	elseif(file_exists($updatePath.$updateFromConfigFile))
+	{
+		//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)
+		$temp2 = array();
+		if(file_exists($updatePath.$updateFromInstalledVersionFile))
+		{
+			$temp2 = file_to_array($updatePath.$updateFromInstalledVersionFile);
+		}		
+		$configFile=array();
+		$temp=file_to_array($updatePath.$updateFromConfigFile);
+		$temp = array_merge($temp,$temp2);
+		$val='';
+
+		//parse the config file (TODO clarify why it has to be so complicated)
+		foreach($temp as $enreg)
+		{
+			if(strstr($enreg,'='))
+			{
+				$enreg=explode('=',$enreg);
+				$enreg[0] = trim($enreg[0]);
+				if($enreg[0][0] == '$')
+				{
+					list($enreg[1])=explode(' //',$enreg[1]);
+
+					$enreg[0]=trim(str_replace('$','',$enreg[0]));
+					$enreg[1]=str_replace('\"','"',ereg_replace('(^"|"$)','',substr(trim($enreg[1]),0,-1)));
+					$enreg[1]=str_replace('\'','"',ereg_replace('(^\'|\'$)','',$enreg[1]));
+					if(strtolower($enreg[1]) == 'true')
+					{
+						$enreg[1]=1;
+					}
+					if(strtolower($enreg[1]) == 'false')
+					{
+						$enreg[1]=0;
+					}
+					else
+					{
+						$implode_string=' ';
+
+						if(!strstr($enreg[1],'." ".') && strstr($enreg[1],'.$'))
+						{
+							$enreg[1]=str_replace('.$','." ".$',$enreg[1]);
+							$implode_string='';
+						}
+
+						$tmp=explode('." ".',$enreg[1]);
+
+						foreach($tmp as $tmp_key=>$tmp_val)
+						{
+							if(eregi('^\$[a-z_][a-z0-9_]*$',$tmp_val))
+							{
+								$tmp[$tmp_key]=get_config_param(str_replace('$','',$tmp_val));
+							}
+						}
+
+						$enreg[1]=implode($implode_string,$tmp);
+					}
+
+					$configFile[$enreg[0]]=$enreg[1];
+
+					$a=explode("'",$enreg[0]);
+					$key_tmp=$a[1];							
+					if($key_tmp== $param)					
+					{					
+						$val=$enreg[1];					
+					} 
+				}
+			}
+		}
+
+		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='')
+{
+	$mydb = mysql_connect($host,$login,$pass);
+
+	// The Dokeos system has not been designed to use special SQL modes that were introduced since MySQL 5
+	@mysql_query("set session sql_mode='';");
+
+	$myconnect = mysql_select_db($db_name);
+	$sql = "SELECT * FROM settings_current WHERE variable = '$param'";
+	$res = mysql_query($sql);
+	if($res===false){return null;}
+	if(mysql_num_rows($res)>0)
+	{
+		$row = mysql_fetch_array($res);
+		$value = $row['selected_value'];
+		return $value;
+	}
+	return null;
+}
+
+/**
+*	Return a list of language directories.
+*	@todo function does not belong here, move to code library,
+*	also see infocours.php which contains similar function
+*/
+function get_language_folder_list($dirname)
+{
+	if ($dirname[strlen($dirname)-1] != '/') $dirname .= '/';
+	$handle = opendir($dirname);
+	$language_list = array();
+
+	while ($entries = readdir($handle))
+	{
+		if ($entries=='.' || $entries=='..' || $entries=='CVS'  || $entries == '.svn') continue;
+		if (is_dir($dirname.$entries))
+		{
+			$language_list[] = $entries;
+		}
+	}
+
+	closedir($handle);
+
+	return $language_list;
+}
+
+/*
+==============================================================================
+		DISPLAY FUNCTIONS
+==============================================================================
+*/
+
+
+/**
+*	Displays a form (drop down menu) so the user can select
+*	his/her preferred language.
+*/
+function display_language_selection_box()
+{
+	//get language list
+	$dirname = '../lang/';
+	$language_list = get_language_folder_list($dirname);
+	sort($language_list);
+	//Reduce the number of languages shown to only show those with higher than 90% translation in DLTT
+	//This option can be easily removed later on. The aim is to test people response to less choice
+	//$language_to_display = $language_list;
+	$language_to_display = array('asturian','english','italian','french','slovenian','slovenian_unicode','spanish');
+
+	//display
+	echo "\t\t<select name=\"language_list\">\n";
+
+	$default_language = 'english';
+	foreach ($language_to_display as $key => $value)
+	{
+		if ($value == $default_language) $option_end = ' selected="selected">';
+		else $option_end = '>';
+		echo "\t\t\t<option value=\"$value\"$option_end";
+
+		echo api_ucfirst($value);
+		echo "</option>\n";
+	}
+
+	echo "\t\t</select>\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()
+{ ?>
+	<h1><?php get_lang('WelcomeToTheDokeosInstaller');?></h1>
+	<h2><?php echo display_step_sequence(); ?><?php echo get_lang('InstallationLanguage');?></h2>
+	<p><?php echo get_lang('PleaseSelectInstallationProcessLanguage');?>:</p>
+	<form id="lang_form" method="post" action="<?php echo api_get_self(); ?>">
+<?php display_language_selection_box(); ?>
+	<button type="submit" name="step1" class="next" value="<?php get_lang('Next');?> &gt;"><?php echo get_lang('Next');?></button>
+	<input type="hidden" name="is_executable" id="is_executable" value="-" />
+	</form>
+<?php }
+
+/**
+ * This function displays the requirements for installing Dokeos.
+ *
+ * @param string $installType
+ * @param boolean $badUpdatePath
+ * @param string The updatePath given (if given)
+ * @param array $update_from_version_8 The different subversions from version 1.8
+ * @param array	$update_from_version_6 The different subversions from version 1.6
+ *
+ * @author unknow
+ * @author Patrick Cool <patrick.cool@UGent.be>, Ghent University
+*/
+function display_requirements($installType, $badUpdatePath, $updatePath='', $update_from_version_8=array(), $update_from_version_6=array())
+{
+	echo '<h2>'.display_step_sequence().get_lang('Requirements')."</h2>\n";
+
+	echo '<strong>'.get_lang('ReadThoroughly').'</strong><br />';
+	echo get_lang('MoreDetails').' <a href="../../documentation/installation_guide.html" target="_blank">'.get_lang('ReadTheInstallGuide').'</a>.<br />'."\n";
+
+	//	SERVER REQUIREMENTS
+	echo '<div class="RequirementHeading"><h1>'.get_lang('ServerRequirements').'</h1>';
+	echo '<div class="RequirementText">'.get_lang('ServerRequirementsInfo').'</div>';
+	echo '<div class="RequirementContent">';
+	echo '<table class="requirements">
+			<tr>
+				<td class="requirements-item">'.get_lang('PHPVersion').'>= 5.0</td>
+				<td class="requirements-value">';
+					if (phpversion() < '5.0')
+					{
+						echo '<strong><font color="red">'.get_lang('PHPVersionError').'</font></strong>';
+					}
+					else
+					{
+						echo '<strong><font color="green">'.get_lang('PHPVersionOK'). ' '.phpversion().'</font></strong>';
+					}
+	echo '		</td>
+			</tr>
+			<tr>
+				<td class="requirements-item"><a href="http://php.net/manual/en/book.session.php" target="_blank">Session</a> '.get_lang('support').'</td>
+				<td class="requirements-value">'.check_extension('session', get_lang('Yes'), get_lang('ExtensionSessionsNotAvailable')).'</td>
+			</tr>
+			<tr>
+				<td class="requirements-item"><a href="http://php.net/manual/en/book.mysql.php" target="_blank">MySQL</a> '.get_lang('support').'</td>
+				<td class="requirements-value">'.check_extension('mysql', get_lang('Yes'), get_lang('ExtensionMySQLNotAvailable')).'</td>
+			</tr>
+			<tr>
+				<td class="requirements-item"><a href="http://php.net/manual/en/book.zlib.php" target="_blank">Zlib</a> '.get_lang('support').'</td>
+				<td class="requirements-value">'.check_extension('zlib', get_lang('Yes'), get_lang('ExtensionZlibNotAvailable')).'</td>
+			</tr>
+			<tr>
+				<td class="requirements-item"><a href="http://php.net/manual/en/book.pcre.php" target="_blank">Perl-compatible regular expressions</a> '.get_lang('support').'</td>
+				<td class="requirements-value">'.check_extension('pcre', get_lang('Yes'), get_lang('ExtensionPCRENotAvailable')).'</td>
+			</tr>
+			<tr>
+				<td class="requirements-item"><a href="http://php.net/manual/en/book.xml.php" target="_blank">XML</a> '.get_lang('support').'</td>
+				<td class="requirements-value">'.check_extension('xml', get_lang('Yes'), get_lang('No')).'</td>
+			</tr>
+			<tr>
+				<td class="requirements-item"><a href="http://php.net/manual/en/book.mbstring.php" target="_blank">Multibyte string</a> '.get_lang('support').' ('.get_lang('Optional').')</td>
+				<td class="requirements-value">'.check_extension('mbstring', get_lang('Yes'), get_lang('ExtensionMBStringNotAvailable'), true).'</td>
+			</tr>
+			<tr>
+				<td class="requirements-item"><a href="http://php.net/manual/en/book.iconv.php" target="_blank">Iconv</a> '.get_lang('support').' ('.get_lang('Optional').')</td>
+				<td class="requirements-value">'.check_extension('iconv', get_lang('Yes'), get_lang('No'), true).'</td>
+			</tr>
+			<tr>
+				<td class="requirements-item"><a href="http://php.net/manual/en/book.intl.php" target="_blank">Internationalization</a> '.get_lang('support').' ('.get_lang('Optional').')</td>
+				<td class="requirements-value">'.check_extension('intl', get_lang('Yes'), get_lang('No'), true).'</td>
+			</tr>
+			<tr>
+				<td class="requirements-item"><a href="http://php.net/manual/en/book.image.php" target="_blank">GD</a> '.get_lang('support').'</td>
+				<td class="requirements-value">'.check_extension('gd', get_lang('Yes'), get_lang('ExtensionGDNotAvailable')).'</td>
+			</tr>
+			<tr>
+				<td class="requirements-item"><a href="http://php.net/manual/en/book.json.php" target="_blank">JSON</a> '.get_lang('support').'</td>
+				<td class="requirements-value">'.check_extension('json', get_lang('Yes'), get_lang('No')).'</td>
+			</tr>
+			<tr>
+				<td class="requirements-item"><a href="http://php.net/manual/en/book.ldap.php" target="_blank">LDAP</a> '.get_lang('support').' ('.get_lang('Optional').')</td>
+				<td class="requirements-value">'.check_extension('ldap', get_lang('Yes'), get_lang('ExtensionLDAPNotAvailable'), true).'</td>
+			</tr>
+			<tr>
+				<td class="requirements-item"><a href="http://xapian.org/" target="_blank">Xapian</a> '.get_lang('support').' ('.get_lang('Optional').')</td>
+				<td class="requirements-value">'.check_extension('xapian', get_lang('Yes'), get_lang('No'), true).'</td>
+			</tr>
+				
+		  </table>';
+	echo '	</div>';
+	echo '</div>';
+
+	// 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 '<div class="RequirementHeading"><h1>'.get_lang('RecommendedSettings').'</h1>';
+	echo '<div class="RequirementText">'.get_lang('RecommendedSettingsInfo').'</div>';
+	echo '<div class="RequirementContent">';
+	echo '<table class="requirements">
+			<tr>
+				<th>'.get_lang('Setting').'</th>
+				<th>'.get_lang('Recommended').'</th>
+				<th>'.get_lang('Actual').'</th>
+			</tr>
+			<tr>
+				<td class="requirements-item"><a href="http://php.net/manual/features.safe-mode.php">Safe Mode</a></td>
+				<td class="requirements-recommended">OFF</td>
+				<td class="requirements-value">'.check_php_setting('safe_mode','OFF').'</td>
+			</tr>
+			<tr>
+				<td class="requirements-item"><a href="http://php.net/manual/ref.errorfunc.php#ini.display-errors">Display Errors</a></td>
+				<td class="requirements-recommended">OFF</td>
+				<td class="requirements-value">'.check_php_setting('display_errors','OFF').'</td>
+			</tr>
+			<tr>
+				<td class="requirements-item"><a href="http://php.net/manual/ini.core.php#ini.file-uploads">File Uploads</a></td>
+				<td class="requirements-recommended">ON</td>
+				<td class="requirements-value">'.check_php_setting('file_uploads','ON').'</td>
+			</tr>
+			<tr>
+				<td class="requirements-item"><a href="http://php.net/manual/ref.info.php#ini.magic-quotes-gpc">Magic Quotes GPC</a></td>
+				<td class="requirements-recommended">OFF</td>
+				<td class="requirements-value">'.check_php_setting('magic_quotes_gpc','OFF').'</td>
+			</tr>
+			<tr>
+				<td class="requirements-item"><a href="http://php.net/manual/ref.info.php#ini.magic-quotes-runtime">Magic Quotes Runtime</a></td>
+				<td class="requirements-recommended">OFF</td>
+				<td class="requirements-value">'.check_php_setting('magic_quotes_runtime','OFF').'</td>
+			</tr>
+			<tr>
+				<td class="requirements-item"><a href="http://php.net/manual/security.globals.php">Register Globals</a></td>
+				<td class="requirements-recommended">OFF</td>
+				<td class="requirements-value">'.check_php_setting('register_globals','OFF').'</td>
+			</tr>
+			<tr>
+				<td class="requirements-item"><a href="http://php.net/manual/ref.session.php#ini.session.auto-start">Session auto start</a></td>
+				<td class="requirements-recommended">OFF</td>
+				<td class="requirements-value">'.check_php_setting('session.auto_start','OFF').'</td>
+			</tr>
+			<tr>
+				<td class="requirements-item"><a href="http://php.net/manual/ini.core.php#ini.short-open-tag">Short Open Tag</a></td>
+				<td class="requirements-recommended">OFF</td>
+				<td class="requirements-value">'.check_php_setting('short_open_tag','OFF').'</td>
+			</tr>
+			<tr>
+				<td class="requirements-item"><a href="http://php.net/manual/ini.core.php#ini.upload-max-filesize">Maximum upload file size</a></td>
+				<td class="requirements-recommended">10M-100M</td>
+				<td class="requirements-value">'.ini_get('upload_max_filesize').'</td>
+			</tr>
+			<tr>
+				<td class="requirements-item"><a href="http://php.net/manual/ini.core.php#ini.post-max-size">Maximum post size</a></td>
+				<td class="requirements-recommended">10M-100M</td>
+				<td class="requirements-value">'.ini_get('post_max_size').'</td>
+			</tr>
+		  </table>';
+	echo '	</div>';
+	echo '</div>';
+
+	// DIRECTORY AND FILE PERMISSIONS
+	echo '<div class="RequirementHeading"><h1>'.get_lang('DirectoryAndFilePermissions').'</h1>';
+	echo '<div class="RequirementText">'.get_lang('DirectoryAndFilePermissionsInfo').'</div>';
+	echo '<div class="RequirementContent">';
+	echo '<table class="requirements">
+			<tr>
+				<td class="requirements-item">dokeos/main/inc/conf/</td>
+				<td class="requirements-value">'.check_writable('inc/conf/').'</td>
+			</tr>
+			<tr>
+				<td class="requirements-item">dokeos/main/upload/users/</td>
+				<td class="requirements-value">'.check_writable('upload/users/').'</td>
+			</tr>
+			<tr>
+				<td class="requirements-item">dokeos/main/default_course_document/images/</td>
+				<td class="requirements-value">'.check_writable('default_course_document/images/').'</td>
+			</tr>
+			<tr>
+				<td class="requirements-item">dokeos/archive/</td>
+				<td class="requirements-value">'.check_writable('../archive/').'</td>
+			</tr>
+			<tr>
+				<td class="requirements-item">dokeos/courses/</td>
+				<td class="requirements-value">'.check_writable('../courses/').'</td>
+			</tr>
+			<tr>
+				<td class="requirements-item">dokeos/home/</td>
+				<td class="requirements-value">'.check_writable('../home/').'</td>
+			</tr>'.
+            //'<tr>
+            //    <td class="requirements-item">dokeos/searchdb/</td>
+            //    <td class="requirements-value">'.check_writable('../searchdb/').'</td>
+            //</tr>'.
+            //'<tr>
+            //    <td class="requirements-item">'.session_save_path().'</td>
+            //    <td class="requirements-value">'.(is_writable(session_save_path()) 
+			//		? '<strong><font color="green">'.get_lang('Writable').'</font></strong>'
+			//		: '<strong><font color="red">'.get_lang('NotWritable').'</font></strong>').'</td>
+            //</tr>'.
+            '';
+	echo '    </table>';
+	echo '	</div>';
+	echo '</div>';
+
+	if($installType == 'update' && (empty($updatePath) || $badUpdatePath))
+	{
+		if($badUpdatePath)
+		{ ?>
+			<div style="color:red; background-color:white; font-weight:bold; text-align:center;">
+				<?php echo get_lang('Error');?>!<br />
+				Dokeos <?php echo (isset($_POST['step2_update_6'])?implode('|',$update_from_version_6):implode('|',$update_from_version_8)).' '.get_lang('HasNotBeenFoundInThatDir'); ?>.
+			</div>
+		<?php }
+		else
+		{
+			echo '<br />';
+		}
+		?>
+			<table border="0" cellpadding="5" align="center">
+			<tr>
+			<td><?php echo get_lang('OldVersionRootPath');?>:</td>
+			<td><input type="text" name="updatePath" size="50" value="<?php echo ($badUpdatePath && !empty($updatePath))?htmlentities($updatePath):$_SERVER['DOCUMENT_ROOT'].'/old_version/'; ?>" /></td>
+			</tr>
+			<tr>
+			<td colspan="2" align="center">
+				<button type="submit" class="back" name="step1" value="&lt; <?php echo get_lang('Back');?>" ><?php echo get_lang('Back');?></button>
+				<input type="hidden" name="is_executable" id="is_executable" value="-" />	
+				<button type="submit" class="next" name="<?php echo (isset($_POST['step2_update_6'])?'step2_update_6':'step2_update_8');?>" value="<?php echo get_lang('Next');?> &gt;" ><?php echo get_lang('Next');?></button>
+			</td>
+			</tr>
+			</table>
+		<?php
+	}
+	else
+	{
+		$error=false;
+
+		$perm = api_get_setting('permissions_for_new_directories');
+		$perm = octdec(!empty($perm)?$perm:'0770');
+		$perm_file = api_get_setting('permissions_for_new_files');
+		$perm_file = octdec(!empty($perm_file)?$perm_file:'0660');
+
+		//First, attempt to set writing permissions if we don't have them yet
+		//0xxx is an octal number, this is the required format
+		$notwritable = array();
+        $curdir = getcwd();
+		if(!is_writable('../inc/conf'))
+		{
+			$notwritable[] = realpath($curdir.'/../inc/conf');
+			@chmod('../inc/conf',$perm);
+		}
+
+		if(!is_writable('../upload/users'))
+		{
+			$notwritable[] = realpath($curdir.'/../upload/users');
+			@chmod('../upload/users', $perm);
+		}
+
+        if(!is_writable('../default_course_document/images/'))
+        {
+            $notwritable[] = realpath($curdir.'/../default_course_document/images/');
+            @chmod('../default_course_document/images/', $perm);
+        }
+
+		if(!is_writable('../../archive'))
+		{
+			$notwritable[] = realpath($curdir.'/../../archive');
+			@chmod('../../archive',$perm);
+		}
+
+		if(!is_writable('../../courses'))
+		{
+			$notwritable[] = realpath($curdir.'/../../courses');
+			@chmod('../../courses',$perm);
+		}
+
+		if(!is_writable('../../home'))
+		{
+			$notwritable[] = realpath($curdir.'/../../home');
+			@chmod('../../home',$perm);
+		}
+
+		if(file_exists('../inc/conf/configuration.php') && !is_writable('../inc/conf/configuration.php'))
+		{
+			$notwritable[]= realpath($curdir.'/../inc/conf/configuration.php');
+			@chmod('../inc/conf/configuration.php',$perm_file);
+		}
+
+		//Second, if this fails, report an error
+		//--> the user will have to adjust the permissions manually
+		if(count($notwritable)>0)
+		{
+			$error=true;
+			echo '<div style="color:red; background-color:white; font-weight:bold; text-align:center;">';
+			echo get_lang('Warning').':<br />';
+			printf(get_lang('NoWritePermissionPleaseReadInstallGuide'),'</font><a href="../../documentation/installation_guide.html" target="blank">','</a> <font color="red">');
+			echo '<ul>';
+			foreach ($notwritable as $value)
+			{
+				echo '<li>'.$value.'</li>';
+			}
+			echo '</ul>';
+			echo '</div>';			
+		}
+		// check wether a Dokeos configuration file already exists.
+		elseif(file_exists('../inc/conf/configuration.php'))
+		{
+				echo '<div style="color:red; background-color:white; font-weight:bold; text-align:center;">';
+				echo get_lang('WarningExistingDokeosInstallationDetected');
+				echo '</div>';
+		}
+		//and now display the choice buttons (go back or install)
+		?>
+		<p align="center">
+		<button type="submit" name="step1" class="back" onclick="window.location='index.php';return false;" value="&lt; <?php echo get_lang('Previous'); ?>" ><?php echo get_lang('Previous'); ?></button>
+		<button type="submit" name="step2_install" class="add" value="<?php echo get_lang("NewInstallation"); ?>" <?php if($error) if($error)echo 'disabled="disabled"'; ?> ><?php echo get_lang('NewInstallation'); ?></button>
+		<input type="hidden" name="is_executable" id="is_executable" value="-" />
+		<?php
+		//real code
+		echo '<button type="submit" class="save" name="step2_update_8" value="Upgrade from Dokeos 1.8.x"';
+		if($error) echo ' disabled="disabled"';
+		//temporary code for alpha version, disabling upgrade
+		//echo '<input type="submit" name="step2_update" value="Upgrading is not possible in this beta version"';
+		//echo ' disabled="disabled"';
+		//end temp code
+		echo ' >'.get_lang('UpgradeFromDokeos18x').'</button>';
+		echo '<button type="submit" class="save" name="step2_update_6" value="Upgrade from Dokeos 1.6.x"';
+		if($error) echo ' disabled="disabled"';
+		echo ' >'.get_lang('UpgradeFromDokeos16x').'</button>';
+		echo '</p>';
+	}
+}
+
+/**
+* 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 '<h2>'.display_step_sequence().get_lang('Licence').'</h2>';
+	echo '<p>'.get_lang('DokeosLicenseInfo').'</p>';
+	echo '<p><a href="../../documentation/license.html" target="_blank">'.get_lang('PrintVers').'</a></p>';
+	?>
+	<table><tr><td>
+		<p><textarea cols="75" rows="15" ><?php htmlentities(include('../../documentation/license.txt')); ?></textarea></p>
+		</td>
+		</tr>
+		<tr>
+		<td>
+		<p><?php echo get_lang('DokeosArtLicense');?></p>
+		</td>
+		</tr>
+		<td>
+		<table width="100%">
+			<tr>
+				<td></td>
+				<td align="center">
+					<button type="submit" class="back" name="step1" value="&lt; <?php echo get_lang('Previous'); ?>" ><?php echo get_lang('Previous'); ?></button>
+					<input type="hidden" name="is_executable" id="is_executable" value="-" />
+					<button type="submit" class="next" name="step3" value="<?php echo get_lang('IAccept'); ?> &gt;" ><?php echo get_lang('IAccept'); ?></button>
+				</td>
+			</tr>
+		</table>
+	</td></tr></table>
+	<?php
+}
+
+/**
+* Displays a parameter in a table row.
+* Used by the display_database_settings_form function.
+* @param	string	Type of install
+* @param	string	Name of parameter
+* @param	string	Field name (in the HTML form)
+* @param	string	Field value
+* @param	string	Extra notice (to show on the right side)
+* @param	boolean	Whether to display in update mode
+* @param	string	Additional attribute for the <tr> 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 "<tr ".$tr_attribute.">\n";
+	echo "<td>$parameter_name&nbsp;&nbsp;</td>\n";
+	if ($install_type == INSTALL_TYPE_UPDATE && $display_when_update)
+	{
+		echo '<td><input type="hidden" name="'.$form_field_name.'" id="'.$form_field_name.'" value="'.htmlentities($parameter_value).'" />'.$parameter_value."</td>\n";
+	}
+	else
+	{
+		if ($form_field_name=='dbPassForm') { 
+			$inputtype = 'password';
+		} else {
+			$inputtype = 'text';
+		}
+		
+		//Slightly limit the length of the database prefix to avoid
+		//having to cut down the databases names later on
+		if ($form_field_name=='dbPrefixForm') { 
+			$maxlength = '15';
+		} else {
+			$maxlength = MAX_FORM_FIELD_LENGTH;
+		}
+
+		echo '<td><input type="'.$inputtype.'" size="'.DATABASE_FORM_FIELD_DISPLAY_LENGTH.'" maxlength="'.$maxlength.'" name="'.$form_field_name.'" id="'.$form_field_name.'" value="'.htmlentities($parameter_value).'" />'."</td>\n";
+		echo "<td>$extra_notice</td>\n";
+	}
+	echo "</tr>\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))
+		{
+			if($singleDbForm)
+			{
+				$dbUserForm=$dbNameForm;
+			}
+			else
+			{
+				$dbUserForm=$dbPrefixForm.'dokeos_user';
+			}
+		}
+		echo "<h2>" . display_step_sequence() .get_lang("DBSetting") . "</h2>";
+		echo get_lang("DBSettingUpgradeIntro");
+	}else{
+		if(empty($dbPrefixForm)) //make sure there is a default value for db prefix
+		{
+			$dbPrefixForm = 'dokeos_';
+		}
+		echo "<h2>" . display_step_sequence() .get_lang("DBSetting") . "</h2>";
+		echo get_lang("DBSettingIntro");
+	}
+	
+	?>
+	<br /><br />
+	</td>
+	</tr>
+	<tr>
+	<td>
+	<table width="100%">
+	<tr>
+	  <td width="40%"><?php echo get_lang('DBHost'); ?> </td>
+
+	  <?php if($installType == 'update'): ?>
+	  <td width="30%"><input type="hidden" name="dbHostForm" value="<?php echo htmlentities($dbHostForm); ?>" /><?php echo $dbHostForm; ?></td>
+	  <td width="30%">&nbsp;</td>
+	  <?php else: ?>
+	  <td width="30%"><input type="text" size="25" maxlength="50" name="dbHostForm" value="<?php echo htmlentities($dbHostForm); ?>" /></td>
+	  <td width="30%"><?php echo get_lang('EG').' localhost'; ?></td>
+	  <?php endif; ?>
+
+	</tr>
+	<?php
+	//database user username
+	$example_login = get_lang('EG').' root';
+	display_database_parameter($installType, get_lang('DBLogin'), 'dbUsernameForm', $dbUsernameForm, $example_login);
+	//database user password
+	$example_password = get_lang('EG').' '.api_generate_password();
+	display_database_parameter($installType, get_lang('DBPassword'), 'dbPassForm', $dbPassForm, $example_password);
+	//database prefix
+	display_database_parameter($installType, get_lang('DbPrefixForm'), 'dbPrefixForm', $dbPrefixForm, get_lang('DbPrefixCom'));
+	//fields for the four standard Dokeos databases
+	echo '<tr><td colspan="3"><a href="" onclick="javascript: show_hide_option();return false;" id="optionalparameters"><img style="vertical-align:middle;" src="../img/div_show.gif" alt="show-hide" /> '.get_lang('OptionalParameters','').'</a></td></tr>';
+	display_database_parameter($installType, get_lang('MainDB'), 'dbNameForm', $dbNameForm, '&nbsp;',null,'id="optional_param1" style="display:none;"');
+	display_database_parameter($installType, get_lang('StatDB'), 'dbStatsForm', $dbStatsForm, '&nbsp;',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, '&nbsp;',null,'id="optional_param3" style="display:none;"');
+	}
+	display_database_parameter($installType, get_lang('UserDB'), 'dbUserForm', $dbUserForm, '&nbsp;',null,'id="optional_param4" style="display:none;"');
+	?>
+	<tr id="optional_param5" style="display:none;">
+	  <td><?php echo get_lang('EnableTracking'); ?> </td>
+
+	  <?php if($installType == 'update'): ?>
+	  <td><input type="hidden" name="enableTrackingForm" value="<?php echo $enableTrackingForm; ?>" /><?php echo $enableTrackingForm? get_lang('Yes') : get_lang('No'); ?></td>
+	  <?php else: ?>
+	  <td>
+		<input class="checkbox" type="radio" name="enableTrackingForm" value="1" id="enableTracking1" <?php echo $enableTrackingForm?'checked="checked" ':''; ?>/> <label for="enableTracking1"><?php echo get_lang('Yes'); ?></label>
+		<input class="checkbox" type="radio" name="enableTrackingForm" value="0" id="enableTracking0" <?php echo $enableTrackingForm?'':'checked="checked" '; ?>/> <label for="enableTracking0"><?php echo get_lang('No'); ?></label>
+	  </td>
+	  <?php endif; ?>
+
+	  <td>&nbsp;</td>
+	</tr>
+	<tr id="optional_param6" style="display:none;">
+	  <td><?php echo get_lang('SingleDb'); ?> </td>
+
+	  <?php if($installType == 'update'): ?>
+	  <td><input type="hidden" name="singleDbForm" value="<?php echo $singleDbForm; ?>" /><?php echo $singleDbForm? get_lang('One') : get_lang('Several'); ?></td>
+	  <?php else: ?>
+	  <td>
+		<input class="checkbox" type="radio" name="singleDbForm" value="1" id="singleDb1" <?php echo $singleDbForm?'checked="checked" ':''; ?> onclick="show_hide_tracking_and_user_db(this.id);" /> <label for="singleDb1"><?php echo get_lang('One'); ?></label>
+		<input class="checkbox" type="radio" name="singleDbForm" value="0" id="singleDb0" <?php echo $singleDbForm?'':'checked="checked" '; ?> onclick="show_hide_tracking_and_user_db(this.id);" /> <label for="singleDb0"><?php echo get_lang('Several'); ?></label>
+	  </td>
+	  <?php endif; ?>
+
+	  <td>&nbsp;</td>
+	</tr>
+	</div>
+	<tr>
+		<td><button type="submit" class="login" name="step3" value="<?php echo get_lang('CheckDatabaseConnection'); ?>" ><?php echo get_lang('CheckDatabaseConnection'); ?></button></td>
+		<?php $dbConnect = test_db_connect ($dbHostForm, $dbUsernameForm, $dbPassForm, $singleDbForm, $dbPrefixForm);
+		if($dbConnect==1): ?>
+		<td colspan="2">
+			<div class="confirmation-message">
+				<!--<div  style="float:left; margin-right:10px;">
+				<img src="../img/message_confirmation.png" alt="Confirmation" />
+				</div>-->
+				<!--<div style="float:left;">-->
+				MySQL host info: <?php echo mysql_get_host_info(); ?><br />
+				MySQL server version: <?php echo mysql_get_server_info(); ?><br />
+				MySQL protocol version: <?php echo mysql_get_proto_info(); ?>
+				<!--</div>-->
+				<div style="clear:both;"></div>
+			</div>
+		</td>
+		<?php else: ?>
+		<td colspan="2">
+			<div style="float:left;" class="error-message">
+				<!--<div  style="float:left; margin-right:10px;">
+				<img src="../img/message_error.png" alt="Error" />
+				</div>-->
+				<div style="float:left;">
+				<strong>MySQL error: <?php echo mysql_errno(); ?></strong><br />
+				<?php echo mysql_error().'<br/>'; ?>
+				<strong><?php echo get_lang('Details').': '. get_lang('FailedConectionDatabase'); ?></strong><br />
+				</div>
+			</div>
+		</td>
+		<?php endif; ?>
+	</tr>
+	<tr>
+	  <td><button type="submit" name="step2" class="back" value="&lt; <?php echo get_lang('Previous'); ?>" ><?php echo get_lang('Previous'); ?></button></td>
+	  <td>&nbsp;</td>
+	  <td align="right"><input type="hidden" name="is_executable" id="is_executable" value="-" /><button type="submit" class="next" name="step4" value="<?php echo get_lang('Next'); ?> &gt;" /><?php echo get_lang('Next'); ?></button></td>
+	</tr>
+	</table>
+	<?php
+}
+
+/**
+* Displays a parameter in a table row.
+* Used by the display_configuration_settings_form function.
+*/
+function display_configuration_parameter($install_type, $parameter_name, $form_field_name, $parameter_value, $display_when_update = 'true')
+{
+	global $charset;
+
+	echo "<tr>\n";
+	echo "<td>$parameter_name&nbsp;&nbsp;</td>\n";
+	if ($install_type == INSTALL_TYPE_UPDATE && $display_when_update)
+	{
+		echo '<td><input type="hidden" name="'.$form_field_name.'" value="'.api_htmlentities($parameter_value, ENT_QUOTES, $charset).'" />'.$parameter_value."</td>\n";
+	}
+	else
+	{
+		echo '<td><input type="text" size="'.FORM_FIELD_DISPLAY_LENGTH.'" maxlength="'.MAX_FORM_FIELD_LENGTH.'" name="'.$form_field_name.'" value="'.api_htmlentities($parameter_value, ENT_QUOTES, $charset).'" />'."</td>\n";
+	}
+	echo "</tr>\n";
+}
+
+/**
+ * Displays step 4 of the installation - configuration settings about Dokeos itself.
+ */
+function display_configuration_settings_form($installType, $urlForm, $languageForm, $emailForm, $adminFirstName, $adminLastName, $adminPhoneForm, $campusForm, $institutionForm, $institutionUrlForm, $encryptPassForm, $allowSelfReg, $allowSelfRegProf, $loginForm, $passForm)
+{
+	global $charset;
+
+	if($installType != 'update' && empty($languageForm))
+	{
+		$languageForm = $_SESSION['install_language'];
+	}
+
+	echo "<h2>" . display_step_sequence() . get_lang("CfgSetting") . "</h2>";
+	echo '<p>'.get_lang('ConfigSettingsInfo').' <b>main/inc/conf/configuration.php</b></p>';
+
+	echo "</td></tr>\n<tr><td>";
+	echo "<table width=\"100%\">";
+
+	//First parameter: language
+	echo "<tr>\n";
+	echo '<td>'.get_lang('MainLang')."&nbsp;&nbsp;</td>\n";
+	if($installType == 'update')
+	{		
+		echo '<td><input type="hidden" name="languageForm" value="'.api_htmlentities($languageForm, ENT_QUOTES, $charset).'" />'.$languageForm."</td>\n";
+	}
+	else // new installation
+	{
+		
+	echo '<td>';
+	
+	$array_lang = array('asturian','english','italian','french','slovenian','spanish');
+
+	////Only display Language have 90% +
+	echo "\t\t<select name=\"languageForm\">\n";	
+				
+	foreach ($array_lang as $key => $value)	{
+		echo '<option value="'.$value.'"';
+		if($value == $languageForm) echo ' selected="selected"';
+		echo ">$value</option>\n";
+	}
+
+	echo "\t\t</select>\n";
+	
+	//Display all language
+	/*echo "<select name=\"languageForm\">\n";
+		$dirname='../lang/';
+		
+		if ($dir=@opendir($dirname)) {
+			$lang_files = array();
+				while (($file = readdir($dir)) !== false) {
+					if($file != '.' && $file != '..' && $file != 'CVS' && $file != '.svn' && is_dir($dirname.$file)){
+						array_push($lang_files, $file);
+					}
+				}
+			closedir($dir);
+		}
+		sort($lang_files);
+				
+		
+		foreach ($lang_files as $file) {
+			echo '<option value="'.$file.'"';
+				if($file == $languageForm) echo ' selected="selected"';
+				echo ">$file</option>\n";
+		}
+
+
+		echo '</select>';*/
+		echo "</td>\n";
+	}
+	echo "</tr>\n";
+
+	//Second parameter: Dokeos URL
+	echo "<tr>\n";
+	echo '<td>'.get_lang('DokeosURL').' (<font color="red">'.get_lang('ThisFieldIsRequired')."</font>)&nbsp;&nbsp;</td>\n";
+	
+	if($installType == 'update') echo '<td>'.api_htmlentities($urlForm, ENT_QUOTES, $charset)."</td>\n";
+	else echo '<td><input type="text" size="40" maxlength="100" name="urlForm" value="'.api_htmlentities($urlForm, ENT_QUOTES, $charset).'" />'."</td>\n";
+	
+	echo "</tr>\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' ? true : false));
+
+	//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
+	  	<tr>
+	  <td><?php echo get_lang("EncryptUserPass"); ?> :</td>
+
+	  <?php if($installType == 'update'): ?>
+	  <td><input type="hidden" name="encryptPassForm" value="<?php echo $encryptPassForm; ?>" /><?php echo $encryptPassForm? get_lang("Yes") : get_lang("No"); ?></td>
+	  <?php else: ?>
+	  <td>
+		<input class="checkbox" type="radio" name="encryptPassForm" value="1" id="encryptPass1" <?php echo $encryptPassForm?'checked="checked" ':''; ?>/> <label for="encryptPass1"><?php echo get_lang("Yes"); ?></label>
+		<input class="checkbox" type="radio" name="encryptPassForm" value="0" id="encryptPass0" <?php echo $encryptPassForm?'':'checked="checked" '; ?>/> <label for="encryptPass0"><?php echo get_lang("No"); ?></label>
+	  </td>
+	  <?php endif; ?>
+	</tr>
+	
+	 */
+	
+	?>
+	<tr>
+	  <td><?php echo get_lang("EncryptMethodUserPass"); ?> :</td>
+ 
+	  <?php if($installType == 'update'): ?>
+	  <td><input type="hidden" name="encryptPassForm" value="<?php echo $encryptPassForm; ?>" /><?php  echo $encryptPassForm; ?></td>
+	  <?php else: ?>
+	  <td>
+		<input class="checkbox" type="radio" name="encryptPassForm" value="md5" id="encryptPass0" <?php echo $encryptPassForm?'checked="checked" ':''; ?>/> <label for="encryptPass0"><?php echo "md5"; ?></label>
+		<input class="checkbox" type="radio" name="encryptPassForm" value="sha1" id="encryptPass1" <?php echo $encryptPassForm?'':'checked="checked" '; ?>/> <label for="encryptPass1"><?php echo "sha1"; ?></label>
+		<input class="checkbox" type="radio" name="encryptPassForm" value="none" id="encryptPass2" <?php echo $encryptPassForm?'':'checked="checked" '; ?>/> <label for="encryptPass2"><?php echo get_lang("None"); ?></label>
+	  </td>
+	  <?php endif; ?>
+	</tr>
+	
+
+	
+	
+	
+	<tr>
+	  <td><?php echo get_lang("AllowSelfReg"); ?> :</td>
+
+	  <?php if($installType == 'update'): ?>
+	  <td><input type="hidden" name="allowSelfReg" value="<?php echo $allowSelfReg; ?>" /><?php echo $allowSelfReg? get_lang("Yes") : get_lang("No"); ?></td>
+	  <?php else: ?>
+	  <td>
+		<input class="checkbox" type="radio" name="allowSelfReg" value="1" id="allowSelfReg1" <?php echo $allowSelfReg?'checked="checked" ':''; ?>/> <label for="allowSelfReg1"><?php echo get_lang("Yes").' '.get_lang("Recommended"); ?></label>
+		<input class="checkbox" type="radio" name="allowSelfReg" value="0" id="allowSelfReg0" <?php echo $allowSelfReg?'':'checked="checked" '; ?>/> <label for="allowSelfReg0"><?php echo get_lang("No"); ?></label>
+	  </td>
+	  <?php endif; ?>
+
+	</tr>
+	<tr>
+	  <td><?php echo get_lang("AllowSelfRegProf"); ?> :</td>
+
+	  <?php if($installType == 'update'): ?>
+	  <td><input type="hidden" name="allowSelfRegProf" value="<?php echo $allowSelfRegProf; ?>" /><?php echo $allowSelfRegProf? get_lang("Yes") : get_lang("No"); ?></td>
+	  <?php else: ?>
+	  <td>
+		<input class="checkbox" type="radio" name="allowSelfRegProf" value="1" id="allowSelfRegProf1" <?php echo $allowSelfRegProf?'checked="checked" ':''; ?>/> <label for="allowSelfRegProf1"><?php echo get_lang("Yes"); ?></label>
+		<input class="checkbox" type="radio" name="allowSelfRegProf" value="0" id="allowSelfRegProf0" <?php echo $allowSelfRegProf?'':'checked="checked" '; ?>/> <label for="allowSelfRegProf0"><?php echo get_lang("No"); ?></label>
+	  </td>
+	  <?php endif; ?>
+
+	</tr>
+	<tr>
+	  <td><button type="submit" class="back" name="step3" value="&lt; <?php echo get_lang('Previous'); ?>" /><?php echo get_lang('Previous'); ?></button></td>
+	  <td align="right"><input type="hidden" name="is_executable" id="is_executable" value="-" /><button class="next" type="submit" name="step5" value="<?php echo get_lang('Next'); ?> &gt;" /><?php echo get_lang('Next'); ?></button></td>
+	</tr>
+	</table>
+	<?php
+}
+
+/**
+* After installation is completed (step 6), this message is displayed.
+*/
+function display_after_install_message($installType, $nbr_courses)
+{
+	?>
+	<h2><?php echo display_step_sequence() . get_lang("CfgSetting"); ?></h2>
+
+	<?php echo get_lang('FirstUseTip'); ?>
+
+	<?php if($installType == 'update' && $nbr_courses > MAX_COURSE_TRANSFER): ?>
+	<br /><br />
+	<font color="red"><b><?php echo get_lang('Warning');?> :</b> <?php printf(get_lang('YouHaveMoreThanXCourses'),MAX_COURSE_TRANSFER,MAX_COURSE_TRANSFER,'<a href="update_courses.php"><font color="red">','</font></a>');?></font>
+	<?php endif; ?>
+
+	<br /><br />
+	<?php
+	echo '<div class="warning-message">';
+	//echo '<img src="../img/message_warning.png" style="float:left; margin-right:10px;" alt="'.get_lang('Warning').'"/>';
+	echo '<b>'.get_lang('SecurityAdvice').'</b>';
+	echo ': ';
+	printf(get_lang('ToProtectYourSiteMakeXAndYReadOnly'),'main/inc/conf/configuration.php','main/install/index.php');
+	echo '</div>';
+	?>
+
+
+	</form>
+	<a class="portal" href="../../index.php"><?php echo get_lang('GoToYourNewlyCreatedPortal'); ?></a>
+	<?php
+}
+
+/**
+* In step 3. Test the connection to the DB in case of single or multy DB.
+* 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.
+*/
+function test_db_connect ($dbHostForm, $dbUsernameForm, $dbPassForm, $singleDbForm, $dbPrefixForm) {
+	$dbConnect = -1;
+	if ($singleDbForm == 1) {
+		if(@mysql_connect($dbHostForm, $dbUsernameForm, $dbPassForm) !== false) {
+			$dbConnect = 1;
+		} else {
+			$dbConnect = -1;
+		}
+	} elseif ($singleDbForm == 0) {
+		$res=@mysql_connect($dbHostForm, $dbUsernameForm, $dbPassForm);
+		if ($res===false) {
+			return $res;
+		}
+		if ($res !== false) {
+			// The Dokeos system has not been designed to use special SQL modes that were introduced since MySQL 5
+			@mysql_query("set session sql_mode='';");
+
+			$multipleDbCheck = @mysql_query("CREATE DATABASE ".$dbPrefixForm."test_dokeos_connection");
+			if ($multipleDbCheck !== false) {
+				$multipleDbCheck = @mysql_query("DROP DATABASE IF EXISTS ".$dbPrefixForm."test_dokeos_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.
+}
+?>