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)
pull/2487/head
jmontoyaa 9 years ago
parent 8fd4492cff
commit 862f7ec73d
  1. 31
      main/coursecopy/copy_course.php
  2. 71
      main/inc/lib/course.lib.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(

@ -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);

Loading…
Cancel
Save