Use course_category.id instead of course.category_code in queries - refs BT#15992 #3017

pull/3064/head
Angel Fernando Quiroz Campos 6 years ago
parent f6d058227a
commit de0bd0a7f7
  1. 2
      main/admin/course_edit.php
  2. 11
      main/admin/course_list.php
  3. 4
      main/admin/course_request_accepted.php
  4. 8
      main/course_info/infocours.php
  5. 8
      main/create_course/add_course.php
  6. 18
      main/inc/lib/CoursesAndSessionsCatalog.class.php
  7. 4
      main/inc/lib/api.lib.php
  8. 3
      main/inc/lib/auth.lib.php
  9. 25
      main/inc/lib/course.lib.php
  10. 30
      main/inc/lib/course_category.lib.php
  11. 24
      main/inc/lib/statistics.lib.php
  12. 7
      main/inc/lib/usermanager.lib.php
  13. 39
      main/inc/lib/userportal.lib.php
  14. 19
      src/CoreBundle/Framework/PageController.php
  15. 4
      src/CourseBundle/Component/CourseCopy/CourseRestorer.php

@ -374,7 +374,7 @@ if ($form->validate()) {
$params = [ $params = [
'course_language' => $course_language, 'course_language' => $course_language,
'title' => $title, 'title' => $title,
'category' => $category_code, 'category_id' => $category_code,
'visual_code' => $visual_code, 'visual_code' => $visual_code,
'department_name' => $department_name, 'department_name' => $department_name,
'department_url' => $department_url, 'department_url' => $department_url,

@ -23,6 +23,7 @@ $sessionId = isset($_GET['session_id']) ? $_GET['session_id'] : null;
function get_number_of_courses() function get_number_of_courses()
{ {
$course_table = Database::get_main_table(TABLE_MAIN_COURSE); $course_table = Database::get_main_table(TABLE_MAIN_COURSE);
$tblCourseCategory = Database::get_main_table(TABLE_MAIN_CATEGORY);
$sql = "SELECT COUNT(code) AS total_number_of_items FROM $course_table c"; $sql = "SELECT COUNT(code) AS total_number_of_items FROM $course_table c";
if ((api_is_platform_admin() || api_is_session_admin()) && if ((api_is_platform_admin() || api_is_session_admin()) &&
@ -33,6 +34,8 @@ function get_number_of_courses()
ON (c.id = url_rel_course.c_id)"; ON (c.id = url_rel_course.c_id)";
} }
$sql .= " LEFT JOIN $tblCourseCategory ON c.category_id = course_category.id ";
if (isset($_GET['keyword'])) { if (isset($_GET['keyword'])) {
$keyword = Database::escape_string("%".$_GET['keyword']."%"); $keyword = Database::escape_string("%".$_GET['keyword']."%");
$sql .= " WHERE ( $sql .= " WHERE (
@ -62,7 +65,7 @@ function get_number_of_courses()
"; ";
if (!empty($keyword_category)) { if (!empty($keyword_category)) {
$sql .= " AND c.category_code LIKE '".$keyword_category."' "; $sql .= " AND course_category.code LIKE '".$keyword_category."' ";
} }
} }
@ -111,7 +114,7 @@ function get_course_data($from, $number_of_items, $column, $direction)
directory, directory,
course.id course.id
FROM $course_table course FROM $course_table course
LEFT JOIN $tblCourseCategory category ON course.category = category.id "; LEFT JOIN $tblCourseCategory category ON course.category_id = category.id ";
if ((api_is_platform_admin() || api_is_session_admin()) && if ((api_is_platform_admin() || api_is_session_admin()) &&
api_is_multiple_url_enabled() && api_get_current_access_url_id() != -1 api_is_multiple_url_enabled() && api_get_current_access_url_id() != -1
@ -246,13 +249,14 @@ function get_course_data_by_session($from, $number_of_items, $column, $direction
$course_table = Database::get_main_table(TABLE_MAIN_COURSE); $course_table = Database::get_main_table(TABLE_MAIN_COURSE);
$session_rel_course = Database::get_main_table(TABLE_MAIN_SESSION_COURSE); $session_rel_course = Database::get_main_table(TABLE_MAIN_SESSION_COURSE);
$session = Database::get_main_table(TABLE_MAIN_SESSION); $session = Database::get_main_table(TABLE_MAIN_SESSION);
$tblCourseCategory = Database::get_main_table(TABLE_MAIN_CATEGORY);
$sql = "SELECT $sql = "SELECT
c.code AS col0, c.code AS col0,
c.title AS col1, c.title AS col1,
c.code AS col2, c.code AS col2,
c.course_language AS col3, c.course_language AS col3,
c.category_code AS col4, course_category.code AS col4,
c.subscribe AS col5, c.subscribe AS col5,
c.unsubscribe AS col6, c.unsubscribe AS col6,
c.code AS col7, c.code AS col7,
@ -264,6 +268,7 @@ function get_course_data_by_session($from, $number_of_items, $column, $direction
ON c.id = r.c_id ON c.id = r.c_id
INNER JOIN $session s INNER JOIN $session s
ON r.session_id = s.id ON r.session_id = s.id
LEFT JOIN $tblCourseCategory ON c.category_id = course_category.id
"; ";
if (isset($_GET['session_id']) && !empty($_GET['session_id'])) { if (isset($_GET['session_id']) && !empty($_GET['session_id'])) {

@ -82,6 +82,7 @@ function get_request_data($from, $number_of_items, $column, $direction)
{ {
$keyword = isset($_GET['keyword']) ? Database::escape_string(trim($_GET['keyword'])) : null; $keyword = isset($_GET['keyword']) ? Database::escape_string(trim($_GET['keyword'])) : null;
$course_request_table = Database::get_main_table(TABLE_MAIN_COURSE_REQUEST); $course_request_table = Database::get_main_table(TABLE_MAIN_COURSE_REQUEST);
$tblCourseCategory = Database::get_main_table(TABLE_MAIN_CATEGORY);
$from = intval($from); $from = intval($from);
$number_of_items = intval($number_of_items); $number_of_items = intval($number_of_items);
@ -92,11 +93,12 @@ function get_request_data($from, $number_of_items, $column, $direction)
id AS col0, id AS col0,
code AS col1, code AS col1,
title AS col2, title AS col2,
category_code AS col3, course_category.code AS col3,
tutor_name AS col4, tutor_name AS col4,
request_date AS col5, request_date AS col5,
id AS col6 id AS col6
FROM $course_request_table FROM $course_request_table
LEFT JOIN $tblCourseCategory on course.category_id = course_category.id
WHERE status = ".COURSE_REQUEST_ACCEPTED; WHERE status = ".COURSE_REQUEST_ACCEPTED;
if ($keyword != '') { if ($keyword != '') {

@ -99,10 +99,10 @@ $form->applyFilter('title', 'trim');
$form->addElement( $form->addElement(
'select', 'select',
'category_code', 'category_id',
get_lang('Category'), get_lang('Category'),
$categories, $categories,
['style' => 'width:350px', 'id' => 'category_code'] ['style' => 'width:350px', 'id' => 'category_id']
); );
$form->addSelectLanguage( $form->addSelectLanguage(
'course_language', 'course_language',
@ -913,7 +913,7 @@ $all_course_information = CourseManager::get_course_information($_course['sysCod
// Set the default values of the form // Set the default values of the form
$values = []; $values = [];
$values['title'] = $_course['name']; $values['title'] = $_course['name'];
$values['category_code'] = $_course['categoryCode']; $values['category_id'] = $_course['category_id'];
$values['course_language'] = $_course['language']; $values['course_language'] = $_course['language'];
$values['department_name'] = $_course['extLink']['name']; $values['department_name'] = $_course['extLink']['name'];
$values['department_url'] = $_course['extLink']['url']; $values['department_url'] = $_course['extLink']['url'];
@ -1009,7 +1009,7 @@ if ($form->validate() && $isEditable) {
$params = [ $params = [
'title' => $updateValues['title'], 'title' => $updateValues['title'],
'course_language' => $updateValues['course_language'], 'course_language' => $updateValues['course_language'],
'category_code' => $updateValues['category_code'], 'category_id' => $updateValues['category_id'],
'department_name' => $updateValues['department_name'], 'department_name' => $updateValues['department_name'],
'department_url' => $updateValues['department_url'], 'department_url' => $updateValues['department_url'],
'visibility' => $updateValues['visibility'], 'visibility' => $updateValues['visibility'],

@ -122,7 +122,7 @@ if ($countCategories >= 100) {
$url = api_get_path(WEB_AJAX_PATH).'course.ajax.php?a=search_category'; $url = api_get_path(WEB_AJAX_PATH).'course.ajax.php?a=search_category';
$form->addElement( $form->addElement(
'select_ajax', 'select_ajax',
'category_code', 'category_id',
get_lang('Category'), get_lang('Category'),
null, null,
['url' => $url] ['url' => $url]
@ -140,7 +140,7 @@ if ($countCategories >= 100) {
} }
$form->addSelect( $form->addSelect(
'category_code', 'category_id',
get_lang('Category'), get_lang('Category'),
$categoriesOptions $categoriesOptions
); );
@ -306,7 +306,7 @@ if ($form->validate()) {
$course_values = $form->exportValues(); $course_values = $form->exportValues();
$wanted_code = $course_values['wanted_code']; $wanted_code = $course_values['wanted_code'];
$category_code = isset($course_values['category_code']) ? $course_values['category_code'] : ''; $category_code = isset($course_values['category_id']) ? (int) $course_values['category_id'] : '';
$title = $course_values['title']; $title = $course_values['title'];
$course_language = $course_values['course_language']; $course_language = $course_values['course_language'];
$exemplary_content = !empty($course_values['exemplary_content']); $exemplary_content = !empty($course_values['exemplary_content']);
@ -336,7 +336,7 @@ if ($form->validate()) {
$params['title'] = $title; $params['title'] = $title;
$params['exemplary_content'] = $exemplary_content; $params['exemplary_content'] = $exemplary_content;
$params['wanted_code'] = $wanted_code; $params['wanted_code'] = $wanted_code;
$params['course_category'] = $category_code; $params['course_id'] = $category_code;
$params['course_language'] = $course_language; $params['course_language'] = $course_language;
$params['gradebook_model_id'] = isset($course_values['gradebook_model_id']) ? $course_values['gradebook_model_id'] : null; $params['gradebook_model_id'] = isset($course_values['gradebook_model_id']) ? $course_values['gradebook_model_id'] : null;
$params['course_template'] = isset($course_values['course_template']) ? $course_values['course_template'] : ''; $params['course_template'] = isset($course_values['course_template']) ? $course_values['course_template'] : '';

@ -293,6 +293,7 @@ class CoursesAndSessionsCatalog
public static function getCoursesInCategory($category_code, $random_value = null, $limit = []) public static function getCoursesInCategory($category_code, $random_value = null, $limit = [])
{ {
$tbl_course = Database::get_main_table(TABLE_MAIN_COURSE); $tbl_course = Database::get_main_table(TABLE_MAIN_COURSE);
$tblCourseCategory = Database::get_main_table(TABLE_MAIN_CATEGORY);
$avoidCoursesCondition = self::getAvoidCourseCondition(); $avoidCoursesCondition = self::getAvoidCourseCondition();
$visibilityCondition = CourseManager::getCourseVisibilitySQLCondition('course', true); $visibilityCondition = CourseManager::getCourseVisibilitySQLCondition('course', true);
@ -359,18 +360,21 @@ class CoursesAndSessionsCatalog
$category_code = Database::escape_string($category_code); $category_code = Database::escape_string($category_code);
$listCode = self::childrenCategories($category_code); $listCode = self::childrenCategories($category_code);
$conditionCode = ' '; $conditionCode = ' ';
$joinCategory = '';
if (empty($listCode)) { if (empty($listCode)) {
if ($category_code === 'NONE') { if ($category_code === 'NONE') {
$conditionCode .= " category_code='' "; $conditionCode .= " category_id IS NULL";
} else { } else {
$conditionCode .= " category_code='$category_code' "; $conditionCode .= " course_category.code = '$category_code' ";
$joinCategory = " LEFT JOIN $tblCourseCategory course_category ON course.category_id = course_category.id ";
} }
} else { } else {
foreach ($listCode as $code) { foreach ($listCode as $code) {
$conditionCode .= " category_code='$code' OR "; $conditionCode .= " course_category.code = '$category_code' OR ";
$joinCategory = " LEFT JOIN $tblCourseCategory course_category ON course.category_id = course_category.id ";
} }
$conditionCode .= " category_code='$category_code' "; $conditionCode .= " course_category.code = '$category_code' ";
} }
if (empty($category_code) || $category_code == 'ALL') { if (empty($category_code) || $category_code == 'ALL') {
@ -382,7 +386,8 @@ class CoursesAndSessionsCatalog
$visibilityCondition $visibilityCondition
ORDER BY title $limitFilter "; ORDER BY title $limitFilter ";
} else { } else {
$sql = "SELECT *, id as real_id FROM $tbl_course course $sql = "SELECT course.*, id as real_id FROM $tbl_course course
$joinCategory
WHERE WHERE
$conditionCode $conditionCode
$avoidCoursesCondition $avoidCoursesCondition
@ -397,7 +402,8 @@ class CoursesAndSessionsCatalog
$urlCondition = ' access_url_id = '.$urlId.' '; $urlCondition = ' access_url_id = '.$urlId.' ';
if ($category_code != 'ALL') { if ($category_code != 'ALL') {
$sql = "SELECT *, course.id real_id FROM $tbl_course as course $sql = "SELECT *, course.id real_id, course_category.code AS category_code FROM $tbl_course as course
$joinCategory
INNER JOIN $tbl_url_rel_course as url_rel_course INNER JOIN $tbl_url_rel_course as url_rel_course
ON (url_rel_course.c_id = course.id) ON (url_rel_course.c_id = course.id)
WHERE WHERE

@ -6147,13 +6147,13 @@ function api_is_course_visible_for_user($userid = null, $cid = null)
$course_cat_table = Database::get_main_table(TABLE_MAIN_CATEGORY); $course_cat_table = Database::get_main_table(TABLE_MAIN_CATEGORY);
$sql = "SELECT $sql = "SELECT
$course_table.category_code, $course_cat_table.code AS category_code,
$course_table.visibility, $course_table.visibility,
$course_table.code, $course_table.code,
$course_cat_table.code $course_cat_table.code
FROM $course_table FROM $course_table
LEFT JOIN $course_cat_table LEFT JOIN $course_cat_table
ON $course_table.category_code = $course_cat_table.code ON $course_table.category_id = $course_cat_table.id
WHERE WHERE
$course_table.code = '$cid' $course_table.code = '$cid'
LIMIT 1"; LIMIT 1";

@ -44,12 +44,13 @@ class Auth
course.unsubscribe unsubscr, course.unsubscribe unsubscr,
course.title i, course.title i,
course.tutor_name t, course.tutor_name t,
course.category_code cat, $course_cat_table.code cat,
course.directory dir, course.directory dir,
course_rel_user.status status, course_rel_user.status status,
course_rel_user.sort sort, course_rel_user.sort sort,
course_rel_user.user_course_cat user_course_cat course_rel_user.user_course_cat user_course_cat
FROM $TABLECOURS course, $TABLECOURSUSER course_rel_user FROM $TABLECOURS course, $TABLECOURSUSER course_rel_user
LEFT JOIN $tblCourseCategory ON course.category_id = $course_cat_table.id
WHERE WHERE
course.id = course_rel_user.c_id AND course.id = course_rel_user.c_id AND
course_rel_user.relation_type <> ".COURSE_RELATION_TYPE_RRHH." AND course_rel_user.relation_type <> ".COURSE_RELATION_TYPE_RRHH." AND

@ -212,14 +212,17 @@ class CourseManager
$onlyThisCourseList = [] $onlyThisCourseList = []
) { ) {
$courseTable = Database::get_main_table(TABLE_MAIN_COURSE); $courseTable = Database::get_main_table(TABLE_MAIN_COURSE);
$sql = "SELECT course.*, course.id as real_id $tblCourseCategory = Database::get_main_table(TABLE_MAIN_CATEGORY);
FROM $courseTable course "; $sql = "SELECT course.*, course.id as real_id, course_category.code AS category_code
FROM $courseTable course ";
if (!empty($urlId)) { if (!empty($urlId)) {
$table = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE); $table = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
$sql .= " INNER JOIN $table url ON (url.c_id = course.id) "; $sql .= " INNER JOIN $table url ON (url.c_id = course.id) ";
} }
$sql .= " LEFT JOIN $tblCourseCategory ON course.category_id = course_category.id ";
$visibility = (int) $visibility; $visibility = (int) $visibility;
if (!empty($startwith)) { if (!empty($startwith)) {
@ -1013,6 +1016,7 @@ class CourseManager
// Definitions database tables and variables // Definitions database tables and variables
$tbl_course = Database::get_main_table(TABLE_MAIN_COURSE); $tbl_course = Database::get_main_table(TABLE_MAIN_COURSE);
$tbl_course_user = Database::get_main_table(TABLE_MAIN_COURSE_USER); $tbl_course_user = Database::get_main_table(TABLE_MAIN_COURSE_USER);
$tblCourseCategory = Database::get_main_table(TABLE_MAIN_CATEGORY);
$user_id = intval($user_id); $user_id = intval($user_id);
$data = []; $data = [];
@ -1021,10 +1025,11 @@ class CourseManager
course.title, course.title,
course.id, course.id,
course.id as real_id, course.id as real_id,
course.category_code course_category.code AS category_code
FROM $tbl_course_user as course_rel_user FROM $tbl_course_user as course_rel_user
INNER JOIN $tbl_course as course INNER JOIN $tbl_course as course
ON course.id = course_rel_user.c_id ON course.id = course_rel_user.c_id
LEFT JOIN $tblCourseCategory ON course.category_id = $tblCourseCategory.id
WHERE WHERE
course_rel_user.user_id = $user_id AND course_rel_user.user_id = $user_id AND
course_rel_user.status = 1 course_rel_user.status = 1
@ -2827,6 +2832,7 @@ class CourseManager
$tbl_course_user = Database::get_main_table(TABLE_MAIN_COURSE_USER); $tbl_course_user = Database::get_main_table(TABLE_MAIN_COURSE_USER);
$tbl_user_course_category = Database::get_main_table(TABLE_USER_COURSE_CATEGORY); $tbl_user_course_category = Database::get_main_table(TABLE_USER_COURSE_CATEGORY);
$tableCourseUrl = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE); $tableCourseUrl = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
$tblCourseCategory = Database::get_main_table(TABLE_MAIN_CATEGORY);
$languageCondition = ''; $languageCondition = '';
$onlyInUserLanguage = api_get_configuration_value('my_courses_show_courses_in_user_language_only'); $onlyInUserLanguage = api_get_configuration_value('my_courses_show_courses_in_user_language_only');
@ -2862,11 +2868,12 @@ class CourseManager
if (!empty($withSpecialCourses)) { if (!empty($withSpecialCourses)) {
$sql = "SELECT DISTINCT (course.code), $sql = "SELECT DISTINCT (course.code),
course.id as real_id, course.id as real_id,
course.category_code AS category, course_category.code AS category,
course.title course.title
FROM $tbl_course_user course_rel_user FROM $tbl_course_user course_rel_user
LEFT JOIN $tbl_course course LEFT JOIN $tbl_course course
ON course.id = course_rel_user.c_id ON course.id = course_rel_user.c_id
LEFT JOIN $tblCourseCategory ON course_category.id = course.category_id
LEFT JOIN $tbl_user_course_category user_course_category LEFT JOIN $tbl_user_course_category user_course_category
ON course_rel_user.user_course_cat = user_course_category.id ON course_rel_user.user_course_cat = user_course_category.id
INNER JOIN $tableCourseUrl url INNER JOIN $tableCourseUrl url
@ -2893,7 +2900,7 @@ class CourseManager
$sql = "SELECT $sql = "SELECT
DISTINCT(course.code), DISTINCT(course.code),
course.id as real_id, course.id as real_id,
course.category, course.category_id AS category,
course.title course.title
FROM $tbl_course course FROM $tbl_course course
INNER JOIN $tbl_course_user cru INNER JOIN $tbl_course_user cru
@ -3033,6 +3040,14 @@ class CourseManager
*/ */
public static function update_attributes($id, $attributes) public static function update_attributes($id, $attributes)
{ {
$courseCategory = CourseCategory::getCategory($attributes['category_code']);
unset($attributes['category_code']);
if (!empty($courseCategory)) {
$attributes['category_id'] = $courseCategory['id'];
}
$id = (int) $id; $id = (int) $id;
$table = Database::get_main_table(TABLE_MAIN_COURSE); $table = Database::get_main_table(TABLE_MAIN_COURSE);
$sql = "UPDATE $table SET "; $sql = "UPDATE $table SET ";

@ -96,7 +96,7 @@ class CourseCategory
LEFT JOIN $tbl_category t2 LEFT JOIN $tbl_category t2
ON t1.id = t2.parent_id ON t1.id = t2.parent_id
LEFT JOIN $tbl_course t3 LEFT JOIN $tbl_course t3
ON t3.category = t1.id ON t3.category_id = t1.id
WHERE WHERE
1 = 1 1 = 1
$parentIdCondition $parentIdCondition
@ -259,11 +259,11 @@ class CourseCategory
if ($row = Database::fetch_array($result)) { if ($row = Database::fetch_array($result)) {
if (!empty($row['parent_id'])) { if (!empty($row['parent_id'])) {
Database::query( Database::query(
"UPDATE $tbl_course SET category_code = '".$row['parent_id']."' WHERE category_code='$node'" "UPDATE $tbl_course SET category_id = '".$row['parent_id']."' WHERE category_id = {$category['id']}"
); );
Database::query("UPDATE $tbl_category SET parent_id='".$row['parent_id']."' WHERE parent_id='$node'"); Database::query("UPDATE $tbl_category SET parent_id='".$row['parent_id']."' WHERE parent_id='$node'");
} else { } else {
Database::query("UPDATE $tbl_course SET category = NULL WHERE category = ".$category['id']); Database::query("UPDATE $tbl_course SET category_id = NULL WHERE category_id = ".$category['id']);
Database::query("UPDATE $tbl_category SET parent_id=NULL WHERE parent_id='$node'"); Database::query("UPDATE $tbl_category SET parent_id=NULL WHERE parent_id='$node'");
} }
@ -292,7 +292,6 @@ class CourseCategory
*/ */
public static function editNode($code, $name, $canHaveCourses, $old_code) public static function editNode($code, $name, $canHaveCourses, $old_code)
{ {
$tbl_course = Database::get_main_table(TABLE_MAIN_COURSE);
$tbl_category = Database::get_main_table(TABLE_MAIN_CATEGORY); $tbl_category = Database::get_main_table(TABLE_MAIN_CATEGORY);
$code = trim(Database::escape_string($code)); $code = trim(Database::escape_string($code));
@ -314,11 +313,6 @@ class CourseCategory
WHERE parent_id = '$old_code'"; WHERE parent_id = '$old_code'";
Database::query($sql); Database::query($sql);
// Updating course category
$sql = "UPDATE $tbl_course SET category_code = '$code'
WHERE category_code = '$old_code' ";
Database::query($sql);
return true; return true;
} }
@ -623,6 +617,7 @@ class CourseCategory
public static function countCoursesInCategory($category_code = '', $searchTerm = '') public static function countCoursesInCategory($category_code = '', $searchTerm = '')
{ {
$tbl_course = Database::get_main_table(TABLE_MAIN_COURSE); $tbl_course = Database::get_main_table(TABLE_MAIN_COURSE);
$tblCourseCategory = Database::get_main_table(TABLE_MAIN_CATEGORY);
$categoryCode = Database::escape_string($category_code); $categoryCode = Database::escape_string($category_code);
$searchTerm = Database::escape_string($searchTerm); $searchTerm = Database::escape_string($searchTerm);
@ -630,30 +625,33 @@ class CourseCategory
$avoidCoursesCondition = CoursesAndSessionsCatalog::getAvoidCourseCondition(); $avoidCoursesCondition = CoursesAndSessionsCatalog::getAvoidCourseCondition();
$visibilityCondition = CourseManager::getCourseVisibilitySQLCondition('course', true); $visibilityCondition = CourseManager::getCourseVisibilitySQLCondition('course', true);
$categoryJoin = '';
$categoryFilter = ''; $categoryFilter = '';
if ($categoryCode === 'ALL') { if ($categoryCode === 'ALL') {
// Nothing to do // Nothing to do
} elseif ($categoryCode === 'NONE') { } elseif ($categoryCode === 'NONE') {
$categoryFilter = ' AND category_code = "" '; $categoryFilter = ' AND course.category_id IS NULL ';
} else { } else {
$categoryFilter = ' AND category_code = "'.$categoryCode.'" '; $categoryJoin = " INNER JOIN $tblCourseCategory cat ON course.category_id = cat.id ";
$categoryFilter = ' AND cat.code = "'.$categoryCode.'" ';
} }
$searchFilter = ''; $searchFilter = '';
if (!empty($searchTerm)) { if (!empty($searchTerm)) {
$searchFilter = ' AND ( $searchFilter = ' AND (
code LIKE "%'.$searchTerm.'%" OR course.code LIKE "%'.$searchTerm.'%" OR
title LIKE "%'.$searchTerm.'%" OR course.title LIKE "%'.$searchTerm.'%" OR
tutor_name LIKE "%'.$searchTerm.'%" course.tutor_name LIKE "%'.$searchTerm.'%"
) '; ) ';
} }
$urlCondition = ' access_url_id = '.api_get_current_access_url_id().' AND'; $urlCondition = ' url_rel_course.access_url_id = '.api_get_current_access_url_id().' AND';
$tbl_url_rel_course = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE); $tbl_url_rel_course = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
$sql = "SELECT count(*) as count $sql = "SELECT count(course.id) as count
FROM $tbl_course as course FROM $tbl_course as course
INNER JOIN $tbl_url_rel_course as url_rel_course INNER JOIN $tbl_url_rel_course as url_rel_course
ON (url_rel_course.c_id = course.id) ON (url_rel_course.c_id = course.id)
$categoryJoin
WHERE WHERE
$urlCondition $urlCondition
course.visibility != '0' AND course.visibility != '0' AND

@ -42,20 +42,31 @@ class Statistics
public static function countCourses($categoryCode = null) public static function countCourses($categoryCode = null)
{ {
$course_table = Database::get_main_table(TABLE_MAIN_COURSE); $course_table = Database::get_main_table(TABLE_MAIN_COURSE);
$tblCourseCategory = Database::get_main_table(TABLE_MAIN_CATEGORY);
$access_url_rel_course_table = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE); $access_url_rel_course_table = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
$urlId = api_get_current_access_url_id(); $urlId = api_get_current_access_url_id();
$categoryJoin = '';
$categoryCondition = '';
if (!empty($categoryCode)) {
$categoryJoin = " LEFT JOIN $tblCourseCategory course_category ON course.category_id = course_category.id ";
$categoryCondition = " course_category.code = '".Database::escape_string($categoryCode)."' ";
}
if (api_is_multiple_url_enabled()) { if (api_is_multiple_url_enabled()) {
$sql = "SELECT COUNT(*) AS number $sql = "SELECT COUNT(*) AS number
FROM ".$course_table." as c, $access_url_rel_course_table as u FROM ".$course_table." as c, $access_url_rel_course_table as u
$categoryJoin
WHERE u.c_id = c.id AND access_url_id='".$urlId."'"; WHERE u.c_id = c.id AND access_url_id='".$urlId."'";
if (isset($categoryCode)) { if (isset($categoryCode)) {
$sql .= " AND category_code = '".Database::escape_string($categoryCode)."'"; $sql .= " AND $categoryCondition";
} }
} else { } else {
$sql = "SELECT COUNT(*) AS number $sql = "SELECT COUNT(*) AS number
FROM $course_table"; FROM $course_table $categoryJoin";
if (isset($categoryCode)) { if (isset($categoryCode)) {
$sql .= " WHERE category_code = '".Database::escape_string($categoryCode)."'"; $sql .= " WHERE $categoryCondition";
} }
} }
@ -120,6 +131,7 @@ class Statistics
$course_table = Database::get_main_table(TABLE_MAIN_COURSE); $course_table = Database::get_main_table(TABLE_MAIN_COURSE);
$user_table = Database::get_main_table(TABLE_MAIN_USER); $user_table = Database::get_main_table(TABLE_MAIN_USER);
$access_url_rel_user_table = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); $access_url_rel_user_table = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$tblCourseCategory = Database::get_main_table(TABLE_MAIN_CATEGORY);
$urlId = api_get_current_access_url_id(); $urlId = api_get_current_access_url_id();
$active_filter = $onlyActive ? ' AND active=1' : ''; $active_filter = $onlyActive ? ' AND active=1' : '';
$status_filter = isset($status) ? ' AND status = '.intval($status) : ''; $status_filter = isset($status) ? ' AND status = '.intval($status) : '';
@ -134,9 +146,10 @@ class Statistics
if (isset($categoryCode)) { if (isset($categoryCode)) {
$sql = "SELECT COUNT(DISTINCT(cu.user_id)) AS number $sql = "SELECT COUNT(DISTINCT(cu.user_id)) AS number
FROM $course_user_table cu, $course_table c, $access_url_rel_user_table as url FROM $course_user_table cu, $course_table c, $access_url_rel_user_table as url
INNER JOIN $tblCourseCategory course_category ON c.category_id = course_category.id
WHERE WHERE
c.id = cu.c_id AND c.id = cu.c_id AND
c.category_code = '".Database::escape_string($categoryCode)."' AND course_category.code = '".Database::escape_string($categoryCode)."' AND
cu.user_id = url.user_id AND cu.user_id = url.user_id AND
access_url_id='".$urlId."' access_url_id='".$urlId."'
$status_filter $active_filter"; $status_filter $active_filter";
@ -149,9 +162,10 @@ class Statistics
$status_filter = isset($status) ? ' AND status = '.intval($status) : ''; $status_filter = isset($status) ? ' AND status = '.intval($status) : '';
$sql = "SELECT COUNT(DISTINCT(cu.user_id)) AS number $sql = "SELECT COUNT(DISTINCT(cu.user_id)) AS number
FROM $course_user_table cu, $course_table c FROM $course_user_table cu, $course_table c
INNER JOIN $tblCourseCategory course_category ON c.category_id = course_category.id
WHERE WHERE
c.id = cu.c_id AND c.id = cu.c_id AND
c.category_code = '".Database::escape_string($categoryCode)."' course_category.code = '".Database::escape_string($categoryCode)."'
$status_filter $status_filter
$active_filter $active_filter
"; ";

@ -3167,6 +3167,7 @@ class UserManager
$tbl_session_user = Database::get_main_table(TABLE_MAIN_SESSION_USER); $tbl_session_user = Database::get_main_table(TABLE_MAIN_SESSION_USER);
$tbl_course_user = Database::get_main_table(TABLE_MAIN_COURSE_USER); $tbl_course_user = Database::get_main_table(TABLE_MAIN_COURSE_USER);
$tbl_session_course_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER); $tbl_session_course_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
$tblCourseCategory = Database::get_main_table(TABLE_MAIN_CATEGORY);
$user_id = (int) $user_id; $user_id = (int) $user_id;
@ -3300,7 +3301,7 @@ class UserManager
".(api_is_western_name_order() ? "CONCAT(user.firstname,' ',user.lastname)" : "CONCAT(user.lastname,' ',user.firstname)")." t, ".(api_is_western_name_order() ? "CONCAT(user.firstname,' ',user.lastname)" : "CONCAT(user.lastname,' ',user.firstname)")." t,
email, course.course_language l, email, course.course_language l,
1 sort, 1 sort,
category_code user_course_cat, course_category.code user_course_cat,
access_start_date, access_start_date,
access_end_date, access_end_date,
session.id as session_id, session.id as session_id,
@ -3308,6 +3309,7 @@ class UserManager
FROM $tbl_session_course_user as session_course_user FROM $tbl_session_course_user as session_course_user
INNER JOIN $tbl_course AS course INNER JOIN $tbl_course AS course
ON course.id = session_course_user.c_id ON course.id = session_course_user.c_id
LEFT JOIN $tblCourseCategory course_category ON course.category_id = course_category.id
INNER JOIN $tbl_session as session INNER JOIN $tbl_session as session
ON session.id = session_course_user.session_id ON session.id = session_course_user.session_id
LEFT JOIN $tbl_user as user LEFT JOIN $tbl_user as user
@ -3342,7 +3344,7 @@ class UserManager
email, email,
course.course_language l, course.course_language l,
1 sort, 1 sort,
category_code user_course_cat, course_category.code user_course_cat,
access_start_date, access_start_date,
access_end_date, access_end_date,
session.id as session_id, session.id as session_id,
@ -3351,6 +3353,7 @@ class UserManager
FROM $tbl_session_course_user as session_course_user FROM $tbl_session_course_user as session_course_user
INNER JOIN $tbl_course AS course INNER JOIN $tbl_course AS course
ON course.id = session_course_user.c_id AND session_course_user.session_id = $session_id ON course.id = session_course_user.c_id AND session_course_user.session_id = $session_id
LEFT JOIN $tblCourseCategory course_category ON course.category_id = course_category.id
INNER JOIN $tbl_session as session INNER JOIN $tbl_session as session
ON session_course_user.session_id = session.id ON session_course_user.session_id = session.id
LEFT JOIN $tbl_user as user ON user.id = session_course_user.user_id LEFT JOIN $tbl_user as user ON user.id = session_course_user.user_id

@ -114,8 +114,12 @@ class IndexManager
{ {
$setting_show_also_closed_courses = api_get_setting('show_closed_courses') == 'true'; $setting_show_also_closed_courses = api_get_setting('show_closed_courses') == 'true';
$main_course_table = Database::get_main_table(TABLE_MAIN_COURSE); $main_course_table = Database::get_main_table(TABLE_MAIN_COURSE);
$tblCourseCategory = Database::get_main_table(TABLE_MAIN_CATEGORY);
$category = Database::escape_string($category); $category = Database::escape_string($category);
$sql_query = "SELECT * FROM $main_course_table WHERE category_code='$category'"; $sql_query = "SELECT course.*, course_category.code AS category_code
FROM $main_course_table course
INNER JOIN $tblCourseCategory course_category ON course.category_id = course_category.id
WHERE course_category.code ='$category'";
$sql_result = Database::query($sql_query); $sql_result = Database::query($sql_query);
while ($course = Database::fetch_array($sql_result)) { while ($course = Database::fetch_array($sql_result)) {
if (!$setting_show_also_closed_courses) { if (!$setting_show_also_closed_courses) {
@ -336,10 +340,18 @@ class IndexManager
$main_category_table = Database::get_main_table(TABLE_MAIN_CATEGORY); $main_category_table = Database::get_main_table(TABLE_MAIN_CATEGORY);
// Get list of courses in category $category. // Get list of courses in category $category.
$sql = "SELECT * FROM $main_course_table cours $sql = "SELECT *, '' AS category_code FROM $main_course_table cours
WHERE category_code = '".$category."' WHERE category_id IS NULL
ORDER BY title, UPPER(visual_code)"; ORDER BY title, UPPER(visual_code)";
if (!empty($category)) {
$sql = "SELECT course.*, course_category.code AS category_code
FROM $main_course_table course
INNER JOIN $main_category_table course_category ON course.category_id = course_category.id
WHERE course_category.code = '$category'
ORDER BY course.title, UPPER(visual_code)";
}
// Showing only the courses of the current access_url_id. // Showing only the courses of the current access_url_id.
if (api_is_multiple_url_enabled()) { if (api_is_multiple_url_enabled()) {
$url_access_id = api_get_current_access_url_id(); $url_access_id = api_get_current_access_url_id();
@ -350,8 +362,19 @@ class IndexManager
ON (url_rel_course.c_id = course.id) ON (url_rel_course.c_id = course.id)
WHERE WHERE
access_url_id = $url_access_id AND access_url_id = $url_access_id AND
category_code = '".$category."' category_id IS NULL
ORDER BY title, UPPER(visual_code)";
if (!empty($category)) {
$sql = "SELECT * FROM $main_course_table as course
INNER JOIN $main_category_table course_category ON course.category_id = course_category.id
INNER JOIN $tbl_url_rel_course as url_rel_course
ON (url_rel_course.c_id = course.id)
WHERE
access_url_id = $url_access_id AND
course_category.code = '$category'
ORDER BY title, UPPER(visual_code)"; ORDER BY title, UPPER(visual_code)";
}
} }
} }
@ -385,7 +408,7 @@ class IndexManager
LEFT JOIN $main_category_table t2 LEFT JOIN $main_category_table t2
ON t1.code=t2.parent_id ON t1.code=t2.parent_id
LEFT JOIN $main_course_table t3 LEFT JOIN $main_course_table t3
ON (t3.category_code = t1.code $platform_visible_courses) ON (t3.category_id = t1.id $platform_visible_courses)
WHERE t1.parent_id ".(empty($category) ? "IS NULL" : "='$category'")." WHERE t1.parent_id ".(empty($category) ? "IS NULL" : "='$category'")."
GROUP BY t1.name,t1.code,t1.parent_id,t1.children_count GROUP BY t1.name,t1.code,t1.parent_id,t1.children_count
ORDER BY t1.tree_pos, t1.name"; ORDER BY t1.tree_pos, t1.name";
@ -407,7 +430,7 @@ class IndexManager
FROM $main_category_table t1 FROM $main_category_table t1
$courseCategoryCondition $courseCategoryCondition
LEFT JOIN $main_category_table t2 ON t1.code = t2.parent_id LEFT JOIN $main_category_table t2 ON t1.code = t2.parent_id
LEFT JOIN $main_course_table t3 ON (t3.category_code = t1.code $platform_visible_courses) LEFT JOIN $main_course_table t3 ON (t3.category_id = t1.id $platform_visible_courses)
INNER JOIN $tbl_url_rel_course as url_rel_course INNER JOIN $tbl_url_rel_course as url_rel_course
ON (url_rel_course.c_id = t3.id) ON (url_rel_course.c_id = t3.id)
WHERE WHERE
@ -2445,8 +2468,8 @@ class IndexManager
return array_filter( return array_filter(
$courseList, $courseList,
function ($courseInfo) use ($categoryCode) { function ($courseInfo) use ($categoryCode) {
if (isset($courseInfo['category_code']) && if (isset($courseInfo['categoryCode']) &&
$courseInfo['category_code'] === $categoryCode $courseInfo['categoryCode'] === $categoryCode
) { ) {
return true; return true;
} }

@ -305,9 +305,18 @@ class PageController
$main_course_table = Database :: get_main_table(TABLE_MAIN_COURSE); $main_course_table = Database :: get_main_table(TABLE_MAIN_COURSE);
$main_category_table = Database :: get_main_table(TABLE_MAIN_CATEGORY); $main_category_table = Database :: get_main_table(TABLE_MAIN_CATEGORY);
$categoryId = null;
$courseCategory = \CourseCategory::getCategory($_GET['category']);
$categoryCondition = 'category_code IS NULL';
if (!empty($courseCategory)) {
$categoryId = $courseCategory['id'];
$categoryCondition = "category_code = $categoryId";
}
// Get list of courses in category $category. // Get list of courses in category $category.
$sql_get_course_list = "SELECT * FROM $main_course_table cours $sql_get_course_list = "SELECT * FROM $main_course_table cours
WHERE category_code = '".Database::escape_string($_GET['category'])."' WHERE $categoryCondition
ORDER BY title, UPPER(visual_code)"; ORDER BY title, UPPER(visual_code)";
// Showing only the courses of the current access_url_id. // Showing only the courses of the current access_url_id.
@ -317,9 +326,7 @@ class PageController
$tbl_url_rel_course = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE); $tbl_url_rel_course = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
$sql_get_course_list = "SELECT * FROM $main_course_table as course INNER JOIN $tbl_url_rel_course as url_rel_course $sql_get_course_list = "SELECT * FROM $main_course_table as course INNER JOIN $tbl_url_rel_course as url_rel_course
ON (url_rel_course.c_id = course.id) ON (url_rel_course.c_id = course.id)
WHERE access_url_id = $url_access_id AND category_code = '".Database::escape_string( WHERE access_url_id = $url_access_id AND $categoryCondition ORDER BY title, UPPER(visual_code)";
$_GET['category']
)."' ORDER BY title, UPPER(visual_code)";
} }
} }
@ -349,7 +356,7 @@ class PageController
SELECT t1.name,t1.code,t1.parent_id,t1.children_count,COUNT(DISTINCT t3.code) AS nbCourse SELECT t1.name,t1.code,t1.parent_id,t1.children_count,COUNT(DISTINCT t3.code) AS nbCourse
FROM $main_category_table t1 FROM $main_category_table t1
LEFT JOIN $main_category_table t2 ON t1.code=t2.parent_id LEFT JOIN $main_category_table t2 ON t1.code=t2.parent_id
LEFT JOIN $main_course_table t3 ON (t3.category_code=t1.code $platform_visible_courses) LEFT JOIN $main_course_table t3 ON (t3.category_id = t1.id $platform_visible_courses)
WHERE t1.parent_id ".(empty($category) ? "IS NULL" : "='$category'")." WHERE t1.parent_id ".(empty($category) ? "IS NULL" : "='$category'")."
GROUP BY t1.name,t1.code,t1.parent_id,t1.children_count ORDER BY t1.tree_pos, t1.name"; GROUP BY t1.name,t1.code,t1.parent_id,t1.children_count ORDER BY t1.tree_pos, t1.name";
@ -362,7 +369,7 @@ class PageController
SELECT t1.name,t1.code,t1.parent_id,t1.children_count,COUNT(DISTINCT t3.code) AS nbCourse SELECT t1.name,t1.code,t1.parent_id,t1.children_count,COUNT(DISTINCT t3.code) AS nbCourse
FROM $main_category_table t1 FROM $main_category_table t1
LEFT JOIN $main_category_table t2 ON t1.code=t2.parent_id LEFT JOIN $main_category_table t2 ON t1.code=t2.parent_id
LEFT JOIN $main_course_table t3 ON (t3.category_code=t1.code $platform_visible_courses) LEFT JOIN $main_course_table t3 ON (t3.category_id = t1.id $platform_visible_courses)
INNER JOIN $tbl_url_rel_course as url_rel_course INNER JOIN $tbl_url_rel_course as url_rel_course
ON (url_rel_course.c_id = t3.id) ON (url_rel_course.c_id = t3.id)
WHERE access_url_id = $url_access_id AND t1.parent_id ".(empty($category) ? "IS NULL" : "='$category'")." WHERE access_url_id = $url_access_id AND t1.parent_id ".(empty($category) ? "IS NULL" : "='$category'")."

@ -255,7 +255,7 @@ class CourseRestorer
/** /**
* Restore only harmless course settings: * Restore only harmless course settings:
* course_language, visibility, department_name,department_url, * course_language, visibility, department_name,department_url,
* subscribe, unsubscribe ,category_code. * subscribe, unsubscribe, category_id.
* *
* @param string $destination_course_code * @param string $destination_course_code
*/ */
@ -267,7 +267,7 @@ class CourseRestorer
$params['visibility'] = $course_info['visibility']; $params['visibility'] = $course_info['visibility'];
$params['department_name'] = $course_info['department_name']; $params['department_name'] = $course_info['department_name'];
$params['department_url'] = $course_info['department_url']; $params['department_url'] = $course_info['department_url'];
$params['category_code'] = $course_info['categoryCode']; $params['category_id'] = $course_info['category_id'];
$params['subscribe'] = $course_info['subscribe_allowed']; $params['subscribe'] = $course_info['subscribe_allowed'];
$params['unsubscribe'] = $course_info['unsubscribe']; $params['unsubscribe'] = $course_info['unsubscribe'];
CourseManager::update_attributes($origin_course_info['real_id'], $params); CourseManager::update_attributes($origin_course_info['real_id'], $params);

Loading…
Cancel
Save