diff --git a/main/admin/gradebook_dependency.php b/main/admin/gradebook_dependency.php index 16bf77255d..66f5fbbd94 100644 --- a/main/admin/gradebook_dependency.php +++ b/main/admin/gradebook_dependency.php @@ -54,13 +54,23 @@ if (empty($dependencies)) { $content = ''; $courseList = []; - -/*$mandatoryList = api_get_configuration_value('gradebook_dependency_mandatory_courses'); -$mandatoryList = isset($mandatoryList['courses']) ? $mandatoryList['courses'] : [];*/ -$userResult = []; +$mandatoryList = api_get_configuration_value('gradebook_dependency_mandatory_courses'); +$mandatoryList = isset($mandatoryList['courses']) ? $mandatoryList['courses'] : []; +$mandatoryListCompleteList = []; +foreach ($mandatoryList as $courseMandatoryId) { + $mandatoryListCompleteList[] = api_get_course_info_by_id($courseMandatoryId); +} $totalDependencies = count($dependencies); +$min = $categoryObj->getMinimumToValidate(); +$userResult = []; + +$dependencyList = []; foreach ($dependencies as $courseId) { - $courseInfo = api_get_course_info_by_id($courseId); + $dependencyList[$courseId] = api_get_course_info_by_id($courseId); +} +$courseUserLoaded = []; + +foreach ($dependencyList as $courseId => $courseInfo) { $courseCode = $courseInfo['code']; $subCategory = Category::load(null, null, $courseCode); /** @var Category $subCategory */ @@ -68,30 +78,109 @@ foreach ($dependencies as $courseId) { if (empty($subCategory)) { continue; } + $userList = CourseManager::get_student_list_from_course_code($courseCode); - $users = []; foreach ($userList as $user) { $userId = $user['user_id']; + if ($userId != 37056) { + //continue; + } + $userInfo = api_get_user_info($userId); + $courseId = $courseInfo['real_id']; + + $userCourseList = CourseManager::get_courses_list_by_user_id($userId); + $userCourseListCode = array_column($userCourseList, 'code'); + + if (!isset($userResult[$userId]['result_mandatory_20'])) { + $userResult[$userId]['result_mandatory_20'] = 0; + } + if (!isset($userResult[$userId]['result_not_mandatory_80'])) { + $userResult[$userId]['result_not_mandatory_80'] = 0; + } + + foreach ($userCourseList as $courseItem) { + $myCourseCode = $courseItem['code']; + $myCourseId = $courseItem['real_id']; + if (in_array($myCourseId, $dependencies)) { + continue; + } + + if (isset($courseUserLoaded[$userId][$myCourseId])) { + continue; + } else { + $courseUserLoaded[$userId][$myCourseId] = true; + } + //var_dump($myCourseCode); + + $courseCategory = Category::load( + null, + null, + $myCourseCode + ); + $courseCategory = isset($courseCategory[0]) ? $courseCategory[0] : []; + $userResult[$userId]['result_out_dependencies'][$myCourseCode] = false; + if (!empty($courseCategory)) { + $result = Category::userFinishedCourse( + $userId, + $courseCategory, + true + ); + $userResult[$userId]['result_out_dependencies'][$myCourseCode] = $result; + + if (in_array($myCourseId, $mandatoryList)) { + if ($userResult[$userId]['result_mandatory_20'] < 20 && $result) { + $userResult[$userId]['result_mandatory_20'] += 10; + } + } else { + if ($userResult[$userId]['result_not_mandatory_80'] < 80 && $result) { + $userResult[$userId]['result_not_mandatory_80'] += 10; + // var_dump($userResult[$userId]['result_80'] ); + } + } + } + } + $result = Category::userFinishedCourse( $userId, $subCategory, true ); - $userInfo['result'] = $result; - //$users[] = $userInfo; - $userResult[$userId]['result'][$courseCode] = $result; + + $userResult[$userId]['result_dependencies'][$courseCode] = $result; $userResult[$userId]['user_info'] = $userInfo; - } - foreach ($userResult as $userId => &$userData) { - $userData['final_result'] = count(array_filter($userData['result'])) == $totalDependencies; + //var_dump("$courseCode : $result"); + + if (in_array($courseId, $mandatoryList)) { + if ($userResult[$userId]['result_mandatory_20'] < 20 && $result) { + $userResult[$userId]['result_mandatory_20'] += 10; + } + } else { + if ($userResult[$userId]['result_not_mandatory_80'] < 80 && $result) { + $userResult[$userId]['result_not_mandatory_80'] += 10; + //var_dump($userResult[$userId]['result_80'] ); + } + } } + //$courseInfo['users'] = $users; //$courseInfo['is_mandatory'] = in_array($courseCode, $mandatoryList); $courseList[] = $courseInfo; } + +foreach ($userResult as $userId => &$userData) { + $courseListPassed = count(array_filter($userData['result_out_dependencies'])); + $total = + count(array_filter($userData['result_dependencies'])) + + $courseListPassed + ; + $userData['course_list_passed'] = $courseListPassed; + $userData['course_list'] = count($userData['result_out_dependencies']); + $userData['final_result'] = $total >= $min; +} + $tpl->assign('current_url', $currentUrl); $tpl->assign( 'actions', @@ -102,6 +191,9 @@ $tpl->assign( ) ); + +$tpl->assign('mandatory_courses', $mandatoryListCompleteList); +$tpl->assign('min_to_validate', $min); $tpl->assign('gradebook_category', $category); $tpl->assign('courses', $courseList); $tpl->assign('users', $userResult); diff --git a/main/gradebook/lib/be/category.class.php b/main/gradebook/lib/be/category.class.php index 7e8f4206a4..5b4c4feb9f 100755 --- a/main/gradebook/lib/be/category.class.php +++ b/main/gradebook/lib/be/category.class.php @@ -1880,19 +1880,17 @@ class Category implements GradebookItem $sessionId = 0 ) { $evals = array(); - if (empty($course_code)) { - $course_code = api_get_course_id(); - } - - if (empty($sessionId)) { - $sessionId = api_get_session_id(); - } + $course_code = empty($course_code) ? $this->get_course_code() : $course_code; + $sessionId = empty($sessionId) ? $this->get_session_id() : $sessionId; // 1 student if (isset($studentId) && !empty($studentId)) { // Special case: this is the root if ($this->id == 0) { - $evals = Evaluation::get_evaluations_with_result_for_student(0, $studentId); + $evals = Evaluation::get_evaluations_with_result_for_student( + 0, + $studentId + ); } else { $evals = Evaluation::load( null, @@ -1917,7 +1915,9 @@ class Category implements GradebookItem $this->id, null ); - } elseif (isset($this->course_code) && !empty($this->course_code)) { + } elseif (isset($this->course_code) && + !empty($this->course_code) + ) { // inside a course $evals = Evaluation::load( null, @@ -1986,13 +1986,8 @@ class Category implements GradebookItem ) { $links = array(); - if (empty($course_code)) { - $course_code = api_get_course_id(); - } - - if (empty($sessionId)) { - $sessionId = api_get_session_id(); - } + $course_code = empty($course_code) ? $this->get_course_code() : $course_code; + $sessionId = empty($sessionId) ? $this->get_session_id() : $sessionId; // no links in root or course independent categories if ($this->id == 0) { @@ -2502,7 +2497,9 @@ class Category implements GradebookItem if (empty($category)) { return 0; } - $courseEvaluations = $category->get_evaluations($userId, true); + $courseEvaluations = $category->get_evaluations( + $userId, true + ); $courseLinks = $category->get_links($userId, true); $evaluationsAndLinks = array_merge($courseEvaluations, $courseLinks); $categoryScore = 0; @@ -2556,4 +2553,5 @@ class Category implements GradebookItem { $this->studentList = $list; } + } diff --git a/main/template/default/admin/gradebook_dependency.tpl b/main/template/default/admin/gradebook_dependency.tpl index 7fccdf035e..55a9a156fa 100644 --- a/main/template/default/admin/gradebook_dependency.tpl +++ b/main/template/default/admin/gradebook_dependency.tpl @@ -7,6 +7,14 @@ ({{ gradebook_category.courseCode }}) {% endif %} + {{ 'MinimumGradebookToValidate' | get_lang }} : {{ min_to_validate }} +
+ {{ 'MandatoryCourses' | get_lang }} + {% for course in mandatory_courses %} + + {{ course.title }} ({{ course.code }}) + + {% endfor %}
@@ -17,6 +25,9 @@ {{ course.title }} ({{ course.code }}) {% endfor %} + + + @@ -26,12 +37,23 @@ {% for course in courses %} {% endfor %} + + + + +
{{ 'RestCoursesSubscribed' | get_lang }}{{ 'Progress' | get_lang }} Max 20 (Mandatory courses){{ 'Progress' | get_lang }} Max 80 (Rest of courses) {{ 'Total' | get_lang }}
- {% if user.result[course.code] %} + {% if user.result_dependencies[course.code] %} {% endif %} + {{ user.course_list_passed }} / {{ user.course_list }} + + {{ user.result_mandatory_20 }} + + {{ user.result_not_mandatory_80 }} + {% if user.final_result %}