Path: blob/master/src/applications/calendar/util/PhabricatorCalendarICSWriter.php
12262 views
<?php12final class PhabricatorCalendarICSWriter extends Phobject {34private $viewer;5private $events = array();67public function setViewer(PhabricatorUser $viewer) {8$this->viewer = $viewer;9return $this;10}1112public function getViewer() {13return $this->viewer;14}1516public function setEvents(array $events) {17assert_instances_of($events, 'PhabricatorCalendarEvent');18$this->events = $events;19return $this;20}2122public function getEvents() {23return $this->events;24}2526public function writeICSDocument() {27$viewer = $this->getViewer();28$events = $this->getEvents();2930$events = mpull($events, null, 'getPHID');3132if ($events) {33$child_map = id(new PhabricatorCalendarEventQuery())34->setViewer($viewer)35->withParentEventPHIDs(array_keys($events))36->execute();37$child_map = mpull($child_map, null, 'getPHID');38} else {39$child_map = array();40}4142$all_events = $events + $child_map;43$child_groups = mgroup($child_map, 'getInstanceOfEventPHID');4445$document_node = new PhutilCalendarDocumentNode();4647foreach ($all_events as $event) {48$child_events = idx($child_groups, $event->getPHID(), array());49$event_node = $event->newIntermediateEventNode($viewer, $child_events);50$document_node->appendChild($event_node);51}5253$root_node = id(new PhutilCalendarRootNode())54->appendChild($document_node);5556return id(new PhutilICSWriter())57->writeICSDocument($root_node);58}59}606162