Browse Source

Fix PHP warnings when getting course list

jmontoyaa 7 years ago
parent
commit
1e0b8856c2
3 changed files with 73 additions and 42 deletions
  1. 16 9
      main/inc/lib/course.lib.php
  2. 35 15
      main/inc/lib/userportal.lib.php
  3. 22 18
      user_portal.php

+ 16 - 9
main/inc/lib/course.lib.php

@@ -3685,7 +3685,7 @@ class CourseManager
      * @param int $user_id
      * @param bool  $load_dirs Whether to show the document quick-loader or not
      * @param integer $user_id
-     * @return string
+     * @return array
      */
     public static function returnCourses($user_id, $load_dirs = false)
     {
@@ -3738,11 +3738,15 @@ class CourseManager
      *  Display courses inside a category (without special courses) as HTML dics of
      *  class userportal-course-item.
      * @param int      $user_category_id User category id
-     * @param bool     $load_dirs Whether to show the document quick-loader or not
+     * @param bool $load_dirs Whether to show the document quick-loader or not
+     * @param int $user_id
      * @return string
      */
-    public static function returnCoursesCategories($user_category_id, $load_dirs = false, $user_id = 0)
-    {
+    public static function returnCoursesCategories(
+        $user_category_id,
+        $load_dirs = false,
+        $user_id = 0
+    ) {
         $user_id = $user_id ?: api_get_user_id();
         $user_category_id = (int) $user_category_id;
 
@@ -3767,7 +3771,7 @@ class CourseManager
         $sql = "SELECT DISTINCT
                     course.id,
                     course_rel_user.status status,
-                    course.code as course_code
+                    course.code as course_code                    
                 FROM $TABLECOURS course 
                 INNER JOIN $TABLECOURSUSER course_rel_user
                 ON (course.id = course_rel_user.c_id)
@@ -3787,12 +3791,13 @@ class CourseManager
         $sql .= " ORDER BY course_rel_user.user_course_cat, course_rel_user.sort ASC";
         $result = Database::query($sql);
 
-        $courseList = array();
         $showCustomIcon = api_get_setting('course_images_in_courses_list');
         // Browse through all courses.
         $courseAdded = [];
+        $courseList = [];
         while ($row = Database::fetch_array($result)) {
             $course_info = api_get_course_info_by_id($row['id']);
+
             if (isset($course_info['visibility']) &&
                 $course_info['visibility'] == COURSE_VISIBILITY_HIDDEN
             ) {
@@ -3815,6 +3820,7 @@ class CourseManager
             $params = array();
             //Param (course_code) needed to get the student process
             $params['course_code'] = $row['course_code'];
+            $params['code'] = $row['course_code'];
 
             if ($showCustomIcon === 'true' && $iconName != 'course.png') {
                 $params['thumbnails'] = $course_info['course_image'];
@@ -3823,7 +3829,6 @@ class CourseManager
 
             $thumbnails = null;
             $image = null;
-
             if ($showCustomIcon === 'true' && $iconName != 'course.png') {
                 $thumbnails = $course_info['course_image'];
                 $image = $course_info['course_image_large'];
@@ -3858,7 +3863,10 @@ class CourseManager
             $courseUrl = api_get_path(WEB_COURSE_PATH).$course_info['path'].'/index.php?id_session=0';
             $teachers = [];
             if (api_get_setting('display_teacher_in_courselist') === 'true') {
-                $teachers = self::getTeachersFromCourse($course_info['real_id'], true);
+                $teachers = self::getTeachersFromCourse(
+                    $course_info['real_id'],
+                    true
+                );
             }
 
             $params['status'] = $row['status'];
@@ -3867,7 +3875,6 @@ class CourseManager
             }
 
             $params['current_user_is_teacher'] = false;
-
             /** @var array $teacher */
             foreach ($teachers as $teacher) {
                 if ($teacher['id'] != $user_id) {

+ 35 - 15
main/inc/lib/userportal.lib.php

@@ -1176,6 +1176,8 @@ class IndexManager
         $studentInfoScore = (!empty($studentInfo['score']) && $studentInfo['score'] === true);
         $studentInfoCertificate = (!empty($studentInfo['certificate']) && $studentInfo['certificate'] === true);
         $courseCompleteList = [];
+        $coursesInCategoryCount = 0;
+        $coursesNotInCategoryCount = 0;
 
         // If we're not in the history view...
         if (!isset($_GET['history'])) {
@@ -1191,8 +1193,8 @@ class IndexManager
                 $this->load_directories_preview
             );
 
-            //Course option (show student progress)
-            //This code will add new variables (Progress, Score, Certificate)
+            // Course option (show student progress)
+            // This code will add new variables (Progress, Score, Certificate)
             if ($studentInfoProgress || $studentInfoScore || $studentInfoCertificate) {
                 if (!empty($specialCourses)) {
                     foreach ($specialCourses as $key => $specialCourseInfo) {
@@ -1240,9 +1242,7 @@ class IndexManager
                     }
                 }
 
-                if (isset($courses['in_category']) &&
-                    isset($courses['not_category'])
-                ) {
+                if (isset($courses['in_category'])) {
                     foreach ($courses['in_category'] as $key1 => $value) {
                         if (isset($courses['in_category'][$key1]['courses'])) {
                             foreach ($courses['in_category'][$key1]['courses'] as $key2 => $courseInCatInfo) {
@@ -1273,18 +1273,29 @@ class IndexManager
                                         null
                                     );
                                     $courses['in_category'][$key1]['student_info']['certificate'] = null;
+                                    $isCertificateAvailable = $category[0]->is_certificate_available($user_id);
                                     if (isset($category[0])) {
                                         if ($viewGrid == 'true') {
-                                            if ($category[0]->is_certificate_available($user_id)) {
-                                                $courses['in_category'][$key1]['student_info']['certificate'] = get_lang('Yes');
+                                            if ($isCertificateAvailable) {
+                                                $courses['in_category'][$key1]['student_info']['certificate'] = get_lang(
+                                                    'Yes'
+                                                );
                                             } else {
-                                                $courses['in_category'][$key1]['student_info']['certificate'] = get_lang('No');
+                                                $courses['in_category'][$key1]['student_info']['certificate'] = get_lang(
+                                                    'No'
+                                                );
                                             }
                                         } else {
-                                            if ($category[0]->is_certificate_available($user_id)) {
-                                                $courses['in_category'][$key1]['student_info']['certificate'] = Display::label(get_lang('Yes'), 'success');
+                                            if ($isCertificateAvailable) {
+                                                $courses['in_category'][$key1]['student_info']['certificate'] = Display::label(
+                                                    get_lang('Yes'),
+                                                    'success'
+                                                );
                                             } else {
-                                                $courses['in_category'][$key1]['student_info']['certificate'] = Display::label(get_lang('No'), 'danger');
+                                                $courses['in_category'][$key1]['student_info']['certificate'] = Display::label(
+                                                    get_lang('No'),
+                                                    'danger'
+                                                );
                                             }
                                         }
                                     }
@@ -1292,7 +1303,9 @@ class IndexManager
                             }
                         }
                     }
+                }
 
+                if (isset($courses['not_category'])) {
                     foreach ($courses['not_category'] as $key => $courseNotInCatInfo) {
                         if ($studentInfoProgress) {
                             $progress = Tracking::get_avg_student_progress(
@@ -1347,7 +1360,6 @@ class IndexManager
                         }
                     }
                 }
-
             }
 
             if ($viewGridCourses) {
@@ -1364,13 +1376,22 @@ class IndexManager
                 }
 
                 $this->tpl->assign('courses', $specialCourses);
-
                 $specialCourseList = $this->tpl->fetch(
                     $this->tpl->get_template($coursesWithoutCategoryTemplate)
                 );
             }
 
             if ($courses['in_category'] || $courses['not_category']) {
+                foreach ($courses['in_category'] as $courseData) {
+                    if (!empty($courseData['courses'])) {
+                        $coursesInCategoryCount += count($courseData['courses']);
+                        $courseCompleteList = array_merge($courseCompleteList, $courseData['courses']);
+                    }
+                }
+
+                $coursesNotInCategoryCount += count($courses['not_category']);
+                $courseCompleteList = array_merge($courseCompleteList, $courses['not_category']);
+
                 if ($categoryCodeFilter) {
                     $courses['in_category'] = self::filterByCategory(
                         $courses['in_category'],
@@ -1391,10 +1412,9 @@ class IndexManager
                 $listCourse .= $this->tpl->fetch(
                     $this->tpl->get_template($coursesWithoutCategoryTemplate)
                 );
-                $courseCompleteList = $courses['in_category'] + $courses['not_category'];
             }
 
-            $courseCount = count($specialCourses) + count($courses['in_category']) + count($courses['not_category']);
+            $courseCount = count($specialCourses) + $coursesInCategoryCount + $coursesNotInCategoryCount;
         }
 
         $sessions_with_category = '';

+ 22 - 18
user_portal.php

@@ -132,9 +132,9 @@ $controller = new IndexManager(get_lang('MyCourses'));
 
 if (!$myCourseListAsCategory) {
     // Main courses and session list
-    if (isset($_COOKIE['defaultMyCourseView'.$userId])
-        && $_COOKIE['defaultMyCourseView'.$userId] == IndexManager::VIEW_BY_SESSION
-        && $displayMyCourseViewBySessionLink
+    if (isset($_COOKIE['defaultMyCourseView'.$userId]) &&
+        $_COOKIE['defaultMyCourseView'.$userId] == IndexManager::VIEW_BY_SESSION &&
+        $displayMyCourseViewBySessionLink
     ) {
         $courseAndSessions = $controller->returnCoursesAndSessionsViewBySession($userId);
         IndexManager::setDefaultMyCourseView(IndexManager::VIEW_BY_SESSION, $userId);
@@ -292,16 +292,17 @@ if (!empty($courseAndSessions['courses']) && $allow) {
     }
 
     // @todo improve calls of course info
-    $subscribedCourses = $courseAndSessions['courses'];
+    $subscribedCourses = !empty($courseAndSessions['courses']) ? $courseAndSessions['courses'] : [];
     $mainCategoryList = [];
     foreach ($subscribedCourses as $courseInfo) {
-        $courseCode = $courseInfo['course_code'];
+        $courseCode = $courseInfo['code'];
         $categories = Category::load(null, null, $courseCode);
         /** @var Category $category */
-        $category = $categories[0];
-        $mainCategoryList[]= $category;
+        $category = !empty($categories[0]) ? $categories[0] : [];
+        if (!empty($category)) {
+            $mainCategoryList[] = $category;
+        }
     }
-
     $total = [];
     foreach ($mainCategoryList as $category) {
         $parentScore = Category::getCurrentScore(
@@ -321,16 +322,18 @@ if (!empty($courseAndSessions['courses']) && $allow) {
                 $courseCode = $courseInfo['code'];
                 $categories = Category::load(null, null, $courseCode);
                 /** @var Category $subCategory */
-                $subCategory = $categories[0];
-                $score = Category::getCurrentScore(
-                    $userId,
-                    $subCategory->get_id(),
-                    $subCategory->get_course_code(),
-                    0,
-                    true
-                );
-                $totalScoreWithChildren += $score;
-                $children[$subCategory->get_course_code()] = ['score' => $score];
+                $subCategory = !empty($categories[0]) ? $categories[0] : null;
+                if (!empty($subCategory)) {
+                    $score = Category::getCurrentScore(
+                        $userId,
+                        $subCategory->get_id(),
+                        $subCategory->get_course_code(),
+                        0,
+                        true
+                    );
+                    $totalScoreWithChildren += $score;
+                    $children[$subCategory->get_course_code()] = ['score' => $score];
+                }
             }
         }
         $totalScoreWithChildren += $parentScore;
@@ -380,6 +383,7 @@ if (!empty($courseAndSessions['courses']) && $allow) {
         'grade_book_result_validate',
         $validatedCoursesPercentage
     );
+
     $controller->tpl->assign('grade_book_result_completed', $completed);
     /*if ($finalScore > 0) {
         $finalScore = (int) $finalScore / count($total);