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(); }
public function listJson(Request $request, Application $app) { $erb = new EventRepositoryBuilder(); $erb->setSite($app['currentSite']); $ourRequest = new \Request($request); $erb->setIncludeDeleted($ourRequest->getGetOrPostBoolean('include_deleted', false)); $out = array('events' => array()); foreach ($erb->fetchAll() as $event) { $out['events'][] = array('slug' => $event->getSlug(), 'slugForURL' => $event->getSlugForUrl(), 'summary' => $event->getSummary(), 'summaryDisplay' => $event->getSummaryDisplay()); } return json_encode($out); }
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; }
function index(Application $app) { $erb = new EventRepositoryBuilder(); $erb->setSite($app['currentSite']); $erb->setAfterNow(); $erb->setIncludeDeleted(false); $erb->setIncludeAreaInformation(true); $erb->setIncludeVenueInformation(true); $erb->setIncludeMediasSlugs(true); if ($app['currentUser']) { $erb->setUserAccount($app['currentUser'], true); } $erb->setLimit(100); $events = $erb->fetchAll(); return $app['twig']->render('site/index/index.html.twig', array('events' => $events)); }
function delete($slug, Request $request, Application $app) { if (!$this->build($slug, $request, $app)) { $app->abort(404, "Venue does not exist."); } if ($this->parameters['venue']->getIsDeleted()) { die("No"); // TODO } $form = $app['form.factory']->create(new VenueDeleteForm()); if ('POST' == $request->getMethod()) { $form->bind($request); if ($form->isValid()) { $eventRepository = new EventRepository(); $eventRepository->moveAllFutureEventsAtVenueToNoSetVenue($this->parameters['venue'], $app['currentUser']); $venueRepository = new VenueRepository(); $venueRepository->delete($this->parameters['venue'], $app['currentUser']); return $app->redirect("/venue/" . $this->parameters['venue']->getSlugForURL()); } } $rb = new EventRepositoryBuilder(); $rb->setVenue($this->parameters['venue']); $rb->setAfterNow(true); $rb->setIncludeDeleted(false); $this->parameters['events'] = $rb->fetchAll(); $this->parameters['form'] = $form->createView(); return $app['twig']->render('site/venue/delete.html.twig', $this->parameters); }
public static function run(Application $app, $verbose = false) { global $CONFIG; if ($verbose) { print "Starting " . date("c") . "\n"; } $userRepo = new UserAccountRepository(); $siteRepo = new SiteRepository(); $groupRepo = new GroupRepository(); $eventRepo = new EventRepository(); $userWatchesGroupRepository = new UserWatchesGroupRepository(); $userWatchesGroupStopRepository = new UserWatchesGroupStopRepository(); $userAccountGeneralSecurityKeyRepository = new UserAccountGeneralSecurityKeyRepository(); $userNotificationRepo = new UserNotificationRepository(); $userHasNoEditorPermissionsInSiteRepo = new UserHasNoEditorPermissionsInSiteRepository(); $userPermissionsRepo = new UserPermissionsRepository($app['extensions']); /** @var usernotifications/UserWatchesGroupPromptNotificationType **/ $userNotificationType = $app['extensions']->getCoreExtension()->getUserNotificationType('UserWatchesGroupPrompt'); $b = new UserWatchesGroupRepositoryBuilder(); foreach ($b->fetchAll() as $userWatchesGroup) { $user = $userRepo->loadByID($userWatchesGroup->getUserAccountId()); $group = $groupRepo->loadById($userWatchesGroup->getGroupId()); $site = $siteRepo->loadById($group->getSiteID()); // This is not the most efficient as it involves DB access and the results might not be used. But it'll do for now. $userPermissions = $userPermissionsRepo->getPermissionsForUserInSite($user, $site, false, true); if ($verbose) { print date("c") . " User " . $user->getEmail() . " Site " . $site->getTitle() . " Group " . $group->getTitle() . "\n"; } // UserWatchesGroupRepositoryBuilder() should only return instances where site is not also watched if ($site->getIsClosedBySysAdmin()) { if ($verbose) { print " ... site is closed\n"; } } else { if ($group->getIsDeleted()) { if ($verbose) { print " ... group is deleted\n"; } } else { if ($userHasNoEditorPermissionsInSiteRepo->isUserInSite($user, $site)) { if ($verbose) { print " ... user does not have edit permissions allowed in site\n"; } } else { if (!$userPermissions->hasPermission("org.openacalendar", "CALENDAR_CHANGE")) { if ($verbose) { print " ... user does not have org.openacalendar/CALENDAR_CHANGE permission in site\n"; } // Technically UserWatchesSiteRepositoryBuilder() should only return getIsWatching() == true but lets double check } else { if ($userWatchesGroup->getIsWatching()) { if ($verbose) { print " ... searching for data\n"; } $lastEvent = $eventRepo->loadLastNonDeletedNonImportedByStartTimeInGroupId($group->getId()); $data = $userWatchesGroup->getPromptEmailData($site, $lastEvent); if ($data['moreEventsNeeded']) { if ($verbose) { print " ... found data\n"; } ///// Notification Class $userNotification = $userNotificationType->getNewNotification($user, $site); $userNotification->setGroup($group); ////// Save Notification Class $userNotificationRepo->create($userNotification); ////// Send Email if ($userNotification->getIsEmail()) { $userWatchesGroupStop = $userWatchesGroupStopRepository->getForUserAndGroup($user, $group); configureAppForSite($site); configureAppForUser($user); $userAccountGeneralSecurityKey = $userAccountGeneralSecurityKeyRepository->getForUser($user); $unsubscribeURL = $CONFIG->getWebIndexDomainSecure() . '/you/emails/' . $user->getId() . '/' . $userAccountGeneralSecurityKey->getAccessKey(); $lastEventsBuilder = new EventRepositoryBuilder(); $lastEventsBuilder->setSite($site); $lastEventsBuilder->setGroup($group); $lastEventsBuilder->setOrderByStartAt(true); $lastEventsBuilder->setIncludeDeleted(false); $lastEventsBuilder->setIncludeImported(false); $lastEventsBuilder->setLimit($CONFIG->userWatchesGroupPromptEmailShowEvents); $lastEvents = $lastEventsBuilder->fetchAll(); $message = \Swift_Message::newInstance(); $message->setSubject("Any news about " . $group->getTitle() . "?"); $message->setFrom(array($CONFIG->emailFrom => $CONFIG->emailFromName)); $message->setTo($user->getEmail()); $messageText = $app['twig']->render('email/userWatchesGroupPromptEmail.txt.twig', array('group' => $group, 'user' => $user, 'lastEvents' => $lastEvents, 'stopCode' => $userWatchesGroupStop->getAccessKey(), 'generalSecurityCode' => $userAccountGeneralSecurityKey->getAccessKey(), 'unsubscribeURL' => $unsubscribeURL)); if ($CONFIG->isDebug) { file_put_contents('/tmp/userWatchesGroupPromptEmail.txt', $messageText); } $message->setBody($messageText); $messageHTML = $app['twig']->render('email/userWatchesGroupPromptEmail.html.twig', array('group' => $group, 'user' => $user, 'lastEvents' => $lastEvents, 'stopCode' => $userWatchesGroupStop->getAccessKey(), 'generalSecurityCode' => $userAccountGeneralSecurityKey->getAccessKey(), 'unsubscribeURL' => $unsubscribeURL)); if ($CONFIG->isDebug) { file_put_contents('/tmp/userWatchesGroupPromptEmail.html', $messageHTML); } $message->addPart($messageHTML, 'text/html'); $headers = $message->getHeaders(); $headers->addTextHeader('List-Unsubscribe', $unsubscribeURL); if ($verbose) { print " ... sending\n"; } if (!$CONFIG->isDebug) { $app['mailer']->send($message); } $userNotificationRepo->markEmailed($userNotification); } $userWatchesGroupRepository->markPromptEmailSent($userWatchesGroup, $data['checkTime']); } } } } } } } if ($verbose) { print "Finished " . date("c") . "\n"; } }
function testRRuleDeleteByExDate1() { global $CONFIG; \TimeSource::mock(2015, 1, 1, 1, 1, 1); $CONFIG->importURLAllowEventsSecondsIntoFuture = 77760000; $user = new UserAccountModel(); $user->setEmail("*****@*****.**"); $user->setUsername("test"); $user->setPassword("password"); $userRepo = new UserAccountRepository(); $userRepo->create($user); $site = new SiteModel(); $site->setTitle("Test"); $site->setSlug("test"); $siteRepo = new SiteRepository(); $siteRepo->create($site, $user, array(), $this->getSiteQuotaUsedForTesting()); $group = new GroupModel(); $group->setTitle("test"); $group->setDescription("test test"); $group->setUrl("http://www.group.com"); $groupRepo = new GroupRepository(); $groupRepo->create($group, $site, $user); $importURLRepository = new ImportURLRepository(); $importURL = new ImportURLModel(); $importURL->setIsEnabled(true); $importURL->setSiteId($site->getId()); $importURL->setGroupId($group->getId()); $importURL->setTitle("Test"); $importURL->setUrl("http://test.com"); $importURLRepository->create($importURL, $site, $user); // ============================================= Import CREATE $importURLRun = new ImportURLRun($importURL, $site); $importURLRun->setTemporaryFileStorageForTesting(dirname(__FILE__) . '/data/ImportRRuleDeleteByExDate1Part1.ics'); $i = new ImportURLICalHandler(); $i->setImportURLRun($importURLRun); $i->setLimitToSaveOnEachRun(7); $this->assertTrue($i->canHandle()); $r = $i->handle(); // Is it loaded on Imported Events? $ierb = new \repositories\builders\ImportedEventRepositoryBuilder(); $importedEvents = $ierb->fetchAll(); $this->assertEquals(1, count($importedEvents)); $importedEvent = $importedEvents[0]; $reoccur = $importedEvent->getReoccur(); $this->assertEquals(true, is_array($reoccur)); $this->assertEquals(true, isset($reoccur['ical_rrule'])); $this->assertEquals(true, is_array($reoccur['ical_rrule'])); $this->assertEquals("WEEKLY", $reoccur['ical_rrule']["FREQ"]); $this->assertEquals("TH", $reoccur['ical_rrule']["BYDAY"]); // now test real events $erb = new EventRepositoryBuilder(); $erb->setImportedEvent($importedEvent); $erb->setAfterNow(); $events = $erb->fetchAll(); $this->assertTrue(count($events) > 5); $event = $events[0]; $this->assertEquals("2015-02-12T09:00:00+00:00", $event->getStartAtInUTC()->format("c")); $this->assertEquals("2015-02-12T10:00:00+00:00", $event->getEndAtInUTC()->format("c")); $this->assertFalse($event->getIsDeleted()); $event = $events[1]; $this->assertEquals("2015-02-26T09:00:00+00:00", $event->getStartAtInUTC()->format("c")); $this->assertEquals("2015-02-26T10:00:00+00:00", $event->getEndAtInUTC()->format("c")); $this->assertFalse($event->getIsDeleted()); $event = $events[2]; $this->assertEquals("2015-03-12T09:00:00+00:00", $event->getStartAtInUTC()->format("c")); $this->assertEquals("2015-03-12T10:00:00+00:00", $event->getEndAtInUTC()->format("c")); $this->assertFalse($event->getIsDeleted()); \TimeSource::mock(2015, 1, 2, 1, 1, 1); // ============================================= Import With no changes $importURLRun = new ImportURLRun($importURL, $site); $importURLRun->setTemporaryFileStorageForTesting(dirname(__FILE__) . '/data/ImportRRuleDeleteByExDate1Part1.ics'); $i = new ImportURLICalHandler(); $i->setImportURLRun($importURLRun); $i->setLimitToSaveOnEachRun(7); $this->assertTrue($i->canHandle()); $r = $i->handle(); // Is it loaded on Imported Events? $ierb = new \repositories\builders\ImportedEventRepositoryBuilder(); $importedEvents = $ierb->fetchAll(); $this->assertEquals(1, count($importedEvents)); $importedEvent = $importedEvents[0]; $reoccur = $importedEvent->getReoccur(); $this->assertEquals(true, is_array($reoccur)); $this->assertEquals(true, isset($reoccur['ical_rrule'])); $this->assertEquals(true, is_array($reoccur['ical_rrule'])); $this->assertEquals("WEEKLY", $reoccur['ical_rrule']["FREQ"]); $this->assertEquals("TH", $reoccur['ical_rrule']["BYDAY"]); // now test real events $erb = new EventRepositoryBuilder(); $erb->setImportedEvent($importedEvent); $erb->setAfterNow(); $events = $erb->fetchAll(); $this->assertTrue(count($events) > 5); $event = $events[0]; $this->assertEquals("2015-02-12T09:00:00+00:00", $event->getStartAtInUTC()->format("c")); $this->assertEquals("2015-02-12T10:00:00+00:00", $event->getEndAtInUTC()->format("c")); $this->assertFalse($event->getIsDeleted()); $event = $events[1]; $this->assertEquals("2015-02-26T09:00:00+00:00", $event->getStartAtInUTC()->format("c")); $this->assertEquals("2015-02-26T10:00:00+00:00", $event->getEndAtInUTC()->format("c")); $this->assertFalse($event->getIsDeleted()); $event = $events[2]; $this->assertEquals("2015-03-12T09:00:00+00:00", $event->getStartAtInUTC()->format("c")); $this->assertEquals("2015-03-12T10:00:00+00:00", $event->getEndAtInUTC()->format("c")); $this->assertFalse($event->getIsDeleted()); \TimeSource::mock(2015, 1, 3, 1, 1, 1); // ============================================= Import WITH ONE DELETED! $importURLRun = new ImportURLRun($importURL, $site); $importURLRun->setTemporaryFileStorageForTesting(dirname(__FILE__) . '/data/ImportRRuleDeleteByExDate1Part2.ics'); $i = new ImportURLICalHandler(); $i->setImportURLRun($importURLRun); $i->setLimitToSaveOnEachRun(7); $this->assertTrue($i->canHandle()); $r = $i->handle(); // Is it loaded on Imported Events? $ierb = new \repositories\builders\ImportedEventRepositoryBuilder(); $importedEvents = $ierb->fetchAll(); $this->assertEquals(1, count($importedEvents)); $importedEvent = $importedEvents[0]; $reoccur = $importedEvent->getReoccur(); $this->assertEquals(true, is_array($reoccur)); $this->assertEquals(true, isset($reoccur['ical_rrule'])); $this->assertEquals(true, is_array($reoccur['ical_rrule'])); $this->assertEquals("WEEKLY", $reoccur['ical_rrule']["FREQ"]); $this->assertEquals("TH", $reoccur['ical_rrule']["BYDAY"]); // now test real events $erb = new EventRepositoryBuilder(); $erb->setImportedEvent($importedEvent); $erb->setAfterNow(); $erb->setIncludeDeleted(true); $events = $erb->fetchAll(); $this->assertTrue(count($events) > 5); $event = $events[0]; $this->assertEquals("2015-02-12T09:00:00+00:00", $event->getStartAtInUTC()->format("c")); $this->assertEquals("2015-02-12T10:00:00+00:00", $event->getEndAtInUTC()->format("c")); $this->assertFalse($event->getIsDeleted()); $event = $events[1]; $this->assertEquals("2015-02-26T09:00:00+00:00", $event->getStartAtInUTC()->format("c")); $this->assertEquals("2015-02-26T10:00:00+00:00", $event->getEndAtInUTC()->format("c")); $this->assertTrue($event->getIsDeleted()); $event = $events[2]; $this->assertEquals("2015-03-12T09:00:00+00:00", $event->getStartAtInUTC()->format("c")); $this->assertEquals("2015-03-12T10:00:00+00:00", $event->getEndAtInUTC()->format("c")); $this->assertFalse($event->getIsDeleted()); }
/** * * @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); }
protected function run() { global $CONFIG; $userRepo = new UserAccountRepository(); $siteRepo = new SiteRepository(); $eventRepo = new EventRepository(); $userWatchesSiteRepository = new UserWatchesSiteRepository(); $userWatchesSiteStopRepository = new UserWatchesSiteStopRepository(); $userAccountGeneralSecurityKeyRepository = new UserAccountGeneralSecurityKeyRepository(); $userNotificationRepo = new UserNotificationRepository(); /** @var usernotifications/UserWatchesSiteGroupPromptNotificationType **/ $userNotificationType = $this->app['extensions']->getCoreExtension()->getUserNotificationType('UserWatchesSiteGroupPrompt'); $b = new UserWatchesSiteRepositoryBuilder(); foreach ($b->fetchAll() as $userWatchesSite) { $user = $userRepo->loadByID($userWatchesSite->getUserAccountId()); $site = $siteRepo->loadById($userWatchesSite->getSiteId()); $siteRepo->loadLegacyFeaturesOnSite($site); // to avoid flooding user we only send one group email per run $anyGroupNotificationsSent = false; $this->logVerbose(" User " . $user->getEmail() . " Site " . $site->getTitle()); if ($site->getIsClosedBySysAdmin()) { $this->logVerbose(" ... site is closed"); // Technically UserWatchesSiteRepositoryBuilder() should only return getIsWatching() == true but lets double check } else { if ($userWatchesSite->getIsWatching()) { $groupRepoBuilder = new GroupRepositoryBuilder(); $groupRepoBuilder->setSite($site); $groupRepoBuilder->setIncludeDeleted(false); foreach ($groupRepoBuilder->fetchAll() as $group) { if (!$anyGroupNotificationsSent) { $this->logVerbose(" ... searching group " . $group->getSlug() . " for data"); $lastEvent = $eventRepo->loadLastNonDeletedNonImportedByStartTimeInGroupId($group->getId()); $data = $userWatchesSite->getGroupPromptEmailData($site, $group, $lastEvent); if ($data['moreEventsNeeded']) { $this->logVerbose(" ... found data "); ///// Notification Class $userNotification = $userNotificationType->getNewNotification($user, $site); $userNotification->setGroup($group); ////// Save Notification Class $userNotificationRepo->create($userNotification); ////// Send Email if ($userNotification->getIsEmail()) { $userWatchesSiteStop = $userWatchesSiteStopRepository->getForUserAndSite($user, $site); configureAppForSite($site); configureAppForUser($user); $userAccountGeneralSecurityKey = $userAccountGeneralSecurityKeyRepository->getForUser($user); $unsubscribeURL = $CONFIG->getWebIndexDomainSecure() . '/you/emails/' . $user->getId() . '/' . $userAccountGeneralSecurityKey->getAccessKey(); $lastEventsBuilder = new EventRepositoryBuilder(); $lastEventsBuilder->setSite($site); $lastEventsBuilder->setGroup($group); $lastEventsBuilder->setOrderByStartAt(true); $lastEventsBuilder->setIncludeDeleted(false); $lastEventsBuilder->setIncludeImported(false); $lastEventsBuilder->setLimit($CONFIG->userWatchesSiteGroupPromptEmailShowEvents); $lastEvents = $lastEventsBuilder->fetchAll(); $message = \Swift_Message::newInstance(); $message->setSubject("Any news about " . $group->getTitle() . "?"); $message->setFrom(array($CONFIG->emailFrom => $CONFIG->emailFromName)); $message->setTo($user->getEmail()); $messageText = $this->app['twig']->render('email/userWatchesSiteGroupPromptEmail.txt.twig', array('user' => $user, 'group' => $group, 'lastEvents' => $lastEvents, 'stopCode' => $userWatchesSiteStop->getAccessKey(), 'generalSecurityCode' => $userAccountGeneralSecurityKey->getAccessKey(), 'unsubscribeURL' => $unsubscribeURL)); if ($CONFIG->isDebug) { file_put_contents('/tmp/userWatchesSiteGroupPromptEmail.txt', $messageText); } $message->setBody($messageText); $messageHTML = $this->app['twig']->render('email/userWatchesSiteGroupPromptEmail.html.twig', array('user' => $user, 'group' => $group, 'lastEvents' => $lastEvents, 'stopCode' => $userWatchesSiteStop->getAccessKey(), 'generalSecurityCode' => $userAccountGeneralSecurityKey->getAccessKey(), 'unsubscribeURL' => $unsubscribeURL)); if ($CONFIG->isDebug) { file_put_contents('/tmp/userWatchesSiteGroupPromptEmail.html', $messageHTML); } $message->addPart($messageHTML, 'text/html'); $headers = $message->getHeaders(); $headers->addTextHeader('List-Unsubscribe', $unsubscribeURL); $this->logVerbose(" ... sending"); if (!$CONFIG->isDebug) { $this->app['mailer']->send($message); } $userNotificationRepo->markEmailed($userNotification); } $userWatchesSiteRepository->markGroupPromptEmailSent($userWatchesSite, $group, $data['checkTime']); $anyGroupNotificationsSent = true; } } } } } } return array('result' => 'ok'); }
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); }
function disable($slug, Request $request, Application $app) { if (!$this->build($slug, $request, $app)) { $app->abort(404, "Import does not exist."); } if (!$this->parameters['importurl']->getIsEnabled()) { die('NO'); // TODO } if ($request->request->get('disable') == 'yes' && $request->request->get('CSFRToken') == $app['websession']->getCSFRToken()) { $iRepository = new ImportURLRepository(); $iRepository->disable($this->parameters['importurl'], $app['currentUser']); $erb = new EventRepositoryBuilder(); $erb->setAfterNow(); $erb->setIncludeDeleted(false); $erb->setImportURL($this->parameters['importurl']); $eventRepository = new EventRepository(); foreach ($erb->fetchAll() as $event) { $eventRepository->delete($event, $app['currentUser']); } return $app->redirect("/importurl/" . $this->parameters['importurl']->getSlug()); } return $app['twig']->render('site/importurl/disable.html.twig', $this->parameters); }
function editFuture($slug, Request $request, Application $app) { if (!$this->build($slug, $request, $app)) { $app->abort(404, "Event does not exist."); } // Event Recur Set $eventRecurSetRepo = new EventRecurSetRepository(); $this->parameters['eventRecurSet'] = $eventRecurSetRepo->loadForEvent($this->parameters['event']); if (!$this->parameters['eventRecurSet']) { return false; // TODO } $this->parameters['eventRecurSet']->setCustomFields($app['currentSite']->getCachedEventCustomFieldDefinitionsAsModels()); // Load history we are working with $eventHistoryRepo = new EventHistoryRepository(); $this->parameters['eventHistory'] = $eventHistoryRepo->loadByEventAndlastEditByUser($this->parameters['event'], $app['currentUser']); if (!$this->parameters['eventHistory']) { return false; // TODO } $eventHistoryRepo->ensureChangedFlagsAreSet($this->parameters['eventHistory']); $this->parameters['eventRecurSet']->setInitalEventLastChange($this->parameters['eventHistory']); // load event before this edit $eventRepo = new EventRepository(); $this->parameters['eventRecurSet']->setInitialEventJustBeforeLastChange($eventRepo->loadEventJustBeforeEdit($this->parameters['event'], $this->parameters['eventHistory'])); // Event & Future Events $this->parameters['eventRecurSet']->setInitalEvent($this->parameters['event']); $eventRB = new EventRepositoryBuilder(); $eventRB->setStartAfter($this->parameters['event']->getStartAtInUTC()); $eventRB->setInSameRecurEventSet($this->parameters['event']); $eventRB->setIncludeDeleted(false); $this->parameters['eventRecurSet']->setFutureEvents($eventRB->fetchAll()); if (!$this->parameters['eventRecurSet']->getFutureEvents()) { return false; // TODO } // Let's check for upgrades, then apply or show user $this->parameters['eventRecurSet']->applyChangeToFutureEvents(); if ($this->parameters['eventRecurSet']->isAnyProposedChangesPossible()) { if ($request->request->get('submitted') == 'cancel' && $request->request->get('CSFRToken') == $app['websession']->getCSFRToken()) { return $app->redirect("/event/" . $this->parameters['event']->getSlugforURL()); } if ($request->request->get('submitted') == 'yes' && $request->request->get('CSFRToken') == $app['websession']->getCSFRToken()) { $eventRepo = new EventRepository(); $countEvents = 0; foreach ($this->parameters['eventRecurSet']->getFutureEvents() as $futureEvent) { $proposedChanges = $this->parameters['eventRecurSet']->getFutureEventsProposedChangesForEventSlug($futureEvent->getSlug()); if ($proposedChanges->getSummaryChangePossible()) { $proposedChanges->setSummaryChangeSelected($request->request->get("eventSlug" . $futureEvent->getSlug() . 'fieldSummary') == 1); } if ($proposedChanges->getDescriptionChangePossible()) { $proposedChanges->setDescriptionChangeSelected($request->request->get("eventSlug" . $futureEvent->getSlug() . 'fieldDescription') == 1); } if ($proposedChanges->getCountryAreaVenueIdChangePossible()) { $proposedChanges->setCountryAreaVenueIdChangeSelected($request->request->get("eventSlug" . $futureEvent->getSlug() . 'fieldCountryAreaVenue') == 1); } if ($proposedChanges->getTimezoneChangePossible()) { $proposedChanges->setTimezoneChangeSelected($request->request->get("eventSlug" . $futureEvent->getSlug() . 'fieldTimezone') == 1); } if ($proposedChanges->getUrlChangePossible()) { $proposedChanges->setUrlChangeSelected($request->request->get("eventSlug" . $futureEvent->getSlug() . 'fieldUrl') == 1); } if ($proposedChanges->getTicketUrlChangePossible()) { $proposedChanges->setTicketUrlChangeSelected($request->request->get("eventSlug" . $futureEvent->getSlug() . 'fieldTicketUrl') == 1); } if ($proposedChanges->getIsVirtualChangePossible()) { $proposedChanges->setIsVirtualChangeSelected($request->request->get("eventSlug" . $futureEvent->getSlug() . 'fieldIsVirtual') == 1); } if ($proposedChanges->getIsPhysicalChangePossible()) { $proposedChanges->setIsPhysicalChangeSelected($request->request->get("eventSlug" . $futureEvent->getSlug() . 'fieldIsPhysical') == 1); } if ($proposedChanges->getIsCancelledChangePossible()) { $proposedChanges->setIsCancelledChangeSelected($request->request->get("eventSlug" . $futureEvent->getSlug() . 'fieldIsCancelled') == 1); } if ($proposedChanges->getStartEndAtChangePossible()) { $proposedChanges->setStartEndAtChangePossible($request->request->get("eventSlug" . $futureEvent->getSlug() . 'fieldStartEnd') == 1); } foreach ($app['currentSite']->getCachedEventCustomFieldDefinitionsAsModels() as $customField) { if ($proposedChanges->getCustomFieldChangePossible($customField)) { $proposedChanges->setCustomFieldChangeSelected($customField, $request->request->get("eventSlug" . $futureEvent->getSlug() . 'fieldCustom' . $customField->getKey()) == 1); } } if ($proposedChanges->applyToEvent($futureEvent, $this->parameters['event'])) { $eventRepo->edit($futureEvent, $app['currentUser'], $this->parameters['eventHistory']); $countEvents++; } } if ($countEvents > 0) { $app['flashmessages']->addMessage($countEvents > 1 ? $countEvents . " future events edited." : "Future event edited."); return $app->redirect("/event/" . $this->parameters['event']->getSlugforURL()); } } // Only pass $futureEvent to the view layer if there are actually changes that can be made. $futureEvents = array(); foreach ($this->parameters['eventRecurSet']->getFutureEvents() as $futureEvent) { if ($this->parameters['eventRecurSet']->getFutureEventsProposedChangesForEventSlug($futureEvent->getSlug())->isAnyChangesPossible()) { $futureEvents[] = $futureEvent; } } $this->parameters['futureEvents'] = $futureEvents; $this->parameters['futureEventsProposedChanges'] = $this->parameters['eventRecurSet']->getFutureEventsProposedChanges(); return $app['twig']->render('site/event/edit.future.html.twig', $this->parameters); } else { return $app->redirect("/event/" . $this->parameters['event']->getSlugforURL()); } }
public function deleteEventsNotSeenAfterRun() { $count = 0; $eventRepo = new EventRepository(); $erb = new EventRepositoryBuilder(); $erb->setImportURL($this->importURL); $erb->setIncludeDeleted(false); $erb->setAfterNow(); foreach ($erb->fetchAll() as $event) { if (!in_array($event->getId(), $this->eventsSeenIDs)) { $eventRepo->delete($event); ++$count; } } return $count; }