public function validateSessionQueue(CourseSessionRegistrationQueue $queue) { $user = $queue->getUser(); $session = $queue->getSession(); $course = $session->getCourse(); $queueDatas = ['status' => 'success', 'type' => 'none', 'id' => $queue->getId(), 'courseId' => $course->getId(), 'sessionId' => $session->getId(), 'applicationDate' => $queue->getApplicationDate(), 'userId' => $user->getId(), 'username' => $user->getUsername(), 'firstName' => $user->getFirstName(), 'lastName' => $user->getLastName(), 'queueStatus' => $queue->getStatus()]; $canValidate = $this->canValidateSessionQueue($queue); if ($canValidate) { $status = $queue->getStatus(); if ($status === CourseRegistrationQueue::WAITING) { $queue->setStatus(0); } elseif ($status > 0) { $isAdmin = $this->authorization->isGranted('ROLE_ADMIN'); $authenticatedUser = $this->tokenStorage->getToken()->getUser(); if ($isAdmin) { $status = 0; } elseif ($status & CourseRegistrationQueue::WAITING_ORGANIZATION) { $status -= CourseRegistrationQueue::WAITING_ORGANIZATION; $queue->setOrganizationValidationDate(new \DateTime()); $queue->setOrganizationAdmin($authenticatedUser); $queue->setStatus($status); $this->persistCourseSessionRegistrationQueue($queue); $event = new LogSessionQueueOrganizationValidateEvent($queue); $this->eventDispatcher->dispatch('log', $event); $queueDatas['type'] = 'organization_validated'; $queueDatas['queueStatus'] = $queue->getStatus(); $queueDatas['organizationValidationDate'] = $queue->getValidatorValidationDate(); $queueDatas['organizationAdminId'] = $authenticatedUser->getId(); $queueDatas['organizationAdminUsername'] = $authenticatedUser->getUsername(); $queueDatas['organizationAdminFirstName'] = $authenticatedUser->getFirstName(); $queueDatas['organizationAdminLastName'] = $authenticatedUser->getLastName(); } elseif ($status & CourseRegistrationQueue::WAITING_VALIDATOR) { $status -= CourseRegistrationQueue::WAITING_VALIDATOR; $queue->setValidatorValidationDate(new \DateTime()); $queue->setValidator($authenticatedUser); $queue->setStatus($status); $this->persistCourseSessionRegistrationQueue($queue); $event = new LogSessionQueueValidatorValidateEvent($queue); $this->eventDispatcher->dispatch('log', $event); $queueDatas['type'] = 'validator_validated'; $queueDatas['queueStatus'] = $queue->getStatus(); $queueDatas['validatorValidationDate'] = $queue->getValidatorValidationDate(); $queueDatas['validatorId'] = $authenticatedUser->getId(); $queueDatas['validatorUsername'] = $authenticatedUser->getUsername(); $queueDatas['validatorFirstName'] = $authenticatedUser->getFirstName(); $queueDatas['validatorLastName'] = $authenticatedUser->getLastName(); } } if ($queue->getStatus() === 0) { $results = $this->registerUsersToSession($session, [$user], 0, true); if ($results['status'] === 'success') { $this->deleteSessionQueue($queue); $this->sendSessionRegistrationConfirmationMessage($user, $session, 'validated'); $queueDatas['type'] = 'registered'; } else { $queue->setStatus(CourseRegistrationQueue::WAITING); $this->persistCourseSessionRegistrationQueue($queue); $queueDatas['status'] = 'failed'; $queueDatas['queueStatus'] = 1; $queueDatas['datas'] = $results['datas']; } } } else { $queueDatas['type'] = 'not_authorized'; } return $queueDatas; }