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)); }