public function getSpeakers(SS_HTTPRequest $request)
 {
     try {
         $query_string = $request->getVars();
         $page = isset($query_string['page']) ? intval(Convert::raw2sql($query_string['page'])) : '';
         $page_size = isset($query_string['items']) ? intval(Convert::raw2sql($query_string['items'])) : '';
         $term = isset($query_string['term']) ? trim(Convert::raw2sql($query_string['term'])) : '';
         $sort_by = isset($query_string['sort_by']) ? trim(Convert::raw2sql($query_string['sort_by'])) : '';
         $sort_dir = isset($query_string['sort_dir']) ? trim(Convert::raw2sql($query_string['sort_dir'])) : '';
         $summit_id = intval($request->param('SUMMIT_ID'));
         $summit = $this->summit_repository->getById($summit_id);
         if (is_null($summit)) {
             throw new NotFoundEntityException('Summit', sprintf(' id %s', $summit_id));
         }
         list($page, $page_size, $count, $speakers) = $this->speaker_repository->searchByTermPaginated($page, $page_size, $term, $sort_by, $sort_dir);
         $data = array();
         foreach ($speakers as $speaker) {
             $promo_code = $speaker->getSummitPromoCode($summit_id);
             $data[] = array('id' => $speaker->ID, 'member_id' => $speaker->MemberID, 'name' => $speaker->getName(), 'email' => $speaker->getEmail(), 'onsite_phone' => $speaker->getOnSitePhoneFor($summit_id), 'presentation_count' => $speaker->Presentations()->count(), 'registration_code' => !is_null($promo_code) ? $promo_code->Code : '');
         }
         return $this->ok(array('page' => $page, 'page_size' => $page_size, 'count' => $count, 'speakers' => $data));
     } 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 $this->serverError();
     }
 }
 public function DoGlobalSearch(SS_HTTPRequest $request)
 {
     $term = Convert::raw2sql($request->requestVar('t'));
     if (empty($term)) {
         return $this->httpError(404);
     }
     $summit_id = $this->Summit()->ID;
     $speakers = $this->speaker_repository->searchBySummitAndTerm($this->Summit(), $term);
     $events = $this->event_repository->searchBySummitAndTerm($this->Summit(), $term);
     return $this->renderWith(array('SummitAppSchedPage_globalSearchResults', 'SummitPage', 'Page'), array('SpeakerResults' => new ArrayList($speakers), 'EventResults' => new ArrayList($events), 'SearchTerm' => $term));
 }
 /**
  * @param $term
  * @param bool $obscure_email
  * @return array
  */
 public function getSpeakerByTerm($term, $obscure_email = true)
 {
     $data = $this->speaker_repository->searchByTermActive($term);
     $res = array();
     foreach ($data as $row) {
         $entry = array();
         $speaker_id = intval($row['speaker_id']);
         $member_id = intval($row['member_id']);
         $entry['name'] = sprintf("%s %s", $row['firstname'], $row['surname']);
         if (empty($entry['name'])) {
             continue;
         }
         $entry['title'] = '';
         $entry['company'] = '';
         $entry['speaker_id'] = $speaker_id;
         $entry['member_id'] = $member_id;
         if ($member_id > 0) {
             $member = $this->member_repository->getById($member_id);
             $entry['pic'] = $member->ProfilePhotoUrl();
             $company = $member->getCurrentCompany();
             if (!empty($company)) {
                 $entry['company'] = $company;
             }
         }
         if ($speaker_id > 0) {
             $speaker = $this->speaker_repository->getById($speaker_id);
             $entry['pic'] = $speaker->ProfilePhoto();
             if (!empty($speaker->Title)) {
                 $entry['title'] = $speaker->Title;
             }
         }
         if ($obscure_email) {
             $entry['email'] = preg_replace('/(?<=.).(?=.*.@)/u', '*', $row['email']);
         }
         array_push($res, $entry);
     }
     return $res;
 }
 /**
  * @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;
     });
 }
 public function DoGlobalSearch(SS_HTTPRequest $request)
 {
     $term = Convert::raw2sql($request->requestVar('t'));
     if (empty($term)) {
         return $this->httpError(404);
     }
     $summit_id = $this->Summit()->ID;
     $db_term = SummitScheduleGlobalSearchTerm::get()->filter(array('Term' => $term, 'SummitID' => $summit_id))->first();
     if (is_null($db_term)) {
         $db_term = SummitScheduleGlobalSearchTerm::create();
     }
     $db_term->Hits = intval($db_term->Hits) + 1;
     $db_term->Term = $term;
     $db_term->SummitID = $summit_id;
     $db_term->write();
     $popular_terms = SummitScheduleGlobalSearchTerm::get()->filter(array('SummitID' => $summit_id))->sort('Term', 'ASC')->limit(25, 0);
     $speakers = $this->speaker_repository->searchBySummitAndTerm($this->Summit(), $term);
     $events = $this->event_repository->searchBySummitAndTerm($this->Summit(), $term);
     return $this->renderWith(array('SummitAppSchedPage_globalSearchResults', 'SummitPage', 'Page'), array('SpeakerResults' => new ArrayList($speakers), 'EventResults' => new ArrayList($events), 'SearchTerm' => $term, 'PopularTerms' => $popular_terms));
 }