public function validateCourseQueue(CourseRegistrationQueue $queue) { $user = $queue->getUser(); $course = $queue->getCourse(); $queueDatas = ['type' => 'none', 'id' => $queue->getId(), 'courseId' => $course->getId(), 'applicationDate' => $queue->getApplicationDate(), 'userId' => $user->getId(), 'username' => $user->getUsername(), 'firstName' => $user->getFirstName(), 'lastName' => $user->getLastName(), 'queueStatus' => $queue->getStatus()]; $canValidate = $this->canValidateCourseQueue($queue); if ($canValidate) { $status = $queue->getStatus(); $isAdmin = $this->authorization->isGranted('ROLE_ADMIN'); if ($status !== CourseRegistrationQueue::WAITING) { $authenticatedUser = $this->tokenStorage->getToken()->getUser(); $isWaitingOrganization = $status & CourseRegistrationQueue::WAITING_ORGANIZATION; $isWaitingValidator = $status & CourseRegistrationQueue::WAITING_VALIDATOR; if ($isAdmin) { $status = 0; $queue->setStatus($status); $now = new \DateTime(); if ($isWaitingOrganization) { $queue->setOrganizationValidationDate($now); $queue->setOrganizationAdmin($authenticatedUser); $event = new LogCourseQueueOrganizationValidateEvent($queue); $this->eventDispatcher->dispatch('log', $event); } if ($isWaitingValidator) { $queue->setValidatorValidationDate($now); $queue->setValidator($authenticatedUser); $event = new LogCourseQueueValidatorValidateEvent($queue); $this->eventDispatcher->dispatch('log', $event); } $this->persistCourseRegistrationQueue($queue); $queueDatas['type'] = 'admin_validated'; } elseif ($isWaitingOrganization) { $status -= CourseRegistrationQueue::WAITING_ORGANIZATION; $queue->setStatus($status); $queue->setOrganizationValidationDate(new \DateTime()); $queue->setOrganizationAdmin($authenticatedUser); $this->persistCourseRegistrationQueue($queue); $event = new LogCourseQueueOrganizationValidateEvent($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 ($isWaitingValidator) { $status -= CourseRegistrationQueue::WAITING_VALIDATOR; $queue->setStatus($status); $queue->setValidatorValidationDate(new \DateTime()); $queue->setValidator($authenticatedUser); $this->persistCourseRegistrationQueue($queue); $event = new LogCourseQueueValidatorValidateEvent($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) { $queue->setStatus(CourseRegistrationQueue::WAITING); $this->persistCourseRegistrationQueue($queue); $queueDatas['queueStatus'] = $queue->getStatus(); } } else { $queueDatas['type'] = 'not_authorized'; } return $queueDatas; }