|
@@ -0,0 +1,313 @@
|
|
|
+<?php
|
|
|
+
|
|
|
+==============================================================================
|
|
|
+ Dokeos - elearning and course management software
|
|
|
+
|
|
|
+ Copyright (c) 2004-2007 Dokeos S.A.
|
|
|
+ Copyright (c) 2003 Ghent University (UGent)
|
|
|
+ Copyright (c) 2001 Universite catholique de Louvain (UCL)
|
|
|
+ Copyright (c) various contributors
|
|
|
+
|
|
|
+ For a full list of contributors, see "credits.txt".
|
|
|
+ The full license can be read in "license.txt".
|
|
|
+
|
|
|
+ This program is free software; you can redistribute it and/or
|
|
|
+ modify it under the terms of the GNU General Public License
|
|
|
+ as published by the Free Software Foundation; either version 2
|
|
|
+ of the License, or (at your option) any later version.
|
|
|
+
|
|
|
+ See the GNU General Public License for more details.
|
|
|
+
|
|
|
+ Contact address: Dokeos, 44 rue des palais, B-1030 Brussels, Belgium
|
|
|
+ Mail: info@dokeos.com
|
|
|
+==============================================================================
|
|
|
+*/
|
|
|
+
|
|
|
+==============================================================================
|
|
|
+* Update the Dokeos database from an older version
|
|
|
+* Notice : This script has to be included by index.php or update_courses.php
|
|
|
+*
|
|
|
+* @package dokeos.install
|
|
|
+* @todo
|
|
|
+* - conditional changing of tables. Currently we execute for example
|
|
|
+* ALTER TABLE `$dbNameForm`.`cours` instructions without checking wether this is necessary.
|
|
|
+* - reorganise code into functions
|
|
|
+* @todo use database library
|
|
|
+==============================================================================
|
|
|
+*/
|
|
|
+
|
|
|
+
|
|
|
+require_once("install_upgrade.lib.php");
|
|
|
+
|
|
|
+
|
|
|
+if(function_exists('ini_set'))
|
|
|
+{
|
|
|
+ ini_set('memory_limit',-1);
|
|
|
+ ini_set('max_execution_time',0);
|
|
|
+}else{
|
|
|
+ error_log('Update-db script: could not change memory and time limits',0);
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+==============================================================================
|
|
|
+ MAIN CODE
|
|
|
+==============================================================================
|
|
|
+*/
|
|
|
+
|
|
|
+
|
|
|
+if (defined('DOKEOS_INSTALL') || defined('DOKEOS_COURSE_UPDATE'))
|
|
|
+{
|
|
|
+
|
|
|
+ if (empty ($updateFromConfigFile) || !file_exists($_POST['updatePath'].$updateFromConfigFile) || !in_array(get_config_param('clarolineVersion'), $update_from_version))
|
|
|
+ {
|
|
|
+ echo '<b>'.get_lang('Error').' !</b> Dokeos '.implode('|', $updateFromVersion).' '.get_lang('HasNotBeenFound').'.<br><br>
|
|
|
+ '.get_lang('PleasGoBackToStep1').'.
|
|
|
+ <p><input type="submit" name="step1" value="< '.get_lang('Back').'"></p>
|
|
|
+ </td></tr></table></form></body></html>';
|
|
|
+
|
|
|
+ exit ();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ $_configuration['db_glue'] = get_config_param('dbGlu');
|
|
|
+
|
|
|
+ if ($singleDbForm)
|
|
|
+ {
|
|
|
+ $_configuration['table_prefix'] = get_config_param('courseTablePrefix');
|
|
|
+ $_configuration['main_database'] = get_config_param('mainDbName');
|
|
|
+ $_configuration['db_prefix'] = get_config_param('dbNamePrefix');
|
|
|
+ }
|
|
|
+
|
|
|
+ $dbScormForm = eregi_replace('[^a-z0-9_-]', '', $dbScormForm);
|
|
|
+
|
|
|
+ if (!empty ($dbPrefixForm) && !ereg('^'.$dbPrefixForm, $dbScormForm))
|
|
|
+ {
|
|
|
+ $dbScormForm = $dbPrefixForm.$dbScormForm;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (empty ($dbScormForm) || $dbScormForm == 'mysql' || $dbScormForm == $dbPrefixForm)
|
|
|
+ {
|
|
|
+ $dbScormForm = $dbPrefixForm.'scorm';
|
|
|
+ }
|
|
|
+ @mysql_connect($dbHostForm, $dbUsernameForm, $dbPassForm);
|
|
|
+
|
|
|
+
|
|
|
+ if (mysql_errno() > 0)
|
|
|
+ {
|
|
|
+ $no = mysql_errno();
|
|
|
+ $msg = mysql_error();
|
|
|
+
|
|
|
+ echo '<hr>['.$no.'] - '.$msg.'<hr>
|
|
|
+ '.get_lang('DBServerDoesntWorkOrLoginPassIsWrong').'.<br><br>
|
|
|
+ '.get_lang('PleaseCheckTheseValues').' :<br><br>
|
|
|
+ <b>'.get_lang('DBHost').'</b> : '.$dbHostForm.'<br>
|
|
|
+ <b>'.get_lang('DBLogin').'</b> : '.$dbUsernameForm.'<br>
|
|
|
+ <b>'.get_lang('DBPassword').'</b> : '.$dbPassForm.'<br><br>
|
|
|
+ '.get_lang('PleaseGoBackToStep').' '. (defined('DOKEOS_INSTALL') ? '3' : '1').'.
|
|
|
+ <p><input type="submit" name="step'. (defined('DOKEOS_INSTALL') ? '3' : '1').'" value="< '.get_lang('Back').'"></p>
|
|
|
+ </td></tr></table></form></body></html>';
|
|
|
+
|
|
|
+ exit ();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ $dblistres = mysql_list_dbs();
|
|
|
+ $dblist = array();
|
|
|
+ while ($row = mysql_fetch_object($dblistres)) {
|
|
|
+ $dblist[] = $row->Database;
|
|
|
+ }
|
|
|
+
|
|
|
+ -----------------------------------------------------------
|
|
|
+ Normal upgrade procedure:
|
|
|
+ start by updating main, statistic, user databases
|
|
|
+ -----------------------------------------------------------
|
|
|
+ */
|
|
|
+
|
|
|
+
|
|
|
+ $only_test = false;
|
|
|
+ $log = 0;
|
|
|
+ if (defined('DOKEOS_INSTALL'))
|
|
|
+ {
|
|
|
+ if ($singleDbForm)
|
|
|
+ {
|
|
|
+ $dbStatsForm = $dbNameForm;
|
|
|
+ $dbScormForm = $dbNameForm;
|
|
|
+ $dbUserForm = $dbNameForm;
|
|
|
+ }
|
|
|
+
|
|
|
+ * Update the databases "pre" migration
|
|
|
+ */
|
|
|
+ include ("../lang/english/create_course.inc.php");
|
|
|
+
|
|
|
+ if ($languageForm != 'english')
|
|
|
+ {
|
|
|
+
|
|
|
+ include ("../lang/$languageForm/create_course.inc.php");
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ $m_q_list = get_sql_file_contents('migrate-db-1.8.0-1.8.2-pre.sql','main');
|
|
|
+ if(count($m_q_list)>0)
|
|
|
+ {
|
|
|
+
|
|
|
+
|
|
|
+ * We connect to the right DB first to make sure we can use the queries
|
|
|
+ * without a database name
|
|
|
+ */
|
|
|
+ if(strlen($dbNameForm)>40){
|
|
|
+ error_log('Database name '.$dbNameForm.' is too long, skipping',0);
|
|
|
+ }elseif(!in_array($dbNameForm,$dblist)){
|
|
|
+ error_log('Database '.$dbNameForm.' was not found, skipping',0);
|
|
|
+ }else{
|
|
|
+ mysql_select_db($dbNameForm);
|
|
|
+ foreach($m_q_list as $query){
|
|
|
+ if($only_test){
|
|
|
+ error_log("mysql_query($dbNameForm,$query)",0);
|
|
|
+ }else{
|
|
|
+ $res = mysql_query($query);
|
|
|
+ if($log)
|
|
|
+ {
|
|
|
+ error_log("In $dbNameForm, executed: $query",0);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ $s_q_list = get_sql_file_contents('migrate-db-1.8.0-1.8.2-pre.sql','stats');
|
|
|
+ if(count($s_q_list)>0)
|
|
|
+ {
|
|
|
+
|
|
|
+
|
|
|
+ * We connect to the right DB first to make sure we can use the queries
|
|
|
+ * without a database name
|
|
|
+ */
|
|
|
+ if(strlen($dbStatsForm)>40){
|
|
|
+ error_log('Database name '.$dbStatsForm.' is too long, skipping',0);
|
|
|
+ }elseif(!in_array($dbStatsForm,$dblist)){
|
|
|
+ error_log('Database '.$dbStatsForm.' was not found, skipping',0);
|
|
|
+ }else{
|
|
|
+ mysql_select_db($dbStatsForm);
|
|
|
+ foreach($s_q_list as $query){
|
|
|
+ if($only_test){
|
|
|
+ error_log("mysql_query($dbStatsForm,$query)",0);
|
|
|
+ }else{
|
|
|
+ $res = mysql_query($query);
|
|
|
+ if($log)
|
|
|
+ {
|
|
|
+ error_log("In $dbStatsForm, executed: $query",0);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $u_q_list = get_sql_file_contents('migrate-db-1.8.0-1.8.2-pre.sql','user');
|
|
|
+ if(count($u_q_list)>0)
|
|
|
+ {
|
|
|
+
|
|
|
+
|
|
|
+ * We connect to the right DB first to make sure we can use the queries
|
|
|
+ * without a database name
|
|
|
+ */
|
|
|
+ if(strlen($dbUserForm)>40){
|
|
|
+ error_log('Database name '.$dbUserForm.' is too long, skipping',0);
|
|
|
+ }elseif(!in_array($dbUserForm,$dblist)){
|
|
|
+ error_log('Database '.$dbUserForm.' was not found, skipping',0);
|
|
|
+ }else{
|
|
|
+ mysql_select_db($dbUserForm);
|
|
|
+ foreach($u_q_list as $query){
|
|
|
+ if($only_test){
|
|
|
+ error_log("mysql_query($dbUserForm,$query)",0);
|
|
|
+ error_log("In $dbUserForm, executed: $query",0);
|
|
|
+ }else{
|
|
|
+ $res = mysql_query($query);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ -----------------------------------------------------------
|
|
|
+ Update the Dokeos course databases
|
|
|
+ this part can be accessed in two ways:
|
|
|
+ - from the normal upgrade process
|
|
|
+ - from the script update_courses.php,
|
|
|
+ which is used to upgrade more than MAX_COURSE_TRANSFER courses
|
|
|
+
|
|
|
+ Every time this script is accessed, only
|
|
|
+ MAX_COURSE_TRANSFER courses are upgraded.
|
|
|
+ -----------------------------------------------------------
|
|
|
+ */
|
|
|
+
|
|
|
+ $prefix = '';
|
|
|
+ if ($singleDbForm)
|
|
|
+ {
|
|
|
+ $prefix = $_configuration['table_prefix'];
|
|
|
+ }
|
|
|
+
|
|
|
+ $c_q_list = get_sql_file_contents('migrate-db-1.8.0-1.8.2-pre.sql','course');
|
|
|
+ if(count($c_q_list)>0)
|
|
|
+ {
|
|
|
+
|
|
|
+ if(strlen($dbNameForm)>40){
|
|
|
+ error_log('Database name '.$dbNameForm.' is too long, skipping',0);
|
|
|
+ }elseif(!in_array($dbNameForm,$dblist)){
|
|
|
+ error_log('Database '.$dbNameForm.' was not found, skipping',0);
|
|
|
+ }else{
|
|
|
+ mysql_select_db($dbNameForm);
|
|
|
+ $res = mysql_query("SELECT code,db_name,directory,course_language FROM course WHERE target_course_code IS NULL");
|
|
|
+ if($res===false){die('Error while querying the courses list in update_db.inc.php');}
|
|
|
+ if(mysql_num_rows($res)>0)
|
|
|
+ {
|
|
|
+ $i=0;
|
|
|
+
|
|
|
+ while($row = mysql_fetch_array($res))
|
|
|
+ {
|
|
|
+ $list[] = $row;
|
|
|
+ $i++;
|
|
|
+ }
|
|
|
+ foreach($list as $row_course)
|
|
|
+ {
|
|
|
+
|
|
|
+
|
|
|
+ * We connect to the right DB first to make sure we can use the queries
|
|
|
+ * without a database name
|
|
|
+ */
|
|
|
+ if (!$singleDbForm)
|
|
|
+ {
|
|
|
+ mysql_select_db($row_course['db_name']);
|
|
|
+ }
|
|
|
+
|
|
|
+ foreach($c_q_list as $query)
|
|
|
+ {
|
|
|
+ if ($singleDbForm)
|
|
|
+ {
|
|
|
+ $query = preg_replace('/^(UPDATE|ALTER TABLE|CREATE TABLE|DROP TABLE|INSERT INTO|DELETE FROM)\s+(\w*)(.*)$/',"$1 $prefix{$row_course['db_name']}_$2$3",$query);
|
|
|
+ }
|
|
|
+
|
|
|
+ if($only_test)
|
|
|
+ {
|
|
|
+ error_log("mysql_query(".$row_course['db_name'].",$query)",0);
|
|
|
+ }else{
|
|
|
+ $res = mysql_query($query);
|
|
|
+ if($log)
|
|
|
+ {
|
|
|
+ error_log("In ".$row_course['db_name'].", executed: $query",0);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+else
|
|
|
+{
|
|
|
+ echo 'You are not allowed here !';
|
|
|
+}
|
|
|
+?>
|