diff --git a/main/inc/lib/add_course.lib.inc.php b/main/inc/lib/add_course.lib.inc.php index a526bfed04..050ed3e248 100644 --- a/main/inc/lib/add_course.lib.inc.php +++ b/main/inc/lib/add_course.lib.inc.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. */ diff --git a/main/inc/lib/course.lib.php b/main/inc/lib/course.lib.php index f810f7723f..e0a592246a 100644 --- a/main/inc/lib/course.lib.php +++ b/main/inc/lib/course.lib.php @@ -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+');