/**
  * @param string $promo_code_type
  * @param int $batch_size
  * @return ISpeakerSummitRegistrationPromoCode
  */
 public function getNextAvailableByType($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('OwnerID', 0));
                 $query->addAndCondition(QueryCriteria::equal('SpeakerID', 0));
                 $query->addAndCondition(QueryCriteria::equal('SummitID', Summit::get_active()->ID));
                 $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('OwnerID', 0));
                 $query->addAndCondition(QueryCriteria::equal('SpeakerID', 0));
                 $query->addAndCondition(QueryCriteria::equal('SummitID', Summit::get_active()->ID));
                 $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;
 }
 public function handleGetAllPresentations(SS_HTTPRequest $r)
 {
     $limit = $r->getVar('limit') ?: 50;
     if ($limit > 50) {
         $limit = 50;
     }
     $start = $r->getVar('page') ?: 0;
     $presentations = Member::currentUser() ? Member::currentUser()->getRandomisedPresentations() : Presentation::get()->filter(array('SummitEvent.SummitID' => Summit::get_active()->ID));
     if ($r->getVar('category')) {
         $presentations = $presentations->filter('CategoryID', (int) $r->getVar('category'));
     }
     if ($r->getVar('keyword')) {
         $k = $r->getVar('keyword');
         $presentations = $presentations->filterAny(array('Title:PartialMatch' => $k, 'Description:PartialMatch' => $k, 'Speakers.FirstName:PartialMatch' => $k, 'Speakers.LastName:PartialMatch' => $k));
     }
     if ($r->getVar('voted') == "true") {
         $presentations = $presentations->leftJoin("PresentationVote", "PresentationVote.PresentationID = Presentation.ID")->where("IFNULL(PresentationVote.MemberID,0) = " . Member::currentUserID());
     }
     if ($r->getVar('voted') == "false") {
         $presentations = $presentations->leftJoin("PresentationVote", "PresentationVote.PresentationID = Presentation.ID")->where("IFNULL(PresentationVote.MemberID,0) != " . Member::currentUserID());
     }
     $count = $presentations->count();
     $presentations = $presentations->limit($limit, $start * $limit);
     $data = array('results' => array(), 'has_more' => $count > $limit * ($start + 1), 'total' => $count, 'remaining' => $count - $limit * ($start + 1));
     foreach ($presentations as $p) {
         $data['results'][] = array('id' => $p->ID, 'title' => $p->Title, 'user_vote' => $p->getUserVote() ? $p->getUserVote()->Vote : null);
     }
     return (new SS_HTTPResponse(Convert::array2json($data), 200))->addHeader('Content-Type', 'application/json');
 }
 /**
  * @return void
  */
 public function run()
 {
     try {
         $init_time = time();
         $processed_events = 0;
         $events = array();
         $current_summit = Summit::get_active();
         if ($current_summit) {
             $events = $current_summit->getSchedule();
         }
         foreach ($events as $event) {
             $processed_events++;
             $rate_sum = 0;
             $rate_count = 0;
             foreach ($event->Feedback as $feedback) {
                 $rate_count++;
                 $rate_sum = $rate_sum + $feedback->Rate;
             }
             $rate_avg = $rate_count > 0 ? $rate_sum / $rate_count : 0;
             try {
                 $event->setAvgRate(round($rate_avg, 2));
                 $event->write(true);
             } catch (Exception $ex) {
                 SS_Log::log($ex, SS_Log::ERR);
                 echo $ex->getMessage();
             }
         }
         $finish_time = time() - $init_time;
         echo 'processed events ' . $processed_events . ' - time elapsed : ' . $finish_time . ' seconds.';
     } catch (Exception $ex) {
         SS_Log::log($ex->getMessage(), SS_Log::ERR);
     }
 }
 /**
  * @param IPresentationSpeaker $speaker
  * @return PresentationSpeakerAcceptedAnnouncementEmailSender
  * @throws Exception
  */
 public function build(IPresentationSpeaker $speaker)
 {
     $summit = Summit::get_active();
     $has_approved = $speaker->hasApprovedPresentations($summit->ID);
     $has_rejected = $speaker->hasRejectedPresentations($summit->ID);
     $has_alternate = $speaker->hasAlternatePresentations($summit->ID);
     if ($has_approved && !$has_rejected && !$has_alternate) {
         return new PresentationSpeakerAcceptedAnnouncementEmailSender();
     }
     if (!$has_approved && !$has_rejected && $has_alternate) {
         return new PresentationSpeakerAlternateAnnouncementEmailSender();
     }
     if (!$has_approved && $has_rejected && !$has_alternate) {
         return new PresentationSpeakerRejectedAnnouncementEmailSender();
     }
     if ($has_approved && !$has_rejected && $has_alternate) {
         return new PresentationSpeakerAcceptedAlternateAnnouncementEmailSender();
     }
     if ($has_approved && $has_rejected && !$has_alternate) {
         return new PresentationSpeakerAcceptedRejectedAnnouncementEmailSender();
     }
     if (!$has_approved && $has_rejected && $has_alternate) {
         return new PresentationSpeakerAlternateRejectedAnnouncementEmailSender();
     }
     if ($has_approved && $has_rejected && $has_alternate) {
         return new PresentationSpeakerAcceptedAlternateAnnouncementEmailSender();
     }
     return null;
 }
예제 #5
0
 /**
  * Check for auth tokens
  * @return mixed
  */
 public function init()
 {
     parent::init();
     if (!Summit::get_active()->isInDB()) {
         return $this->httpError(404, 'There is no active summit');
     }
     /**
      * On the existing tokenauthentication system, this is a fairly trivialmatter, and I'm not so sure it's anything to navigate right now.
      * Thiswas implemented to provide the video upload people a simple API foradding videos. It's a very specific use c
      * ase, and general users shouldnot be using it. If they can and they are, then that needs to bechanged.
      */
     $result = $this->checkAuthenticationToken();
     if (!$result && !Member::currentUser()) {
         //check if speaker registration token is present..
         $speaker_registration_token = $this->request->getVar(SpeakerRegistrationRequest::ConfirmationTokenParamName);
         if (!is_null($speaker_registration_token)) {
             $request = $this->speaker_registration_request_repository->getByConfirmationToken($speaker_registration_token);
             if (is_null($request) || $request->alreadyConfirmed()) {
                 return SummitSecurity::permission_failure($this);
             }
             // redirect to register member speaker
             $url = Controller::join_links(Director::baseURL(), 'summit-login', 'registration');
             return $this->redirect($url . '?BackURL=' . urlencode($this->request->getURL()) . '&' . SpeakerRegistrationRequest::ConfirmationTokenParamName . '=' . $speaker_registration_token);
         }
         return SummitSecurity::permission_failure($this);
     }
     $speaker = Member::currentUser()->getSpeakerProfile();
     if (!$speaker) {
         $speaker = PresentationSpeaker::create(array('MemberID' => Member::currentUserID(), 'FirstName' => Member::currentUser()->FirstName, 'LastName' => Member::currentUser()->Surname));
         $speaker->write();
     }
 }
 /**
  * @param IEntity $subject
  * @throws InvalidArgumentException
  * @return void
  */
 public function send(IEntity $subject)
 {
     if (!$subject instanceof IPresentationSpeaker) {
         return;
     }
     $subject->registerAnnouncementEmailTypeSent(IPresentationSpeaker::AnnouncementEmailAlternate);
     $email = EmailFactory::getInstance()->buildEmail('*****@*****.**', $subject->getEmail());
     $email->setUserTemplate('presentation-speaker-alternate-only')->populateTemplate(array('Speaker' => $subject, 'ConfirmationLink' => $subject->getSpeakerConfirmationLink(), 'ScheduleMainPageLink' => Summit::get_active()->SchedUrl, 'PromoCode' => $subject->getSummitPromoCode()->getCode()))->send();
 }
예제 #7
0
 protected function getPresentationFields()
 {
     $categorySource = Summit::get_active()->Categories()->map('ID', 'FormattedTitleAndDescription')->toArray();
     $categorySource['other'] = '<h4 class="category-label">Other topic...</h4>';
     $fields = FieldList::create()->text('Title', 'Proposed Presentation Title')->configure()->setAttribute('autofocus', 'TRUE')->end()->dropdown('Level', 'Please select the level of your presentation content')->configure()->setEmptyString('-- Select one --')->setSource(Presentation::create()->dbObject('Level')->enumValues())->end()->tinyMCEEditor('Description', 'Abstract')->configure()->setRows(20)->end()->literal('ShortDescriptionHelp', '<hr/><p>YouTube and other services limit the length of your presentation\'s description. Please provide a shorter, YouTube-friendly summary below.</p>')->literal('ShortDescriptionWordCount', '<p id="word-count"></p>')->tinyMCEEditor('ShortDescription', 'Short Description (450 Word Max)')->configure()->setRows(7)->setWordCount(450)->end()->literal('HR', '<hr/>')->optionset('CategoryID', 'What is the general topic of the presentation?')->configure()->setSource($categorySource)->end()->text('OtherTopic', 'Other topic (if one above does not match)')->configure()->displayIf('CategoryID')->isEqualTo('other')->end()->end()->literal('TagHelp', '<p>You can optionally add tags help attendees find presentations that interest them. Examples: <i>nova, ubuntu, ldap.</i></p>')->bootstrapTag('Tags', 'Presentation Tags (Optional)')->configure()->setLabelField('Tag')->setSource(Tag::get())->setPrefetch(Tag::get()->leftJoin('Presentation_Tags', 'TagID = Tag.ID')->sort('COUNT(Tag.ID)', 'DESC')->limit(10)->alterDataQuery(function ($query) {
         $query->groupby('Tag.ID');
     }))->setFreeInput(true)->end();
     return $fields;
 }
 function up()
 {
     echo "Starting Migration Proc ...<BR>";
     //check if migration already had ran ...
     $migration = Migration::get()->filter('Name', $this->title)->first();
     $promo_code_type = isset($_REQUEST['promo_code_type']) ? intval($_REQUEST['promo_code_type']) : null;
     $promo_code_file = isset($_REQUEST['promo_code_file']) ? $_REQUEST['promo_code_file'] : null;
     if (is_null($promo_code_type)) {
         echo 'ERROR - promo_code_type param missing!';
         exit;
     }
     if (is_null($promo_code_file)) {
         echo 'ERROR - promo_code_file param missing!';
         exit;
     }
     $base_path = ASSETS_PATH;
     $file_path = $base_path . '/' . $promo_code_file;
     $type = explode(".", $file_path);
     if (!strtolower(end($type)) == 'csv') {
         echo 'ERROR - file hast not a csv extension!';
         exit;
     }
     if (!file_exists($file_path)) {
         echo sprintf('ERROR - %s file does not exists!', $file_path);
         exit;
     }
     $reader = new CSVReader($file_path);
     $row = 0;
     do {
         $line = $reader->getLine();
         if ($line) {
             ++$row;
             if ($row === 1) {
                 continue;
             }
             // skip header ...
             switch ($promo_code_type) {
                 case 1:
                     $type = 'ACCEPTED';
                     break;
                 case 2:
                     $type = 'ALTERNATE';
                     break;
             }
             $code = new SpeakerSummitRegistrationPromoCode();
             $code->Code = $line[0];
             $code->Type = $type;
             $code->SummitID = Summit::get_active()->ID;
             try {
                 $code->write();
             } catch (Exception $ex) {
                 SS_Log::log($ex->getMessage(), SS_Log::ERR);
             }
         }
     } while ($line);
     echo "Ending  Migration Proc ...<BR>";
 }
 /**
  * @param $subject
  * @throws InvalidArgumentException
  * @return void
  */
 public function send($subject)
 {
     $email_template = PermamailTemplate::get_by_identifier(SUMMIT_ATTENDEE_CREATE_MEMBERSHIP_INVITATION_EMAIL_TEMPLATE);
     if (is_null($email_template)) {
         return;
     }
     $email = EmailFactory::getInstance()->buildEmail(null, $subject);
     $email->setUserTemplate('summit-attendee-create-membership-invitation')->populateTemplate(array('Email' => $subject, 'Summit' => Summit::get_active()))->send();
 }
 /**
  * @param mixed $subject
  * @throws InvalidArgumentException
  * @return void
  */
 public function send($subject)
 {
     if (!$subject instanceof IPresentationSpeaker) {
         return;
     }
     $summit = Summit::get_active();
     $subject->registerAnnouncementEmailTypeSent(IPresentationSpeaker::AnnouncementEmailRejected, $summit->ID);
     $email = EmailFactory::getInstance()->buildEmail('*****@*****.**', $subject->getEmail());
     $email->setUserTemplate('presentation-speaker-rejected-only')->populateTemplate(array('Speaker' => $subject))->send();
 }
예제 #11
0
 function trackChairCheck()
 {
     $member = Member::currentUser();
     $chair = new SummitTrackChair();
     if ($member) {
         $chair = SummitTrackChair::get()->filter(array('MemberID' => $member->ID, 'SummitID' => Summit::get_active()->ID));
     }
     if ($chair->exists() || Permission::check('ADMIN')) {
         return true;
     }
 }
 /**
  * @param $subject
  * @throws InvalidArgumentException
  * @return void
  */
 public function send($subject)
 {
     if (!$subject instanceof ISummitAttendee) {
         return;
     }
     $email_template = PermamailTemplate::get_by_identifier(SUMMIT_ATTENDEE_CREATED_EMAIL_TEMPLATE);
     if (is_null($email_template)) {
         return;
     }
     $email = EmailFactory::getInstance()->buildEmail(null, $subject->getMember()->getEmail());
     $email->setUserTemplate('summit-attendee-created')->populateTemplate(array('Attendee' => $subject, 'Summit' => Summit::get_active()))->send();
 }
예제 #13
0
 function __construct($controller, $name, $speakerHash)
 {
     $activeSummit = Summit::get_active();
     $PhoneField = new TextField('OnSitePhoneNumber', 'Your Onsite Phone Number for ' . $activeSummit->Title . ':');
     $RegisteredField = new CheckboxField('RegisteredForSummit', 'I have registered for the summit using the confirmation code sent in the email.');
     // Speaker Hash Field
     $SpeakerHashField = new HiddenField('speakerHash', "speakerHash", $speakerHash);
     $fields = new FieldList($PhoneField, $RegisteredField, $SpeakerHashField);
     $submitButton = new FormAction('doSavePhoneNumber', 'Save');
     $actions = new FieldList($submitButton);
     $validator = new RequiredFields('OnSitePhoneNumber');
     parent::__construct($controller, $name, $fields, $actions, $validator);
 }
 /**
  *
  */
 public function run()
 {
     SapphireTransactionManager::getInstance()->transaction(function () {
         $unprocessedVideos = PresentationVideo::get()->filter(['Processed' => false])->limit(50);
         if (!$unprocessedVideos->exists()) {
             return;
         }
         $summit = Summit::get_active();
         $dateUTC = $summit->convertDateFromTimeZone2UTC(SS_DateTime::now()->Rfc2822());
         $dateUTCTimestamp = strtotime($dateUTC);
         $maxAge = SummitVideoApp::config()->abandon_unprocessed_videos_after;
         $ids = [];
         foreach ($unprocessedVideos as $video) {
             $age = $dateUTCTimestamp - strtotime($video->DateUploaded);
             if ($age > $maxAge) {
                 SS_Log::log("Video {$video->Title} has been unprocessed for a long time. ({$age} seconds). It should be deleted.", SS_Log::WARN);
                 continue;
             }
             $ids[] = $video->YouTubeID;
         }
         try {
             $response = $this->api->getVideoStatusById($ids);
         } catch (\Exception $e) {
             SS_Log::log("YouTube check for status failed" . $e->getMessage(), SS_Log::ERR);
             return;
         }
         $body = $response->getBody()->getContents();
         $data = Convert::json2array($body);
         $items = $data['items'];
         if (empty($items)) {
             echo "No videos are marked as processing. Exiting.\n";
             return;
         }
         foreach ($items as $item) {
             $currentStatus = $item['status']['uploadStatus'];
             if ($currentStatus == 'processed') {
                 $video = PresentationVideo::get()->filter(['YouTubeID' => $item['id']])->first();
                 if (!$video) {
                     SS_Log::log("Tried to update processing status for " . $item['id'] . " but no PresentationVideo with that YouTubeID was found.", SS_Log::WARN);
                     continue;
                 }
                 $video->Processed = true;
                 $video->write();
                 $this->videosUpdated++;
             }
         }
         echo "{$this->videosUpdated} videos updated.\n";
     });
 }
 public function getCMSFields()
 {
     $f = new FieldList($rootTab = new TabSet("Root", $tabMain = new Tab('Main')));
     $f->addFieldToTab('Root.Main', new HiddenField('OwnerID', 'OwnerID'));
     $f->addFieldsToTab('Root.Main', new TextField('ExternalOrderId', '#Order'));
     $f->addFieldsToTab('Root.Main', new TextField('ExternalAttendeeId', '#Attendee'));
     $f->addFieldsToTab('Root.Main', $date = new DatetimeField('TicketBoughtDate', 'Bought Date'));
     $date->getDateField()->setConfig('showcalendar', true);
     $f->addFieldsToTab('Root.Main', $date = new DatetimeField('TicketChangedDate', 'Changed Date'));
     $date->getDateField()->setConfig('showcalendar', true);
     $summit_id = $_REQUEST['SummitID'];
     if (empty($summit_id)) {
         $summit_id = $this->Owner()->exists() ? $this->Owner()->SummitID : Summit::get_active()->ID;
     }
     $f->addFieldsToTab('Root.Main', $ddl = new DropdownField('TicketTypeID', 'Ticket Type', SummitTicketType::get()->filter('SummitID', $summit_id)->map("ID", "Name")));
     return $f;
 }
예제 #16
0
 public function ExportNoticeEmails()
 {
     $speakers = Summit::get_active()->Speakers();
     $filepath = $_SERVER['DOCUMENT_ROOT'] . '/assets/speaker-notifications.csv';
     $fp = fopen($filepath, 'w');
     $fields = array('First_Name', 'Last_Name', 'Speaker_ID', 'Member_ID', 'Email', 'Presentation_List');
     fputcsv($fp, $fields);
     foreach ($speakers as $speaker) {
         $this->AssembleEmail($speaker, $fp);
     }
     fclose($fp);
     header("Cache-control: private");
     header("Content-type: application/force-download");
     header("Content-transfer-encoding: binary\n");
     header("Content-disposition: attachment; filename=\"speaker-notifications.csv\"");
     header("Content-Length: " . filesize($filepath));
     readfile($filepath);
 }
 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.');
     }
 }
예제 #18
0
 public static function addChair($member, $catgoryID)
 {
     $priorChair = SummitTrackChair::get()->filter('MemberID', $member->ID)->first();
     $category = PresentationCategory::get()->byID($catgoryID);
     if (!$priorChair) {
         $chair = new self();
         $chair->MemberID = $member->ID;
         $chair->SummitID = Summit::get_active()->ID;
         $chair->write();
         $chair->Categories()->add($category);
         //Find or create the 'track-chairs' group
         if (!($Group = Group::get()->filter('Code', 'track-chairs')->first())) {
             $Group = new Group();
             $Group->Code = "track-chairs";
             $Group->Title = "Track Chairs";
             $Group->Write();
             $Member->Groups()->add($Group);
         }
         //Add member to the group
         $member->Groups()->add($Group);
     } else {
         $priorChair->Categories()->add($category);
     }
 }
 function RandomPresentationID($Category = NULL)
 {
     $Result = NULL;
     $CategoryID = $Category;
     $currentMemberID = Member::currentUserID();
     $summitID = Summit::get_active()->ID;
     $presentations = Presentation::get()->where("Presentation.SummitID = {$summitID}");
     if ($CategoryID) {
         $presentations = $presentations->filter('CategoryID', $CategoryID);
     }
     if ($currentMemberID) {
         $presentations = $presentations->leftJoin("PresentationVote", "PresentationVote.PresentationID = Presentation.ID")->where("IFNULL(PresentationVote.MemberID,0) = " . Member::currentUserID());
     }
     if ($presentations->count()) {
         $Result = $presentations->first();
     }
     if ($Result) {
         return $Result->ID;
     } else {
         return 'none';
     }
 }
예제 #20
0
 public function JSONConfig()
 {
     return Convert::array2json(['baseURL' => $this->Link(), 'summitID' => Summit::get_active()->ID, 'pass_order' => SummitSelectedPresentation::config()->pass_order, 'userinfo' => ['name' => Member::currentUser()->getName(), 'email' => Member::currentUser()->Email, 'isAdmin' => Permission::check('ADMIN')]]);
 }
예제 #21
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));
 }
 /**
  * @return mixed
  */
 protected function validate()
 {
     $summit_id = null;
     if (isset($_REQUEST['SummitID'])) {
         $summit_id = $_REQUEST['SummitID'];
     }
     $valid = parent::validate();
     if (!$valid->valid() || !$summit_id) {
         return $valid;
     }
     $old_one = Summit::get_active()->Categories()->relation('TrackChairs')->filter('MemberID', $this->MemberID)->first();
     if (!$old_one) {
         return $valid->error('Already exists a track chair for this member!');
     }
     return $valid;
 }
예제 #23
0
 public function CurrentSummit()
 {
     $summit = Summit::get_active();
     return $summit->isInDB() ? $summit : false;
 }
 public function send($batch_size)
 {
     $batch_repository = $this->batch_repository;
     $batch_task_factory = $this->batch_task_factory;
     $speaker_repository = $this->speaker_repository;
     $sender_factory = $this->sender_factory;
     $promo_code_repository = $this->promo_code_repository;
     return $this->tx_manager->transaction(function () use($batch_size, $batch_repository, $speaker_repository, $batch_task_factory, $sender_factory, $promo_code_repository) {
         $task = $batch_repository->findByName(self::TaskName);
         $last_index = 0;
         $speakers = array();
         $speakers_notified = 0;
         $query = new QueryObject();
         $query->addAndCondition(QueryCriteria::equal('SummitID', Summit::get_active()->ID));
         $query->addAndCondition(QueryCriteria::equal('AnnouncementEmailTypeSent', 'NONE'));
         if ($task) {
             $last_index = $task->lastRecordProcessed();
             list($speakers, $total_size) = $speaker_repository->getAll($query, $last_index, $batch_size);
             if ($task->lastRecordProcessed() >= $total_size) {
                 $task->initialize($total_size);
             }
         } else {
             list($speakers, $total_size) = $speaker_repository->getAll($query, $last_index, $batch_size);
             $task = $batch_task_factory->buildBatchTask(self::TaskName, $total_size);
             $batch_repository->add($task);
         }
         foreach ($speakers as $speaker) {
             $task->updateLastRecord();
             if (!$speaker instanceof IPresentationSpeaker) {
                 continue;
             }
             $email = $speaker->getEmail();
             if (empty($email)) {
                 continue;
             }
             if ($speaker->announcementEmailAlreadySent()) {
                 continue;
             }
             $sender_service = $sender_factory->build($speaker);
             // get registration code
             if (is_null($sender_service)) {
                 continue;
             }
             $code = null;
             if ($speaker->hasApprovedPresentations()) {
                 $code = $promo_code_repository->getNextAvailableByType(ISpeakerSummitRegistrationPromoCode::TypeAccepted, $batch_size);
                 if (is_null($code)) {
                     throw new Exception('not available promo code!!!');
                 }
             } else {
                 if ($speaker->hasAlternatePresentations()) {
                     $code = $promo_code_repository->getNextAvailableByType(ISpeakerSummitRegistrationPromoCode::TypeAlternate, $batch_size);
                     if (is_null($code)) {
                         throw new Exception('not available alternate promo code!!!');
                     }
                 }
             }
             if (!is_null($code)) {
                 $speaker->registerSummitPromoCode($code);
             }
             $sender_service->send($speaker);
             ++$speakers_notified;
         }
         return $speakers_notified;
     });
 }
예제 #25
0
 public function handleRestoreOrders()
 {
     $activeSummit = Summit::get_active();
     $SummitCategories = DataObject::get('PresentationCategory', $activeSummit->ID);
     foreach ($SummitCategories as $Category) {
         // Grab the track chairs selections for the category
         $SelectedPresentationList = SummitSelectedPresentationList::get()->filter(array('CategoryID' => $Category->ID));
         foreach ($SelectedPresentationList as $list) {
             $selections = $list->SummitSelectedPresentations()->sort('Order', 'ASC');
             $i = 1;
             foreach ($selections as $selection) {
                 $selection->Order = $i;
                 $selection->write();
                 $i++;
             }
         }
     }
 }
 /**
  * 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();
 }
 function onAfterWrite()
 {
     parent::onAfterWrite();
     $summit = Summit::get_active();
     //update all relationships with sponsors
     foreach ($this->Companies() as $company) {
         if (isset($_REQUEST["SponsorshipType_{$company->ID}"])) {
             $type = $_REQUEST["SponsorshipType_{$company->ID}"];
             $sql = "UPDATE SummitSponsorPage_Companies SET SponsorshipType ='{$type}', SummitID = '{$summit->ID}' WHERE CompanyID={$company->ID} AND SummitSponsorPageID={$this->ID};";
             DB::query($sql);
         }
         if (isset($_REQUEST["SubmitPageUrl_{$company->ID}"])) {
             $page_url = $_REQUEST["SubmitPageUrl_{$company->ID}"];
             $sql = "UPDATE SummitSponsorPage_Companies SET SubmitPageUrl ='{$page_url}', SummitID = '{$summit->ID}' WHERE CompanyID={$company->ID} AND SummitSponsorPageID={$this->ID};";
             DB::query($sql);
         }
     }
 }
 /**
  * @param null $summit_id
  * @param string $role
  * @return ArrayList|bool
  */
 public function AlternatePresentations($summit_id = null, $role = IPresentationSpeaker::RoleSpeaker)
 {
     $alternatePresentations = new ArrayList();
     $summit = is_null($summit_id) ? Summit::get_active() : Summit::get()->byID($summit_id);
     if (is_null($summit)) {
         return false;
     }
     $presentations = $role == IPresentationSpeaker::RoleSpeaker ? $this->Presentations()->filter('SummitEvent.SummitID', $summit->ID) : Presentation::get()->filter(['SummitEvent.SummitID' => $summit->ID, 'ModeratorID' => $this->ID]);
     foreach ($presentations as $p) {
         if ($p->SelectionStatus() == IPresentation::SelectionStatus_Alternate && !$p->isPublished()) {
             $alternatePresentations->push($p);
         }
     }
     return $alternatePresentations;
 }
예제 #29
0
 public function AppConfig()
 {
     return Convert::array2json(array('baseUrl' => Director::baseURL(), 'appPath' => 'vote-for-speakers', 'summitID' => Summit::get_active()->ID));
 }
예제 #30
0
 public function getSpeakerConfirmationLink()
 {
     $confirmation_page = SummitConfirmSpeakerPage::get()->filter('SummitID', Summit::get_active()->ID)->first();
     if (!$confirmation_page) {
         throw new Exception('Confirmation Speaker Page not set on current summit!');
     }
     $url = $confirmation_page->getAbsoluteLiveLink(false);
     $url = $url . 'confirm?h=' . $this->getSpeakerConfirmHash();
     return $url;
 }