Quellcode durchsuchen

Adding partial changes in the install folder for Chamilo 1.9

Julio Montoya vor 13 Jahren
Ursprung
Commit
231697cee6

+ 10 - 4
main/install/index.php

@@ -104,7 +104,7 @@ error_reporting(E_COMPILE_ERROR | E_ERROR | E_CORE_ERROR);
 // 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', '1.8.6.1', '1.8.6.2','1.8.7','1.8.7.1','1.8.8','1.8.8.2');
+$update_from_version_8 = array('1.8', '1.8.2', '1.8.3', '1.8.4', '1.8.5', '1.8.6', '1.8.6.1', '1.8.6.2','1.8.7','1.8.7.1','1.8.8','1.8.8.2', '1.8.8.4');
 
 $my_old_version = '';
 $tmp_version = get_config_param('dokeos_version');
@@ -119,9 +119,9 @@ if (!empty($_POST['old_version'])) {
 	$my_old_version = $dokeos_version;
 }
 
-$new_version 		= '1.8.8.4';
-$new_version_stable = true;
-$new_version_major 	= false;
+$new_version 		= '1.9.0';
+$new_version_stable = false;
+$new_version_major 	= true;
 $software_name 		= 'Chamilo';
 $software_url 		= 'http://www.chamilo.org/';
 
@@ -789,6 +789,12 @@ if ($_POST['step2']) {
             case '1.8.8.2':
                 //Only updates the configuration.inc.php with the new version 
                 include 'update-configuration.inc.php';
+			case '1.8.8.4':				
+				include 'update-db-1.8.8-1.9.0.inc.php';
+				//include 'update-files-1.8.8-1.9.0.inc.php';
+				//Only updates the configuration.inc.php with the new version
+				include 'update-configuration.inc.php';
+				
                 break;
             default:
 				break;

+ 26 - 0
main/install/migrate-db-1.8.8-1.9.0-pre.sql

@@ -0,0 +1,26 @@
+-- This script updates the databases structure before migrating the data from
+-- version 1.8.8 (or version 1.8.8.2, 1.8.8.4) to version 1.9.0
+-- it is intended as a standalone script, however, because of the multiple
+-- databases related difficulties, it should be parsed by a PHP script in
+-- order to connect to and update the right databases.
+-- There is one line per query, allowing the PHP function file() to read
+-- all lines separately into an array. The xxMAINxx-type markers are there
+-- to tell the PHP script which database we're talking about.
+-- By always using the keyword "TABLE" in the queries, we should be able
+-- to retrieve and modify the table name from the PHP script if needed, which
+-- will allow us to deal with the unique-database-type installations
+--
+-- This first part is for the main database
+
+-- xxMAINxx
+UPDATE settings_current SET selected_value = '1.9.0.14911' WHERE variable = 'chamilo_database_version';
+
+
+-- xxSTATSxx
+ALTER TABLE track_e_exercices ADD COLUMN questions_to_check TEXT  NOT NULL DEFAULT '';
+
+
+-- xxUSERxx
+
+-- xxCOURSExx
+

+ 310 - 0
main/install/update-db-1.8.8-1.9.0.inc.php

@@ -0,0 +1,310 @@
+<?php
+/* For licensing terms, see /license.txt */
+
+/**
+ * Chamilo LMS
+ *
+ * Update the Chamilo database from an older Chamilo version
+ * Notice : This script has to be included by index.php
+ * or update_courses.php (deprecated).
+ *
+ * @package chamilo.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
+ */
+
+$old_file_version = '1.8.8';
+$new_file_version = '1.9.0';
+
+// Check if we come from index.php or update_courses.php - otherwise display error msg
+if (defined('SYSTEM_INSTALLATION')) {
+
+    // Check if the current Chamilo install is eligible for update
+    if (!file_exists('../inc/conf/configuration.php')) {
+        echo '<strong>'.get_lang('Error').' !</strong> Chamilo '.implode('|', $updateFromVersion).' '.get_lang('HasNotBeenFound').'.<br /><br />
+                                '.get_lang('PleasGoBackToStep1').'.
+                                <p><button type="submit" class="back" name="step1" value="&lt; '.get_lang('Back').'">'.get_lang('Back').'</button></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 = preg_replace('/[^a-zA-Z0-9_\-]/', '', $dbScormForm);
+
+	if (!empty($dbPrefixForm) && strpos($dbScormForm, $dbPrefixForm) !== 0) {
+        $dbScormForm = $dbPrefixForm.$dbScormForm;
+    }
+
+    if (empty($dbScormForm) || $dbScormForm == 'mysql' || $dbScormForm == $dbPrefixForm) {
+        $dbScormForm = $dbPrefixForm.'scorm';
+    }
+
+    /*   Normal upgrade procedure: start by updating main, statistic, user databases */
+
+    // If this script has been included by index.php, not update_courses.php, so
+    // that we want to change the main databases as well...
+    $only_test = false;
+    $log = 0;
+    if (defined('SYSTEM_INSTALLATION')) {
+
+        if ($singleDbForm) {
+            $dbStatsForm = $dbNameForm;
+            $dbScormForm = $dbNameForm;
+            $dbUserForm = $dbNameForm;
+        }
+        /**
+         * Update the databases "pre" migration
+         */
+        include '../lang/english/create_course.inc.php';
+
+        if ($languageForm != 'english') {
+            // languageForm has been escaped in index.php
+            include '../lang/'.$languageForm.'/create_course.inc.php';
+        }
+
+        // Get the main queries list (m_q_list)
+        $m_q_list = get_sql_file_contents('migrate-db-'.$old_file_version.'-'.$new_file_version.'-pre.sql', 'main');
+        if (count($m_q_list) > 0) {
+            // Now use the $m_q_list
+            /**
+             * 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 {
+                Database::select_db($dbNameForm);
+                foreach ($m_q_list as $query){
+                    if ($only_test) {
+                        error_log("Database::query($dbNameForm,$query)", 0);
+                    } else {
+                        $res = Database::query($query);
+                        if ($log) {
+                            error_log("In $dbNameForm, executed: $query", 0);
+                        }
+                        if ($res === false) {
+                        	error_log('Error in '.$query.': '.Database::error());
+                        }
+                    }
+                }
+            }
+        }
+
+        /* // This fragment of code is not necessary so far.
+        // Get the main queries list (m_q_list)
+        $m_q_list = get_sql_file_contents('migrate-db-'.$old_file_version.'-'.$new_file_version.'-post.sql', 'main');
+        if (count($m_q_list) > 0) {
+            // Now use the $m_q_list
+            // 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 {
+                Database::select_db($dbNameForm);
+                foreach ($m_q_list as $query) {
+                    if ($only_test) {
+                        error_log("Database::query($dbNameForm,$query)", 0);
+                    } else {
+                        $res = Database::query($query);
+                        if ($log) {
+                            error_log("In $dbNameForm, executed: $query", 0);
+                        }
+                    }
+                }
+            }
+        }
+        */
+
+        // Get the stats queries list (s_q_list)
+        $s_q_list = get_sql_file_contents('migrate-db-'.$old_file_version.'-'.$new_file_version.'-pre.sql', 'stats');
+        if (count($s_q_list) > 0) {
+            // Now use the $s_q_list
+            /**
+             * 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 {
+                Database::select_db($dbStatsForm);
+
+                foreach ($s_q_list as $query) {
+                    if ($only_test) {
+                        error_log("Database::query($dbStatsForm,$query)", 0);
+                    } else {
+                        $res = Database::query($query);
+                        if ($log) {
+                            error_log("In $dbStatsForm, executed: $query", 0);
+                        }
+                        if ($res === false) {
+                            error_log('Error in '.$query.': '.Database::error());
+                        }
+                    }
+                }
+
+            }
+        }
+
+
+        // Get the user queries list (u_q_list)
+        $u_q_list = get_sql_file_contents('migrate-db-'.$old_file_version.'-'.$new_file_version.'-pre.sql', 'user');
+        if (count($u_q_list) > 0) {
+            // Now use the $u_q_list
+            /**
+             * 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 {
+                Database::select_db($dbUserForm);
+                foreach ($u_q_list as $query) {
+                    if ($only_test) {
+                        error_log("Database::query($dbUserForm,$query)", 0);
+                        error_log("In $dbUserForm, executed: $query", 0);
+                    } else {
+                        $res = Database::query($query);
+                        if ($res === false) {
+                            error_log('Error in '.$query.': '.Database::error());
+                        }
+                    }
+                }
+            }
+        }
+        // The SCORM database doesn't need a change in the pre-migrate part - ignore
+    }
+
+    $prefix = '';
+    if ($singleDbForm) {
+        $prefix =  get_config_param ('table_prefix');
+    }
+
+    // Get the courses databases queries list (c_q_list)
+    $c_q_list = get_sql_file_contents('migrate-db-'.$old_file_version.'-'.$new_file_version.'-pre.sql', 'course');
+    if (count($c_q_list) > 0) {
+        // Get the courses list
+        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 {
+            Database::select_db($dbNameForm);
+            $res = Database::query("SELECT code,db_name,directory,course_language FROM course WHERE target_course_code IS NULL ORDER BY code");
+
+            if ($res === false) { die('Error while querying the courses list in update_db-1.8.6.2-1.8.7.inc.php'); }
+
+            if (Database::num_rows($res) > 0) {
+                $i = 0;
+                $list = array();
+                while ($row = Database::fetch_array($res)) {
+                    $list[] = $row;
+                    $i++;
+                }
+                foreach ($list as $row_course) {
+                    // Now use the $c_q_list
+                    /**
+                     * We connect to the right DB first to make sure we can use the queries
+                     * without a database name
+                     */
+                    if (!$singleDbForm) { // otherwise just use the main one
+                        Database::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("Database::query(".$row_course['db_name'].",$query)", 0);
+                        } else {
+                            $res = Database::query($query);
+                            if ($log) {
+                                error_log("In ".$row_course['db_name'].", executed: $query", 0);
+                            }
+                            if ($res === false) {
+                                error_log('Error in '.$query.': '.Database::error());
+                            }
+                        }
+                    }                   
+                    
+                    
+                }
+            }
+        }
+    }
+
+    /* // This fragment of code is not necessary so far.
+    // Get the courses databases queries list (c_q_list)
+    $c_q_list = get_sql_file_contents('migrate-db-'.$old_file_version.'-'.$new_file_version.'-post.sql', 'course');
+    if (count($c_q_list) > 0) {
+        // Get the courses list
+        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 {
+            Database::select_db($dbNameForm);
+            $res = Database::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-1.8.7-1.8.8.inc.php'); }
+            if (Database::num_rows($res) > 0) {
+                $i = 0;
+                while ($row = Database::fetch_array($res)) {
+                    $list[] = $row;
+                    $i++;
+                }
+                foreach ($list as $row) {
+                    // Now use the $c_q_list
+                    // We connect to the right DB first to make sure we can use the queries
+                    // without a database name
+                    $prefix_course = $prefix;
+                    if ($singleDbForm) {
+                        $prefix_course = $prefix.$row['db_name']."_";
+                    } else {
+                        Database::select_db($row['db_name']);
+                    }
+
+                    foreach($c_q_list as $query) {
+                        if ($singleDbForm) { //otherwise just use the main one
+                            $query = preg_replace('/^(UPDATE|ALTER TABLE|CREATE TABLE|DROP TABLE|INSERT INTO|DELETE FROM)\s+(\w*)(.*)$/', "$1 $prefix$2$3", $query);
+                        }
+                        if ($only_test) {
+                            error_log("Database::query(".$row['db_name'].",$query)", 0);
+                        } else {
+                            $res = Database::query($query);
+                            if ($log) {
+                                error_log("In ".$row['db_name'].", executed: $query", 0);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+    */
+
+
+} else {
+
+    echo 'You are not allowed here !';
+
+}