• Модуль: calendar
  • Путь к файлу: ~/bitrix/modules/calendar/classes/general/calendar_reminder.php
  • Класс: CCalendarReminder
  • Вызов: CCalendarReminder::ReminderAgent
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);
	}
}