Fixing dump and delete course due new DB changes (single database) see #4056

skala
Julio Montoya 14 years ago
parent 0b81e85e2b
commit 54a0491f21
  1. 103
      main/inc/lib/add_course.lib.inc.php
  2. 102
      main/inc/lib/course.lib.php

@ -40,8 +40,6 @@ function create_course($wanted_code, $title, $tutor_name, $category_code, $cours
$current_course_id = $keys['currentCourseId'];
$current_course_repository = $keys['currentCourseRepository'];
$db_name = $keys['currentCourseDbName'];
$directory = $keys['currentCourseRepository'];
$expiration_date = time() + $first_expiration_delay;
prepare_course_repository($current_course_repository, $current_course_id);
@ -50,7 +48,6 @@ function create_course($wanted_code, $title, $tutor_name, $category_code, $cours
fill_Db_course($course_id, $current_course_repository, $course_language, $pictures_array, $fill_with_exemplary_content);
return $course_id;
}
return false;
}
@ -217,6 +214,106 @@ function prepare_course_repository($course_repository, $course_code) {
return 0;
};
function get_course_tables() {
$tables = array();
$tables[]= 'tool';
$tables[]= 'tool_intro';
// Group tool
$tables[]= 'group_info';
$tables[]= 'group_category';
$tables[]= 'group_rel_user';
$tables[]= 'group_rel_tutor';
$tables[]= 'item_property';
$tables[]= 'userinfo_content';
$tables[]= 'userinfo_def';
$tables[]= 'course_description';
$tables[]= 'calendar_event';
$tables[]= 'calendar_event_repeat';
$tables[]= 'calendar_event_repeat_not';
$tables[]= 'calendar_event_attachment';
$tables[]= 'announcement';
$tables[]= 'announcement_attachment';
$tables[]= 'resource';
$tables[]= 'student_publication';
$tables[]= 'student_publication_assignment';
$tables[]= 'document';
$tables[]= 'forum_category';
$tables[]= 'forum_forum';
$tables[]= 'forum_thread';
$tables[]= 'forum_post';
$tables[]= 'forum_mailcue';
$tables[]= 'forum_attachment';
$tables[]= 'forum_notification';
$tables[]= 'forum_thread_qualify';
$tables[]= 'forum_thread_qualify_log';
$tables[]= 'link';
$tables[]= 'link_category';
$tables[]= 'online_connected';
$tables[]= 'online_link';
$tables[]= 'chat_connected';
$tables[]= 'quiz';
$tables[]= 'quiz_rel_question';
$tables[]= 'quiz_question';
$tables[]= 'quiz_answer';
$tables[]= 'quiz_question_option';
$tables[]= 'quiz_question_category';
$tables[]= 'quiz_question_rel_category';
$tables[]= 'dropbox_post';
$tables[]= 'dropbox_file';
$tables[]= 'dropbox_person';
$tables[]= 'dropbox_category';
$tables[]= 'dropbox_feedback';
$tables[]= 'lp';
$tables[]= 'lp_item';
$tables[]= 'lp_view';
$tables[]= 'lp_item_view';
$tables[]= 'lp_iv_interaction';
$tables[]= 'lp_iv_objective';
$tables[]= 'blog';
$tables[]= 'blog_comment';
$tables[]= 'blog_post';
$tables[]= 'blog_rating';
$tables[]= 'blog_rel_user';
$tables[]= 'blog_task';
$tables[]= 'blog_task_rel_user';
$tables[]= 'blog_attachment';
$tables[]= 'permission_group';
$tables[]= 'permission_user';
$tables[]= 'permission_task';
$tables[]= 'role';
$tables[]= 'role_group';
$tables[]= 'role_permissions';
$tables[]= 'role_user';
$tables[]= 'survey';
$tables[]= 'survey_question';
$tables[]= 'survey_question_option';
$tables[]= 'survey_invitation';
$tables[]= 'survey_answer';
$tables[]= 'survey_group';
$tables[]= 'wiki';
$tables[]= 'wiki_conf';
$tables[]= 'wiki_discuss';
$tables[]= 'wiki_mailcue';
$tables[]= 'audiorecorder';
$tables[]= 'course_setting';
$tables[]= 'glossary';
$tables[]= 'notebook';
$tables[]= 'attendance';
$tables[]= 'attendance_sheet';
$tables[]= 'attendance_calendar';
$tables[]= 'attendance_result';
$tables[]= 'attendance_sheet_log';
$tables[]= 'thematic';
$tables[]= 'thematic_plan';
$tables[]= 'thematic_advance';
return $tables;
}
/**
* Creates all the necessary tables for a new course.
*/

@ -1498,32 +1498,34 @@ class CourseManager {
public static function delete_course($code) {
global $_configuration;
$table_course = Database::get_main_table(TABLE_MAIN_COURSE);
$table_course_user = Database::get_main_table(TABLE_MAIN_COURSE_USER);
$table_course_class = Database::get_main_table(TABLE_MAIN_COURSE_CLASS);
$user_role_table = Database::get_main_table(MAIN_USER_ROLE_TABLE);
$location_table = Database::get_main_table(MAIN_LOCATION_TABLE);
$role_right_location_table = Database::get_main_table(MAIN_ROLE_RIGHT_LOCATION_TABLE);
$table_session_course = Database::get_main_table(TABLE_MAIN_SESSION_COURSE);
$table_session_course_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
$table_course_survey = Database::get_main_table(TABLE_MAIN_SHARED_SURVEY);
$table_course_survey_question = Database::get_main_table(TABLE_MAIN_SHARED_SURVEY_QUESTION);
$table_course_survey_question_option = Database::get_main_table(TABLE_MAIN_SHARED_SURVEY_QUESTION_OPTION);
$table_course = Database::get_main_table(TABLE_MAIN_COURSE);
$table_course_user = Database::get_main_table(TABLE_MAIN_COURSE_USER);
$table_course_class = Database::get_main_table(TABLE_MAIN_COURSE_CLASS);
$user_role_table = Database::get_main_table(MAIN_USER_ROLE_TABLE);
$location_table = Database::get_main_table(MAIN_LOCATION_TABLE);
$role_right_location_table = Database::get_main_table(MAIN_ROLE_RIGHT_LOCATION_TABLE);
$table_session_course = Database::get_main_table(TABLE_MAIN_SESSION_COURSE);
$table_session_course_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
$table_course_survey = Database::get_main_table(TABLE_MAIN_SHARED_SURVEY);
$table_course_survey_question = Database::get_main_table(TABLE_MAIN_SHARED_SURVEY_QUESTION);
$table_course_survey_question_option= Database::get_main_table(TABLE_MAIN_SHARED_SURVEY_QUESTION_OPTION);
$stats = false;
if (Database::get_statistic_database() != ''){
if (Database::get_statistic_database() != '') {
$stats = true;
$table_stats_hotpots = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_HOTPOTATOES);
$table_stats_attempt = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ATTEMPT);
$table_stats_exercises = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES);
$table_stats_access = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ACCESS);
$table_stats_lastaccess = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_LASTACCESS);
$table_stats_course_access = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_COURSE_ACCESS);
$table_stats_online = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ONLINE);
$table_stats_default = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_DEFAULT);
$table_stats_downloads = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_DOWNLOADS);
$table_stats_links = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_LINKS);
$table_stats_uploads = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_UPLOADS);
$table_stats_hotpots = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_HOTPOTATOES);
$table_stats_attempt = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ATTEMPT);
$table_stats_exercises = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES);
$table_stats_access = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ACCESS);
$table_stats_lastaccess = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_LASTACCESS);
$table_stats_course_access = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_COURSE_ACCESS);
$table_stats_online = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ONLINE);
$table_stats_default = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_DEFAULT);
$table_stats_downloads = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_DOWNLOADS);
$table_stats_links = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_LINKS);
$table_stats_uploads = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_UPLOADS);
}
$code = Database::escape_string($code);
$sql = "SELECT * FROM $table_course WHERE code='".$code."'";
$res = Database::query($sql);
@ -1586,24 +1588,22 @@ class CourseManager {
$sql = "DELETE FROM $table_course WHERE code='".$virtual_course['code']."'";
Database::query($sql);
}
$sql = "SELECT * FROM $table_course WHERE code='".$code."'";
$res = Database::query($sql);
$course = Database::fetch_array($res);
if (!$_configuration['single_database']) {
$sql = "DROP DATABASE IF EXISTS ".$course['db_name'];
Database::query($sql);
} else {
//TODO Clean the following code as currently it would probably delete another course
//similarly named, by mistake...
$db_pattern = $_configuration['table_prefix'].$course['db_name'].$_configuration['db_glue'];
$sql = "SHOW TABLES LIKE '$db_pattern%'";
$result = Database::query($sql);
while (list ($courseTable) = Database::fetch_array($result)) {
Database::query("DROP TABLE $courseTable");
$course_tables = get_course_tables();
//Cleaning c_x tables
if (!empty($course['id'])) {
foreach($course_tables as $table) {
$table = Database::get_course_table($table);
$sql = "DELETE FROM $table WHERE c_id = {$course['id']} ";
Database::query($sql);
}
}
$course_dir = api_get_path(SYS_COURSE_PATH).$course['directory'];
$archive_dir = api_get_path(SYS_ARCHIVE_PATH).$course['directory'].'_'.time();
$archive_dir = api_get_path(SYS_ARCHIVE_PATH).$course['directory'].'_'.time();
if (is_dir($course_dir)) {
rename($course_dir, $archive_dir);
}
@ -1728,23 +1728,31 @@ class CourseManager {
return;
}
$sql_dump = '';
$course_code = Database::escape_string($course_code);
$table_course = Database::get_main_table(TABLE_MAIN_COURSE);
$course_code = Database::escape_string($course_code);
$table_course = Database::get_main_table(TABLE_MAIN_COURSE);
$sql = "SELECT * FROM $table_course WHERE code = '$course_code'";
$res = Database::query($sql);
$course = Database::fetch_array($res);
$sql = "SHOW TABLES FROM ".$course['db_name'];
$res = Database::query($sql);
while ($table = Database::fetch_array($res)) {
$sql = "SELECT * FROM ".$course['db_name'].".".$table[0]."";
$res3 = Database::query($sql);
while ($row = Database::fetch_array($res3)) {
foreach ($row as $key => $value) {
$row[$key] = $key."='".addslashes($row[$key])."'";
}
$sql_dump .= "\nINSERT INTO $table[0] SET ".implode(', ', $row).';';
$course_tables = get_course_tables();
if (!empty($course['id'])) {
//Cleaning c_x tables
foreach($course_tables as $table) {
$table = Database::get_course_table($table);
$sql = "SELECT * FROM $table WHERE c_id = {$course['id']} ";
$res_table = Database::query($sql);
while ($row = Database::fetch_array($res_table, 'ASSOC')) {
$row_to_save = array();
foreach ($row as $key => $value) {
$row_to_save[$key] = $key."='".Database::escape_string($row[$key])."'";
}
$sql_dump .= "\nINSERT INTO $table SET ".implode(', ', $row_to_save).';';
}
}
}
if (is_dir(api_get_path(SYS_COURSE_PATH).$course['directory'])) {
$file_name = api_get_path(SYS_COURSE_PATH).$course['directory'].'/mysql_dump.sql';
$handle = fopen($file_name, 'a+');

Loading…
Cancel
Save