From 862f7ec73db0c2ca7df5b6c5095e89214a7bc97e Mon Sep 17 00:00:00 2001 From: jmontoyaa Date: Wed, 15 Mar 2017 12:53:14 +0100 Subject: [PATCH] Fix course list see BT#12458 - Add order in query - Use function get_courses_list_by_user_id instead of custom query - Use url id in query instead of custom query - Add new parameter bool $loadSpecialCourses (true by default as before) --- main/coursecopy/copy_course.php | 31 +++++++------- main/inc/lib/course.lib.php | 71 +++++++++++++++++++-------------- 2 files changed, 56 insertions(+), 46 deletions(-) diff --git a/main/coursecopy/copy_course.php b/main/coursecopy/copy_course.php index 5ce0e6b5dd..30f53fce69 100755 --- a/main/coursecopy/copy_course.php +++ b/main/coursecopy/copy_course.php @@ -48,7 +48,6 @@ if (Security::check_token('post') && ( ) { // Clear token Security::clear_token(); - if (isset($_POST['action']) && $_POST['action'] == 'course_select_form') { $course = CourseSelectForm::get_posted_course('copy_course'); } else { @@ -85,24 +84,22 @@ if (Security::check_token('post') && ( $table_cu = Database :: get_main_table(TABLE_MAIN_COURSE_USER); $user_info = api_get_user_info(); $course_info = api_get_course_info(); - $sql = 'SELECT * - FROM '.$table_c.' c, '.$table_cu.' cu - WHERE cu.c_id = c.id'; - if (!api_is_platform_admin()) { - $sql .= ' AND cu.status=1 '; - } - $sql .= ' AND - cu.user_id = '.$user_info['user_id'].' AND - c.id != '."'".$course_info['real_id']."'".' - ORDER BY title ASC'; - $res = Database::query($sql); - if (Database::num_rows($res) == 0) { - Display::display_normal_message(get_lang('NoDestinationCoursesAvailable')); + $courseList = CourseManager::get_courses_list_by_user_id( + $user_info['user_id'], + false, + false, + false + ); + + if (empty($courseList)) { + Display::addFlash( + Display::return_message(get_lang('NoDestinationCoursesAvailable')) + ); } else { $options = array(); - while ($obj = Database::fetch_object($res)) { - $courseInfo = api_get_course_info_by_id($obj->c_id); - $options[$courseInfo['code']] = $obj->title.' ('.$obj->code.')'; + foreach ($courseList as $courseItem) { + $courseInfo = api_get_course_info_by_id($courseItem['real_id']); + $options[$courseInfo['code']] = $courseInfo['title'].' ('.$courseInfo['code'].')'; } $form = new FormValidator( diff --git a/main/inc/lib/course.lib.php b/main/inc/lib/course.lib.php index 141507fa33..1783b8dbb5 100755 --- a/main/inc/lib/course.lib.php +++ b/main/inc/lib/course.lib.php @@ -2683,13 +2683,15 @@ class CourseManager * @param boolean $include_sessions Whether to include courses from session or not * @param boolean $adminGetsAllCourses If the user is platform admin, * whether he gets all the courses or just his. Note: This does *not* include all sessions + * @param bool $loadSpecialCourses * @return array List of codes and db name * @author isaac flores paz */ public static function get_courses_list_by_user_id( $user_id, $include_sessions = false, - $adminGetsAllCourses = false + $adminGetsAllCourses = false, + $loadSpecialCourses = true ) { $user_id = intval($user_id); $urlId = api_get_current_access_url_id(); @@ -2700,7 +2702,7 @@ class CourseManager $tbl_course_user = Database::get_main_table(TABLE_MAIN_COURSE_USER); $tbl_user_course_category = Database::get_main_table(TABLE_USER_COURSE_CATEGORY); $tableCourseUrl = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE); - $special_course_list = self::get_special_course_list(); + if ($adminGetsAllCourses && UserManager::is_admin($user_id)) { // get the whole courses list $sql = "SELECT DISTINCT(course.code), course.id as real_id @@ -2710,32 +2712,41 @@ class CourseManager WHERE url.access_url_id = $urlId "; } else { - $with_special_courses = $without_special_courses = ''; - if (!empty($special_course_list)) { - $sc_string = '"' . implode('","', $special_course_list) . '"'; - $with_special_courses = ' AND course.id IN (' . $sc_string . ')'; - $without_special_courses = ' AND course.id NOT IN (' . $sc_string . ')'; - } - - if (!empty($with_special_courses)) { - $sql = "SELECT DISTINCT(course.code), course.id as real_id - FROM $tbl_course_user course_rel_user - LEFT JOIN $tbl_course course - ON course.id = course_rel_user.c_id - LEFT JOIN $tbl_user_course_category user_course_category - ON course_rel_user.user_course_cat = user_course_category.id - INNER JOIN $tableCourseUrl url - ON (course.id = url.c_id) - WHERE url.access_url_id = $urlId $with_special_courses - GROUP BY course.code - ORDER BY user_course_category.sort, course.title, course_rel_user.sort ASC - "; - $rs_special_course = Database::query($sql); - if (Database::num_rows($rs_special_course) > 0) { - while ($result_row = Database::fetch_array($rs_special_course)) { - $result_row['special_course'] = 1; - $course_list[] = $result_row; - $codes[] = $result_row['real_id']; + $withSpecialCourses = $withoutSpecialCourses = ''; + if ($loadSpecialCourses) { + $specialCourseList = self::get_special_course_list(); + + if (!empty($specialCourseList)) { + $specialCourseToString = '"'.implode( + '","', + $specialCourseList + ).'"'; + $withSpecialCourses = ' AND course.id IN ('.$specialCourseToString.')'; + $withoutSpecialCourses = ' AND course.id NOT IN ('.$specialCourseToString.')'; + } + + if (!empty($withSpecialCourses)) { + $sql = "SELECT DISTINCT(course.code), course.id as real_id + FROM $tbl_course_user course_rel_user + LEFT JOIN $tbl_course course + ON course.id = course_rel_user.c_id + LEFT JOIN $tbl_user_course_category user_course_category + ON course_rel_user.user_course_cat = user_course_category.id + INNER JOIN $tableCourseUrl url + ON (course.id = url.c_id) + WHERE url.access_url_id = $urlId $withSpecialCourses + GROUP BY course.code + ORDER BY user_course_category.sort, course.title, course_rel_user.sort ASC + "; + $rs_special_course = Database::query($sql); + if (Database::num_rows($rs_special_course) > 0) { + while ($result_row = Database::fetch_array( + $rs_special_course + )) { + $result_row['special_course'] = 1; + $course_list[] = $result_row; + $codes[] = $result_row['real_id']; + } } } } @@ -2751,7 +2762,9 @@ class CourseManager WHERE url.access_url_id = $urlId AND cru.user_id = '$user_id' - $without_special_courses"; + $withoutSpecialCourses + ORDER BY course.title + "; } $result = Database::query($sql);