• Модуль: 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;
}