public function confirm() { parent::init(); try { $token = Session::get('SummitConfirmSpeakerPage.Token'); if (isset($_REQUEST['t'])) { $token = base64_decode($_REQUEST['t']); Session::set('SummitConfirmSpeakerPage.Token', $token); return $this->redirect($this->Link('confirm')); } if (empty($token)) { throw new InvalidArgumentException('missing token!'); } $request = PresentationSpeakerSummitAssistanceConfirmationRequest::get()->filter('ConfirmationHash', PresentationSpeakerSummitAssistanceConfirmationRequest::HashConfirmationToken($token))->first(); if (is_null($request)) { throw new NotFoundEntityException('PresentationSpeakerSummitAssistanceConfirmationRequest', ''); } if (!$request->alreadyConfirmed()) { $request->confirm($token); $request->write(); } $data['Speaker'] = $request->Speaker(); $data['Summit'] = $request->Summit(); Session::set('Current.PresentationSpeakerSummitAssistanceConfirmationRequest', $request); return $this->customise($data)->renderWith(array('SummitConfirmSpeakerPage', 'SummitPage'), $this->parent); } catch (Exception $ex) { SS_Log::log($ex->getMessage(), SS_Log::WARN); return $this->httpError(404, 'Sorry, this speaker confirmation token does not seem to be correct.'); } }
/** * Resets the confirmation request if exists and its not confirmed yet * otherwise exception * @param int $summit_id * @return string * @throws Exception * @throws ValidationException * @throws null */ public function resetConfirmationLink($summit_id) { $confirmation_page = SummitConfirmSpeakerPage::get()->filter('SummitID', intval($summit_id))->first(); if (!$confirmation_page) { throw new NotFoundEntityException('Confirmation Speaker Page not set on current summit!'); } $url = $confirmation_page->getAbsoluteLiveLink(false); $request = PresentationSpeakerSummitAssistanceConfirmationRequest::get()->filter(['SummitID' => intval($summit_id), 'SpeakerID' => $this->ID])->first(); if (is_null($request)) { throw new EntityValidationException('there is not valid request!'); } if ($request->alreadyConfirmed()) { throw new EntityValidationException('request already confirmed!'); } $token = null; $already_exists = false; do { $token = $request->generateConfirmationToken(); $already_exists = intval(PresentationSpeakerSummitAssistanceConfirmationRequest::get()->filter(['SummitID' => intval($summit_id), 'SpeakerID:ExactMatch:not' => $this->ID, 'ConfirmationHash' => PresentationSpeakerSummitAssistanceConfirmationRequest::HashConfirmationToken($token)])->count()) > 1; } while ($already_exists); $request->write(); return $url . 'confirm?t=' . base64_encode($token); }