function __construct($controller, $name, PresentationSpeakerSummitAssistanceConfirmationRequest $request) { $PhoneField = new TextField('OnSitePhoneNumber', 'Your OnSite Phone Number for ' . $request->Summit()->Title . ':'); $RegisteredField = new CheckboxField('RegisteredForSummit', 'I have registered for the summit using the confirmation code sent in the email.'); $SpeakerHashField = new HiddenField('RequestID', "RequestID", $request->ID); $fields = new FieldList($PhoneField, $RegisteredField, $SpeakerHashField); $submitButton = new FormAction('doSavePhoneNumber', 'Save'); $actions = new FieldList($submitButton); $validator = new RequiredFields('OnSitePhoneNumber'); parent::__construct($controller, $name, $fields, $actions, $validator); }
function doUp() { global $database; if (DBSchema::existsColumn($database, 'PresentationSpeaker', 'OnSitePhoneNumber')) { $speakers_info_query = <<<SQL SELECT ID, OnSitePhoneNumber, ConfirmedDate, RegisteredForSummit FROM PresentationSpeaker where OnSitePhoneNumber IS NOT NULL; SQL; $res = DB::query($speakers_info_query); foreach ($res as $row) { $speaker_id = intval($row['ID']); $on_site_phone = intval($row['OnSitePhoneNumber']); $confirmed_date = $row['ConfirmedDate']; $registered = (bool) $row['RegisteredForSummit']; $speaker = PresentationSpeaker::get()->byID($speaker_id); if (is_null($speaker)) { continue; } if (PresentationSpeakerSummitAssistanceConfirmationRequest::get()->filter(array('SummitID' => 5, 'SpeakerID' => $speaker_id))->count() > 0) { continue; } $assistance = PresentationSpeakerSummitAssistanceConfirmationRequest::create(); $assistance->SpeakerID = $speaker_id; $assistance->SummitID = 5; $assistance->OnSitePhoneNumber = $on_site_phone; $assistance->ConfirmationDate = $confirmed_date; $assistance->RegisteredForSummit = $registered; $assistance->IsConfirmed = true; $assistance->write(); } DBSchema::dropColumn($database, 'PresentationSpeaker', 'OnSitePhoneNumber'); DBSchema::dropColumn($database, 'PresentationSpeaker', 'ConfirmedDate'); DBSchema::dropColumn($database, 'PresentationSpeaker', 'RegisteredForSummit'); } }
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); }