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