Bitrix-D7 22.6
 
Загрузка...
Поиск...
Не найдено
outcomingattachmentmanager.php
1<?php
2
3
5
6
7use Bitrix\Calendar\ICal\Basic\{AttachmentManager, Dictionary, ICalUtil};
11use Bitrix\Calendar\ICal\Builder\{Calendar, Event, StandardObservances, Timezone};
13
15{
16 private $event = [];
17 private $attendees = [];
18 private $attachment = '';
19 private $method = '';
20 private $uid = '';
21
22 public function __construct($data, $attendees, $method)
23 {
24 $this->event = $data;
25 $this->attendees = $attendees;
26 $this->method = $method;
27 }
28
30 {
31 $event = $this->prepareRequestEvent();
32 $this->uid = isset($event['DAV_XML_ID']) ? $event['DAV_XML_ID'] : ICalUtil::getUniqId();
33
34 $this->attachment = Calendar::getInstance()
35 ->setMethod(Dictionary::METHODS[$this->method])
36 ->setTimezones(Timezone::getInstance()
37 ->setTimezoneId($event['TZ_FROM'])
38 ->setObservance(StandardObservances::getInstance()
39 ->setOffsetFrom($event['TZ_FROM'])
40 ->setOffsetTo($event['TZ_TO'])
41 ->setDTStart()
42 )
43 )
44 ->setEvent(Event::getInstance($this->uid)
45 ->setName($event['NAME'])
46 ->setAttendees($this->attendees)
47 ->setStartsAt(Util::getDateObject($event['DATE_FROM'], $event['SKIP_TIME'], $event['TZ_FROM']))
48 ->setEndsAt(Util::getDateObject($event['DATE_TO'], $event['SKIP_TIME'], $event['TZ_TO']))
49 ->setCreatedAt(Util::getDateObject($event['CREATED'], false, $event['TZ_FROM']))
50 ->setDtStamp(Util::getDateObject($event['CREATED'], false, $event['TZ_FROM']))
51 ->setModified(Util::getDateObject($event['MODIFIED'], false, $event['TZ_FROM']))
52 ->setWithTimezone(!$event['SKIP_TIME'])
53 ->setWithTime(!$event['SKIP_TIME'])
54 ->setOrganizer($this->attendees[$event['MEETING_HOST']], $this->getReplyAddress())
55 ->setDescription($event['DESCRIPTION'])
56 ->setTransparent(Dictionary::TRANSPARENT[$event['ACCESSIBILITY']])
57 ->setRRule($event['RRULE'])
58 ->setExdates($event['EXDATE'], $event['TZ_FROM'])
59 ->setLocation($event['TEXT_LOCATION'])
60 ->setSequence((int)$event['VERSION'])
61 ->setStatus(Dictionary::INVITATION_STATUS['confirmed'])
62 )
63 ->get();
64
65 return $this;
66 }
67
68 public function getAttachment(): string
69 {
70 return $this->attachment;
71 }
72
73 public function getUid()
74 {
75 return $this->uid;
76 }
77
79 {
80 $event = $this->event;
81 $this->uid = $event['DAV_XML_ID'];
82
83 $this->attachment = Calendar::getInstance()
84 ->setMethod(Dictionary::METHODS[$this->method])
85 ->setEvent(Event::getInstance($event['DAV_XML_ID'])
86 ->setName($event['NAME'])
87 ->setAttendees([$this->attendees[$event['OWNER_ID']]])
88 ->setStartsAt(Util::getDateObject($event['DATE_FROM'], $event['SKIP_TIME'], $event['TZ_FROM']))
89 ->setEndsAt(Util::getDateObject($event['DATE_TO'], $event['SKIP_TIME'], $event['TZ_TO']))
90 ->setCreatedAt(Util::getDateObject($event['DATE_CREATE'], false, $event['TZ_FROM']))
91 ->setDtStamp(ICalUtil::getIcalDateTime())
92 ->setModified(ICalUtil::getIcalDateTime())
93 ->setWithTimezone(!$event['SKIP_TIME'])
94 ->setWithTime(!$event['SKIP_TIME'])
95 ->setOrganizer($event['ORGANIZER_MAIL'], $event['ORGANIZER_MAIL']['MAILTO'])
96 ->setDescription($event['DESCRIPTION'])
97 ->setTransparent($event['ACCESSIBILITY'])
98// ->setRRule($event['RRULE'])
99 ->setLocation($event['TEXT_LOCATION'])
100 ->setSequence((int)$event['VERSION'])
101 ->setStatus(Dictionary::INVITATION_STATUS['confirmed'])
102 ->setUrl($event['URL'])
103 )
104 ->get();
105
106 return $this;
107 }
108
110 {
111 $event = $this->event;
112 $fullDay = $event['DT_SKIP_TIME'] === 'Y';
113
114 $this->attachment = Calendar::getInstance()
115 ->setMethod(Dictionary::METHODS[$this->method])
116 ->setEvent(Event::getInstance($event['DAV_XML_ID'])
117 ->setName($event['NAME'])
118 ->setAttendees($this->attendees)
119 ->setStartsAt(Util::getDateObject($event['DATE_FROM'], $fullDay, $event['TZ_FROM']))
120 ->setEndsAt(Util::getDateObject($event['DATE_TO'], $fullDay, $event['TZ_TO']))
121 ->setCreatedAt(Util::getDateObject($event['DATE_CREATE'], false, $event['TZ_FROM']))
122 ->setDtStamp(ICalUtil::getIcalDateTime())
123 ->setModified(Util::getDateObject($event['TIMESTAMP_X'], false, $event['TZ_FROM']))
124 ->setWithTimezone(!$fullDay)
125 ->setWithTime(!$fullDay)
126 ->setOrganizer($this->attendees[$event['MEETING_HOST']], $this->getReplyAddress())
127 ->setDescription($event['DESCRIPTION'])
128 ->setTransparent(Dictionary::TRANSPARENT[$event['ACCESSIBILITY']])
129// ->setRRule($event['RRULE'])
130 ->setLocation($event['TEXT_LOCATION'])
131 ->setSequence((int)$event['VERSION'] + 1)
132 ->setStatus(Dictionary::INVITATION_STATUS['cancelled'])
133 )
134 ->get();
135
136 return $this;
137 }
138
139 private function getReplyAddress(): string
140 {
141 if (Loader::includeModule('mail'))
142 {
143 list($replyTo, $backUrl) = User::getReplyTo(
144 SITE_ID,
145 $this->event['OWNER_ID'],
146 'ICAL_INVENT',
147 $this->event['PARENT_ID'],
148 SITE_ID
149 );
150 }
151
152 return $replyTo;
153 }
154
155 private function prepareRequestEvent()
156 {
157 $event = $this->event;
158
159 if (!empty($event['ATTACHES']))
160 {
161 $filesDesc = [];
162 foreach ($event['ATTACHES'] as $attach)
163 {
164 $filesDesc[] = $attach['name'] . ' (' . $attach['link'] . ')';
165 }
166
167 if (!empty($event['DESCRIPTION']))
168 {
169 $event['DESCRIPTION'] .= "\r\n";
170 }
171 $event['DESCRIPTION'] .= Loc::getMessage('EC_FILES_TITLE') . ': ' . implode(', ', $filesDesc);
172 }
173
174 return $event;
175 }
176}
static getDateObject(string $date=null, $fullDay=true, $tz='UTC')
Definition: util.php:100
static getReplyTo($siteId, $userId, $entityType, $entityId, $entityLink=null, $backurl=null)
Definition: user.php:122
static getMessage($code, $replace=null, $language=null)
Definition: loc.php:29