| <?php |
|
|
| namespace Kanboard\Formatter; |
|
|
| use DateTime; |
| use Eluceo\iCal\Component\Calendar; |
| use Eluceo\iCal\Component\Event; |
| use Eluceo\iCal\Property\Event\Attendees; |
| use Eluceo\iCal\Property\Event\Organizer; |
| use Kanboard\Core\Filter\FormatterInterface; |
| use PicoDb\Table; |
|
|
| |
| |
| |
| |
| |
| |
| class TaskICalFormatter extends BaseFormatter implements FormatterInterface |
| { |
| |
| |
| |
| |
| |
| |
| protected $vCalendar; |
|
|
| |
| |
| |
| |
| |
| |
| public function format() |
| { |
| return $this->vCalendar->render(); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| public function setCalendar(Calendar $vCalendar) |
| { |
| $this->vCalendar = $vCalendar; |
| return $this; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| public function addTasksWithStartAndDueDate(Table $query, $startColumn, $endColumn) |
| { |
| foreach ($query->findAll() as $task) { |
| $start = new DateTime; |
| $start->setTimestamp($task[$startColumn]); |
|
|
| $end = new DateTime; |
| $end->setTimestamp($task[$endColumn] ?: time()); |
|
|
| $vEvent = $this->getTaskIcalEvent($task, 'task-#'.$task['id'].'-'.$startColumn.'-'.$endColumn); |
| $vEvent->setDtStart($start); |
| $vEvent->setDtEnd($end); |
|
|
| $this->vCalendar->addComponent($vEvent); |
| } |
|
|
| return $this; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| public function addTasksWithDueDateOnly(Table $query) |
| { |
| foreach ($query->findAll() as $task) { |
| $date = new DateTime; |
| $date->setTimestamp($task['date_due']); |
|
|
| $vEvent = $this->getTaskIcalEvent($task, 'task-#'.$task['id'].'-date_due'); |
| $vEvent->setDtStart($date); |
| $vEvent->setDtEnd($date); |
|
|
| if ($date->format('Hi') === '0000') { |
| $vEvent->setNoTime(true); |
| } |
|
|
| $this->vCalendar->addComponent($vEvent); |
| } |
|
|
| return $this; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| 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']))); |
|
|
| 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; |
| } |
| } |
|
|