protected function buildData() { // ############# Build Array of dates $this->eventsDataByDay = array(); //print "START ".$this->start->format('Y-m-d H:i:s')."<br>"; //print "END ".$this->start->format('Y-m-d H:i:s')."<br>"; $now = new \DateTime($this->start->format('Y-m-d H:i:s'), new \DateTimeZone('UTC')); $now->setTime(23, 59, 59); $this->eventsDataByDay[] = $this->getTemplateForDaysData($now, true); $oneDay = new \DateInterval('P1D'); while ($now->getTimestamp() < $this->end->getTimestamp()) { $now->add($oneDay); $this->eventsDataByDay[] = $this->getTemplateForDaysData($now); } // ############# Get events $this->eventRepositoryBuilder->setAfter($this->start); $this->eventRepositoryBuilder->setBefore($this->end); $this->events = $this->eventRepositoryBuilder->fetchAll(); foreach ($this->events as $event) { foreach ($this->eventsDataByDay as $k => $data) { $startAt = $event->getStartAt()->getTimestamp(); if ($data['startTimestamp'] <= $startAt && $startAt <= $data['endTimestamp']) { $this->eventsDataByDay[$k]['events'][] = $event; } else { if ($startAt < $data['startTimestamp'] && $event->getEndAt()->getTimestamp() > $data['startTimestamp']) { $this->eventsDataByDay[$k]['eventsContinuing'][] = $event; } } } } }
function getDataJson(Application $app) { $steps = 120; $venueRepo = new VenueRepository(); $data = array('data' => array()); if ($_POST['speed'] == '3600') { $interval = new \DateInterval("PT1H"); } else { if ($_POST['speed'] == '21600') { $interval = new \DateInterval("PT6H"); } else { $interval = new \DateInterval("PT1M"); } } $start = new \DateTime("", new \DateTimeZone($app['currentTimeZone'])); $start->setDate($_POST['year'], $_POST['month'], $_POST['day']); $start->setTime($_POST['hour'], $_POST['min'], 0); $time = clone $start; $end = clone $start; for ($i = 1; $i <= $steps; $i++) { $end->add($interval); } $erb = new EventRepositoryBuilder(); $erb->setSite($app['currentSite']); $erb->setAfter($start); $erb->setBefore($end); $erb->setIncludeDeleted(false); $erb->setMustHaveLatLng(true); $events = $erb->fetchAll(); $eventsStatus = array(); for ($i = 1; $i <= $steps; $i++) { $thisData = array('year' => $time->format('Y'), 'month' => $time->format('n'), 'day' => $time->format('j'), 'hour' => $time->format('H'), 'min' => $time->format('i'), 'events' => array(), 'eventsContinuing' => array()); foreach ($events as $event) { if (!isset($eventsStatus[$event->getId()])) { if ($event->getStartAt()->getTimestamp() < $time->getTimestamp()) { $eventsStatus[$event->getId()] = true; $thisData['events'][$event->getSlug()] = array('slug' => $event->getSlug(), 'venue_slug' => $event->getVenue()->getSlug(), 'venue_lat' => $event->getVenue()->getLat(), 'venue_lng' => $event->getVenue()->getLng(), 'venue_title' => $event->getVenue()->getTitle(), 'event_title' => $event->getSummaryDisplay()); } } else { if ($event->getEndAt()->getTimestamp() >= $time->getTimestamp()) { $thisData['eventsContinuing'][$event->getSlug()] = true; } } } $data['data'][] = $thisData; $time->add($interval); } $response = new Response(json_encode($data)); $response->headers->set('Content-Type', 'application/json'); return $response; }
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; }