diff --git a/app/Resources/public/css/base.css b/app/Resources/public/css/base.css index d13b67f35f..d703843d10 100644 --- a/app/Resources/public/css/base.css +++ b/app/Resources/public/css/base.css @@ -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; } diff --git a/main/inc/lib/CoursesAndSessionsCatalog.class.php b/main/inc/lib/CoursesAndSessionsCatalog.class.php index f0530a5ba0..a2364772a0 100644 --- a/main/inc/lib/CoursesAndSessionsCatalog.class.php +++ b/main/inc/lib/CoursesAndSessionsCatalog.class.php @@ -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 ); } diff --git a/main/inc/lib/course.lib.php b/main/inc/lib/course.lib.php index 9bf570b2c8..85524ca64b 100755 --- a/main/inc/lib/course.lib.php +++ b/main/inc/lib/course.lib.php @@ -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']; diff --git a/main/inc/lib/course_category.lib.php b/main/inc/lib/course_category.lib.php index 254747d0f8..0d12c4507f 100755 --- a/main/inc/lib/course_category.lib.php +++ b/main/inc/lib/course_category.lib.php @@ -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 diff --git a/main/inc/lib/usermanager.lib.php b/main/inc/lib/usermanager.lib.php index e9eb11f380..e62c9effcb 100755 --- a/main/inc/lib/usermanager.lib.php +++ b/main/inc/lib/usermanager.lib.php @@ -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 diff --git a/main/template/default/catalog/course_item_catalog.tpl b/main/template/default/catalog/course_item_catalog.tpl index 9fae2c93a5..aa5c18dded 100644 --- a/main/template/default/catalog/course_item_catalog.tpl +++ b/main/template/default/catalog/course_item_catalog.tpl @@ -26,6 +26,13 @@
{% endif %} + {% if 'show_different_course_language'| api_get_setting is same as 'true' %} + + {{ course.course_language }} + + + {% endif %} + {% block course_description_button %}