/**
  * 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;
 }