Course: Add filter to show courses in catalogue with extrafield - refs BT#20638

pull/4660/head
Christian 3 years ago
parent c3dbabec37
commit be5bc900c9
  1. 66
      main/inc/lib/CoursesAndSessionsCatalog.class.php
  2. 2
      main/inc/lib/auth.lib.php
  3. 15
      main/inc/lib/course_category.lib.php
  4. 11
      main/install/configuration.dist.php

@ -90,6 +90,55 @@ class CoursesAndSessionsCatalog
return $courseListToAvoid;
}
public static function getCoursesToShowInCatalogue()
{
if (true !== api_get_configuration_value('show_courses_in_catalogue')) {
return false;
}
$tblCourseField = Database::get_main_table(TABLE_EXTRA_FIELD);
$tblCourseFieldValue = Database::get_main_table(TABLE_EXTRA_FIELD_VALUES);
$courseListToShow = [];
// Checks "show_in_catalog" extra field
$extraFieldType = ExtraField::COURSE_FIELD_TYPE;
$sql = "SELECT item_id FROM $tblCourseFieldValue tcfv
INNER JOIN $tblCourseField tcf
ON tcfv.field_id = tcf.id
WHERE
tcf.extra_field_type = $extraFieldType AND
tcf.variable = 'show_in_catalogue' AND
tcfv.value = 1
";
$result = Database::query($sql);
if (Database::num_rows($result) > 0) {
while ($row = Database::fetch_array($result)) {
$courseListToShow[] = $row['item_id'];
}
}
return $courseListToShow;
}
/**
* @return string
*/
public static function getCoursesToShowInCatalogueCondition()
{
$courseListToShow = self::getCoursesToShowInCatalogue();
$condition = '';
if (!empty($courseListToShow)) {
$courses = [];
foreach ($courseListToShow as $courseId) {
$courses[] = '"'.$courseId.'"';
}
$condition = ' AND course.id IN ('.implode(',', $courses).')';
}
return $condition;
}
/**
* @return string
*/
@ -120,6 +169,7 @@ class CoursesAndSessionsCatalog
$tableCourse = Database::get_main_table(TABLE_MAIN_COURSE);
$tableCourseRelAccessUrl = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
$courseToAvoidCondition = self::getAvoidCourseCondition();
$courseToShowCondition = self::getCoursesToShowInCatalogueCondition();
$visibilityCondition = CourseManager::getCourseVisibilitySQLCondition('course', true);
$accessUrlId = (int) $accessUrlId;
@ -136,6 +186,7 @@ class CoursesAndSessionsCatalog
course.visibility != 0 AND
course.visibility != 4
$courseToAvoidCondition
$courseToShowCondition
$visibilityCondition
";
@ -239,6 +290,7 @@ class CoursesAndSessionsCatalog
{
$tbl_course = Database::get_main_table(TABLE_MAIN_COURSE);
$avoidCoursesCondition = self::getAvoidCourseCondition();
$showCoursesCondition = self::getCoursesToShowInCatalogueCondition();
$visibilityCondition = CourseManager::getCourseVisibilitySQLCondition('course', true);
if (!empty($randomValue)) {
@ -262,7 +314,7 @@ class CoursesAndSessionsCatalog
FROM $tbl_course course
INNER JOIN $tbl_url_rel_course as url_rel_course
ON (url_rel_course.c_id = course.id)
WHERE access_url_id = $urlId";
WHERE access_url_id = $urlId $showCoursesCondition";
$result = Database::query($sql);
list($num_records) = Database::fetch_row($result);
@ -274,6 +326,7 @@ class CoursesAndSessionsCatalog
$urlCondition AND
RAND()*$num_records< $randomValue
$avoidCoursesCondition
$showCoursesCondition
$visibilityCondition
ORDER BY RAND()
LIMIT 0, $randomValue";
@ -283,6 +336,7 @@ class CoursesAndSessionsCatalog
WHERE
RAND()*$num_records< $randomValue
$avoidCoursesCondition
$showCoursesCondition
$visibilityCondition
ORDER BY RAND()
LIMIT 0, $randomValue";
@ -326,6 +380,7 @@ class CoursesAndSessionsCatalog
WHERE
1=1
$avoidCoursesCondition
$showCoursesCondition
$visibilityCondition
ORDER BY title $limitFilter ";
} else {
@ -333,6 +388,7 @@ class CoursesAndSessionsCatalog
WHERE
$conditionCode
$avoidCoursesCondition
$showCoursesCondition
$visibilityCondition
ORDER BY title $limitFilter ";
}
@ -352,6 +408,7 @@ class CoursesAndSessionsCatalog
$urlCondition AND
$conditionCode
$avoidCoursesCondition
$showCoursesCondition
$visibilityCondition
ORDER BY title $limitFilter";
} else {
@ -361,6 +418,7 @@ class CoursesAndSessionsCatalog
WHERE
$urlCondition
$avoidCoursesCondition
$showCoursesCondition
$visibilityCondition
ORDER BY title $limitFilter";
}
@ -422,6 +480,7 @@ class CoursesAndSessionsCatalog
$courseTable = Database::get_main_table(TABLE_MAIN_COURSE);
$limitFilter = self::getLimitFilterFromArray($limit);
$avoidCoursesCondition = self::getAvoidCourseCondition();
$showCoursesCondition = self::getCoursesToShowInCatalogueCondition();
$visibilityCondition = $justVisible ? CourseManager::getCourseVisibilitySQLCondition('course', true) : '';
$keyword = Database::escape_string($keyword);
@ -469,6 +528,7 @@ class CoursesAndSessionsCatalog
$sqlInjectWhere
$courseLanguageWhere
$avoidCoursesCondition
$showCoursesCondition
$visibilityCondition
ORDER BY title, visual_code ASC
$limitFilter
@ -500,6 +560,7 @@ class CoursesAndSessionsCatalog
$categoryFilter
$sqlInjectWhere
$avoidCoursesCondition
$showCoursesCondition
$visibilityCondition
ORDER BY title, visual_code ASC
$limitFilter
@ -2099,7 +2160,8 @@ class CoursesAndSessionsCatalog
true,
true,
$conditions,
$languageSelect
$languageSelect,
true
);
}

@ -33,6 +33,7 @@ class Auth
$TABLECOURS = Database::get_main_table(TABLE_MAIN_COURSE);
$TABLECOURSUSER = Database::get_main_table(TABLE_MAIN_COURSE_USER);
$avoidCoursesCondition = CoursesAndSessionsCatalog::getAvoidCourseCondition();
$showCoursesCondition = CoursesAndSessionsCatalog::getCoursesToShowInCatalogueCondition();
$visibilityCondition = CourseManager::getCourseVisibilitySQLCondition('course', true, $hidePrivate);
$sql = "SELECT
@ -47,6 +48,7 @@ class Auth
course_rel_user.user_id = '".$user_id."' AND
course_rel_user.relation_type <> ".COURSE_RELATION_TYPE_RRHH."
$avoidCoursesCondition
$showCoursesCondition
$visibilityCondition
ORDER BY course_rel_user.user_course_cat, course_rel_user.sort ASC";
$result = Database::query($sql);

@ -647,7 +647,8 @@ class CourseCategory
$avoidCourses = true,
$checkHidePrivate = true,
$conditions = [],
$courseLanguageFilter = null
$courseLanguageFilter = null,
$filterShowInCatalogue = false
) {
return self::getCoursesInCategory(
$category_code,
@ -656,7 +657,8 @@ class CourseCategory
$checkHidePrivate,
$conditions,
true,
$courseLanguageFilter
$courseLanguageFilter,
$filterShowInCatalogue
);
}
@ -667,7 +669,8 @@ class CourseCategory
$checkHidePrivate = true,
$conditions = [],
$getCount = false,
$courseLanguageFilter = null
$courseLanguageFilter = null,
$filterShowInCatalogue = false
) {
$tbl_course = Database::get_main_table(TABLE_MAIN_COURSE);
$categoryCode = Database::escape_string($category_code);
@ -679,6 +682,11 @@ class CourseCategory
}
$visibilityCondition = CourseManager::getCourseVisibilitySQLCondition('course', true, $checkHidePrivate);
$showInCatalogueCondition = '';
if ($filterShowInCatalogue) {
$showInCatalogueCondition = CoursesAndSessionsCatalog::getCoursesToShowInCatalogueCondition();
}
$sqlInjectJoins = '';
$courseLanguageWhere = '';
$where = ' AND 1 = 1 ';
@ -732,6 +740,7 @@ class CourseCategory
$categoryFilter
$searchFilter
$avoidCoursesCondition
$showInCatalogueCondition
$visibilityCondition
$where
$sqlInjectWhere

@ -2399,6 +2399,17 @@ ALTER TABLE c_wiki_category ADD CONSTRAINT FK_17F1099A727ACA70 FOREIGN KEY (pare
// main URL (where the access_url_changeable field = 0)
// $_configuration['multiple_url_hide_disabled_settings'] = false;
// Only courses with this option will be visible in catalogue
// Requires DB changes:
/*
INSERT INTO extra_field (extra_field_type, field_type, variable, display_text, default_value, field_order, visible_to_self, visible_to_others, changeable, filter, created_at) VALUES
(2, 3, 'show_in_catalogue', 'Show in catalogue', '', 0, 1, 1, 1, 0, NOW());
SET @ef_id = LAST_INSERT_ID();
INSERT INTO extra_field_options (field_id, option_value, display_text, priority, priority_message, option_order) VALUES
(@ef_id, '1', 'Yes', NULL, NULL, 1),
(@ef_id, '0', 'No', NULL, NULL, 2);
//$_configuration['show_courses_in_catalogue'] = false;
// KEEP THIS AT THE END
// -------- Custom DB changes
// Add user activation by confirmation email

Loading…
Cancel
Save