/** * Create iCalendar (.ics) file * @param bool $with_header * @return string */ public function toICS($with_header = true) { $vCalendar = new Calendar('edt.u-bordeaux'); $vCalendar->setTimezone(self::$timezone)->setName($this->name)->setDescription($this->name); /** @var EdtUbxItem $item */ foreach ($this->items as $item) { $profs = implode(', ', $item->getProfs()); $location = implode(', ', $item->getLocations()); $groups = implode(', ', $item->getGroups()); $vEvent = new Event(); $vEvent->setUseTimezone(true)->setDtStart($item->getDtStart())->setDtEnd($item->getDtEnd())->setCategories($item->getCategory())->setLocation($location); $vEvent->setDescription(sprintf("%s\n%s%s%s%s%s", $item->getName(), $item->getCategory(), $location !== '' ? "\n{$location}" : '', $profs !== '' ? "\n{$profs}" : '', $groups !== '' ? "\n{$groups}" : '', $item->getNotes() ? "\nNotes: " . $item->getNotes() : '')); $vEvent->setSummary(sprintf('%s (%s)%s', $item->getName(), $item->getCategory(), $profs !== '' ? " - {$profs}" : '')); $vCalendar->addComponent($vEvent); } if ($with_header === true) { header('Content-type: text/calendar; charset=utf-8'); header('Content-Disposition: attachment; filename=calendar.ics'); } return $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'); } }
/** * Get common events for task iCal events * * @access protected * @param array $task * @param string $uid * @return Event */ protected function getTaskIcalEvent(array &$task, $uid) { $dateCreation = new DateTime(); $dateCreation->setTimestamp($task['date_creation']); $dateModif = new DateTime(); $dateModif->setTimestamp($task['date_modification']); $vEvent = new Event($uid); $vEvent->setCreated($dateCreation); $vEvent->setModified($dateModif); $vEvent->setUseTimezone(true); $vEvent->setSummary(t('#%d', $task['id']) . ' ' . $task['title']); $vEvent->setDescription($task['description']); $vEvent->setDescriptionHTML($this->helper->text->markdown($task['description'])); $vEvent->setUrl($this->helper->url->base() . $this->helper->url->to('TaskViewController', 'show', array('task_id' => $task['id'], 'project_id' => $task['project_id']))); if (!empty($task['owner_id'])) { $attendees = new Attendees(); $attendees->add('MAILTO:' . ($task['assignee_email'] ?: $task['assignee_username'] . '@kanboard.local'), array('CN' => $task['assignee_name'] ?: $task['assignee_username'])); $vEvent->setAttendees($attendees); } if (!empty($task['creator_id'])) { $vEvent->setOrganizer(new Organizer('MAILTO:' . $task['creator_email'] ?: $task['creator_username'] . '@kanboard.local', array('CN' => $task['creator_name'] ?: $task['creator_username']))); } return $vEvent; }