Language: Show language in list of courses and filter by language in course catalog when 'show_different_course_language' is on - refs #4407

Author: @BorjaSanchezBeezNest
pull/4439/head
Borja Sánchez 3 years ago committed by GitHub
parent 245f0227f9
commit 72d2c217bf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 39
      app/Resources/public/css/base.css
  2. 62
      main/inc/lib/CoursesAndSessionsCatalog.class.php
  3. 7
      main/inc/lib/course.lib.php
  4. 26
      main/inc/lib/course_category.lib.php
  5. 2
      main/inc/lib/usermanager.lib.php
  6. 7
      main/template/default/catalog/course_item_catalog.tpl
  7. 5
      main/template/default/user_portal/classic_courses_without_category.tpl
  8. 5
      main/template/default/user_portal/classic_session.tpl
  9. 4
      main/template/default/user_portal/grid_courses_without_category.tpl
  10. 4
      main/template/default/user_portal/grid_session.tpl

@ -6738,6 +6738,33 @@ div#chat-remote-video video {
text-overflow: ellipsis;
}
.grid-courses .items .course-language {
position: absolute;
bottom: 115px;
right: -10px;
background-color: #3379b6;
color: #fff;
padding: 5px 10px;
font-size: 10px;
text-transform: uppercase;
z-index: 2;
font-weight: bold;
height: 32px;
line-height: 23px;
max-width: 80%;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.grid-courses .items .course-language-catalog{
bottom: 169px;
}
.grid-courses .items .grid-course{
bottom: 109px;
}
.grid-courses .items .category a {
color: #fff;
}
@ -6752,6 +6779,18 @@ div#chat-remote-video video {
right: -10px;
}
.grid-courses .items .cribbon-course-language {
bottom: 105px;
}
.grid-courses .items .cribbon-course-language-catalog {
bottom: 159px;
}
.grid-courses .items .cribbon-course-language-grid {
bottom: 99px;
}
.grid-courses .items .description {
padding: 5px 10px 5px;
}

@ -409,15 +409,22 @@ class CoursesAndSessionsCatalog
* The search is done on the code, title and tutor field of the course table.
*
* @param string $categoryCode
* @param string $keyword The string that the user submitted
* @param string $keyword The string that the user submitted
* @param array $limit
* @param bool $justVisible search only on visible courses in the catalogue
* @param bool $justVisible search only on visible courses in the catalogue
* @param array $conditions
* @param string $courseLanguageFilter search only courses in the indicated language
*
* @return array an array containing a list of all the courses matching the the search term
*/
public static function searchCourses($categoryCode, $keyword, $limit, $justVisible = false, $conditions = [])
{
public static function searchCourses(
$categoryCode,
$keyword,
$limit,
$justVisible = false,
$conditions = [],
$courseLanguageFilter = null
) {
$courseTable = Database::get_main_table(TABLE_MAIN_COURSE);
$limitFilter = self::getLimitFilterFromArray($limit);
$avoidCoursesCondition = self::getAvoidCourseCondition();
@ -427,6 +434,7 @@ class CoursesAndSessionsCatalog
$categoryCode = Database::escape_string($categoryCode);
$sqlInjectJoins = '';
$courseLanguageWhere = '';
$where = 'AND 1 = 1 ';
$sqlInjectWhere = '';
$injectExtraFields = '1';
@ -438,6 +446,12 @@ class CoursesAndSessionsCatalog
$injectExtraFields = rtrim($injectExtraFields, ', ');
}
// If have courseLanguageFilter, search for it
if (!empty($courseLanguageFilter)) {
$courseLanguageFilter = Database::escape_string($courseLanguageFilter);
$courseLanguageWhere = "AND course.course_language = '$courseLanguageFilter'";
}
$categoryFilter = '';
if ($categoryCode === 'ALL' || empty($categoryCode)) {
// Nothing to do
@ -459,6 +473,7 @@ class CoursesAndSessionsCatalog
$where
$categoryFilter
$sqlInjectWhere
$courseLanguageWhere
$avoidCoursesCondition
$visibilityCondition
ORDER BY title, visual_code ASC
@ -527,6 +542,9 @@ class CoursesAndSessionsCatalog
$courseInfo['registration_code'] = !empty($courseInfo['registration_code']);
$courseInfo['count_users'] = $countUsers;
$courseInfo['count_connections'] = $connectionsLastMonth;
$courseInfo['course_language'] = api_get_language_info(
api_get_language_id($courseInfo['course_language'])
)['original_name'];
$courses[] = $courseInfo;
}
@ -622,12 +640,13 @@ class CoursesAndSessionsCatalog
/**
* Wrapper for self::searchCourses which locally sorts the results according to $sortKey.
*
* @param string $categoryCode can be 'ALL', 'NONE' or any existing course category code
* @param string $keyword search pattern to be found in course code, title or tutor_name
* @param array $limit associative array generated by \CoursesAndSessionsCatalog::getLimitArray()
* @param bool $justVisible search only on visible courses in the catalogue
* @param array $conditions associative array generated using \ExtraField::parseConditions
* @param string[] $sortKeys a subset of the keys of the array returned by courseSortOptions()
* @param string $categoryCode can be 'ALL', 'NONE' or any existing course category code
* @param string $keyword search pattern to be found in course code, title or tutor_name
* @param array $limit associative array generated by \CoursesAndSessionsCatalog::getLimitArray()
* @param bool $justVisible search only on visible courses in the catalogue
* @param array $conditions associative array generated using \ExtraField::parseConditions
* @param string[] $sortKeys a subset of the keys of the array returned by courseSortOptions()
* @param string $courseLanguageFilter search only courses in the indicated language
*
* @return array list of all the courses matching the the search term
*/
@ -637,10 +656,11 @@ class CoursesAndSessionsCatalog
$limit,
$justVisible = false,
$conditions = [],
$sortKeys = []
$sortKeys = [],
$courseLanguageFilter = null
) {
// Get ALL matching courses (no limit)
$courses = self::searchCourses($categoryCode, $keyword, null, $justVisible, $conditions);
$courses = self::searchCourses($categoryCode, $keyword, null, $justVisible, $conditions, $courseLanguageFilter);
// Do we have extra fields to sort on ?
$extraFieldsToSortOn = [];
foreach (self::getCourseExtraFieldsAvailableForSorting() as $extraField) {
@ -1987,10 +2007,21 @@ class CoursesAndSessionsCatalog
['multiple' => true]
);
if (api_get_setting('show_different_course_language') === 'true') {
$form->addSelectLanguage(
'course_language',
get_lang('Language'),
['' => '--'],
['style' => 'width:150px']
);
}
$sortKeys = isset($_REQUEST['sortKeys']) ? Security::remove_XSS($_REQUEST['sortKeys']) : '';
$languageSelect = isset($_REQUEST['course_language']) ? Security::remove_XSS($_REQUEST['course_language']) : '';
$defaults['sortKeys'] = $sortKeys;
$defaults['search_term'] = $searchTerm;
$defaults['category_code'] = $categoryCode;
$defaults['course_language'] = $languageSelect;
$conditions = [];
$fields = [];
@ -2010,6 +2041,7 @@ class CoursesAndSessionsCatalog
$defaults['sortKeys'] = $sortKeys;
$defaults['search_term'] = $searchTerm;
$defaults['category_code'] = $categoryCode;
$defaults['course_language'] = $languageSelect;
}
$courses = CoursesAndSessionsCatalog::searchAndSortCourses(
@ -2018,14 +2050,16 @@ class CoursesAndSessionsCatalog
self::getLimitArray(),
true,
$conditions,
$sortKeySelect->getValue()
$sortKeySelect->getValue(),
$languageSelect
);
$countCoursesInCategory = CourseCategory::countCoursesInCategory(
$categoryCode,
$searchTerm,
true,
true,
$conditions
$conditions,
$languageSelect
);
}

@ -4095,6 +4095,7 @@ class CourseManager
course.id,
course_rel_user.status status,
course.code as course_code,
course.course_language,
user_course_cat,
course_rel_user.sort
FROM $TABLECOURS course
@ -4249,6 +4250,9 @@ class CourseManager
$params['teachers'] = $teachers;
$params['extrafields'] = self::getExtraFieldsToBePresented($course_info['real_id']);
$params['real_id'] = $course_info['real_id'];
$params['course_language'] = api_get_language_info(
api_get_language_id($course_info['course_language'])
)['original_name'];
if (api_get_configuration_value('enable_unsubscribe_button_on_my_course_page') &&
'1' === $course_info['unsubscribe'] &&
@ -4545,6 +4549,9 @@ class CourseManager
$params['title'] = $session_title;
$params['name'] = $course_info['name'];
$params['course_language'] = api_get_language_info(
api_get_language_id($course_info['course_language'])
)['original_name'];
$params['edit_actions'] = '';
$params['document'] = '';
$params['category'] = $course_info['categoryName'];

@ -622,6 +622,7 @@ class CourseCategory
* @param bool $avoidCourses
* @param bool $checkHidePrivate
* @param array $conditions
* @param string $courseLanguageFilter
*
* @return int
*/
@ -630,7 +631,8 @@ class CourseCategory
$keyword = '',
$avoidCourses = true,
$checkHidePrivate = true,
$conditions = []
$conditions = [],
$courseLanguageFilter = null
) {
return self::getCoursesInCategory(
$category_code,
@ -638,12 +640,20 @@ class CourseCategory
$avoidCourses,
$checkHidePrivate,
$conditions,
true
true,
$courseLanguageFilter
);
}
public static function getCoursesInCategory($category_code = '', $keyword = '', $avoidCourses = true, $checkHidePrivate = true, $conditions = [], $getCount = false)
{
public static function getCoursesInCategory(
$category_code = '',
$keyword = '',
$avoidCourses = true,
$checkHidePrivate = true,
$conditions = [],
$getCount = false,
$courseLanguageFilter = null
) {
$tbl_course = Database::get_main_table(TABLE_MAIN_COURSE);
$categoryCode = Database::escape_string($category_code);
$keyword = Database::escape_string($keyword);
@ -655,6 +665,7 @@ class CourseCategory
$visibilityCondition = CourseManager::getCourseVisibilitySQLCondition('course', true, $checkHidePrivate);
$sqlInjectJoins = '';
$courseLanguageWhere = '';
$where = ' AND 1 = 1 ';
$sqlInjectWhere = '';
if (!empty($conditions)) {
@ -663,6 +674,12 @@ class CourseCategory
$sqlInjectWhere = $conditions['inject_where'];
}
// If have courseLanguageFilter, search for it
if (!empty($courseLanguageFilter)) {
$courseLanguageFilter = Database::escape_string($courseLanguageFilter);
$courseLanguageWhere = "AND course.course_language = '$courseLanguageFilter'";
}
$categoryFilter = '';
if ($categoryCode === 'ALL' || empty($categoryCode)) {
// Nothing to do
@ -696,6 +713,7 @@ class CourseCategory
$urlCondition
course.visibility != '0' AND
course.visibility != '4'
$courseLanguageWhere
$categoryFilter
$searchFilter
$avoidCoursesCondition

@ -4126,6 +4126,7 @@ class UserManager
c.visibility,
c.id as real_id,
c.code as course_code,
c.course_language,
sc.position,
c.unsubscribe
FROM $tbl_session_course_user as scu
@ -4165,6 +4166,7 @@ class UserManager
c.visibility,
c.id as real_id,
c.code as course_code,
c.course_language,
sc.position,
c.unsubscribe
FROM $tbl_session_course_user as scu

@ -26,6 +26,13 @@
<div class="cribbon"></div>
{% endif %}
{% if 'show_different_course_language'| api_get_setting is same as 'true' %}
<span class="course-language course-language-catalog">
{{ course.course_language }}
</span>
<div class="cribbon cribbon-course-language-catalog"></div>
{% endif %}
{% block course_description_button %}
<div class="user-actions">
{{ course.description_button }}

@ -77,6 +77,11 @@
<div class="category">
{{ item.category }}
</div>
{% if 'show_different_course_language'| api_get_setting is same as 'true' %}
<div class="course_language">
{{ item.course_language }}
</div>
{% endif %}
<div class="course_extrafields">
{% if item.extrafields|length > 0 %}
{% for extrafield in item.extrafields %}

@ -129,6 +129,11 @@
<div class="category">
{{ item.category }}
</div>
{% if 'show_different_course_language'| api_get_setting is same as 'true' %}
<div class="course_language">
{{ item.course_language }}
</div>
{% endif %}
<div class="course_extrafields">
{% if item.extrafields|length > 0 %}
{% for extrafield in item.extrafields %}

@ -23,6 +23,10 @@
<span class="category">{{ item.category }}</span>
<div class="cribbon"></div>
{% endif %}
{% if 'show_different_course_language'| api_get_setting is same as 'true' and not item.is_special_course %}
<span class="course-language">{{ item.course_language }}</span>
<div class="cribbon cribbon-course-language"></div>
{% endif %}
{% if item.edit_actions != '' %}
<div class="admin-actions">
{% if item.document == '' %}

@ -21,6 +21,10 @@
<span class="category">{{ course.category }}</span>
<div class="cribbon"></div>
{% endif %}
{% if 'show_different_course_language'| api_get_setting is same as 'true' %}
<span class="course-language grid-course">{{ course.course_language }}</span>
<div class="cribbon cribbon-course-language-grid"></div>
{% endif %}
{% if course.edit_actions %}
<div class="admin-actions">
{% if course.document == '' %}

Loading…
Cancel
Save