Browse Source

Check badge with different conditions see BT#13099

jmontoyaa 7 years ago
parent
commit
c3e4c4880e
1 changed files with 25 additions and 5 deletions
  1. 25 5
      user_portal.php

+ 25 - 5
user_portal.php

@@ -347,11 +347,31 @@ if (!empty($courseAndSessions['courses']) && $allow) {
         $badgeList[$id]['name'] = $category->get_name();
         $badgeList[$id]['finished'] = false;
         if (!empty($category)) {
-            $userFinished = Category::userFinishedCourse(
-                $userId,
-                $category,
-                true
-            );
+            $minToValidate = $category->getMinimumToValidate();
+            $dependencies = $category->getCourseListDependency();
+            $countDependenciesPast = 0;
+            foreach ($dependencies as $courseId) {
+                $courseInfo = api_get_course_info_by_id($courseId);
+                $courseCode = $courseInfo['code'];
+                $categories = Category::load(null, null, $courseCode);
+                $subCategory = !empty($categories[0]) ? $categories[0] : null;
+                if (!empty($subCategory)) {
+                    $score = Category::getCurrentScore(
+                        $userId,
+                        $subCategory,
+                        true
+                    );
+                    if ($score) {
+                        $countDependenciesPast++;
+                    }
+                }
+            }
+
+            $userFinished =
+                $countDependenciesPast == count($dependencies) &&
+                (count($subscribedCourses) - count($dependencies) >= $minToValidate)
+            ;
+
             if ($userFinished) {
                 $badgeList[$id]['finished'] = true;
             }