Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/applications/calendar/util/PhabricatorCalendarICSWriter.php
12262 views
1
<?php
2
3
final class PhabricatorCalendarICSWriter extends Phobject {
4
5
private $viewer;
6
private $events = array();
7
8
public function setViewer(PhabricatorUser $viewer) {
9
$this->viewer = $viewer;
10
return $this;
11
}
12
13
public function getViewer() {
14
return $this->viewer;
15
}
16
17
public function setEvents(array $events) {
18
assert_instances_of($events, 'PhabricatorCalendarEvent');
19
$this->events = $events;
20
return $this;
21
}
22
23
public function getEvents() {
24
return $this->events;
25
}
26
27
public function writeICSDocument() {
28
$viewer = $this->getViewer();
29
$events = $this->getEvents();
30
31
$events = mpull($events, null, 'getPHID');
32
33
if ($events) {
34
$child_map = id(new PhabricatorCalendarEventQuery())
35
->setViewer($viewer)
36
->withParentEventPHIDs(array_keys($events))
37
->execute();
38
$child_map = mpull($child_map, null, 'getPHID');
39
} else {
40
$child_map = array();
41
}
42
43
$all_events = $events + $child_map;
44
$child_groups = mgroup($child_map, 'getInstanceOfEventPHID');
45
46
$document_node = new PhutilCalendarDocumentNode();
47
48
foreach ($all_events as $event) {
49
$child_events = idx($child_groups, $event->getPHID(), array());
50
$event_node = $event->newIntermediateEventNode($viewer, $child_events);
51
$document_node->appendChild($event_node);
52
}
53
54
$root_node = id(new PhutilCalendarRootNode())
55
->appendChild($document_node);
56
57
return id(new PhutilICSWriter())
58
->writeICSDocument($root_node);
59
}
60
}
61
62