예제 #1
0
 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;
 }