/** * @EXT\Route( * "/session/event/{sessionEvent}/self/register", * name="claro_cursus_session_event_self_register", * options={"expose"=true} * ) * @EXT\ParamConverter("user", options={"authenticatedUser" = true}) */ public function sessionEventSelfRegisterAction(User $user, SessionEvent $sessionEvent) { $results = null; $disableRegistration = $this->platformConfigHandler->hasParameter('cursus_disable_session_event_registration') ? $this->platformConfigHandler->getParameter('cursus_disable_session_event_registration') : true; if (!$disableRegistration && $sessionEvent->getRegistrationType() === CourseSession::REGISTRATION_PUBLIC) { $results = $this->cursusManager->selfRegisterUserToSessionEvent($sessionEvent, $user); } return new JsonResponse($results, 200); }
public function selfRegisterUserToSessionEvent(SessionEvent $sessionEvent, User $user) { $results = []; $sessionRegistrationStatus = null; if ($sessionEvent->getRegistrationType() === CourseSession::REGISTRATION_PUBLIC) { $session = $sessionEvent->getSession(); $sessionUser = $this->getOneSessionUserBySessionAndUserAndTypes($session, $user, [CourseSessionUser::LEARNER, CourseSessionUser::PENDING_LEARNER]); $sessionPendingUser = $this->getOneSessionQueueBySessionAndUser($session, $user); $sessionEventUser = $this->getSessionEventUserBySessionEventAndUser($sessionEvent, $user); if (is_null($sessionEventUser)) { if (is_null($sessionUser) && is_null($sessionPendingUser)) { if ($session->getPublicRegistration()) { if ($session->hasValidation()) { $this->addUserToSessionQueue($user, $session); $sessionRegistrationStatus = 'pending'; } else { $sessionDatas = $this->registerUsersToSession($session, [$user], CourseSessionUser::LEARNER); if ($sessionDatas['status'] === 'success') { $sessionRegistrationStatus = 'registered'; } else { $this->sendEventRegistrationConfirmationMessage($user, $sessionEvent, 'failed'); } } if ($sessionRegistrationStatus === 'registered') { $eventDatas = $this->registerUsersToSessionEvent($sessionEvent, [$user]); if ($eventDatas['status'] === 'failed') { $this->createSessionEventUser($user, $sessionEvent, SessionEventUser::PENDING, null, new \DateTime()); } $this->sendEventRegistrationConfirmationMessage($user, $sessionEvent, 'success', $eventDatas['status']); } elseif ($sessionRegistrationStatus === 'pending') { $this->createSessionEventUser($user, $sessionEvent, SessionEventUser::PENDING, null, new \DateTime()); $this->sendEventRegistrationConfirmationMessage($user, $sessionEvent, 'pending', 'failed'); } } } elseif (!is_null($sessionUser)) { $eventDatas = $this->registerUsersToSessionEvent($sessionEvent, [$user]); if ($eventDatas['status'] === 'failed') { $this->createSessionEventUser($user, $sessionEvent, SessionEventUser::PENDING, null, new \DateTime()); } $this->sendEventRegistrationConfirmationMessage($user, $sessionEvent, 'none', $eventDatas['status']); } else { $this->createSessionEventUser($user, $sessionEvent, SessionEventUser::PENDING, null, new \DateTime()); $this->sendEventRegistrationConfirmationMessage($user, $sessionEvent, 'none', 'failed'); } } } return $results; }