• Модуль: calendar
  • Путь к файлу: ~/bitrix/modules/calendar/classes/general/calendar_notify.php
  • Класс: CCalendarNotify
  • Вызов: CCalendarNotify::Send
static function Send($params)
{
	if (!Loader::includeModule("im"))
	{
		return false;
	}

	$culture = BitrixMainContext::getCurrent()->getCulture();

	$params['rrule'] = CCalendarEvent::GetRRULEDescription($params['fields'] ?? null, false, false);
	$params["eventId"] = (int)($params["eventId"] ?? null);
	$mode = $params['mode'];
	$fromUser = (int)$params["userId"];
	$toUser = (int)$params["guestId"];
	if (!$fromUser || !$toUser || ($toUser === $fromUser && !in_array($mode, ['status_accept', 'status_decline', 'fail_ical_invite'])))
	{
		return false;
	}

	$fromTimestamp = CCalendar::Timestamp($params["from"] ?? null);
	if (($params['fields']['DT_SKIP_TIME'] ?? null) === 'Y')
	{
		$params["from"] = CCalendar::Date($fromTimestamp, false);
		$params["from_formatted"] = FormatDate($culture->getFullDateFormat(), $fromTimestamp);

	}
	else
	{
		$params["from"] = CCalendar::Date($fromTimestamp, true, true, true);
		$params["from_formatted"] = FormatDate($culture->getFullDateFormat(), $fromTimestamp)
			. ' '
			. FormatDate($culture->getShortTimeFormat(), $fromTimestamp);
	}

	$notifyFields = [
		'EMAIL_TEMPLATE' => "CALENDAR_INVITATION",
		'NOTIFY_MODULE' => "calendar",
	];

	if ($mode === 'accept' || $mode === 'decline')
	{
		$notifyFields['FROM_USER_ID'] = $toUser;
		$notifyFields['TO_USER_ID'] = $fromUser;
	}
	else
	{
		$notifyFields['FROM_USER_ID'] = $fromUser;
		$notifyFields['TO_USER_ID'] = $toUser;
	}

	$userOrm = BitrixMainUserTable::getList([
		'filter' => ['=ID' => $toUser, '=ACTIVE' => 'Y'],
		'select' => ['ID']
	]);
	if (!$userOrm->fetch())
	{
		return false;
	}

	$eventId = $params["eventId"] ?? null;
	if (($params['isSharing'] ?? false) && $params['mode'] === 'status_accept')
	{
		$params["pathToCalendar"] = CCalendar::GetPathForCalendarEx($notifyFields['FROM_USER_ID'] ?? null);
	}
	else
	{
		$params["pathToCalendar"] = CCalendar::GetPathForCalendarEx($notifyFields['TO_USER_ID'] ?? null);
	}

	if (!empty($params["pathToCalendar"]) && $eventId)
	{
		$params["pathToCalendar"] = CHTTP::urlDeleteParams($params["pathToCalendar"], ["action", "sessid", "bx_event_calendar_request", "EVENT_ID"]);

		if (($params['isSharing'] ?? false) && $mode === 'cancel_sharing')
		{
			$params["pathToEvent"] = CHTTP::urlAddParams($params["pathToCalendar"], ['EVENT_ID' => $eventId, 'IS_SHARING' => 1]);
		}
		else
		{
			$params["pathToEvent"] = CHTTP::urlAddParams($params["pathToCalendar"], ['EVENT_ID' => $eventId]);
		}
	}

	$notifyFields = [
		'FROM_USER_ID' => $fromUser,
		'TO_USER_ID' => $toUser,
		'EMAIL_TEMPLATE' => "CALENDAR_INVITATION",
		'NOTIFY_MODULE' => "calendar",
	];

	switch($mode)
	{
		case 'invite':
			$notifyFields = self::Invite($notifyFields, $params);
			break;
		case 'change_notify':
			$notifyFields = self::ChangeNotify($notifyFields, $params);
			break;
		case 'cancel':
			$notifyFields = self::Cancel($notifyFields, $params);
			break;
		case 'cancel_this':
			$notifyFields = self::CancelInstance($notifyFields, $params);
			break;
		case 'cancel_all':
			$notifyFields = self::CancelAllReccurent($notifyFields, $params);
			break;
		case 'cancel_sharing':
			$notifyFields = self::CancelSharing($notifyFields, $params);
			break;
		case 'accept':
		case 'decline':
			$notifyFields = self::MeetingStatus($notifyFields, $params);
			break;
		case 'status_accept':
		case 'status_decline':
			$notifyFields = self::MeetingStatusInfo($notifyFields, $params);
			break;
		case 'fail_ical_invite':
			$notifyFields = self::NotifyFailIcalInvite($notifyFields, $params);
			break;
		case 'delete_location':
			$notifyFields = self::DeleteLocation($notifyFields, $params);
			break;
		case 'cancel_booking':
			$notifyFields = self::CancelBooking($notifyFields, $params);
			break;
	}

	$messageId = CIMNotify::Add($notifyFields);
	if (!empty($params['markRead']) && $messageId > 0)
	{
		$CIMNotify = new CIMNotify((int)($params["userId"] ?? null));
		$CIMNotify->MarkNotifyRead($messageId);
	}

	foreach(GetModuleEvents("calendar", "OnSendInvitationMessage", true) as $arEvent)
	{
		ExecuteModuleEventEx($arEvent, [$params]);
	}

	if (($params['isSharing'] ?? false) && $mode === 'decline')
	{
		self::notifySharingUser($params["eventId"]);
	}
}