diff --git a/user_portal.php b/user_portal.php index 05f7303896..c5d687765b 100755 --- a/user_portal.php +++ b/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; }