static function ReminderAgent($eventId = 0, $userId = 0, $viewPath = '', $calendarType = '', $ownerId = 0, $index = 0)
{
if ($eventId > 0 && $userId > 0 && BitrixMainLoader::includeModule("im"))
{
$event = false;
$nowTime = time();
$events = CCalendarEvent::GetList([
'arFilter' => [
"ID" => $eventId,
"DELETED" => "N",
"FROM_LIMIT" => CCalendar::Date($nowTime - 3600, false),
"TO_LIMIT" => CCalendar::Date(CCalendar::GetMaxTimestamp(), false),
"ACTIVE_SECTION" => "Y"
],
'userId' => $userId,
'parseRecursion' => true,
'maxInstanceCount' => 3,
'preciseLimits' => true,
'fetchAttendees' => true,
'checkPermissions' => false,
'setDefaultLimit' => false
]);
if ($events && is_array($events[0]))
{
$event = $events[0];
}
if ($event && $event['MEETING_STATUS'] !== 'N')
{
$fromTs = CCalendar::Timestamp($event['DATE_FROM'], false, $event['DT_SKIP_TIME'] !== 'Y');
if ($event['DT_SKIP_TIME'] !== 'Y')
{
$fromTs -= $event['~USER_OFFSET_FROM'];
}
if (empty($calendarType))
{
$calendarType = $event['CAL_TYPE'];
}
$viewPath = CHTTP::urlDeleteParams($viewPath, ["EVENT_DATE"]);
$viewPath = CHTTP::urlAddParams($viewPath, ['EVENT_DATE' => CCalendar::Date($fromTs, false)]);
CIMNotify::Add(CCalendarReminder::getNotifyFields([
'userId' => $userId,
'entryId' => $eventId,
'entryName' => $event['NAME'],
'location' => BitrixCalendarRoomsUtil::getTextLocation($event['LOCATION']),
'calendarType' => $calendarType,
'fromTs' => $fromTs,
'dateFrom' => CCalendar::Date($fromTs, $event['DT_SKIP_TIME'] !== 'Y', true, true),
'viewPath' => $viewPath,
'dateFromFormatted' => CCalendar::GetFromToHtml(
$fromTs,
$fromTs + $event['DT_LENGTH'],
$event['DT_SKIP_TIME'] == 'Y',
$event['DT_LENGTH']
),
'index' => $index
]));
foreach(BitrixMainEventManager::getInstance()->findEventHandlers("calendar", "OnRemindEvent") as $event)
{
ExecuteModuleEventEx($event, [[
'eventId' => $eventId,
'userId' => $userId,
'viewPath' => $viewPath,
'calType' => $calendarType,
'ownerId' => $ownerId
]]);
}
if (CCalendarEvent::CheckRecurcion($event))
{
CCalendarReminder::updateReminders([
'id' => $eventId,
'arFields' => $event,
'userId' => $userId,
'path' => $viewPath,
'updateRecursive' => true
]);
}
}
CCalendar::SetOffset(false, null);
}
}