/**
  * @Authorize
  * @Route("Lecture/{int id}/Invite/Speaker")
  */
 public function inviteSpeaker() : View
 {
     $lectureId = intval(func_get_args()[0]);
     $lecture = $this->dbContext->getLecturesRepository()->filterById(" = '{$lectureId}'")->findOne();
     $conferenceId = intval($lecture->getConferenceId());
     $loggedUserId = $this->identity->getUserId();
     $conferenceService = new ConferenceService($this->dbContext);
     $conference = $conferenceService->getOne($conferenceId);
     $conferenceAdmins = $this->dbContext->getConferenceadminsRepository()->filterByConferenceId(" = '{$conferenceId}'")->findAll()->getConferenceadmins();
     if (!$this->identity->isInRole("Admin")) {
         if ($loggedUserId !== intval($conference->getOwnerId())) {
             $unauthorized = true;
             foreach ($conferenceAdmins as $admin) {
                 if (intval($admin->getUserId()) === $loggedUserId) {
                     $unauthorized = false;
                     $viewBag['isAdmin'] = true;
                     break;
                 }
             }
             if ($unauthorized) {
                 $this->addErrorMessage("You are not the owner of this conference!");
                 $this->redirect('Me', 'Conferences');
             }
         }
     }
     $model = new AddSpeakerBindingModel($lectureId);
     if ($this->context->isPost()) {
         $this->validateToken();
         $username = $model->getUsername();
         $user = $this->dbContext->getUsersRepository()->filterByUsername(" = '{$username}'")->findOne();
         if (!$user->getId()) {
             $this->addErrorMessage('No such user!');
             $this->redirectToUrl("/Lecture/{$lectureId}/Invite/Speaker");
         }
         $userId = intval($user->getId());
         $speakerCheck = $this->dbContext->getLecturesspeakersRepository()->filterBySpeakerId(" = '{$userId}'")->filterByLectureId(" = '{$lectureId}'")->findOne();
         if ($speakerCheck->getId()) {
             $this->addErrorMessage('This user is already a speaker in this lecture!');
             $this->redirectToUrl("/Lecture/{$lectureId}/Invite/Speaker");
         }
         $speakerInvite = new Speakerinvite($userId, $lectureId);
         $this->dbContext->getSpeakerinvitesRepository()->add($speakerInvite);
         $this->dbContext->saveChanges();
         $this->addInfoMessage('User invited to lecture speakers!');
         $this->redirectToUrl('/Lecture/' . $lectureId . '/Manage');
     }
     return new View('lectures', 'inviteSpeaker', $model);
 }
 /**
  * @Authorize
  * @Route("Conference/{int id}/Edit")
  */
 public function edit() : View
 {
     $viewBag = [];
     $viewBag['venues'] = $this->dbContext->getVenuesRepository()->findAll()->getVenues();
     $id = intval(func_get_args()[0]);
     $service = new ConferenceService($this->dbContext);
     $conference = $service->getOne($id);
     $loggedUserId = $this->identity->getUserId();
     $conferenceAdmins = $this->dbContext->getConferenceadminsRepository()->filterByConferenceId(" = '{$id}'")->findAll()->getConferenceadmins();
     if (!$this->identity->isInRole('Admin')) {
         if ($loggedUserId !== intval($conference->getOwnerId())) {
             $unauthorized = true;
             foreach ($conferenceAdmins as $admin) {
                 if (intval($admin->getUserId()) === $loggedUserId) {
                     $unauthorized = false;
                     $viewBag['isAdmin'] = true;
                     break;
                 }
             }
             if ($unauthorized) {
                 $this->addErrorMessage("You are not the owner of this conference!");
                 $this->redirect('Me', 'Conferences');
             }
         }
     }
     if ($this->context->isPost()) {
         $this->validateToken();
         $model = new ConferenceBindingModel();
         if ($model->getErrors()) {
             foreach ($model->getErrors() as $error) {
                 $this->addErrorMessage($error);
             }
             $this->context->setMethod('get');
             $model = new ConferenceBindingModel($conference);
             return new View('Conference', 'Edit', $model, $viewBag);
         }
         $venueId = intval($model->getVenueId());
         $conferences = $this->dbContext->getConferencesRepository()->filterByVenueId(" = '{$venueId}'")->findAll()->getConferences();
         foreach ($conferences as $conf) {
             if (intval($conf->getId()) !== intval($id)) {
                 if (strtotime($model->getStartDate()) < strtotime($conf->getStart()) && strtotime($model->getEndDate()) > strtotime($conf->getStart())) {
                     $this->addErrorMessage('The venue is busy during this time span!');
                     $this->context->setMethod('get');
                     return new View('Conference', 'Edit', $model, $viewBag);
                 }
                 if (strtotime($model->getStartDate()) < strtotime($conf->getEnd()) && strtotime($model->getEndDate()) > strtotime($conf->getEnd())) {
                     $this->addErrorMessage('The venue is busy during this time span!');
                     $this->context->setMethod('get');
                     return new View('Conference', 'Edit', $model, $viewBag);
                 }
                 if (strtotime($model->getStartDate()) > strtotime($conf->getStart()) && strtotime($model->getEndDate()) < strtotime($conf->getEnd())) {
                     $this->addErrorMessage('The venue is during other once check the times!');
                     $this->context->setMethod('get');
                     return new View('Conference', 'Edit', $model, $viewBag);
                 }
             }
         }
         $conference = $service->getOne($id);
         $conference->setName($model->getTitle());
         if ($model->getVenueId()) {
             $conference->setVenueId($model->getVenueId());
         }
         $conference->setEnd($model->getEndDate());
         $conference->setStart($model->getStartDate());
         $this->dbContext->saveChanges();
         $this->redirect("Me", "Conferences");
     }
     $model = new ConferenceBindingModel($conference);
     return new View('Conference', 'Edit', $model, $viewBag);
 }