public function isDuplicated(ISummit $summit)
 {
     $start_date = $summit->getBeginDate();
     $end_date = $summit->getEndDate();
     $dupe = Summit::get_one("Summit", "Name = '" . $summit->getName() . "' AND SummitBeginDate = '" . $start_date . "'  AND SummitEndDate = '" . $end_date . "'");
     return !empty($dupe);
 }
 /**
  * @param ISummit $summit
  * @param IPresentationSpeaker $speaker
  * @param string $role
  * @return PresentationSpeakerAcceptedAnnouncementEmailSender
  * @throws Exception
  */
 public function build(ISummit $summit, IPresentationSpeaker $speaker, $role = IPresentationSpeaker::RoleSpeaker)
 {
     $has_published = $speaker->hasPublishedPresentations($summit->getIdentifier(), $role);
     $has_rejected = $speaker->hasRejectedPresentations($summit->getIdentifier(), $role);
     $has_alternate = $speaker->hasAlternatePresentations($summit->getIdentifier(), $role);
     if ($has_published && !$has_rejected && !$has_alternate) {
         return new PresentationSpeakerAcceptedAnnouncementEmailSender();
     }
     if (!$has_published && !$has_rejected && $has_alternate) {
         return new PresentationSpeakerAlternateAnnouncementEmailSender();
     }
     if (!$has_published && $has_rejected && !$has_alternate) {
         return new PresentationSpeakerRejectedAnnouncementEmailSender();
     }
     if ($has_published && !$has_rejected && $has_alternate) {
         return new PresentationSpeakerAcceptedAlternateAnnouncementEmailSender();
     }
     if ($has_published && $has_rejected && !$has_alternate) {
         return new PresentationSpeakerAcceptedRejectedAnnouncementEmailSender();
     }
     if (!$has_published && $has_rejected && $has_alternate) {
         return new PresentationSpeakerAlternateRejectedAnnouncementEmailSender();
     }
     if ($has_published && $has_rejected && $has_alternate) {
         return new PresentationSpeakerAcceptedAlternateAnnouncementEmailSender();
     }
     return null;
 }
 /**
  * @param ISummit $summit
  * @param string $promo_code_type
  * @param int $batch_size
  * @return ISpeakerSummitRegistrationPromoCode
  */
 public function getNextAvailableByType(ISummit $summit, $promo_code_type, $batch_size = 10)
 {
     switch ($promo_code_type) {
         case ISpeakerSummitRegistrationPromoCode::TypeAccepted:
             if (count($this->promo_code_speaker_session_pool) === 0) {
                 $query = new QueryObject(new SpeakerSummitRegistrationPromoCode());
                 $query->addAndCondition(QueryCriteria::equal('Type', $promo_code_type));
                 $query->addAndCondition(QueryCriteria::equal('SpeakerID', 0));
                 $query->addAndCondition(QueryCriteria::equal('SummitID', $summit->getIdentifier()));
                 $query->addOrder(QueryOrder::asc('ID'));
                 list($this->promo_code_speaker_session_pool, $count) = $this->getAll($query, 0, $batch_size);
             }
             return array_shift($this->promo_code_speaker_session_pool);
             break;
         case ISpeakerSummitRegistrationPromoCode::TypeAlternate:
             if (count($this->promo_code_alternate_speaker_session_pool) === 0) {
                 $query = new QueryObject(new SpeakerSummitRegistrationPromoCode());
                 $query->addAndCondition(QueryCriteria::equal('Type', $promo_code_type));
                 $query->addAndCondition(QueryCriteria::equal('SpeakerID', 0));
                 $query->addAndCondition(QueryCriteria::equal('SummitID', $summit->getIdentifier()));
                 $query->addOrder(QueryOrder::asc('ID'));
                 list($this->promo_code_alternate_speaker_session_pool, $count) = $this->getAll($query, 0, $batch_size);
             }
             return array_shift($this->promo_code_alternate_speaker_session_pool);
             break;
     }
     return null;
 }
 /**
  * @param ISummit $summit
  * @return SummitAppSchedPage
  */
 public static function getBy(ISummit $summit)
 {
     $page = Versioned::get_by_stage('SummitAppSchedPage', 'Live')->filter('SummitID', $summit->getIdentifier())->first();
     if (is_null($page)) {
         $page = Versioned::get_by_stage('SummitAppSchedPage', 'Stage')->filter('SummitID', $summit->getIdentifier())->first();
     }
     return $page;
 }
 /**
  * @param ISummit $summit
  * @param IPresentationSpeaker $speaker
  * @return IMessageSenderService
  */
 public function build(ISummit $summit, IPresentationSpeaker $speaker)
 {
     /**
      * Rules are:
      * All speakers that are in a Track, besides BoF and Working Groups
      * Send the code they already received, unless they are new and don’t have a code. Then they get a new one.
      * Send the custom registration link to say they’re coming to the summit and leave their onsite phone
      * ( if they are registered, that is memberid <> 0)
      * If the user is already registered, we shouldn't send their code again: ( confirmed assistance for summit)
      * they still need the email, just not the part with the code. Probably a slightly altered verbiage as well
      */
     if ($speaker->breakoutEmailAlreadySent($summit->getIdentifier())) {
         return null;
     }
     if ($speaker->hasConfirmedAssistanceFor($summit->getIdentifier())) {
         // send reminder without code
         return new PresentationSpeakerSummitReminderEmailSender();
     }
     // send reminder with code
     return new PresentationSpeakerConfirmSummitAssistanceEmailReminderSender();
 }
    /**
     * @param ISummit $summit
     * @param string $term
     * @return IPresentationSpeaker[]
     */
    public function searchBySummitAndTerm(ISummit $summit, $term)
    {
        $speakers = array();
        $summit_id = $summit->getIdentifier();
        $sql_speakers = <<<SQL
      SELECT DISTINCT S.*, CONCAT(S.FirstName,' ',S.LastName) AS FullName FROM PresentationSpeaker S
      WHERE EXISTS
      (
            SELECT P.ID From Presentation P
            INNER JOIN SummitEvent E ON E.ID = P.ID AND E.Published = 1 AND E.SummitID = {$summit_id}
            INNER JOIN Presentation_Speakers PS ON PS.PresentationID = P.ID
            WHERE PS.PresentationSpeakerID = S.ID
      )
      HAVING FullName LIKE '%{$term}%'
      UNION
      SELECT DISTINCT S.*, CONCAT(S.FirstName,' ',S.LastName) AS FullName FROM PresentationSpeaker S
      WHERE EXISTS
      (
            SELECT P.ID From Presentation P
            INNER JOIN SummitEvent E ON E.ID = P.ID AND E.Published = 1 AND E.SummitID = {$summit_id}
            INNER JOIN Presentation_Speakers PS ON PS.PresentationID = P.ID
             WHERE PS.PresentationSpeakerID = S.ID
      )
      HAVING SOUNDEX(FullName) = SOUNDEX('{$term}')
      UNION
      SELECT DISTINCT S.*, CONCAT(S.FirstName,' ',S.LastName) AS FullName FROM PresentationSpeaker S
      WHERE EXISTS
      (
            SELECT P.ID From Presentation P
            INNER JOIN SummitEvent E ON E.ID = P.ID AND E.Published = 1 AND E.SummitID = {$summit_id}
            INNER JOIN Presentation_Speakers PS ON PS.PresentationID = P.ID
            WHERE PS.PresentationSpeakerID = S.ID AND E.Title LIKE '%{$term}%'
      )
SQL;
        foreach (DB::query($sql_speakers) as $row) {
            $class = $row['ClassName'];
            array_push($speakers, new $class($row));
        }
        return $speakers;
    }
 protected function getPresentationFields()
 {
     $private_groups = $this->presentation_manager->getPrivateCategoryGroupsFor(Member::currentUser(), $this->summit);
     if ($this->summit->isCallForSpeakersOpen()) {
         $public_groups = $this->summit->CategoryGroups()->filter('ClassName', 'PresentationCategoryGroup')->toArray();
         $category_groups = array_merge($public_groups, $private_groups);
     } else {
         $category_groups = $private_groups;
     }
     $category_groups_map = array();
     foreach ($category_groups as $group) {
         $group_type = $group->ClassName == 'PrivatePresentationCategoryGroup' ? 'private' : 'public';
         $category_groups_map[] = array('id' => $group->ID, 'title' => $group->Name, 'group_type' => $group_type);
     }
     usort($category_groups_map, function ($a, $b) {
         return strcmp($a["title"], $b["title"]);
     });
     $fields = FieldList::create()->text('Title', 'Proposed Presentation Title')->configure()->setAttribute('autofocus', 'TRUE')->end()->dropdown('TypeID', 'Select the format (Presentation: Max 3 speakers; Panel: Max 4 speakers, 1 moderator)')->configure()->setEmptyString('-- Select one --')->setSource(PresentationType::get()->filter('SummitID', $this->summit->ID)->exclude('Type', 'Keynotes')->map('ID', 'Type'))->end()->literal('CategoryContainer', '<div id="category_options"></div>')->dropdown('Level', 'Select the technical level of your presentation content')->configure()->setEmptyString('-- Select one --')->setSource(Presentation::create()->dbObject('Level')->enumValues())->end()->literal('AbstractHelp', '<hr/><p>YouTube and other services limit the length of your presentation\'s description. We will take the first 100 characters of your abstract to display in the YouTube description.</p>')->tinyMCEEditor('ShortDescription', 'Abstract (1000 chars)')->configure()->setRows(20)->setColumns(8)->end()->tinyMCEEditor('ProblemAddressed', 'What is the problem or use case you’re addressing in this session? (1000 chars)')->configure()->setRows(20)->setColumns(8)->end()->tinyMCEEditor('AttendeesExpectedLearnt', 'What should attendees expect to learn? (1000 chars)')->configure()->setRows(20)->setColumns(8)->end()->literal('PresentationMaterialsTitle', '<h3>Please provide any relevant links to additional information, such as code repositories, case studies, papers, blog posts etc. (Up to 5 links)</h3>')->text('PresentationLink[1]', '#1')->text('PresentationLink[2]', '#2')->text('PresentationLink[3]', '#3')->text('PresentationLink[4]', '#4')->text('PresentationLink[5]', '#5')->hidden('ID', 'ID')->hidden('SummitID', '', $this->summit->ID)->hidden('CategoryIDbis', '');
     $CategoryGroupField = new CategoryGroupField('GroupID', 'Select the <a href="' . $this->summit->Link . 'categories" target="_blank">Summit Category</a> of your presentation');
     $CategoryGroupField->setSource($category_groups_map);
     $fields->insertAfter($CategoryGroupField, 'TypeID');
     return $fields;
 }
    /**
     * @param ISummit $summit
     * @param string $term
     * @return ISummitEvent[]
     */
    public function searchBySummitTermAndHasRSVP(ISummit $summit, $term)
    {
        $events = array();
        $summit_id = $summit->getIdentifier();
        $sql_events = <<<SQL
        SELECT * FROM (
            SELECT DISTINCT E.* FROM SummitEvent E
                WHERE E.SummitID = {$summit_id} AND E.Published = 1 AND E.RSVPTemplateID > 0
                AND (Title LIKE '%{$term}%' OR E.ID = '{$term}')
            UNION SELECT DISTINCT E.* FROM SummitEvent E
                WHERE E.SummitID = {$summit_id} AND E.Published = 1 AND E.RSVPTemplateID > 0
                AND EXISTS
                (
                    SELECT T.ID FROM Tag T INNER JOIN SummitEvent_Tags ET ON ET.TagID = T.ID
                    WHERE ET.SummitEventID = E.ID AND T.Tag LIKE '%{$term}%'
                )
            UNION SELECT DISTINCT E.* FROM SummitEvent E
                WHERE E.SummitID = {$summit_id} AND E.Published = 1 AND E.RSVPTemplateID > 0
                AND EXISTS
                (
                    SELECT P.ID FROM Presentation P
                    LEFT JOIN PresentationCategory PC ON PC.ID = P.CategoryID
                    WHERE  P.ID = E.ID AND PC.Title LIKE '%{$term}%'
                )
            UNION SELECT DISTINCT E.* FROM SummitEvent E LEFT JOIN SummitEventType ET ON ET.ID = E.TypeID
                WHERE E.SummitID = {$summit_id} AND E.Published = 1 AND E.RSVPTemplateID > 0
                AND ET.Type LIKE '%{$term}%'
            UNION SELECT DISTINCT E.* FROM SummitEvent E
                WHERE E.SummitID = {$summit_id} AND E.Published = 1 AND E.RSVPTemplateID > 0
                AND EXISTS
                (
                    SELECT P.ID FROM Presentation P
                    WHERE  P.ID = E.ID AND P.Level LIKE '%{$term}%'
                )
            UNION SELECT DISTINCT E.* FROM SummitEvent E
                WHERE E.SummitID = {$summit_id} AND E.Published = 1 AND E.RSVPTemplateID > 0
                AND EXISTS
                (
                    SELECT P.ID, CONCAT(S.FirstName,' ',S.LastName) AS SpeakerFullName  From Presentation P
                    INNER JOIN Presentation_Speakers PS ON PS.PresentationID = P.ID
                    INNER JOIN PresentationSpeaker S ON S.ID = PS.PresentationSpeakerID
                    WHERE P.ID = E.ID
                    HAVING
                        SpeakerFullName LIKE '%{$term}%'
                        OR SOUNDEX(SpeakerFullName) = SOUNDEX('{$term}')
                )
            UNION SELECT DISTINCT E.* FROM SummitEvent E
                WHERE E.SummitID = {$summit_id} AND E.Published = 1 AND E.RSVPTemplateID > 0
                AND EXISTS
                (
                    SELECT P.ID, CONCAT(S.FirstName,' ',S.LastName) AS SpeakerFullName  From Presentation P
                    INNER JOIN Presentation_Speakers PS ON PS.PresentationID = P.ID
                    INNER JOIN PresentationSpeaker S ON S.ID = PS.PresentationSpeakerID
                    WHERE P.ID = E.ID AND S.ID = '{$term}'
                )
SQL;
        foreach (DB::query($sql_events . ") AS Q1 ORDER BY StartDate ASC, EndDate ASC ;") as $row) {
            $class = $row['ClassName'];
            array_push($events, new $class($row));
        }
        return $events;
    }
 /**
  * @param ISummit $summit_id
  * @param array $days
  * @param string $start_time
  * @param string $end_time
  * @param array $locations
  * @return array
  */
 public function getPublishedByTimeAndVenue(ISummit $summit, $days, $start_time, $end_time, $locations)
 {
     $where_clause = '';
     if (!empty($days)) {
         $where_clause .= "(";
         foreach ($days as $day) {
             $start_date = $summit->convertDateFromTimeZone2UTC($day . ' ' . $start_time);
             $end_date = $summit->convertDateFromTimeZone2UTC($day . ' ' . $end_time);
             $where_clause .= "(StartDate < '{$end_date}' AND EndDate > '{$start_date}') OR ";
         }
         $where_clause = substr($where_clause, 0, -4) . ")";
     }
     if (!empty($locations)) {
         $locations_string = implode(',', $locations);
         $where_clause .= " AND LocationID IN ({$locations_string})";
     }
     $events = SummitEvent::get()->filter(array('SummitID' => $summit->getIdentifier(), 'Published' => 1))->where($where_clause)->sort('LocationID,StartDate')->toArray();
     return $events;
 }
Example #10
0
 /**
  * @param ISummit $summit
  * @param array $data
  */
 public function updateBulkPresentations(ISummit $summit, array $data)
 {
     $event_repository = $this->event_repository;
     $this->tx_service->transaction(function () use($summit, $data, $event_repository) {
         foreach ($data as $presentation) {
             $event = $event_repository->getById($presentation['id']);
             if (is_null($event)) {
                 throw new NotFoundEntityException('SummitEvent');
             }
             if (intval($event->SummitID) !== $summit->getIdentifier()) {
                 throw new EntityValidationException('SummitEvent does not belong to Summit!');
             }
             $event->Title = $presentation['title'];
             $event->write();
         }
     });
 }
 /**
  * @param ISummit $current_summit
  * @param int $batch_size
  * @return void
  */
 public function send(ISummit $current_summit, $batch_size)
 {
     $speaker_repository = $this->speaker_repository;
     $sender_factory = $this->sender_breakout_factory;
     $promo_code_repository = $this->promo_code_repository;
     $batch_repository = $this->batch_repository;
     $batch_task_factory = $this->batch_task_factory;
     $not_allowed_categories = array('Working Groups', 'Birds of a Feather');
     return $this->tx_manager->transaction(function () use($current_summit, $batch_size, $speaker_repository, $sender_factory, $promo_code_repository, $batch_repository, $batch_task_factory, $not_allowed_categories) {
         $summit_id = $current_summit->getIdentifier();
         try {
             $page = 1;
             $page_size = $batch_size;
             $task = $batch_repository->findByName(self::TaskName . $summit_id);
             if (is_null($task)) {
                 //create task
                 $task = $batch_task_factory->buildBatchTask(self::TaskName . $summit_id, 0, $page);
                 $batch_repository->add($task);
             }
             $page = $task->getCurrentPage();
             echo "Processing Page " . $page . PHP_EOL;
             list($page, $page_size, $count, $speakers) = $speaker_repository->searchBySummitSchedulePaginated($current_summit, $page, $page_size);
             $speakers_notified = 0;
             foreach ($speakers as $speaker) {
                 if (!$speaker instanceof IPresentationSpeaker) {
                     continue;
                 }
                 // we need an email for this speaker ...
                 $email = $speaker->getEmail();
                 if (empty($email)) {
                     continue;
                 }
                 if ($speaker->breakoutEmailAlreadySent($current_summit->ID)) {
                     continue;
                 }
                 /**
                  * Rules are:
                  * All speakers that are in a Track, besides BoF and Working Groups
                  * Send the code they already received, unless they are new and don’t have a code. Then they get a new one.
                  * Send the custom registration link to say they’re coming to the summit and leave their onsite phone
                  * If the user is already registered, we shouldn't send their code again:
                  * they still need the email, just not the part with the code. Probably a slightly altered verbiage as well
                  */
                 $code = null;
                 $presentations = $speaker->AllPublishedPresentations($current_summit->getIdentifier());
                 if (intval($presentations->Count()) === 1) {
                     if (in_array($presentations->first()->Category()->Title, $not_allowed_categories)) {
                         continue;
                     }
                 }
                 $sender_service = $sender_factory->build($current_summit, $speaker);
                 if (is_null($sender_service)) {
                     continue;
                 }
                 $params = array('Speaker' => $speaker, 'Summit' => $current_summit);
                 if (!$speaker->hasConfirmedAssistanceFor($current_summit->getIdentifier())) {
                     if (!$speaker->hasSummitPromoCode($current_summit->getIdentifier())) {
                         $code = $promo_code_repository->getNextAvailableByType($current_summit, ISpeakerSummitRegistrationPromoCode::TypeAccepted, $batch_size);
                         if (is_null($code)) {
                             throw new Exception('not available promo code!!!');
                         }
                         $speaker->registerSummitPromoCode($code);
                         $code->write();
                     }
                     $params['PromoCode'] = $speaker->getSummitPromoCode($current_summit->getIdentifier());
                 }
                 echo sprintf("sending email to %s", $speaker->getEmail()) . PHP_EOL;
                 $sender_service->send($params);
                 ++$speakers_notified;
             }
             $task->updatePage($count, $page_size);
             $task->write();
             return $speakers_notified;
         } catch (Exception $ex) {
             SS_Log::log($ex->getMessage(), SS_Log::ERR);
             echo $ex->getMessage() . PHP_EOL;
             throw $ex;
         }
     });
 }
 /**
  * @param ISummit $summit
  * @param Member $creator
  * @param array $data
  * @return IPresentation
  */
 public function registerPresentationOn(ISummit $summit, Member $creator, array $data)
 {
     return $this->tx_manager->transaction(function () use($summit, $creator, $data) {
         $speaker = $creator->getSpeakerProfile();
         $presentation = Presentation::create();
         $presentation->Title = trim($data['Title']);
         $presentation->TypeID = intval($data['TypeID']);
         $presentation->Level = trim($data['Level']);
         $presentation->ShortDescription = trim($data['ShortDescription']);
         $presentation->ProblemAddressed = trim($data['ProblemAddressed']);
         $presentation->AttendeesExpectedLearnt = trim($data['AttendeesExpectedLearnt']);
         $presentation->CategoryID = intval(trim($data['CategoryID']));
         if (intval($presentation->CategoryID) > 0) {
             $category = PresentationCategory::get()->byID($presentation->CategoryID);
             if (is_null($category)) {
                 throw new NotFoundEntityException('category not found!.');
             }
             $limit = $this->getSubmissionLimitFor($speaker, $category);
             $count = $summit->isPublicCategory($category) ? intval($speaker->getPublicCategoryPresentationsBySummit($summit)->count()) + intval($speaker->getPublicCategoryOwnedPresentationsBySummit($summit)->count()) : intval($speaker->getPrivateCategoryPresentationsBySummit($summit, $summit->getPrivateGroupFor($category))->count()) + intval($speaker->getPrivateCategoryOwnedPresentationsBySummit($summit, $summit->getPrivateGroupFor($category))->count());
             if ($count >= $limit) {
                 throw new EntityValidationException(sprintf('*You reached the limit (%s) of presentations.', $limit));
             }
         }
         if (isset($data['OtherTopic'])) {
             $presentation->OtherTopic = trim($data['OtherTopic']);
         }
         $presentation->SummitID = $summit->getIdentifier();
         $presentation->CreatorID = $creator->ID;
         $presentation->Progress = Presentation::PHASE_SUMMARY;
         $presentation->write();
         if (isset($data["PresentationLink"])) {
             foreach ($data["PresentationLink"] as $id => $val) {
                 if (empty($val)) {
                     continue;
                 }
                 $presentation->Materials()->add(PresentationLink::create(array('Name' => trim($val), 'Link' => trim($val))));
             }
         }
         $extra_questions = $presentation->Category()->Exists() ? $presentation->Category()->ExtraQuestions() : array();
         foreach ($extra_questions as $question) {
             if (!isset($data[$question->Name])) {
                 continue;
             }
             $answer_value = $data[$question->Name];
             if (empty($answer_value)) {
                 continue;
             }
             if (!($answer = $presentation->findAnswerByQuestion($question))) {
                 $answer = new TrackAnswer();
             }
             if (is_array($answer_value)) {
                 $answer_value = str_replace('{comma}', ',', $answer_value);
                 $answer->Value = implode(',', $answer_value);
             } else {
                 $answer->Value = $answer_value;
             }
             $answer->QuestionID = $question->getIdentifier();
             $answer->write();
             $presentation->ExtraAnswers()->add($answer);
         }
         return $presentation;
     });
 }
 /**
  * @param ISummit $summit
  * @param int $page
  * @return mixed
  */
 public function getOrdersBySummit(ISummit $summit, $page = 1)
 {
     $event_id = $summit->getExternalEventId();
     $url = sprintf('%s/events/%s/orders', self::BaseUrl, $event_id);
     return $this->getEntity($url, ['expand' => 'attendees', 'status' => 'active', 'page' => intval($page)]);
 }
 /**
  * @param ISummit $summit
  * @param int $eb_attendee_id
  * @param int $member_id
  * @return ISummitAttendee
  */
 public function matchEventbriteAttendee(ISummit $summit, $eb_attendee_id, $member_id)
 {
     $attendee_repository = $this->attendee_repository;
     $eventbrite_attendee_repository = new SapphireEventbriteAttendeeRepository();
     $member_repository = $this->member_repository;
     return $this->tx_service->transaction(function () use($summit, $eb_attendee_id, $member_id, $attendee_repository, $eventbrite_attendee_repository, $member_repository) {
         $eb_attendee = $eventbrite_attendee_repository->getByAttendeeId($eb_attendee_id);
         if (is_null($eb_attendee)) {
             throw new NotFoundEntityException('Attendee', sprintf(' id %s', $eb_attendee_id));
         }
         $member = $member_repository->getById($member_id);
         if (is_null($member)) {
             throw new NotFoundEntityException('Member', sprintf(' id %s', $member_id));
         }
         $attendee = $attendee_repository->getByMemberAndSummit($member_id, $summit->getIdentifier());
         if (!$attendee) {
             $attendee = new SummitAttendee();
             $attendee->MemberID = $member_id;
             $attendee->SummitID = $summit->getIdentifier();
             $attendee->write();
         }
         list($eb_attendees, $count) = $eventbrite_attendee_repository->getByEmail($eb_attendee->Email);
         foreach ($eb_attendees as $eb_ticket) {
             $attendee_ticket = SummitAttendeeTicket::get()->where("ExternalAttendeeId = " . $eb_ticket->ExternalAttendeeId)->first();
             if (!$attendee_ticket) {
                 $attendee_ticket = new SummitAttendeeTicket();
                 $ticket_type = SummitTicketType::get()->where("ExternalId = " . $eb_ticket->ExternalTicketClassId)->first();
                 $external_event = EventbriteEvent::get()->where("ID = " . $eb_ticket->EventbriteOrderId)->first();
                 $attendee_ticket->ExternalOrderId = $external_event->ExternalOrderId;
                 $attendee_ticket->ExternalAttendeeId = $eb_ticket->ExternalAttendeeId;
                 $attendee_ticket->TicketTypeID = $ticket_type ? $ticket_type->ID : 0;
             }
             $attendee_ticket->OwnerID = $attendee->ID;
             $attendee_ticket->write();
         }
         return $attendee;
     });
 }
Example #15
0
 protected function getSummitFields(ISummit $summit)
 {
     $fields = FieldList::create(TextField::create('Name')->setAttribute('autofocus', 'TRUE'), TextField::create('SummitBeginDate'), TextField::create('SummitEndDate'), DropdownField::create('EventTypes', '', $summit->getEventTypes()->map("Type"))->setAttribute('data-role', 'tagsinput')->setAttribute('multiple', 'multiple'));
     return $fields;
 }
 /**
  * @param $promo_code_value
  * @param ISummit $summit
  * @return ISpeakerSummitRegistrationPromoCode
  * @throws EntityValidationException
  * @throws ValidationException
  */
 public function registerSummitPromoCodeByValue($promo_code_value, ISummit $summit)
 {
     // check if we have an assigned one already
     $old_code = SpeakerSummitRegistrationPromoCode::get()->filter(['SummitID' => $summit->getIdentifier(), 'SpeakerID' => $this->ID])->first();
     // we are trying to update the promo code with another one ....
     if ($old_code && $promo_code_value !== $old_code->Code) {
         throw new EntityValidationException(sprintf('speaker has already assigned to another registration code (%s)', $old_code->Code));
     }
     //we already have the same code ...
     if ($old_code) {
         return $old_code;
     }
     // check if the promo code already exists and assigned to another user
     $existent_code = SpeakerSummitRegistrationPromoCode::get()->filter(['Code' => $promo_code_value, 'SummitID' => $summit->getIdentifier(), 'SpeakerID:ExactMatch:not' => 0])->first();
     if ($existent_code) {
         throw new EntityValidationException(sprintf('there is another speaker with that code for this summit (%s)', $promo_code_value));
     }
     // check if promo code exists and its not assigned ...
     $code = SpeakerSummitRegistrationPromoCode::get()->filter(['Code' => $promo_code_value, 'SummitID' => $summit->getIdentifier(), 'SpeakerID' => 0])->first();
     if (!$code) {
         //create it
         $code = SpeakerSummitRegistrationPromoCode::create();
         $code->SummitID = $summit->getIdentifier();
         $code->Code = $promo_code_value;
         $code->write();
     }
     $this->registerSummitPromoCode($code);
     $code->write();
     return $code;
 }
Example #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;
     });
 }
 /**
  * @param ISummit $current_summit
  * @param int $batch_size
  * @return void
  */
 public function sendModerators(ISummit $current_summit, $batch_size)
 {
     $speaker_repository = $this->speaker_repository;
     $sender_factory = $this->sender_factory;
     $promo_code_repository = $this->promo_code_repository;
     $batch_repository = $this->batch_repository;
     $batch_task_factory = $this->batch_task_factory;
     return $this->tx_manager->transaction(function () use($current_summit, $batch_size, $speaker_repository, $sender_factory, $promo_code_repository, $batch_repository, $batch_task_factory) {
         try {
             $page = 1;
             $page_size = $batch_size;
             $task = $batch_repository->findByName(self::TaskName . '_MODERATORS_' . $current_summit->getIdentifier());
             if (is_null($task)) {
                 //create task
                 $task = $batch_task_factory->buildBatchTask(self::TaskName . '_MODERATORS_' . $current_summit->getIdentifier(), 0, $page);
                 $batch_repository->add($task);
             }
             $page = $task->getCurrentPage();
             echo "Processing Page " . $page . PHP_EOL;
             // get speakers with not email sent for this current summit
             list($page, $page_size, $count, $moderators) = $speaker_repository->searchModeratorsBySummitPaginated($current_summit, $page, $page_size);
             $speakers_notified = 0;
             foreach ($moderators as $moderator) {
                 if (!$moderator instanceof IPresentationSpeaker) {
                     continue;
                 }
                 // we need an email for this speaker ...
                 $email = $moderator->getEmail();
                 if (empty($email)) {
                     continue;
                 }
                 if ($moderator->announcementEmailAlreadySent($current_summit->ID)) {
                     continue;
                 }
                 $sender_service = $sender_factory->build($current_summit, $moderator, IPresentationSpeaker::RoleModerator);
                 // get registration code
                 if (is_null($sender_service)) {
                     continue;
                 }
                 $code = null;
                 if ($moderator->hasPublishedPresentations($current_summit->getIdentifier(), IPresentationSpeaker::RoleModerator)) {
                     $code = $promo_code_repository->getNextAvailableByType($current_summit, ISpeakerSummitRegistrationPromoCode::TypeAccepted, $batch_size);
                     if (is_null($code)) {
                         throw new Exception('not available promo code!!!');
                     }
                 } else {
                     if ($moderator->hasAlternatePresentations($current_summit->getIdentifier(), IPresentationSpeaker::RoleModerator)) {
                         $code = $promo_code_repository->getNextAvailableByType($current_summit, ISpeakerSummitRegistrationPromoCode::TypeAlternate, $batch_size);
                         if (is_null($code)) {
                             throw new Exception('not available alternate promo code!!!');
                         }
                     }
                 }
                 $params = array('Speaker' => $moderator, 'Summit' => $current_summit, "Role" => IPresentationSpeaker::RoleModerator);
                 if (!is_null($code)) {
                     $moderator->registerSummitPromoCode($code);
                     $code->setEmailSent(true);
                     $code->write();
                     $params['PromoCode'] = $code;
                 }
                 $sender_service->send($params);
                 ++$speakers_notified;
             }
             $task->updatePage($count, $page_size);
             $task->write();
             return $speakers_notified;
         } catch (Exception $ex) {
             SS_Log::log($ex->getMessage(), SS_Log::ERR);
             throw $ex;
         }
     });
 }