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');
        }
    }
 /**
  * @param SS_HTTPRequest $r
  */
 public function presentations(SS_HTTPRequest $r)
 {
     $data = [];
     $speaker = null;
     $key = $r->getVar('key');
     if ($key) {
         $username = PresentationSpeaker::hash_to_username($key);
         $speaker = PresentationSpeaker::get()->filter('Member.Email', $username)->first();
     } elseif ($speakerID = Session::get('UploadMedia.SpeakerID')) {
         $speaker = PresentationSpeaker::get()->byID($speakerID);
     }
     // Speaker not found
     if (!$speaker) {
         return $this->httpError(404, 'Sorry, that does not appear to be a valid token.');
     }
     Session::set('UploadMedia.SpeakerID', $speaker->ID);
     $mostRecentSummit = Summit::get_most_recent();
     $presentations = $speaker->PublishedPresentations($mostRecentSummit->ID);
     // No presentations
     if (!$presentations->exists()) {
         return $this->httpError(404, 'Sorry, it does not appear that you have any presentations.');
     }
     // IF there's only one presentation with no media, go ahead and forward to it's page
     if ($presentations->count() == 1) {
         $slide = $presentations->first()->MaterialType('PresentationSlide');
         if (!$slide) {
             $presentationID = $presentations->first()->ID;
             return $this->redirect(Controller::join_links($this->Link(), '/presentation/', $presentationID, 'upload'));
         }
     }
     $data['Speaker'] = $speaker;
     $data['Presentations'] = $presentations;
     return $this->customise($data);
 }
コード例 #3
0
 /**
  * @param Member $member
  * @return void
  */
 public function ensureSpeakerProfile(Member $member)
 {
     $speaker = $member->getSpeakerProfile();
     if (!$speaker) {
         $speaker = PresentationSpeaker::create(array('MemberID' => Member::currentUserID(), 'FirstName' => Member::currentUser()->FirstName, 'LastName' => Member::currentUser()->Surname));
         $speaker->write();
     }
 }
コード例 #4
0
 public function getCMSFields()
 {
     $fields = FieldList::create(TabSet::create('Root'));
     if ($this->SchedID) {
         return $fields->tab('SchedData')->readonly('Title')->readonly('Description')->readonly('EventStart')->readonly('EventEnd')->readonly('EventKey')->readonly('EventType')->readonly('Goers')->readonly('SchedID')->readonly('InviteOnly')->readonly('Seats')->readonly('Venue')->readonly('VenueID')->tab('EditableData')->checkbox('DisplayOnSite')->text('YouTubeID')->dropdown('CategoryID', 'Category', PresentationCategory::get()->map('ID', 'Title'))->listbox('PresentationSpeakers')->configure()->setSource(PresentationSpeaker::get()->map('ID', 'Title')->toArray())->setMultiple(true)->end()->imageUpload('VideoThumbnail')->upload('RelatedMedia')->tag('Tags', 'Tags', Tag::get(), $this->Tags());
     } else {
         return $fields->text('Title')->dropdown('CategoryID', 'Category', PresentationCategory::get()->map('ID', 'Title'))->tag('Tags', 'Tags', Tag::get(), $this->Tags())->date('EventStart')->configure()->setConfig('showcalendar', true)->end()->date('EventEnd')->configure()->setConfig('showcalendar', true)->end()->htmlEditor('Description')->checkbox('InviteOnly')->numeric('Seats')->text('Venue')->text('YouTubeID')->imageUpload('VideoThumbnail')->upload('RelatedMedia')->checkbox('DisplayOnSite');
     }
 }
コード例 #5
0
 public function getSpeakerProfileImage(SS_HTTPRequest $request)
 {
     $speaker_id = intval($request->param('SpeakerID'));
     $speaker = PresentationSpeaker::get()->byID($speaker_id);
     if (is_null($speaker)) {
         return $this->notFound();
     }
     $photo_url = $speaker->ProfilePhoto();
     $body = file_get_contents($photo_url);
     $ext = 'jpg';
     $response = new SS_HTTPResponse($body, 200);
     $response->addHeader('Content-Type', 'image/' . $ext);
     return $response;
 }
コード例 #6
0
 function doSavePhoneNumber($data, $form)
 {
     if (isset($data['speakerHash'])) {
         $hashKey = Convert::raw2sql($data['speakerHash']);
     }
     if (isset($hashKey)) {
         $speakerID = substr(base64_decode($hashKey), 3);
     }
     if (isset($speakerID) && is_numeric($speakerID) && isset($data['OnSitePhoneNumber']) && $data['OnSitePhoneNumber'] != '' && ($Speaker = PresentationSpeaker::get()->byID($speakerID))) {
         $Speaker->OnSitePhoneNumber = Convert::raw2sql($data['OnSitePhoneNumber']);
         $Speaker->ConfirmedDate = SS_Datetime::now()->Value;
         $Speaker->RegisteredForSummit = Convert::raw2sql($data['RegisteredForSummit']);
         $Speaker->write();
         Controller::curr()->redirect(Controller::curr()->Link() . 'Thanks/');
     }
 }
コード例 #7
0
 public function confirm()
 {
     parent::init();
     $getVars = $this->request->getVars();
     $hashKey = $getVars['h'];
     if (isset($hashKey)) {
         $speakerID = substr(base64_decode($hashKey), 3);
     }
     if (isset($speakerID) && is_numeric($speakerID) && ($Speaker = PresentationSpeaker::get()->byID($speakerID))) {
         Session::set('ConfirmSpeakerHash', $hashKey);
         Session::set('Speaker', $Speaker);
         $Speaker->Confirmed = true;
         $Speaker->write();
         $data['FirstName'] = $Speaker->FirstName;
         $data['LastName'] = $Speaker->LastName;
         $data['Summit'] = Summit::get_active();
         return $this->customise($data)->renderWith(array('SummitConfirmSpeakerPage', 'SummitPage'), $this->parent);
     } else {
         return $this->httpError(404, 'Sorry, this speaker confirmation code does not seem to be correct.');
     }
 }
コード例 #8
0
 /**
  * @param SS_HTTPRequest $r
  */
 public function emailspeakers(SS_HTTPRequest $r)
 {
     $summit = Summit::get_most_recent();
     $confirm = $r->getVar('confirm');
     $limit = $r->getVar('limit');
     $speakers = PresentationSpeaker::get()->innerJoin('Presentation_Speakers', 'Presentation_Speakers.PresentationSpeakerID = PresentationSpeaker.ID')->innerJoin('SummitEvent', 'SummitEvent.ID = Presentation_Speakers.PresentationID')->innerJoin('Presentation', 'Presentation.ID = SummitEvent.ID')->exclude(['Presentation.CategoryID' => [40, 41, 46, 45, 48]])->filter(['SummitID' => $summit->ID, 'SummitEvent.Published' => true]);
     $totalBeforeLimit = $speakers->count();
     $appliedLimit = $confirm ? null : ($limit ?: 50);
     $speakers = $speakers->limit($appliedLimit);
     foreach ($speakers as $speaker) {
         /* @var DataList */
         $presentations = $speaker->PublishedPresentations($summit->ID);
         // Todo -- how to deal with this?
         // !$speaker->GeneralOrKeynote() &&
         // !SchedSpeakerEmailLog::BeenEmailed($Speaker->email) &&
         if (!$presentations->exists()) {
             echo "Skipping {$speaker->getName()}. Has no published presentations<br>";
             continue;
         }
         if (!EmailValidator::validEmail($speaker->Member()->Email)) {
             echo $speaker->Member()->Email . " is not a valid email address. Skipping." . $this->br();
             continue;
         }
         $to = $speaker->Member()->Email;
         $subject = "Important Speaker Information for OpenStack Summit in {$summit->Title}";
         $email = EmailFactory::getInstance()->buildEmail('*****@*****.**', $to, $subject);
         $email->setUserTemplate("upload-presentation-slides-email");
         $email->populateTemplate(['Speaker' => $speaker, 'Presentations' => $presentations, 'Summit' => $summit]);
         if ($confirm) {
             //SchedSpeakerEmailLog::addSpeaker($to);
             $email->send();
         } else {
             echo $email->debug();
         }
         echo 'Email sent to ' . $to . ' (' . $speaker->getName() . ')' . $this->br();
     }
     echo $this->br(3) . "Sent a sample of {$appliedLimit} emails out of {$totalBeforeLimit} total" . $this->br();
 }
コード例 #9
0
 /**
  * Handles requests that update speakers attached to this presentation
  * and hands them off to a sub-sub controller
  * @param   $r SS_HTTPRequest
  * @return  RequestHandler
  */
 public function handleSpeaker(SS_HTTPRequest $r)
 {
     if ($r->param('SpeakerID') === 'new') {
         $speaker = PresentationSpeaker::create();
     } else {
         $speaker = PresentationSpeaker::get()->filter(array('ID' => $r->param('SpeakerID')))->first();
     }
     if (!$speaker) {
         return $this->httpError(404, 'Speaker not found');
     }
     if ($speaker->isInDB() && (!$speaker->Presentations()->byID($this->presentation->ID) && $this->presentation->ModeratorID != $speaker->ID)) {
         return $this->httpError(403, 'That speaker is not part of this presentation');
     }
     $request = PresentationPage_ManageSpeakerRequest::create($speaker, $this);
     return $request->handleRequest($r, DataModel::inst());
 }
コード例 #10
0
 /**
  * @return DataList
  */
 private function getAllowedSpeakers()
 {
     return PresentationSpeaker::get();
 }
コード例 #11
0
 /**
  * @return PresentationSpeaker|null
  */
 public function getSpeakerProfile()
 {
     return PresentationSpeaker::get()->filter(array('MemberID' => $this->owner->ID))->first();
 }
コード例 #12
0
 public function editSpeaker(SS_HTTPRequest $request)
 {
     $summit_id = intval($request->param('SummitID'));
     $summit = Summit::get()->byID($summit_id);
     $speaker_id = intval($request->param('SpeakerID'));
     $speaker = PresentationSpeaker::get()->byID($speaker_id);
     Requirements::css('summit/css/simple-sidebar.css');
     Requirements::css('summit/css/summit-admin-edit-speaker.css');
     Requirements::css('themes/openstack/bower_assets/chosen/chosen.min.css');
     Requirements::css('themes/openstack/bower_assets/sweetalert/dist/sweetalert.css');
     // tag input
     Requirements::css('themes/openstack/bower_assets/bootstrap-tagsinput/dist/bootstrap-tagsinput.css');
     Requirements::css('themes/openstack/bower_assets/bootstrap-tagsinput/dist/bootstrap-tagsinput-typeahead.css');
     Requirements::javascript('themes/openstack/bower_assets/sweetalert/dist/sweetalert.min.js');
     Requirements::javascript('themes/openstack/bower_assets/jquery-validate/dist/jquery.validate.min.js');
     Requirements::javascript('themes/openstack/bower_assets/jquery-validate/dist/additional-methods.min.js');
     Requirements::javascript('themes/openstack/bower_assets/chosen/chosen.jquery.min.js');
     Requirements::javascript('summit/javascript/simple-sidebar.js');
     Requirements::javascript('//tinymce.cachefly.net/4.3/tinymce.min.js');
     Requirements::javascript('themes/openstack/bower_assets/typeahead.js/dist/typeahead.bundle.min.js');
     Requirements::javascript('themes/openstack/bower_assets/bootstrap-tagsinput/dist/bootstrap-tagsinput.min.js');
     Requirements::javascript('summit/javascript/summitapp-editspeaker.js');
     return $this->getViewer('EditSpeaker')->process($this->customise(array('Summit' => $summit, 'Speaker' => $speaker)));
 }
コード例 #13
0
 public function handleSpeakersForSched()
 {
     $activeSummit = Summit::get_active();
     $filepath = $_SERVER['DOCUMENT_ROOT'] . '/assets/speaker-import.csv';
     $fp = fopen($filepath, 'w');
     // Setup file to be UTF8
     fprintf($fp, chr(0xef) . chr(0xbb) . chr(0xbf));
     $Speakers = PresentationSpeaker::get()->filter('SummitID', $activeSummit->ID);
     foreach ($Speakers as $Speaker) {
         $AcceptedPresentations = $Speaker->AcceptedPresentations();
         $PhotoURL = "";
         if ($Speaker->PhotoID != 0) {
             $PhotoURL = 'http://www.openstack.org' . $Speaker->Photo()->getURL();
         }
         if ($Speaker->Bio == NULL) {
             $SpeakerWithBio = PresentationSpeaker::get()->filter(array('MemberID' => $Speaker->MemberID, 'Bio:not' => NULL))->first();
             if ($SpeakerWithBio && $SpeakerWithBio->Bio) {
                 $Speaker->Bio = $SpeakerWithBio->Bio;
             }
         }
         if ($AcceptedPresentations->count()) {
             $fullName = $Speaker->FirstName . ' ' . $Speaker->LastName;
             $fields = array($fullName, $Speaker->Member()->Email, ' ', ' ', $Speaker->Title, ' ', $Speaker->Bio, ' ', $PhotoURL);
             fputcsv($fp, $fields);
         }
     }
     fclose($fp);
     header("Cache-control: private");
     header("Content-type: application/force-download");
     header("Content-transfer-encoding: binary\n");
     header("Content-disposition: attachment; filename=\"speaker-import.csv\"");
     header("Content-Length: " . filesize($filepath));
     readfile($filepath);
 }
コード例 #14
0
 public function getSpeakerByID(SS_HTTPRequest $request)
 {
     try {
         $speaker_id = intval($request->param('SPEAKER_ID'));
         $summit_id = intval($request->param('SUMMIT_ID'));
         $summit = Summit::get_by_id('Summit', $summit_id);
         if (is_null($summit)) {
             throw new NotFoundEntityException('Summit', sprintf(' id %s', $summit_id));
         }
         $speaker = PresentationSpeaker::get_by_id('PresentationSpeaker', $speaker_id);
         $speaker_array = array('Title' => $speaker->Title, 'FirstName' => $speaker->FirstName, 'LastName' => $speaker->LastName, 'Email' => $speaker->RegistrationRequest()->Email, 'Member' => $speaker->Member()->Exists() ? $speaker->Member()->toMap() : null, 'Twitter' => $speaker->TwitterName, 'IRC' => $speaker->IRCHandle, 'Bio' => $speaker->Bio, 'PicUrl' => $speaker->ProfilePhoto(50), 'Expertise' => $speaker->AreasOfExpertise()->toNestedArray(), 'Presentations' => $speaker->Presentations()->toNestedArray(), 'OtherPresentations' => $speaker->OtherPresentationLinks()->toNestedArray(), 'TravelPreferences' => $speaker->TravelPreferences()->toNestedArray(), 'Languages' => $speaker->Languages()->toNestedArray(), 'Promocodes' => $speaker->PromoCodes()->toNestedArray(), 'Assistances' => $speaker->SummitAssistances()->toNestedArray(), 'OrganizationalRoles' => $speaker->OrganizationalRoles()->toNestedArray(), 'ActiveInvolvements' => $speaker->ActiveInvolvements()->toNestedArray());
         return $this->ok($speaker_array, false);
     } catch (NotFoundEntityException $ex2) {
         SS_Log::log($ex2->getMessage(), SS_Log::WARN);
         return $this->notFound($ex2->getMessage());
     } catch (Exception $ex) {
         SS_Log::log($ex->getMessage(), SS_Log::ERR);
         return $ex->getMessage();
     }
 }
コード例 #15
0
ファイル: Presentation.php プロジェクト: rbowen/openstack-org
 private function getAllowedSpeakers()
 {
     return PresentationSpeaker::get()->filter(array('SummitID' => $this->SummitID));
 }
コード例 #16
0
 /**
  * @param IPresentation $presentation
  * @param string $email
  * @param Member|null $member
  * @param IPresentationSpeaker|null $speaker
  * @return IPresentationSpeaker
  */
 public function addSpeakerByEmailTo(IPresentation $presentation, $email, Member $member = null, IPresentationSpeaker $speaker = null)
 {
     return $this->tx_manager->transaction(function () use($presentation, $email, $member, $speaker) {
         $speaker = !is_null($speaker) ? $speaker : $this->speaker_repository->getByEmail($email);
         if (is_null($speaker) && !is_null($member)) {
             $speaker = $member->getSpeakerProfile();
         }
         if (!is_null($speaker) && !is_null($member) && intval($member->ID) !== intval($speaker->MemberID)) {
             throw new EntityValidationException(sprintf('speaker does not belongs to selected member!'));
         }
         if (!$speaker) {
             // create it
             $speaker = PresentationSpeaker::create();
             $speaker->write();
             if (!is_null($member)) {
                 $speaker->MemberID = $member->ID;
                 $member->addToGroupByCode('speakers');
                 $member->write();
             } else {
                 $speaker->MemberID = 0;
                 $request = $this->speaker_registration_manager->register($speaker, $email);
                 $speaker->RegistrationRequestID = $request->getIdentifier();
             }
             $speaker->write();
         }
         // i am adding other speaker than me
         if (!is_null($member) && intval($member->ID) !== intval(Member::currentUserID()) && !$this->canAddSpeakerOnPresentation($speaker, $presentation)) {
             throw new EntityValidationException(sprintf("You reached the max. allowed # of presentations for speaker %s (%s)", $speaker->getName(), $email));
         }
         if ($speaker->Presentations()->filter('PresentationID', $presentation->ID)->count() > 0 || $presentation->ModeratorID == $speaker->ID) {
             throw new EntityValidationException('Speaker already assigned to this presentation!.');
         }
         // The first one is the moderator.
         if (!$presentation->maxModeratorsReached()) {
             $presentation->ModeratorID = $speaker->ID;
         } else {
             $speaker->Presentations()->add($presentation);
             $speaker->write();
         }
         return $speaker;
     });
 }
コード例 #17
0
 /**
  * @param ISummit $summit
  * @param array $event_data
  * @return mixed
  */
 public function updateEvent(ISummit $summit, array $event_data)
 {
     $event_repository = $this->event_repository;
     return $this->tx_service->transaction(function () use($summit, $event_data, $event_repository) {
         if (!isset($event_data['id'])) {
             throw new EntityValidationException(array('missing required param: id'));
         }
         $event_id = intval($event_data['id']);
         $event = $event_repository->getById($event_id);
         if (is_null($event)) {
             throw new NotFoundEntityException('Summit Event', sprintf('id %s', $event_id));
         }
         if (intval($event->SummitID) !== intval($summit->getIdentifier())) {
             throw new EntityValidationException(array('event doest not belongs to summit'));
         }
         $event->Title = $event_data['title'];
         $event->Description = $event_data['description'];
         $event->setStartDate($event_data['start_date']);
         $event->setEndDate($event_data['end_date']);
         $event->AllowFeedBack = $event_data['allow_feedback'];
         $event->LocationID = intval($event_data['location_id']);
         $event->TypeID = intval($event_data['event_type']);
         $event->AllowedSummitTypes()->setByIDList($event_data['summit_type']);
         $event->Tags()->setByIDList(explode(',', $event_data['tags']));
         $event->Sponsors()->setByIDList(explode(',', $event_data['sponsors']));
         // Speakers, if one of the added members is not a speaker, we need to make him one
         if ($event->isPresentation()) {
             $presentation = $event_repository->getPresentationById($event_id);
             $speaker_ids = array();
             $member_ids = explode(',', $event_data['speakers']);
             foreach ($member_ids as $member_id) {
                 $speaker = PresentationSpeaker::get()->filter('MemberID', $member_id)->first();
                 if (!$speaker) {
                     $member = Member::get()->byID($member_id);
                     $speaker = new PresentationSpeaker();
                     $speaker->FirstName = $member->FirstName;
                     $speaker->LastName = $member->Surname;
                     $speaker->MemberID = $member->ID;
                     $speaker->write();
                 }
                 $speaker_ids[] = $speaker->ID;
             }
             $event->Speakers()->setByIDList($speaker_ids);
         }
         return $event;
     });
 }
コード例 #18
0
 /**
  * Handles the form submission that creates a new speaker.
  * Checks for existence, and uses existing if found
  * 
  * @param   $data array
  * @param   $form Form
  * @return  SSViewer
  */
 public function doAddSpeaker($data, $form)
 {
     $me = $data['SpeakerType'] == 'Me';
     $email = $me ? Member::currentUser()->Email : $data['EmailAddress'];
     if (!$email) {
         $form->sessionMessage('Please specify an email addresss', 'bad');
         return $this->redirectBack();
     }
     $speaker = $this->getSpeaker($email);
     if (!$speaker) {
         $speaker = PresentationSpeaker::create(array('SummitID' => Summit::get_active()->ID));
         if ($me) {
             $member = Member::currentUser();
             $speaker->MemberID = $member->ID;
         } else {
             // look for the member..
             $member = Member::get()->filter('Email', $email)->first();
             if (!$member) {
                 $speaker->MemberID = 0;
                 $speaker->write();
                 $request = $this->getParent()->getSpeakerRegistrationRequestManager()->register($speaker, $email);
                 $speaker->RegistrationRequestID = $request->getIdentifier();
             } else {
                 $member->addToGroupByCode('speakers');
                 $speaker->MemberID = $member->ID;
                 $member->write();
             }
         }
     }
     $speaker->Presentations()->add($this->presentation->ID);
     $speaker->write();
     return $this->parent->redirect(Controller::join_links($this->Link(), 'speaker', $speaker->ID));
 }
コード例 #19
0
 /**
  * Reverses the migration
  */
 public function doDown()
 {
     foreach (Presentation::get()->filter('Legacy', true) as $p) {
         $p->Speakers()->setByIdList(array());
         foreach ($p->Materials()->filter('ClassName', 'PresentationVideo') as $material) {
             echo "Deleted video # " . $material->ID . $this->br();
             $material->delete();
         }
         echo "Deleted presentation # " . $p->ID . $this->br();
         $p->delete();
     }
     if (!Presentation::get()->filter('Legacy', true)->exists()) {
         echo "Deleted all legacy presentations" . $this->br();
     } else {
         echo "*** FAIL: Did not delete all legacy presentations" . $this->br();
     }
     foreach (PresentationSpeaker::get()->filter('Notes', '[LEGACY]') as $speaker) {
         $speaker->delete();
     }
     if (!PresentationSpeaker::get()->filter('Notes', '[LEGACY]')->exists()) {
         echo "Deleted all legacy speakers" . $this->br();
     } else {
         echo "*** FAIL: Did not delete all legacy speakers" . $this->br();
     }
     Summit::get()->filter('Title', ['San Diego', 'Portland', 'Atlanta'])->removeAll();
     if (!Summit::get()->filter('Title', ['San Diego', 'Portland', 'Atlanta'])->exists()) {
         echo "Deleted legacy summits" . $this->br();
     } else {
         echo "*** FAIL: Did not delete legacy summits" . $this->br();
     }
 }
 /**
  * @param string $email
  * @return IPresentationSpeaker
  */
 public function getByEmail($email)
 {
     $speaker = PresentationSpeaker::get()->filter(array('Member.Email' => $email))->first();
     if (is_null($speaker)) {
         $speaker = PresentationSpeaker::get()->filter(array('Member.SecondEmail' => $email))->first();
     }
     if (is_null($speaker)) {
         $speaker = PresentationSpeaker::get()->filter(array('Member.ThirdEmail' => $email))->first();
     }
     if (is_null($speaker)) {
         $registration_request = SpeakerRegistrationRequest::get()->filter(array('Email' => $email, 'IsConfirmed' => 0))->first();
         if (!is_null($registration_request)) {
             $speaker = $registration_request->Speaker();
         }
     }
     return $speaker;
 }
コード例 #21
0
 public function FilterForm()
 {
     return Form::create($this, "FilterForm", FieldList::create()->text('Keywords')->dropdown('Category')->configure()->setSource(PresentationCategory::get()->map('ID', 'Title'))->setEmptyString('-- Any category --')->end()->dropdown('Speaker')->configure()->setSource(PresentationSpeaker::get()->map('ID', 'Title'))->setEmptyString('-- Any speaker --')->end()->dropdown('Summit')->configure()->setSource(Summit::get()->map('ID', 'Title'))->setEmptyString('-- Any summit --')->end(), FieldList::create(FormAction::create('doSearch', 'Search')))->disableSecurityToken()->setFormAction($this->Link())->loadDataFrom($_REQUEST)->setFormMethod('GET');
 }
コード例 #22
0
 function addAction($data, $form)
 {
     //Check for a logged in member
     if ($CurrentMember = Member::currentUser()) {
         // Find a site member (in any group) based on the MemberID field
         $id = Convert::raw2sql($data['MemberID']);
         $member = DataObject::get_by_id("Member", $id);
         if ($data['SpeakerID'] && is_numeric($data['SpeakerID'])) {
             $speaker = PresentationSpeaker::get()->byID(intval($data['SpeakerID']));
         } elseif ($member) {
             $speaker = PresentationSpeaker::get()->filter('MemberID', $member->ID)->first();
         }
         if (!$speaker) {
             $speaker = new PresentationSpeaker();
         }
         //Find or create the 'speaker' group
         if (!($userGroup = DataObject::get_one('Group', "Code = 'speakers'"))) {
             $userGroup = new Group();
             $userGroup->Code = "speakers";
             $userGroup->Title = "Speakers";
             $userGroup->Write();
             $member->Groups()->add($userGroup);
         }
         //Add member to the group
         $member->Groups()->add($userGroup);
         if ($data['Country'] != '' && $data['Country'] != $member->Country) {
             $member->Country = convert::raw2sql($data['Country']);
         }
         if ($data['ReplaceName'] == 1) {
             $member->FirstName = $data['FirstName'];
         }
         if ($data['ReplaceSurname'] == 1) {
             $member->Surname = $data['LastName'];
         }
         if ($data['ReplaceBio'] == 1) {
             $member->Bio = $data['Bio'];
         }
         $member->write();
         $form->saveInto($speaker);
         $speaker->MemberID = $member->ID;
         $speaker->AdminID = Member::currentUser()->ID;
         // Attach Photo
         if ($member->PhotoID && $speaker->PhotoID == 0) {
             $speaker->PhotoID = $member->PhotoID;
         }
         $speaker->AskedAboutBureau = TRUE;
         $speaker->write();
         $this->controller->redirect($this->controller()->Link() . 'speaker?saved=1');
     } else {
         return Security::PermissionFailure($this->controller, 'You must be <a href="/join">registered</a> and logged in to edit your profile:');
     }
 }
コード例 #23
0
 /**
  * Handles the form submission that creates a new speaker.
  * Checks for existence, and uses existing if found
  * @param   $data array
  * @param   $form Form
  * @return  SSViewer
  */
 public function doAddSpeaker($data, $form)
 {
     $me = $data['SpeakerType'] == 'Me';
     $email = $me ? Member::currentUser()->Email : $data['EmailAddress'];
     if (!$email) {
         $form->sessionMessage('Please specify an email address', 'bad');
         return $this->redirectBack();
     }
     $speaker = $this->getSpeaker($email);
     if (!$speaker) {
         $speaker = PresentationSpeaker::create();
         if ($me) {
             $member = Member::currentUser();
             $speaker->MemberID = $member->ID;
         } else {
             // look for the member..
             $member = Member::get()->filter('Email', $email)->first();
             if (!$member) {
                 $speaker->MemberID = 0;
                 $speaker->write();
                 $request = $this->getParent()->getSpeakerRegistrationRequestManager()->register($speaker, $email);
                 $speaker->RegistrationRequestID = $request->getIdentifier();
             } else {
                 $member->addToGroupByCode('speakers');
                 $speaker->MemberID = $member->ID;
                 $member->write();
             }
         }
     }
     // i am adding other speaker than me
     if (!$me && $speaker->hasReachPresentationLimitBy($this->Summit()->ID)) {
         $form->sessionMessage(sprintf("You reached the maximun allowed # of presentations (%s) for speaker %s (%s)", MAX_SUMMIT_ALLOWED_PER_USER, $speaker->getName(), $email), 'bad');
         return $this->redirectBack();
     }
     $speaker->Presentations()->add($this->presentation->ID);
     $speaker->write();
     return $this->parent->redirect(Controller::join_links($this->Link(), 'speaker', $speaker->ID));
 }
コード例 #24
0
 function addAction($data, $form)
 {
     //Check for a logged in member
     if ($CurrentMember = Member::currentUser()) {
         // Find a site member (in any group) based on the MemberID field
         $id = Convert::raw2sql($data['MemberID']);
         $member = DataObject::get_by_id("Member", $id);
         if ($data['SpeakerID'] && is_numeric($data['SpeakerID'])) {
             $speaker = PresentationSpeaker::get()->byID(intval($data['SpeakerID']));
         } elseif ($member) {
             $speaker = PresentationSpeaker::get()->filter('MemberID', $member->ID)->first();
         }
         if (!$speaker) {
             $speaker = new PresentationSpeaker();
         }
         //Find or create the 'speaker' group
         if (!($userGroup = DataObject::get_one('Group', "Code = 'speakers'"))) {
             $userGroup = new Group();
             $userGroup->Code = "speakers";
             $userGroup->Title = "Speakers";
             $userGroup->Write();
             $member->Groups()->add($userGroup);
         }
         //Add member to the group
         $member->Groups()->add($userGroup);
         if ($data['Country'] != '' && $data['Country'] != $member->Country) {
             $member->Country = convert::raw2sql($data['Country']);
         }
         if ($data['ReplaceName'] == 1) {
             $member->FirstName = $data['FirstName'];
         }
         if ($data['ReplaceSurname'] == 1) {
             $member->Surname = $data['LastName'];
         }
         if ($data['ReplaceBio'] == 1) {
             $member->Bio = $data['Bio'];
         }
         $member->write();
         $form->saveInto($speaker);
         $speaker->MemberID = $member->ID;
         $speaker->AdminID = Member::currentUser()->ID;
         // Attach Photo
         if ($member->PhotoID && $speaker->PhotoID == 0) {
             $speaker->PhotoID = $member->PhotoID;
         }
         $speaker->AskedAboutBureau = TRUE;
         // Languages
         foreach ($speaker->Languages() as $currentlang) {
             $currentlang->delete();
         }
         foreach ($data['Language'] as $lang) {
             if (trim($lang) != '') {
                 $spoken_lang = SpeakerLanguage::create(array('Language' => $lang));
                 $speaker->Languages()->add($spoken_lang);
             }
         }
         // Expertise
         $speaker->AreasOfExpertise()->removeAll();
         foreach ($data['Expertise'] as $exp) {
             if (trim($exp) != '') {
                 $expertise = SpeakerExpertise::create(array('Expertise' => $exp));
                 $speaker->AreasOfExpertise()->add($expertise);
             }
         }
         // Presentation Link
         $speaker->OtherPresentationLinks()->removeAll();
         foreach ($data['PresentationLink'] as $key => $link) {
             if (trim($link) != '') {
                 $presentation_title = trim($data['PresentationTitle'][$key]);
                 $presentation_link = SpeakerPresentationLink::create(array('LinkUrl' => $link, 'Title' => $presentation_title));
                 $speaker->OtherPresentationLinks()->add($presentation_link);
             }
         }
         // Travel Preferences
         $speaker->TravelPreferences()->removeAll();
         foreach ($data['CountriesToTravel'] as $travel_country) {
             $travel_pref = SpeakerTravelPreference::create(array('Country' => $travel_country));
             $speaker->TravelPreferences()->add($travel_pref);
         }
         $speaker->write();
         $form->sessionMessage('Your profile has been updated', 'good');
         Session::clear("FormInfo.{$form->FormName()}.data", $data);
         return $this->controller()->redirectBack();
     } else {
         return Security::PermissionFailure($this->controller, 'You must be <a href="/join">registered</a> and logged in to edit your profile:');
     }
 }
コード例 #25
0
 /**
  * @param PresentationSpeaker $s
  * @return array
  */
 protected function createSpeakerJSON(PresentationSpeaker $s)
 {
     return ['id' => $s->ID, 'name' => $s->getName(), 'jobTitle' => $s->Title, 'imageURL' => $s->Photo()->exists() && Director::fileExists($s->Photo()->Filename) ? $s->Photo()->CroppedImage(263, 148)->URL : 'summit-video-app/production/images/placeholder-image.jpg', 'videoCount' => $s->Presentations()->innerJoin('PresentationMaterial', 'PresentationMaterial.PresentationID = Presentation.ID')->innerJoin('PresentationVideo', 'PresentationVideo.ID = PresentationMaterial.ID')->count()];
 }
コード例 #26
0
 function SaveProfile($data, $form)
 {
     //Check for a logged in member
     if ($CurrentMember = Member::currentUser()) {
         //Check for another member with the same email address
         if (Member::get()->filter(array('Email' => Convert::raw2sql($data['Email']), 'ID:not' => $CurrentMember->ID))->count() > 0) {
             $form->addErrorMessage("Email", 'Sorry, that email address already exists.', "bad");
             Session::set("FormInfo.Form_EditProfileForm.data", $data);
             return $this->redirect($this->Link('?error=1'));
         } else {
             // Clean up bio
             if ($data["Bio"]) {
                 $config = HTMLPurifier_Config::createDefault();
                 // Remove any CSS or inline styles
                 $config->set('CSS.AllowedProperties', array());
                 $purifier = new HTMLPurifier($config);
                 $cleanedBio = $purifier->purify($data["Bio"]);
             }
             $form->saveInto($CurrentMember);
             if (isset($cleanedBio)) {
                 $CurrentMember->Bio = $cleanedBio;
             }
             if ($data['Gender'] == 'Specify') {
                 $CurrentMember->Gender = $data['GenderSpecify'];
             }
             if ($CurrentMember->isChanged('Email')) {
                 $sender = new MemberRegistrationSenderService();
                 $sender->send($CurrentMember->resetConfirmation());
             }
             $CurrentMember->write();
             $speaker = PresentationSpeaker::get()->filter('MemberID', $CurrentMember->ID)->first();
             if ($speaker) {
                 if ($data['ReplaceName'] == 1) {
                     $speaker->FirstName = $data['FirstName'];
                 }
                 if ($data['ReplaceSurname'] == 1) {
                     $speaker->Surname = $data['Surname'];
                 }
                 if ($data['ReplaceBio'] == 1) {
                     $speaker->Bio = $data['Bio'];
                 }
                 $speaker->write();
             }
             // If they do not have a photo uploaded, but they have provided a twitter URL, attempt to grab a photo from twitter
             if ($CurrentMember->TwitterName && !$CurrentMember->Photo()->Exists()) {
                 $this->ProfilePhotoFromTwitter($CurrentMember);
             }
             return $this->redirect($this->Link('?saved=1'));
         }
     } else {
         return Security::PermissionFailure($this->controller, 'You must be <a href="/join">registered</a> and logged in to edit your profile:');
     }
 }
コード例 #27
0
 public function results()
 {
     $empty_search = true;
     $where_string = "PresentationSpeaker.AvailableForBureau = 1";
     if ($spoken_language = $this->getSearchQuery('spoken_language')) {
         $empty_search = false;
         $languages = "'" . implode("','", $spoken_language) . "'";
         $where_string .= " AND SpeakerLanguage.Language IN ({$languages})";
     }
     if ($country_origin = $this->getSearchQuery('country_origin')) {
         $empty_search = false;
         $countries = "'" . implode("','", $country_origin) . "'";
         $where_string .= " AND Countries.Name IN ({$countries})";
     }
     if ($travel_preference = $this->getSearchQuery('travel_preference')) {
         $empty_search = false;
         $preferences = "'" . implode("','", $travel_preference) . "'";
         $where_string .= " AND Countries2.Name IN ({$preferences})";
     }
     if ($query = $this->getSearchQuery('search_query')) {
         $empty_search = false;
         $where_string .= " AND (PresentationSpeaker.FirstName LIKE '%{$query}%' OR PresentationSpeaker.LastName LIKE '%{$query}%'\n                          OR CONCAT_WS(' ',PresentationSpeaker.FirstName,PresentationSpeaker.LastName) LIKE '%{$query}%'\n                          OR CONCAT_WS(', ',PresentationSpeaker.LastName,PresentationSpeaker.FirstName) LIKE '%{$query}%'\n                          OR SpeakerExpertise.Expertise LIKE '%{$query}%' OR Org.Name LIKE '%{$query}%')";
     }
     //die($where_string);
     if (!$empty_search) {
         $Results = PresentationSpeaker::get()->leftJoin("SpeakerExpertise", "SpeakerExpertise.SpeakerID = PresentationSpeaker.ID")->leftJoin("Countries", "Countries.Code = PresentationSpeaker.Country")->leftJoin("Member", "Member.ID = PresentationSpeaker.MemberID")->leftJoin("Affiliation", "Affiliation.MemberID = Member.ID")->leftJoin("Org", "Org.ID = Affiliation.OrganizationID")->leftJoin("SpeakerLanguage", "SpeakerLanguage.SpeakerID = PresentationSpeaker.ID")->leftJoin("SpeakerTravelPreference", "SpeakerTravelPreference.SpeakerID = PresentationSpeaker.ID")->leftJoin("Countries", "Countries2.Code = SpeakerTravelPreference.Country", "Countries2")->where($where_string);
         // No Member was found
         if (!isset($Results) || $Results->count() == 0) {
             return $this->customise($Results);
         }
         // If there is only one person with this name, go straight to the resulting profile page
         if ($Results && $Results->Count() == 1) {
             $this->redirect($this->Link() . 'profile/' . $Results->First()->ID);
         }
         $Output = new ArrayData(array('Title' => 'Results', 'Results' => $Results));
         if ($Results->count() == 0) {
             $message = $this->getViewer('results')->process($this->customise($Output));
             $this->response->setBody($message);
             throw new SS_HTTPResponse_Exception($this->response, 404);
         }
         return $this->customise($Output);
     }
     $this->redirect($this->Link());
 }
コード例 #28
0
 public function results()
 {
     if ($query = $this->getSearchQuery()) {
         // Search for only foundation members (Group 5) against the query.
         $filter = "FirstName LIKE '%{$query}%'\n\t\t\t\t\tOR LastName LIKE '%{$query}%'\n\t\t\t\t\tOR IRCHandle LIKE '%{$query}%'";
         $Results = PresentationSpeaker::get()->where($filter);
         // No Member was found
         if (!isset($Results) || $Results->count() == 0) {
             return $this->customise($Results);
         }
         // For AutoComplete
         if (Director::is_ajax()) {
             $Speakers = $Results->map('ID', 'Name');
             $Suggestions = '';
             foreach ($Speakers as $Speaker) {
                 $Suggestions = $Suggestions . $Speaker . '|' . '1' . "\n";
             }
             return $Suggestions;
         } else {
             $filter = "FirstName LIKE '%{$query}%'\n\t\t\t\t\tOR LastName LIKE '%{$query}%'\n\t\t\t\t\tOR IRCHandle LIKE '%{$query}%'";
             $OneSpeaker = PresentationSpeaker::get()->where($filter);
             // see if one member exactly matches the search term
             if ($OneSpeaker) {
                 $Results = $OneSpeaker;
             }
             // If there is only one person with this name, go straight to the resulting profile page
             if ($OneSpeaker && $OneSpeaker->Count() == 1) {
                 $this->redirect($this->Link() . 'profile/' . $OneSpeaker->First()->ID);
             }
             $Output = new ArrayData(array('Title' => 'Results', 'Results' => $Results));
             if ($Results->count() == 0) {
                 $message = $this->getViewer('results')->process($this->customise($Output));
                 $this->response->setBody($message);
                 throw new SS_HTTPResponse_Exception($this->response, 404);
             }
             return $this->customise($Output);
         }
     }
     $this->redirect($this->Link());
 }
コード例 #29
0
 /**
  * Gets the speaker for this member in the current summit
  * 
  * @param  Summit $summit
  * @return PresentationSpeaker
  */
 public function getCurrentSpeakerProfile($summit = null)
 {
     $summit = $summit ?: Summit::get_active();
     if (!$summit) {
         return false;
     }
     return PresentationSpeaker::get()->filter(array('MemberID' => $this->owner->ID, 'SummitID' => $summit->ID))->first();
 }
コード例 #30
0
 /**
  * @param ISummit $summit
  * @param array $speaker_data
  * @return IPresentationSpeaker
  */
 public function createSpeaker(ISummit $summit, array $speaker_data)
 {
     $speaker_repository = $this->speaker_repository;
     $member_repository = $this->member_repository;
     $speaker_registration_request_manager = $this->speaker_registration_request_manager;
     $speaker_creation_email_sender = new PresentationSpeakerCreationEmailMessageSender();
     return $this->tx_service->transaction(function () use($summit, $speaker_data, $speaker_repository, $member_repository, $speaker_registration_request_manager, $speaker_creation_email_sender) {
         $speaker = PresentationSpeaker::create();
         $member_id = 0;
         if (!isset($speaker_data['email']) && !isset($speaker_data['member_id'])) {
             throw new EntityValidationException("you must provide an email or a member_id in order to create a speaker!");
         }
         if (isset($speaker_data['member_id']) && intval($speaker_data['member_id']) > 0) {
             $member_id = intval($speaker_data['member_id']);
             $old_speaker = $speaker_repository->getByMemberID($member_id);
             if (!is_null($old_speaker)) {
                 throw new EntityValidationException(sprintf("Member %s already has assigned an speaker!", $member_id));
             }
         }
         $speaker->Title = trim($speaker_data['title']);
         $speaker->FirstName = trim($speaker_data['first_name']);
         $speaker->LastName = trim($speaker_data['last_name']);
         $speaker->IRCHandle = trim($speaker_data['twitter_name']);
         $speaker->TwitterName = trim($speaker_data['irc_name']);
         $speaker->MemberID = $member_id;
         $speaker->CreatedFromAPI = true;
         $speaker_repository->add($speaker);
         $speaker->write();
         if ($member_id === 0 && isset($speaker_data['email'])) {
             $email = trim($speaker_data['email']);
             $member = $member_repository->findByEmail($email);
             if (is_null($member)) {
                 // we need to create a registration request
                 $request = $speaker_registration_request_manager->register($speaker, $email);
                 $request->SpeakerID = $speaker->ID;
                 $request->write();
                 $speaker->RegistrationRequestID = $request->ID;
                 $speaker->write();
             } else {
                 $old_speaker = $speaker_repository->getByMemberID($member->getIdentifier());
                 if (!is_null($old_speaker)) {
                     throw new EntityValidationException(sprintf("Member %s already has assigned an speaker!", $member->getIdentifier()));
                 }
                 $speaker->MemberID = $member->getIdentifier();
                 $speaker->write();
             }
         }
         // send email to speaker so he can register as a member
         $speaker_creation_email_sender->send(['Speaker' => $speaker]);
         $onsite_phone = trim($speaker_data['onsite_phone']);
         if (!empty($onsite_phone)) {
             $summit_assistance = $speaker->createAssistanceFor($summit->getIdentifier());
             $summit_assistance->OnSitePhoneNumber = $onsite_phone;
             $summit_assistance->write();
         }
         return $speaker;
     });
 }