static function OnPlannerInit($params)
{
global $USER, $DB, $CACHE_MANAGER;
if (!isset($params['USER_ID']) || (int)$params['USER_ID'] <= 0)
{
if (!is_object($USER))
{
return false;
}
$userId = $USER->GetID();
}
else
{
$userId = $params['USER_ID'];
}
if ($userId <= 0)
{
return false;
}
$CACHE_MANAGER->RegisterTag('calendar_user_'.$userId);
$pathToCalendar = CHTTP::urlDeleteParams(CCalendar::GetPathForCalendarEx($userId), [
'action',
'sessid',
'bx_event_calendar_request',
'EVENT_ID'
]);
$date_from = CCalendar::Date(time() - date('Z') + CCalendar::GetCurrentOffsetUTC($userId), false);
$ts_date_from = CCalendar::Timestamp($date_from) - CCalendar::GetCurrentOffsetUTC($userId);
$date_from = CCalendar::Date($ts_date_from);
$ts_date_to = $ts_date_from + CCalendar::GetDayLen() - 1;
$date_to = $date_from;
$arEvents = [];
$eventTime = -1;
$arNewEvents = CCalendarEvent::GetList([
'arFilter' => [
'CAL_TYPE' => 'user',
'OWNER_ID' => $userId,
'FROM_LIMIT' => $date_from,
'TO_LIMIT' => $date_to,
'ACTIVE_SECTION' => 'Y'
],
'arOrder' => ['DATE_FROM_TS_UTC' => 'asc'],
'parseRecursion' => true,
'preciseLimits' => true,
'userId' => $userId,
'skipDeclined' => true,
'fetchAttendees' => false,
'fetchMeetings' => true
]);
if (!empty($arNewEvents))
{
$now = time() + CTimeZone::GetOffset($userId);
$today = ConvertTimeStamp($now, 'SHORT');
$format = $DB::dateFormatToPHP(IsAmPmMode() ? 'H:MI T' : 'HH:MI');
foreach ($arNewEvents as $arEvent)
{
if ($arEvent['IS_MEETING'] && $arEvent['MEETING_STATUS'] === 'N')
{
continue;
}
$fromTo = CCalendarEvent::GetEventFromToForUser($arEvent, $userId);
$ts_from = $fromTo['TS_FROM'];
//$ts_to = $fromTo['TS_TO'];
$ts_from_utc = $arEvent['DATE_FROM_TS_UTC'];
$ts_to_utc = $arEvent['DATE_TO_TS_UTC'];
if ($arEvent['RRULE'])
{
$ts_from_utc = $fromTo['TS_FROM'] - CCalendar::GetCurrentOffsetUTC($userId);
$ts_to_utc = $ts_from_utc + $arEvent['DT_LENGTH'];
}
if ($arEvent['RRULE'] && ($ts_to_utc <= $ts_date_from || $ts_from_utc >= $ts_date_to))
{
continue;
}
if(($eventTime < 0 || $eventTime > $ts_from) && $ts_from >= $now)
{
$eventTime = $ts_from;
}
if($params['FULL'])
{
$eventPath = CHTTP::urlAddParams($pathToCalendar, [
'EVENT_ID' => $arEvent['ID'],
'EVENT_DATE' => $today
]);
$arEvents[] = [
'ID' => $arEvent['ID'],
'CAL_TYPE' => 'user',
'OWNER_ID' => $userId,
'CREATED_BY' => $arEvent['CREATED_BY'],
'NAME' => $arEvent['NAME'],
'DATE_FROM' => $fromTo['DATE_FROM'],
'DATE_TO' => $fromTo['DATE_TO'],
'TIME_FROM' => FormatDate($format, $fromTo['TS_FROM']),
'TIME_TO' => FormatDate($format, $fromTo['TS_TO']),
'IMPORTANCE' => $arEvent['IMPORTANCE'],
'ACCESSIBILITY' => $arEvent['ACCESSIBILITY'],
'DATE_FROM_TODAY' => $today == ConvertTimeStamp($fromTo['TS_FROM'], 'SHORT'),
'DATE_TO_TODAY' => $today == ConvertTimeStamp($fromTo['TS_TO'], 'SHORT'),
'SORT' => $fromTo['TS_FROM'],
'EVENT_PATH' => $eventPath
];
}
}
}
// Sort
usort($arEvents, array('CCalendarEventHandlers', 'DateSort'));
CJSCore::RegisterExt('calendar_planner_handler', array(
'js' => '/bitrix/js/calendar/core_planner_handler.js',
'css' => '/bitrix/js/calendar/core_planner_handler.css',
'lang' => BX_ROOT.'/modules/calendar/lang/'.LANGUAGE_ID.'/core_planner_handler.php',
'rel' => array('date', 'timer')
));
return [
'DATA' => [
'CALENDAR_ENABLED' => true,
'EVENTS' => $arEvents,
'EVENT_TIME' => $eventTime < 0 ? '' : (FormatDate(IsAmPmMode() ? "g:i a" : "H:i", $eventTime)),
],
'SCRIPTS' => ['calendar_planner_handler']
];
}