- Модуль: intranet
- Путь к файлу: ~/bitrix/modules/intranet/lib/secretary.php
- Класс: BitrixIntranetSecretary
- Вызов: Secretary::createCalendarChat
static function createCalendarChat($calendarData, $userId, $parentCalendarData = []): int
{
if (!self::checkAccessForIm() || !self::checkAccessForCalendar())
{
throw new BitrixMainSystemException('create calendar chat: failed to load modules');
}
$chat = new CIMChat(0);
$chatFields = [
'TITLE' => $calendarData['TITLE'],
'TYPE' => IM_MESSAGE_CHAT,
'ENTITY_TYPE' => CCalendar::CALENDAR_CHAT_ENTITY_TYPE,
'ENTITY_ID' => $calendarData['ID'],
'SKIP_ADD_MESSAGE' => 'Y',
'AUTHOR_ID' => $userId,
'USERS' => $calendarData['USER_IDS']
];
$chatId = $chat->add($chatFields);
if ($chatId)
{
$pathToCalendar = CCalendar::GetPathForCalendarEx($userId);
$pathToEvent = CHTTP::urlAddParams($pathToCalendar, ['EVENT_ID' => $calendarData['ID']]);
$entryLinkTitle = '[url=' . $pathToEvent . ']' . $calendarData['TITLE'] . '[/url]';
$chatMessageFields = [
'FROM_USER_ID' => $userId,
'MESSAGE' => Loc::getMessage(
'INTRANET_CONTROL_BUTTON_CALENDAR_CHAT_FIRST_MESSAGE',
[
'#EVENT_TITLE#' => $entryLinkTitle,
'#DATETIME_FROM#' => CCalendar::Date(
CCalendar::Timestamp($calendarData['DATE_FROM']),
$calendarData['DT_SKIP_TIME'] === 'N',
true, true
)
]
),
'SYSTEM' => 'Y',
'INCREMENT_COUNTER' => 'N',
'PUSH' => 'Y',
'TO_CHAT_ID' => $chatId,
'SKIP_USER_CHECK' => 'Y',
'SKIP_COMMAND' => 'Y'
];
CIMChat::addMessage($chatMessageFields);
$calendarData['MEETING']['CHAT_ID'] = $chatId;
CCalendar::SaveEvent([
'arFields' => [
'ID' => $calendarData['ID'],
'MEETING' => $calendarData['MEETING']
],
'checkPermission' => false,
'userId' => $calendarData['CREATED_BY']
]);
if ($parentCalendarData)
{
$parentCalendarData['MEETING']['CHAT_ID'] = $chatId;
CCalendar::SaveEvent([
'arFields' => [
'ID' => $parentCalendarData['ID'],
'MEETING' => $parentCalendarData['MEETING']
],
'checkPermission' => false,
'userId' => $parentCalendarData['CREATED_BY']
]);
}
CCalendar::ClearCache('event_list');
}
return $chatId;
}