From f0dffdad8068d0bbefece17c3c1eff61ca56620f Mon Sep 17 00:00:00 2001 From: Yannick Warnier Date: Sat, 4 Jul 2009 06:53:09 +0200 Subject: [PATCH] [svn r21777] Added install scripts for 1.8.6.1 (improvements for UTF-8 and other minor improvements) --- main/install/index.php | 39 +-- main/install/update-db-1.8.6-1.8.6.1.inc.php | 312 ++++++++++++++++++ .../update-files-1.8.6-1.8.6.1.inc.php | 138 ++++++++ 3 files changed, 460 insertions(+), 29 deletions(-) create mode 100755 main/install/update-db-1.8.6-1.8.6.1.inc.php create mode 100755 main/install/update-files-1.8.6-1.8.6.1.inc.php diff --git a/main/install/index.php b/main/install/index.php index 9f67d49c22..8e4dd4b332 100644 --- a/main/install/index.php +++ b/main/install/index.php @@ -1,28 +1,5 @@ -'.get_lang('Error').' ! Dokeos '.implode('|', $updateFromVersion).' '.get_lang('HasNotBeenFound').'.

+ '.get_lang('PleasGoBackToStep1').'. +

+ '; + + exit (); + } + + //get_config_param() comes from install_functions.inc.php and + //actually gets the param from + $_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'; + } + $res = @mysql_connect($dbHostForm, $dbUsernameForm, $dbPassForm); + + //if error on connection to the database, show error and exit + if ($res === false) + { + //$no = mysql_errno(); + //$msg = mysql_error(); + + //echo '
['.$no.'] - '.$msg.'
'; + echo get_lang('DBServerDoesntWorkOrLoginPassIsWrong').'.

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

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

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

+ '; + + exit (); + } + + // The Dokeos system has not been designed to use special SQL modes that were introduced since MySQL 5 + @mysql_query("set session sql_mode='';"); + + $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 + ----------------------------------------------------------- + */ + //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('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') + { + //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{ + 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); + } + } + } + } + } + + + //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{ + 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); + } + } + } + } + } + //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{ + 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); + } + } + } + } + //the SCORM database doesn't need a change in the pre-migrate part - ignore + } + + + /* + ----------------------------------------------------------- + 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 = 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 + { + mysql_select_db($dbNameForm); + $res = mysql_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.inc.php');} + + if(mysql_num_rows($res)>0) + { + $i=0; + $list = array(); + //while( ($i < MAX_COURSE_TRANSFER) && ($row = mysql_fetch_array($res))) + while($row = mysql_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 + { + mysql_select_db($row_course['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{$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 !'; +} +?> \ No newline at end of file diff --git a/main/install/update-files-1.8.6-1.8.6.1.inc.php b/main/install/update-files-1.8.6-1.8.6.1.inc.php new file mode 100755 index 0000000000..b68c9ca29b --- /dev/null +++ b/main/install/update-files-1.8.6-1.8.6.1.inc.php @@ -0,0 +1,138 @@ +')) + { + //ignore the line + $ignore = true; + } + if(!$ignore) + { + fwrite($fh,$line); + } + } + if(!$found_version) + { + fwrite($fh,'$_configuration[\'dokeos_version\'] = \''.$new_version.'\';'."\r\n"); + } + if(!$found_stable) + { + fwrite($fh,'$_configuration[\'dokeos_stable\'] = '.($new_version_stable?'true':'false').';'."\r\n"); + } + fwrite($fh,'?>'); + fclose($fh); + + $sys_course_path = $pathForm.'courses/'; + + //$tbl_course = Database :: get_main_table(TABLE_MAIN_COURSE); + //linking + $link = mysql_connect($dbHostForm, $dbUsernameForm, $dbPassForm); + mysql_select_db($dbNameForm,$link); + $db_name = $dbNameForm; + $sql = "SELECT * FROM $db_name.course"; + error_log('Getting courses for files updates: '.$sql,0); + $result=mysql_query($sql); + + $perm = api_get_setting('permissions_for_new_directories'); + $perm = octdec(!empty($perm)?$perm:'0770'); + $old_umask = umask(0); + + + while($courses_directories=mysql_fetch_array($result)) + { + $currentCourseRepositorySys = $sys_course_path.$courses_directories['directory'].'/'; + + $db_name = $courses_directories['db_name']; + $origCRS = $updatePath.'courses/'.$courses_directories['directory']; + + if(!is_dir($origCRS)){ + error_log('Directory '.$origCRS.' does not exist. Skipping.',0); + continue; + } + //move everything to the new hierarchy (from old path to new path) + error_log('Renaming '.$origCRS.' to '.$sys_course_path.$courses_directories['directory'],0); + rename($origCRS,$sys_course_path.$courses_directories['directory']); + error_log('Creating dirs in '.$currentCourseRepositorySys,0); + + //DOCUMENT FOLDER + + //document > shared_folder + if(!is_dir($currentCourseRepositorySys."document/shared_folder")){ + mkdir($currentCourseRepositorySys."document/shared_folder",$perm); + } + + //UPLOAD FOLDER + + //upload > forum > images + if(!is_dir($currentCourseRepositorySys."upload/forum/images")){ + mkdir($currentCourseRepositorySys."upload/forum/images",$perm); + } + + //upload > learning_path + if(!is_dir($currentCourseRepositorySys."upload/learning_path")){ + mkdir($currentCourseRepositorySys."upload/learning_path",$perm); + } + + //upload > learning_path > images + if(!is_dir($currentCourseRepositorySys."upload/learning_path/images")){ + mkdir($currentCourseRepositorySys."upload/learning_path/images",$perm); + } + + //upload > calendar + if(!is_dir($currentCourseRepositorySys."upload/calendar")){ + mkdir($currentCourseRepositorySys."upload/calendar",$perm); + } + + //upload > calendar > images + if(!is_dir($currentCourseRepositorySys."upload/calendar/images")){ + mkdir($currentCourseRepositorySys."upload/calendar/images",$perm); + } + } +} +else +{ + echo 'You are not allowed here !'; +} +?>