public function inviteSpeaker(SpeakerInvitationInputModel $model) : ServiceResponse { $lectureId = $model->getLectureId(); $speakerId = $model->getSpeakerId(); $conferenceId = $model->getConferenceId(); $lecture = $this->dbContext->getLecturesRepository()->filterById(" = {$lectureId}")->findOne(); $speaker = $this->dbContext->getUsersRepository()->filterById(" = {$speakerId}")->findOne(); if ($lecture->getId() == null) { return new ServiceResponse(404, "Lecture not found."); } if ($speaker->getId() == null) { return new ServiceResponse(404, "Speaker not found."); } $conference = $this->dbContext->getConferencesRepository()->filterById(" = {$conferenceId}")->findOne(); if ($conference->getId() == null) { return new ServiceResponse(404, 'Conference not found.'); } if (HttpContext::getInstance()->getIdentity()->getUserId() != $conference->getOwnerId()) { return new ServiceResponse(401, 'Only conference owners can invite speakers.'); } $invitation = $this->dbContext->getSpeakerInvitationsRepository()->filterByLectureId(" = {$lectureId}")->filterBySpeakerId(" = {$speakerId}")->findOne(); if ($invitation->getId() != null) { return new ServiceResponse(409, "Speaker is already invited."); } $this->dbContext->getSpeakerInvitationsRepository()->filterByLectureId(" = {$lectureId}")->delete(); $speakerInvitation = new SpeakerInvitation($lectureId, $speakerId, 0); $this->dbContext->getSpeakerInvitationsRepository()->add($speakerInvitation); $lecture->setSpeaker_Id($speakerId); $title = $lecture->getTitle(); $message = "You received Speaker invitation for the lecture '{$title}'."; $notyService = new NotificationsService($this->dbContext); $notyService->sendNotification($speakerId, $message); $this->dbContext->saveChanges(); return new ServiceResponse(null, "Invitation sent."); }
/** * Method('POST') * @Validatetoken('token') * @Route('lectures/sendinvitation') * @param SpeakerInvitationInputModel $model */ public function sendInvitation(SpeakerInvitationInputModel $model) { if (!$model->isValid()) { $this->redirect('Conferences', 'all'); } $service = new LecturesService($this->dbContext); $result = $service->inviteSpeaker($model); $this->processResponse($result); $this->redirectToUrl('/conferences/details/' . $model->getConferenceId()); }