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(); }
/** * Get project iCalendar * * @access public */ public function project() { $token = $this->request->getStringParam('token'); $project = $this->project->getByToken($token); // Token verification if (empty($project)) { $this->forbidden(true); } // Common filter $filter = $this->taskFilter->create()->filterByProject($project['id']); // Calendar properties $calendar = new iCalendar('Kanboard'); $calendar->setName($project['name']); $calendar->setDescription($project['name']); $calendar->setPublishedTTL('PT1H'); $this->renderCalendar($filter, $calendar); }
/** * Get project iCalendar * * @access public */ public function project() { $token = $this->request->getStringParam('token'); $project = $this->project->getByToken($token); // Token verification if (empty($project)) { throw AccessForbiddenException::getInstance()->withoutLayout(); } // Common filter $queryBuilder = new QueryBuilder(); $queryBuilder->withQuery($this->taskFinder->getICalQuery())->withFilter(new TaskStatusFilter(TaskModel::STATUS_OPEN))->withFilter(new TaskProjectFilter($project['id'])); // Calendar properties $calendar = new iCalendar('Kanboard'); $calendar->setName($project['name']); $calendar->setDescription($project['name']); $calendar->setPublishedTTL('PT1H'); $this->renderCalendar($queryBuilder, $calendar); }
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; }