public function indexAction(Request $request, $key) { $userManager = $this->container->get('ilioscore.user.manager'); $user = $userManager->findUserBy(array('icsFeedKey' => $key)); if (!$user) { throw new NotFoundHttpException(); } $calendar = new ICS\Calendar('Ilios Calendar for ' . $user->getFirstAndLastName()); $calendar->setPublishedTTL('P1H'); $from = new \DateTime('-6 months'); $to = new \DateTime('+6 months'); $events = $userManager->findEventsForUser($user->getId(), $from, $to); foreach ($events as $event) { $vEvent = new ICS\Event(); $vEvent->setDtStart($event->startDate)->setDtEnd($event->endDate)->setSummary($event->name)->setDescription($this->getDescriptionForEvent($event))->setCategories([$event->eventClass])->setLocation($event->location); $calendar->addComponent($vEvent); } $response = new Response(); $response->setContent($calendar->render()); $response->setCharset('utf-8'); $response->headers->set('Content-Type', 'text/calendar'); $response->headers->set('Content-Disposition', 'attachment; filename="' . $key . '.ics"'); $response->prepare($request); $response->send(); }
public function indexAction(Request $request, $key) { $manager = $this->container->get('ilioscore.user.manager'); $user = $manager->findOneBy(array('icsFeedKey' => $key)); if (!$user) { throw new NotFoundHttpException(); } $calendar = new ICS\Calendar('Ilios Calendar for ' . $user->getFirstAndLastName()); $calendar->setPublishedTTL('P1H'); $from = new \DateTime(self::LOOK_BACK); $to = new \DateTime(self::LOOK_FORWARD); $events = $manager->findEventsForUser($user->getId(), $from, $to); $publishedEvents = array_filter($events, function (UserEvent $event) { return $event->isPublished && !$event->isScheduled; }); $publishedEvents = $manager->addInstructorsToEvents($publishedEvents); $scheduledEvents = array_filter($events, function (UserEvent $event) { return $event->isPublished && $event->isScheduled; }); /* @var UserEvent $event */ foreach ($publishedEvents as $event) { $vEvent = new ICS\Event(); $vEvent->setDtStart($event->startDate)->setDtEnd($event->endDate)->setSummary($event->name)->setDescription($this->getDescriptionForEvent($event))->setCategories([$event->eventClass])->setLocation($event->location); $calendar->addComponent($vEvent); } foreach ($scheduledEvents as $event) { $vEvent = new ICS\Event(); $vEvent->setDtStart($event->startDate)->setDtEnd($event->endDate)->setSummary('Scheduled'); $calendar->addComponent($vEvent); } $response = new Response(); $response->setContent($calendar->render()); $response->setCharset('utf-8'); $response->headers->set('Content-Type', 'text/calendar'); $response->headers->set('Content-Disposition', 'attachment; filename="' . $key . '.ics"'); $response->prepare($request); return $response; }
/** * Generates and returns an iCal file for a ticket. * @param String $code Code of a ticket in the system. * @return .ics file iCal file representing that ticket. */ public function iCal($code) { $vCalendar = new Calendar($_SERVER["HTTP_HOST"]); try { $ticket = Ticket::hasCode($code)->firstOrFail(); } catch (ModelNotFoundException $e) { return view("tickets.unverifiable", ['error' => $this->errorMessages['ticket_invalid']]); } $event = $ticket->event; // Have to call Event this way to avoid clash with App\Event $vEvent = new iCal\Component\Event(); $breakAddress = explode(",", $event->location->name, 2); $firstName = $breakAddress[0]; $vEvent->setDtStart(new DateTime($event->start_datetime))->setDtEnd(new DateTime($event->end_datetime))->setLocation($event->location->name, $firstName, "{$event->location->latitude}, {$event->location->longitude}")->setSummary($event->title); $vCalendar->addComponent($vEvent); header('Content-Type: text/calendar; charset=utf-8'); header('Content-Disposition: attachment; filename="cal.ics"'); echo $vCalendar->render(); }
public function loadEvents() { if ($this->components === array()) { $diary = @fopen($this->getFile(), 'r'); $headers = null; if ($diary === false) { $error = error_get_last(); throw new Exception("Cannot find event file: " . $error['message']); } $this->log->info('Parsing diary CSV'); while (false !== ($row = fgetcsv($diary))) { if ($headers === null) { $headers = $row; } else { $row = array_combine($headers, $row); $event = new Event(); $event->setDtStart(new \DateTime($row[$this->headers['date']])); $event->setDtEnd(new \DateTime($row[$this->headers['date']])); $event->setNoTime(true); $event->setSummary($row[$this->headers['summary']]); $event->setDescription($this->getEventDescription($row)); $event->setUrl($row[$this->headers['url']]); $this->addEvent($event); } } $this->log->info('Parsing complete'); } }
<?php /** * Export iCalendar feed with Captain Train trips * * PHP version 5.6 * * @category CaptainTrainIcalendar * @package CaptainTrainIcalendar * @author Pierre Rudloff <*****@*****.**> * @license GPL https://www.gnu.org/licenses/gpl.html * @link https://github.com/Rudloff/captaintrain-icalendar */ require_once 'vendor/autoload.php'; use CaptainTrainIcalendar\Config; use Eluceo\iCal\Component\Calendar; use Eluceo\iCal\Component\Event; $config = Config::getInstance(); if (isset($_GET['token']) && $_GET['token'] == $config->token) { $session = new \CaptainTrain\Session($config->email, $config->password); $vCalendar = new Calendar('captaintrain-icalendar'); foreach ($session->getTrips() as $trip) { $vEvent = new Event(); $vEvent->setDtStart($trip->departureDate)->setDtEnd($trip->arrivalDate)->setSummary($trip->departureStation->name . ' - ' . $trip->arrivalStation->name)->setUseTimezone(true)->setUrl('https://www.captaintrain.com/tickets'); $vCalendar->addComponent($vEvent); } header('Content-Type: text/calendar'); echo $vCalendar->render(); } else { http_response_code(403); }
/** * * */ public function icsAction() { $calendarService = $this->getCalendarService()->setCalendarId($this->getEvent()->getRouteMatch()->getParam('id')); if ($calendarService->isEmpty()) { return $this->notFoundAction(); } $vCalendar = new iCal('https://artemis-ia.eu'); $vEvent = new iCalEvent(); $vEvent->setDtStart($calendarService->getCalendar()->getDateFrom())->setDtEnd($calendarService->getCalendar()->getDateEnd())->setLocation($calendarService->getCalendar()->getLocation())->setNoTime(true)->setSummary($calendarService->getCalendar()->getCalendar())->setDescription(strip_tags($calendarService->getCalendar()->getDescription())); $vCalendar->addComponent($vEvent); $response = $this->getResponse(); $response->getHeaders()->addHeaderLine('Expires: ' . gmdate('D, d M Y H:i:s \\G\\M\\T', time() + 36000))->addHeaderLine("Cache-Control: max-age=36000, must-revalidate")->addHeaderLine("Pragma: public")->addHeaderLine('Content-Disposition: attachment; filename="' . $calendarService->getCalendar()->getCalendar() . '.ics"')->addHeaderLine('Content-Type: text/calendar; charset=utf-8')->addHeaderLine('Content-Length', strlen($vCalendar->render())); $response->setContent($vCalendar->render()); return $response; }