From fa6a14429733eb8669c2f5b7a6a8d77d63bce64b Mon Sep 17 00:00:00 2001 From: Nosolored Date: Thu, 20 Feb 2020 12:16:52 +0100 Subject: [PATCH 1/2] Mark popular courses manually --- index.php | 6 ++- main/inc/lib/course.lib.php | 71 +++++++++++++++++++++++++++++ main/inc/lib/userportal.lib.php | 8 ++++ main/install/configuration.dist.php | 7 +++ 4 files changed, 91 insertions(+), 1 deletion(-) diff --git a/index.php b/index.php index ac4602b130..ff12e43cbf 100755 --- a/index.php +++ b/index.php @@ -140,7 +140,11 @@ if ($useCookieValidation === 'true') { // When loading a chamilo page do not include the hot courses and news if (!isset($_REQUEST['include'])) { if (api_get_setting('show_hot_courses') == 'true') { - $hotCourses = $controller->return_hot_courses(); + if (api_get_configuration_value('popular_courses')) { + $hotCourses = $controller->return_popular_courses(); + } else { + $hotCourses = $controller->return_hot_courses(); + } } $announcements_block = $controller->return_announcements(); } diff --git a/main/inc/lib/course.lib.php b/main/inc/lib/course.lib.php index 2e53f8730a..b8f4d6c634 100755 --- a/main/inc/lib/course.lib.php +++ b/main/inc/lib/course.lib.php @@ -4896,6 +4896,77 @@ class CourseManager return $courses; } + /** + * Returns an array with the popular courses. + * + * @return array + */ + public static function return_popular_courses() + { + if (api_is_invitee()) { + return []; + } + + $limit = (int) $limit; + $userId = api_get_user_id(); + + // Getting my courses + $my_course_list = self::get_courses_list_by_user_id($userId); + + $codeList = []; + foreach ($my_course_list as $course) { + $codeList[$course['real_id']] = $course['real_id']; + } + + if (api_is_drh()) { + $courses = self::get_courses_followed_by_drh($userId); + foreach ($courses as $course) { + $codeList[$course['real_id']] = $course['real_id']; + } + } + + $courseTable = Database::get_main_table(TABLE_MAIN_COURSE); + $tbl_course_field = Database::get_main_table(TABLE_EXTRA_FIELD); + $tbl_course_field_value = Database::get_main_table(TABLE_EXTRA_FIELD_VALUES); + + //we filter the courses from the URL + $join_access_url = $where_access_url = ''; + if (api_get_multiple_access_url()) { + $access_url_id = api_get_current_access_url_id(); + if ($access_url_id != -1) { + $tbl_url_course = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE); + $join_access_url = "LEFT JOIN $tbl_url_course url_rel_course + ON url_rel_course.c_id = tcfv.item_id "; + $where_access_url = " AND access_url_id = $access_url_id "; + } + } + + $extraFieldType = EntityExtraField::COURSE_FIELD_TYPE; + + // get course list auto-register + $sql = "SELECT DISTINCT(c.id) AS c_id + FROM $tbl_course_field_value tcfv + INNER JOIN $tbl_course_field tcf + ON tcfv.field_id = tcf.id $join_access_url + INNER JOIN $courseTable c + ON (c.id = tcfv.item_id) + WHERE + tcf.extra_field_type = $extraFieldType AND + tcf.variable = 'popular_courses' AND + tcfv.value = 1 AND + visibility <> ".COURSE_VISIBILITY_CLOSED." AND + visibility <> ".COURSE_VISIBILITY_HIDDEN." $where_access_url"; + + $result = Database::query($sql); + $courses = []; + if (Database::num_rows($result)) { + $courses = Database::store_result($result, 'ASSOC'); + $courses = self::processHotCourseItem($courses, $codeList); + } + + return $courses; + } + /** * @param array $courses * @param array $codeList diff --git a/main/inc/lib/userportal.lib.php b/main/inc/lib/userportal.lib.php index ac5a45f8ec..abc7016211 100755 --- a/main/inc/lib/userportal.lib.php +++ b/main/inc/lib/userportal.lib.php @@ -1898,6 +1898,14 @@ class IndexManager return CourseManager::return_hot_courses(30, 6); } + /** + * @return array + */ + public function return_popular_courses() + { + return CourseManager::return_popular_courses(); + } + /** * UserPortal view for session, return the HTML of the course list. * diff --git a/main/install/configuration.dist.php b/main/install/configuration.dist.php index 4dec20f110..b2b7c1c5ef 100755 --- a/main/install/configuration.dist.php +++ b/main/install/configuration.dist.php @@ -1388,6 +1388,13 @@ ALTER TABLE notification_event ADD COLUMN event_id INT NULL; // In Scorm comunication use the username instead of the user_id //$_configuration['scorm_api_username_as_student_id'] = false; +// Popular courses on the home page +// Create a extra field in course called "popular_courses" (type CHECKBOX) OR +// INSERT extra_field (extra_field_type, field_type, variable, display_text, visible_to_self, changeable, create_at) +// VALUES (2, 13, 'popular_courses', 'Popular Courses', 1, 1, 'YYYY-mm-dd HH:mm:ss') +// Change datetime in SQL +// $_configuration['popular_courses'] = true; + // KEEP THIS AT THE END // -------- Custom DB changes From 0ba2cd3a6868ca959a444c94dbc2107292e547b7 Mon Sep 17 00:00:00 2001 From: Nosolored Date: Thu, 2 Jul 2020 13:39:30 +0200 Subject: [PATCH 2/2] Use camelCase in function return_popular_courses --- index.php | 2 +- main/inc/lib/course.lib.php | 2 +- main/inc/lib/userportal.lib.php | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/index.php b/index.php index ff12e43cbf..494b34b634 100755 --- a/index.php +++ b/index.php @@ -141,7 +141,7 @@ if ($useCookieValidation === 'true') { if (!isset($_REQUEST['include'])) { if (api_get_setting('show_hot_courses') == 'true') { if (api_get_configuration_value('popular_courses')) { - $hotCourses = $controller->return_popular_courses(); + $hotCourses = $controller->returnPopularCourses(); } else { $hotCourses = $controller->return_hot_courses(); } diff --git a/main/inc/lib/course.lib.php b/main/inc/lib/course.lib.php index b8f4d6c634..68834704a7 100755 --- a/main/inc/lib/course.lib.php +++ b/main/inc/lib/course.lib.php @@ -4901,7 +4901,7 @@ class CourseManager * * @return array */ - public static function return_popular_courses() + public static function returnPopularCourses() { if (api_is_invitee()) { return []; diff --git a/main/inc/lib/userportal.lib.php b/main/inc/lib/userportal.lib.php index abc7016211..d068081958 100755 --- a/main/inc/lib/userportal.lib.php +++ b/main/inc/lib/userportal.lib.php @@ -1901,9 +1901,9 @@ class IndexManager /** * @return array */ - public function return_popular_courses() + public function returnPopularCourses() { - return CourseManager::return_popular_courses(); + return CourseManager::returnPopularCourses(); } /**