diff --git a/main/admin/course_list.php b/main/admin/course_list.php index 10784c8bb2..8936fc805d 100755 --- a/main/admin/course_list.php +++ b/main/admin/course_list.php @@ -22,61 +22,7 @@ $addTeacherColumn = api_get_configuration_value('add_teachers_in_course_list'); */ function get_number_of_courses() { - $course_table = Database::get_main_table(TABLE_MAIN_COURSE); - $sql = "SELECT COUNT(code) AS total_number_of_items FROM $course_table c"; - - if ((api_is_platform_admin() || api_is_session_admin()) && - api_is_multiple_url_enabled() && api_get_current_access_url_id() != -1 - ) { - $access_url_rel_course_table = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE); - $sql .= " INNER JOIN $access_url_rel_course_table url_rel_course - ON (c.id = url_rel_course.c_id)"; - } - - if (isset($_GET['keyword'])) { - $keyword = Database::escape_string("%".$_GET['keyword']."%"); - $sql .= " WHERE ( - c.title LIKE '".$keyword."' OR - c.code LIKE '".$keyword."' OR - c.visual_code LIKE '".$keyword."' - ) - "; - } elseif (isset($_GET['keyword_code'])) { - $keyword_code = Database::escape_string("%".$_GET['keyword_code']."%"); - $keyword_title = Database::escape_string("%".$_GET['keyword_title']."%"); - $keyword_category = isset($_GET['keyword_category']) - ? Database::escape_string("%".$_GET['keyword_category']."%") - : null; - $keyword_language = Database::escape_string("%".$_GET['keyword_language']."%"); - $keyword_visibility = Database::escape_string("%".$_GET['keyword_visibility']."%"); - $keyword_subscribe = Database::escape_string($_GET['keyword_subscribe']); - $keyword_unsubscribe = Database::escape_string($_GET['keyword_unsubscribe']); - - $sql .= " WHERE - (c.code LIKE '".$keyword_code."' OR c.visual_code LIKE '".$keyword_code."') AND - c.title LIKE '".$keyword_title."' AND - c.course_language LIKE '".$keyword_language."' AND - c.visibility LIKE '".$keyword_visibility."' AND - c.subscribe LIKE '".$keyword_subscribe."' AND - c.unsubscribe LIKE '".$keyword_unsubscribe."' - "; - - if (!empty($keyword_category)) { - $sql .= " AND c.category_code LIKE '".$keyword_category."' "; - } - } - - // adding the filter to see the user's only of the current access_url - if ((api_is_platform_admin() || api_is_session_admin()) && - api_is_multiple_url_enabled() && api_get_current_access_url_id() != -1 - ) { - $sql .= " AND url_rel_course.access_url_id = ".api_get_current_access_url_id(); - } - - $res = Database::query($sql); - $obj = Database::fetch_object($res); - - return $obj->total_number_of_items; + return get_course_data(0, 0, 0, 0, null, true); } /** @@ -91,17 +37,15 @@ function get_number_of_courses() * * @return array */ -function get_course_data($from, $number_of_items, $column, $direction) +function get_course_data($from, $number_of_items, $column, $direction, $dataFunctions = [], $getCount = false) { $addTeacherColumn = api_get_configuration_value('add_teachers_in_course_list'); - $table = Database::get_main_table(TABLE_MAIN_COURSE); $teachers = ''; if ($addTeacherColumn) { - $teachers = ", GROUP_CONCAT(cu.user_id SEPARATOR ',') as col7, "; + $teachers = " GROUP_CONCAT(cu.user_id SEPARATOR ',') as col7, "; } - $select = "SELECT code AS col0, title AS col1, @@ -109,7 +53,7 @@ function get_course_data($from, $number_of_items, $column, $direction) course_language AS col3, category_code AS col4, subscribe AS col5, - unsubscribe AS col6 + unsubscribe AS col6, $teachers visibility, directory, @@ -117,6 +61,10 @@ function get_course_data($from, $number_of_items, $column, $direction) course.code, course.id "; + if ($getCount) { + $select = 'SELECT COUNT(DISTINCT(course.id)) as count '; + } + $sql = "$select FROM $table course"; if ((api_is_platform_admin() || api_is_session_admin()) && @@ -177,11 +125,30 @@ function get_course_data($from, $number_of_items, $column, $direction) if ($addTeacherColumn) { $teachers = isset($_GET['course_teachers']) ? $_GET['course_teachers'] : []; if (!empty($teachers)) { - array_map('intval', $teachers); - $sql .= ' AND ( cu.user_id IN ('.implode("' , '", $teachers).')) '; + $teachers = array_map('intval', $teachers); + $addNull = ''; + foreach ($teachers as $key => $teacherId) { + if (0 === $teacherId) { + $addNull = 'OR cu.user_id IS NULL '; + unset($key); + } + } + $sql .= ' AND ( cu.user_id IN ("'.implode('", "', $teachers).'") '.$addNull.' ) '; } - $sql .= " GROUP BY course.id "; + if (false === $getCount) { + $sql .= " GROUP BY course.id "; + } + } + + if ($getCount) { + $res = Database::query($sql); + $row = Database::fetch_array($res); + if ($row) { + return (int) $row['count']; + } + + return 0; } $sql .= " ORDER BY col$column $direction "; @@ -246,7 +213,7 @@ function get_course_data($from, $number_of_items, $column, $direction) ]; if ($addTeacherColumn) { - $teacherIdList = explode(',', $course[7]); + $teacherIdList = array_filter(explode(',', $course[7])); $teacherList = []; if (!empty($teacherIdList)) { foreach ($teacherIdList as $teacherId) { @@ -454,6 +421,7 @@ if (isset($_GET['search']) && $_GET['search'] === 'advanced') { 'multiple' => 'multiple', ] ); + $form->addLabel('', ''); } $form->addElement('radio', 'keyword_visibility', get_lang('CourseAccess'), get_lang('OpenToTheWorld'), COURSE_VISIBILITY_OPEN_WORLD); @@ -616,6 +584,14 @@ if (isset($_GET['search']) && $_GET['search'] === 'advanced') { $parameters['keyword_unsubscribe'] = Security::remove_XSS($_GET['keyword_unsubscribe']); } + if (isset($_GET['course_teachers'])) { + $parsed = array_map('intval', $_GET['course_teachers']); + $parameters["course_teachers"] = ''; + foreach ($parsed as $key=>$teacherId) { + $parameters["course_teachers[$key]"] = $teacherId; + } + } + $table->set_additional_parameters($parameters); $column = 0; $table->set_header($column++, '', false, 'width="8px"'); @@ -645,11 +621,11 @@ if (isset($_GET['search']) && $_GET['search'] === 'advanced') { $htmlHeadXtra[] = ' ';