1C-Bitrix
25.700.0
Загрузка...
Поиск...
Не найдено
icalmaileventmanager.php
См. документацию.
1
<?php
2
3
namespace
Bitrix\Mail\Integration\Calendar\ICal
;
4
5
use
Bitrix\Calendar\ICal\MailInvitation\IncomingInvitationRequestHandler
;
6
use
Bitrix\Calendar\ICal\Parser\Calendar
;
7
use
Bitrix\Calendar\ICal\Parser\Dictionary
;
8
use
Bitrix\Calendar\Internals\EventTable
;
9
use
Bitrix\Mail\Helper\Message
;
10
use
Bitrix\Mail\Integration\Intranet\Secretary
;
11
use
Bitrix\Mail\Internals\MailMessageAttachmentTable
;
12
use
Bitrix\Mail\Internals\MessageAccessTable
;
13
use
Bitrix\Mail\MailMessageTable
;
14
use
Bitrix\Main\Event
;
15
use
Bitrix\Main\Loader
;
16
17
class
ICalMailEventManager
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
26
if
(
ICalMailManager::hasICalAttachments
($attachments))
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
{
71
$result
=
ICalMailManager::handleRequest
(
72
$icalComponent,
73
$userId
,
74
IncomingInvitationRequestHandler::MEETING_STATUS_QUESTION_CODE,
75
$message
76
);
77
78
if
(
$result
!==
null
)
79
{
80
Secretary::provideAccessToMessage
(
81
$message
[
'ID'
],
82
Message::ENTITY_TYPE_CALENDAR_EVENT,
83
$result
,
84
$userId
85
);
86
}
87
88
break
;
89
}
90
elseif
($icalComponent->getMethod() === Dictionary::METHOD[
'cancel'
])
91
{
92
$result
=
ICalMailManager::handleCancel
($icalComponent,
$userId
);
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
}
$messageId
if(! $messageFields||!isset($messageFields['message_id'])||!isset($messageFields['status'])||!CModule::IncludeModule("messageservice")) $messageId
Определения
callback_ismscenter.php:26
$userId
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
Определения
check_mail.php:18
Bitrix\Calendar\ICal\MailInvitation\IncomingInvitationRequestHandler
Определения
incominginvitationrequesthandler.php:31
Bitrix\Calendar\ICal\Parser\Calendar
Определения
calendar.php:8
Bitrix\Calendar\ICal\Parser\Dictionary
Определения
dictionary.php:8
Bitrix\Calendar\Internals\EventTable
Определения
eventtable.php:36
Bitrix\Mail\Integration\Calendar\ICal\ICalMailEventManager
Определения
icalmaileventmanager.php:18
Bitrix\Mail\Integration\Calendar\ICal\ICalMailEventManager\onMailMessageNew
static onMailMessageNew(Event $event)
Определения
icalmaileventmanager.php:19
Bitrix\Mail\Integration\Calendar\ICal\ICalMailEventManager\onUnbindEvent
static onUnbindEvent($calendarEventId, $entry)
Определения
icalmaileventmanager.php:100
Bitrix\Mail\Integration\Calendar\ICal\ICalMailManager\hasICalAttachments
static hasICalAttachments(array $attachments)
Определения
icalmailmanager.php:66
Bitrix\Mail\Integration\Calendar\ICal\ICalMailManager\handleRequest
static handleRequest(Calendar $icalComponent, int $userId, string $decision, $message)
Определения
icalmailmanager.php:79
Bitrix\Mail\Integration\Calendar\ICal\ICalMailManager\parseRequest
static parseRequest(string $content)
Определения
icalmailmanager.php:36
Bitrix\Mail\Integration\Calendar\ICal\ICalMailManager\handleCancel
static handleCancel(Calendar $icalComponent, $userId)
Определения
icalmailmanager.php:98
Bitrix\Mail\Integration\Calendar\ICal\ICalMailManager\handleReply
static handleReply(Calendar $icalComponent)
Определения
icalmailmanager.php:25
Bitrix\Mail\Integration\Calendar\ICal\ICalMailManager\getFileContent
static getFileContent($fileId)
Определения
icalmailmanager.php:55
Bitrix\Mail\Integration\Calendar\ICal\ICalMailManager\CONTENT_TYPES
const CONTENT_TYPES
Определения
icalmailmanager.php:18
Bitrix\Mail\Integration\Intranet\Secretary
Определения
secretary.php:12
Bitrix\Mail\Integration\Intranet\Secretary\provideAccessToMessage
static provideAccessToMessage(int $mailMessageId, string $entityType, int $entityId, int $userId)
Определения
secretary.php:119
Bitrix\Mail\Internals\MailMessageAttachmentTable
Определения
mailmessageattachment.php:26
Bitrix\Mail\Internals\MessageAccessTable
Определения
messageaccess.php:25
Bitrix\Mail\MailMessageTable
Определения
mailmessage.php:29
Bitrix\Main\Event
Определения
event.php:5
Bitrix\Main\Loader
Определения
loader.php:13
Bitrix\Pull\Event\add
static add($recipient, array $parameters, $channelType=\CPullChannel::TYPE_PRIVATE)
Определения
event.php:22
$data
$data['IS_AVAILABLE']
Определения
.description.php:13
$result
$result
Определения
get_property_values.php:14
Bitrix\Mail\Helper\Message
Определения
messageinternaldatehandler.php:3
Bitrix\Mail\Integration\Calendar\ICal
Определения
icalmaileventmanager.php:3
Bitrix\Main\$files
$files
Определения
mysql_to_pgsql.php:30
$message
$message
Определения
payment.php:8
$event
$event
Определения
prolog_after.php:141
elseif
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения
prolog_main_admin.php:393
bitrix
modules
mail
lib
integration
calendar
ical
icalmaileventmanager.php
Создано системой
1.14.0