コード例 #1
0
 public function pastEventsCount($data)
 {
     $erb = new EventRepositoryBuilder();
     $erb->setBeforeNow();
     $erb->setIncludeCancelled(true);
     $erb->setIncludeDeleted(false);
     if ($data instanceof \models\AreaModel) {
         $erb->setArea($data);
     }
     return $erb->fetchCount();
 }
 function getPossibleDuplicates()
 {
     /**
      * If no Start or End time on event then we aren't even going to try to look for dupes.
      * There would be to many options and not enought to search on.
      */
     if (!$this->event->getStartAt() || !$this->event->getEndAt()) {
         return array();
     }
     ## Get events
     $eventRepositoryBuilder = new EventRepositoryBuilder();
     $eventRepositoryBuilder->setSite($this->site);
     $eventRepositoryBuilder->setIncludeAreaInformation(true);
     $eventRepositoryBuilder->setIncludeDeleted(true);
     $eventRepositoryBuilder->setIncludeCancelled(true);
     $after = clone $this->event->getStartAt();
     $after->sub(new \DateInterval("PT4H"));
     $eventRepositoryBuilder->setAfter($after);
     $before = clone $this->event->getStartAt();
     $before->add(new \DateInterval("PT4H"));
     $eventRepositoryBuilder->setBefore($before);
     $events = $eventRepositoryBuilder->fetchAll();
     ## Score
     $eventsWithScore = array();
     foreach ($events as $event) {
         if (!in_array($event->getSlug(), $this->notTheseSlugs)) {
             $eventsWithScore[] = array('event' => $event, 'score' => $this->getScoreForConsideredEvent($event));
         }
     }
     ## sort
     $sortFunc = function ($a, $b) {
         if ($a['score'] == $b['score']) {
             return 0;
         } elseif ($a['score'] > $b['score']) {
             return 1;
         } elseif ($a['score'] < $b['score']) {
             return -1;
         }
     };
     usort($eventsWithScore, $sortFunc);
     ## Results
     $results = array();
     foreach ($eventsWithScore as $eventWithScore) {
         if (count($results) < $this->showEventsCount && $eventWithScore['score'] >= $this->showEventsThreshhold) {
             $results[] = $eventWithScore['event'];
         }
     }
     return $results;
 }
コード例 #3
0
 /**
  * 
  * @return type array(array(), array(), array(), boolean) - upcoming events, other events, user at event data, flag if any to send
  */
 public function getDataForUpcomingEventsEmail()
 {
     $flag = false;
     $start = \TimeSource::getDateTime();
     $end = \TimeSource::getDateTime();
     if ($this->email_upcoming_events_days_notice > 0) {
         $interval = new \DateInterval("P" . $this->email_upcoming_events_days_notice . "D");
         $start->add($interval);
         $end->add($interval);
     }
     $start->setTime(0, 0, 0);
     $end->setTime(23, 59, 59);
     $upcomingEvents = array();
     $allEvents = array();
     $userAtEvent = array();
     $userAtEventRepo = new UserAtEventRepository();
     $erb = new EventRepositoryBuilder();
     $erb->setAfterNow();
     $erb->setIncludeDeleted(false);
     $erb->setIncludeCancelled(true);
     $erb->setUserAccount($this, false, true);
     foreach ($erb->fetchAll() as $event) {
         $userAtEvent[$event->getId()] = $userAtEventRepo->loadByUserAndEvent($this, $event);
         if ($start->getTimestamp() <= $event->getStartAt()->getTimestamp() && $event->getStartAt()->getTimestamp() <= $end->getTimestamp()) {
             $upcomingEvents[] = $event;
             if ($this->email_upcoming_events == 'w') {
                 $flag = true;
             } else {
                 if ($this->email_upcoming_events == 'a') {
                     if ($userAtEvent[$event->getId()] && $userAtEvent[$event->getId()]->getIsPlanAttending()) {
                         $flag = true;
                     }
                 } else {
                     if ($this->email_upcoming_events == 'm') {
                         if ($userAtEvent[$event->getId()] && ($userAtEvent[$event->getId()]->getIsPlanAttending() || $userAtEvent[$event->getId()]->getIsPlanMaybeAttending())) {
                             $flag = true;
                         }
                     }
                 }
             }
         }
         $allEvents[] = $event;
     }
     return array($upcomingEvents, $allEvents, $userAtEvent, $flag);
 }
コード例 #4
0
 public function updateFutureEventsCache(AreaModel $area)
 {
     global $DB;
     $statUpdate = $DB->prepare("UPDATE area_information SET cached_future_events=:count WHERE id=:id");
     $erb = new EventRepositoryBuilder();
     $erb->setArea($area);
     $erb->setIncludeDeleted(false);
     $erb->setIncludeCancelled(false);
     $erb->setAfterNow();
     $count = count($erb->fetchAll());
     $statUpdate->execute(array('count' => $count, 'id' => $area->getId()));
     $area->setCachedFutureEvents($count);
 }