1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
icalmaileventmanager.php
См. документацию.
1<?php
2
4
16
18{
19 public static function onMailMessageNew(Event $event)
20 {
21 $message = $event->getParameter('message');
22 $attachments = $event->getParameter('attachments');
23 $userId = $event->getParameter('userId');
24 $icalAccess = $event->getParameter('icalAccess');
25
27 {
28 Message::ensureAttachments($message);
29 $files = static::getFiles($message);
30
31 foreach ($files as $file)
32 {
33 $data = ICalMailManager::getFileContent($file['FILE_ID']);
34 if (!is_string($data))
35 {
36 continue;
37 }
38
39 $icalComponent = ICalMailManager::parseRequest($data);
40
41 if (!($icalComponent instanceof Calendar))
42 {
43 continue;
44 }
45
46 if (empty($message['OPTIONS']['iCal']))
47 {
48 $message['OPTIONS']['iCal'] = $data;
49
50 MailMessageTable::update($message['ID'], [
51 'OPTIONS' => $message['OPTIONS'],
52 ]);
53 }
54
55 if (!$icalComponent->hasOneEvent())
56 {
57 break;
58 }
59
60 if ($icalComponent->getMethod() === Dictionary::METHOD['reply'])
61 {
62 $result = ICalMailManager::handleReply($icalComponent);
63
64 break;
65 }
66 elseif (
67 ($icalComponent->getMethod() === Dictionary::METHOD['request'])
68 && $icalAccess
69 )
70 {
72 $icalComponent,
73 $userId,
74 IncomingInvitationRequestHandler::MEETING_STATUS_QUESTION_CODE,
76 );
77
78 if ($result !== null)
79 {
81 $message['ID'],
82 Message::ENTITY_TYPE_CALENDAR_EVENT,
83 $result,
85 );
86 }
87
88 break;
89 }
90 elseif ($icalComponent->getMethod() === Dictionary::METHOD['cancel'])
91 {
93
94 break;
95 }
96 }
97 }
98 }
99
100 public static function onUnbindEvent($calendarEventId, $entry): void
101 {
102 Loader::includeModule('calendar');
103 $calendarEventId = (int)$calendarEventId;
104
105 $userParams = [];
106
107 if ($calendarEventId <= 0)
108 {
109 return;
110 }
111
112 $events = EventTable::getList([
113 'select' => ['ID', 'OWNER_ID'],
114 'filter' => [
115 '=PARENT_ID' => $calendarEventId,
116 '!=ID' => $calendarEventId,
117 ],
118 ])->fetchAll();
119
120 if (empty($events))
121 {
122 return;
123 }
124
125 $entityValues = array_map(static fn($event) => (int)$event['ID'], $events);
126
127 $messageAccessCollection = MessageAccessTable::getList([
128 'select' => ['MESSAGE_ID', 'ENTITY_ID'],
129 'filter' => [
130 '=ENTITY_TYPE' => MessageAccessTable::ENTITY_TYPE_CALENDAR_EVENT,
131 'ENTITY_ID' => $entityValues,
132 ],
133 ])->fetchAll();
134
135 foreach ($events as $event)
136 {
137 $messageAccess = array_filter($messageAccessCollection, static fn($msgAccess) => (int)$msgAccess['ENTITY_ID'] === (int)$event['ID']);
138 if ($messageAccess)
139 {
140 $messageId = (int)$messageAccess[0]['MESSAGE_ID'];
141 $userParams[(int)$event['OWNER_ID']] = compact('messageId');
142 }
143 }
144
145 MessageAccessTable::deleteByFilter([
146 '=ENTITY_TYPE' => MessageAccessTable::ENTITY_TYPE_CALENDAR_EVENT,
147 'ENTITY_ID' => $entityValues,
148 ]);
149
150 \Bitrix\Pull\Event::add(array_keys($userParams), [
151 'module_id' => 'mail',
152 'command' => 'unbindItem',
153 'params' => [
154 'type' => 'meeting',
155 ],
156 'user_params' => $userParams,
157 ]
158 );
159 }
160
161 private static function getFiles($message)
162 {
163 if ($message['ATTACHMENTS'] > 0)
164 {
165 return MailMessageAttachmentTable::getList([
166 'select' => [
167 'ID',
168 'FILE_ID',
169 'FILE_NAME',
170 'FILE_SIZE',
171 'CONTENT_TYPE',
172 ],
173 'filter' => [
174 '=MESSAGE_ID' => $message['ID'],
175 '@CONTENT_TYPE' => ICalMailManager::CONTENT_TYPES
176 ],
177 ])->fetchAll();
178 }
179
180 return [];
181 }
182}
if(! $messageFields||!isset($messageFields['message_id'])||!isset($messageFields['status'])||!CModule::IncludeModule("messageservice")) $messageId
Определения callback_ismscenter.php:26
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
Определения check_mail.php:18
static onUnbindEvent($calendarEventId, $entry)
Определения icalmaileventmanager.php:100
static hasICalAttachments(array $attachments)
Определения icalmailmanager.php:66
static handleRequest(Calendar $icalComponent, int $userId, string $decision, $message)
Определения icalmailmanager.php:79
static parseRequest(string $content)
Определения icalmailmanager.php:36
static handleCancel(Calendar $icalComponent, $userId)
Определения icalmailmanager.php:98
static handleReply(Calendar $icalComponent)
Определения icalmailmanager.php:25
static provideAccessToMessage(int $mailMessageId, string $entityType, int $entityId, int $userId)
Определения secretary.php:119
Определения event.php:5
Определения loader.php:13
static add($recipient, array $parameters, $channelType=\CPullChannel::TYPE_PRIVATE)
Определения event.php:22
$data['IS_AVAILABLE']
Определения .description.php:13
$result
Определения get_property_values.php:14
$files
Определения mysql_to_pgsql.php:30
$message
Определения payment.php:8
$event
Определения prolog_after.php:141
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393