/** * Check if the ser has completed the requirements for the session sequences * @param array $sequences The sequences * @param int $userId Optional. The user ID * @return array */ private static function checkSessionRequirementsForUser(array $sequences, $userId = 0) { $sequenceList = []; $entityManager = Database::getManager(); $gradebookCategoryRepo = $entityManager->getRepository('ChamiloCoreBundle:GradebookCategory'); foreach ($sequences as $sequenceId => $sequence) { $item = ['name' => $sequence['name'], 'requirements' => []]; foreach ($sequence['requirements'] as $sessionRequired) { $itemSession = ['name' => $sessionRequired->getName(), 'status' => true]; $sessionsCourses = $sessionRequired->getCourses(); foreach ($sessionsCourses as $sessionCourse) { $course = $sessionCourse->getCourse(); $gradebooks = $gradebookCategoryRepo->findBy(['courseCode' => $course->getCode(), 'sessionId' => $sessionRequired->getId(), 'isRequirement' => true]); foreach ($gradebooks as $gradebook) { $category = Category::createCategoryObjectFromEntity($gradebook); if (!empty($userId)) { $itemSession['status'] = $itemSession['status'] && Category::userFinishedCourse($userId, $category, null, $course->getCode(), $sessionRequired->getId()); } } } $item['requirements'][$sessionRequired->getId()] = $itemSession; } $sequenceList[$sequenceId] = $item; } return $sequenceList; }
/** * Get the count of approved induction sessions by a user * @param int $userId The user id * @return int The count of approved sessions */ private function getApprovedInductionSessions($userId) { $tSession = Database::get_main_table(TABLE_MAIN_SESSION); $tSessionField = Database::get_main_table(TABLE_EXTRA_FIELD); $tSessionFieldValues = Database::get_main_table(TABLE_EXTRA_FIELD_VALUES); $tSessionUser = Database::get_main_table(TABLE_MAIN_SESSION_USER); $extraFieldType = \Chamilo\CoreBundle\Entity\ExtraField::SESSION_FIELD_TYPE; $sql = "SELECT s.id FROM {$tSession} AS s\n INNER JOIN {$tSessionFieldValues} AS sfv ON s.id = sfv.item_id\n INNER JOIN {$tSessionField} AS sf ON sfv.field_id = sf.id\n INNER JOIN {$tSessionUser} AS su ON s.id = su.session_id\n WHERE\n sf.extra_field_type = {$extraFieldType} AND\n sf.variable = 'is_induction_session' AND\n su.relation_type = 0 AND\n su.user_id = " . intval($userId); $result = Database::query($sql); if ($result === false) { return 0; } $numberOfApproved = 0; while ($session = Database::fetch_assoc($result)) { $numberOfApprovedCourses = 0; $courses = SessionManager::get_course_list_by_session_id($session['id']); foreach ($courses as $course) { $courseCategories = Category::load(null, null, $course['code'], null, null, $session['id'], false); if (count($courseCategories) > 0 && Category::userFinishedCourse($userId, $courseCategories[0])) { $numberOfApprovedCourses++; } } if ($numberOfApprovedCourses === count($courses)) { $numberOfApproved++; } } return $numberOfApproved; }