20 if (!is_object(
$USER))
39 $now = time() + CCalendar::GetOffset(
$userId);
41 if ((
$params[
'FULL'] ??
null) !==
true)
43 $eventTimeCalculated = self::calculateEventTime(
$userId);
46 'js' =>
'/bitrix/js/calendar/core_planner_handler.js',
47 'css' =>
'/bitrix/js/calendar/core_planner_handler.css',
48 'lang' =>
BX_ROOT.
'/modules/calendar/lang/'.LANGUAGE_ID.
'/core_planner_handler.php',
49 'rel' =>
array(
'date',
'timer')
54 'CALENDAR_ENABLED' =>
true,
55 'EVENTS' => $arEvents,
56 'EVENT_TIME' => $eventTimeCalculated < 0
61 'SCRIPTS' => [
'calendar_planner_handler']
69 'bx_event_calendar_request',
73 $date_from = CCalendar::Date(time() - date(
'Z') + CCalendar::GetCurrentOffsetUTC(
$userId),
false);
74 $ts_date_from = CCalendar::Timestamp($date_from) - CCalendar::GetCurrentOffsetUTC(
$userId);
75 $date_from = CCalendar::Date($ts_date_from);
76 $ts_date_to = $ts_date_from + CCalendar::GetDayLen() - 1;
77 $date_to = $date_from;
79 $arNewEvents = CCalendarEvent::GetList([
83 'FROM_LIMIT' => $date_from,
84 'TO_LIMIT' => $date_to,
85 'ACTIVE_SECTION' =>
'Y'
87 'arSelect' => \CCalendarEvent::$defaultSelectEvent,
88 'parseRecursion' =>
true,
89 'preciseLimits' =>
true,
91 'skipDeclined' =>
true,
92 'fetchAttendees' =>
false,
93 'fetchMeetings' =>
true,
94 'getUserfields' =>
false,
97 if (!empty($arNewEvents))
99 $today = ConvertTimeStamp($now,
'SHORT');
101 $format = $DB::dateFormatToPHP(
IsAmPmMode() ?
'H:MI T' :
'HH:MI');
103 foreach ($arNewEvents as $arEvent)
105 if ($arEvent[
'IS_MEETING'] && $arEvent[
'MEETING_STATUS'] ===
'N')
110 $fromTo = CCalendarEvent::GetEventFromToForUser($arEvent,
$userId);
112 $ts_from = $fromTo[
'TS_FROM'];
114 $ts_from_utc = $arEvent[
'DATE_FROM_TS_UTC'];
115 $ts_to_utc = $arEvent[
'DATE_TO_TS_UTC'];
117 if ($arEvent[
'RRULE'])
119 $ts_from_utc = $fromTo[
'TS_FROM'] - CCalendar::GetCurrentOffsetUTC(
$userId);
120 $ts_to_utc = $ts_from_utc + $arEvent[
'DT_LENGTH'];
123 if ($arEvent[
'RRULE'] && ($ts_to_utc <= $ts_date_from || $ts_from_utc >= $ts_date_to))
128 if(($eventTime < 0 || $eventTime > $ts_from) && $ts_from >= $now)
130 $eventTime = $ts_from;
136 'EVENT_ID' => $arEvent[
'ID'],
137 'EVENT_DATE' => $today
140 'ID' => $arEvent[
'ID'],
141 'CAL_TYPE' =>
'user',
143 'CREATED_BY' => $arEvent[
'CREATED_BY'],
144 'NAME' => $arEvent[
'NAME'],
145 'DATE_FROM' => $fromTo[
'DATE_FROM'],
146 'DATE_TO' => $fromTo[
'DATE_TO'],
147 'TIME_FROM' =>
FormatDate($format, $fromTo[
'TS_FROM']),
148 'TIME_TO' =>
FormatDate($format, $fromTo[
'TS_TO']),
149 'IMPORTANCE' => $arEvent[
'IMPORTANCE'],
150 'ACCESSIBILITY' => $arEvent[
'ACCESSIBILITY'],
151 'DATE_FROM_TODAY' => $today === ConvertTimeStamp($fromTo[
'TS_FROM'],
'SHORT'),
152 'DATE_TO_TODAY' => $today === ConvertTimeStamp($fromTo[
'TS_TO'],
'SHORT'),
153 'SORT' => $fromTo[
'TS_FROM'],
154 'EVENT_PATH' => $eventPath
161 usort($arEvents,
array(
'CCalendarEventHandlers',
'DateSort'));
164 'js' =>
'/bitrix/js/calendar/core_planner_handler.js',
165 'css' =>
'/bitrix/js/calendar/core_planner_handler.css',
166 'lang' =>
BX_ROOT.
'/modules/calendar/lang/'.LANGUAGE_ID.
'/core_planner_handler.php',
167 'rel' =>
array(
'date',
'timer')
172 'CALENDAR_ENABLED' =>
true,
173 'EVENTS' => $arEvents,
176 'SCRIPTS' => [
'calendar_planner_handler']
180 private static function calculateEventTime(
$userId)
182 $now = time() + CCalendar::GetOffset(
$userId);
185 $date_from = CCalendar::Date(time() - date(
'Z') + CCalendar::GetCurrentOffsetUTC(
$userId),
false);
186 $ts_date_from = CCalendar::Timestamp($date_from) - CCalendar::GetCurrentOffsetUTC(
$userId);
187 $date_from = CCalendar::Date($ts_date_from);
188 $ts_date_to = $ts_date_from + CCalendar::GetDayLen() - 1;
189 $date_to = $date_from;
191 $arNewEvents = CCalendarEvent::GetList([
193 'CAL_TYPE' =>
'user',
195 'FROM_LIMIT' => $date_from,
196 'TO_LIMIT' => $date_to,
197 'ACTIVE_SECTION' =>
'Y'
220 'parseRecursion' =>
true,
221 'preciseLimits' =>
true,
223 'skipDeclined' =>
true,
224 'fetchAttendees' =>
false,
225 'getUserfields' =>
false,
226 'checkPermissions' =>
false,
229 if (!empty($arNewEvents))
231 foreach ($arNewEvents as $arEvent)
233 if ($arEvent[
'IS_MEETING'] && $arEvent[
'MEETING_STATUS'] ===
'N')
239 $ts_from = $fromTo[
'TS_FROM'];
241 $ts_from_utc = $arEvent[
'DATE_FROM_TS_UTC'];
242 $ts_to_utc = $arEvent[
'DATE_TO_TS_UTC'];
244 if ($arEvent[
'RRULE'])
247 $ts_to_utc = $ts_from_utc + $arEvent[
'DT_LENGTH'];
250 if ($arEvent[
'RRULE'] && ($ts_to_utc <= $ts_date_from || $ts_from_utc >= $ts_date_to))
255 if(($eventTime < 0 || $eventTime > $ts_from) && $ts_from >= $now)
257 $eventTime = $ts_from;
279 case 'calendar_show':
283 'SITE_ID' =>
$params[
'SITE_ID']
294 $date_from = CCalendar::Date(time() - date(
'Z') + CCalendar::GetCurrentOffsetUTC(),
false);
295 $ts_date_from = CCalendar::Timestamp($date_from) - CCalendar::GetCurrentOffsetUTC();
296 $date_from = CCalendar::Date($ts_date_from);
297 $date_to = $date_from;
298 $ts_date_to = $ts_date_from + CCalendar::GetDayLen() - 1;
300 $res = CCalendarEvent::GetList(
304 "FROM_LIMIT" => $date_from,
305 "TO_LIMIT" => $date_to
307 'parseRecursion' =>
true,
308 'fetchAttendees' =>
true,
309 'checkPermissions' =>
true,
310 'skipDeclined' =>
true
315 foreach (
$res as $arEvent)
317 if ($arEvent[
'IS_MEETING'] && $arEvent[
'MEETING_STATUS'] ===
'N')
321 $fromTo = CCalendarEvent::GetEventFromToForUser($arEvent,
$userId);
323 if ($arEvent[
'RRULE'])
325 $ts_from_utc = $fromTo[
'TS_FROM'] - CCalendar::GetCurrentOffsetUTC();
326 $ts_to_utc = $ts_from_utc + $arEvent[
'DT_LENGTH'];
327 if ($ts_to_utc <= $ts_date_from || $ts_from_utc >= $ts_date_to)
333 $arEvents[] = $arEvent;
337 if (is_array($arEvents) && !empty($arEvents))
339 $arEvent = $arEvents[0];
341 $arEvent[
'GUESTS'] =
array();
342 if ($arEvent[
'IS_MEETING'] && is_array($arEvent[
'ATTENDEE_LIST']))
344 $userIndex = CCalendarEvent::getUserIndex();
345 foreach ($arEvent[
'ATTENDEE_LIST'] as $attendee)
347 if (isset($userIndex[$attendee[
"id"]]))
349 $arEvent[
'GUESTS'][] =
array(
350 'id' => $attendee[
'id'],
351 'name' => $userIndex[$attendee[
"id"]][
'DISPLAY_NAME'],
352 'status' => $attendee[
'status'],
353 'accessibility' => $arEvent[
'ACCESSIBILITY'],
354 'bHost' => (
int)$attendee[
'id'] === (
int)$arEvent[
'MEETING_HOST'],
357 if ((
int)$attendee[
'id'] === (
int)
$USER->GetID())
359 $arEvent[
'STATUS'] = $attendee[
'status'];
365 $set = CCalendar::GetSettings();
367 '#user_id#', $arEvent[
'CREATED_BY'], $set[
'path_to_user_calendar']
368 ).
'?EVENT_ID='.$arEvent[
'ID'];
370 $fromTo = CCalendarEvent::GetEventFromToForUser($arEvent,
$USER->GetID());
373 'ID' => $arEvent[
'ID'],
374 'NAME' => $arEvent[
'NAME'],
375 'DETAIL_TEXT' => $arEvent[
'DESCRIPTION'],
376 'DATE_FROM' => $fromTo[
'DATE_FROM'],
377 'DATE_TO' => $fromTo[
'DATE_TO'],
378 'ACCESSIBILITY' => $arEvent[
'ACCESSIBILITY'],
379 'IMPORTANCE' => $arEvent[
'IMPORTANCE'],
380 'STATUS' => $arEvent[
'STATUS'],
381 'IS_MEETING' => $arEvent[
'IS_MEETING'] ?
'Y' :
'N',
382 'GUESTS' => $arEvent[
'GUESTS'],
383 'UF_WEBDAV_CAL_EVENT' => $arEvent[
'UF_WEBDAV_CAL_EVENT'],
420 $today = ConvertTimeStamp(time() + CCalendar::GetOffset(),
'SHORT');
422 $userSettings = UserSettings::get(
$userId);
423 $reminderList = $userSettings[
'defaultReminders'][
'withTime'];
425 'CAL_TYPE' =>
'user',
426 'OWNER_ID' =>
$USER->GetID(),
430 'SECTIONS' => CCalendar::GetMeetingSection(
$userId,
true),
431 'ATTENDEES_CODES' => [
'U' .
$userId],
434 'REMIND' => $reminderList,
439 $data[
'ACCESSIBILITY'] =
'absent';
442 CCalendar::SaveEvent(
array(
463 $today = ConvertTimeStamp(time() + \CCalendar::GetOffset(),
'SHORT');
469 'DESCRIPTION' => CCalendarEvent::ParseText(
$event[
'DETAIL_TEXT'],
$event[
'ID'],
$event[
'UF_WEBDAV_CAL_EVENT']),
470 'URL' =>
'/company/personal/user/'.
$USER->GetID().
'/calendar/?EVENT_ID=' .$event[
'ID'],
473 'STATUS' =>
$event[
'STATUS'],
476 $res[
'DATE_FROM_TODAY'] = ConvertTimeStamp(
$res[
'DATE_FROM'],
'SHORT') == $today;
477 $res[
'DATE_TO_TODAY'] = ConvertTimeStamp(
$res[
'DATE_TO'],
'SHORT') == $today;
479 if (
$res[
'DATE_FROM_TODAY'])
492 if (
$res[
'DATE_TO_TODAY'])
493 $res[
'DATE_F'] .=
' - '.$res[
'DATE_T'];
495 if (
$res[
'DATE_FROM'] > $now)
501 else if (
$res[
'DATE_TO_TODAY'])
504 array(
'#today#',
'#time#'),
505 array(
'today',
'H:i'),
511 $fmt = preg_replace(
'/:s$/',
'', $DB::DateFormatToPHP(CSite::GetDateFormat(
"FULL")));
516 if (
$event[
'IS_MEETING'] ===
'Y')
521 $guest[
'url'] = str_replace(
522 array(
'#ID#',
'#USER_ID#'),
524 \COption::GetOptionString(
'intranet',
'path_user',
'/company/personal/user/#USER_ID#/',
$arParams[
'SITE_ID'])
529 $res[
'HOST'] = $guest;
533 $arGuests[$guest[
'status']][] = $guest;
537 $res[
'GUESTS'] = array_merge($arGuests[
'Y'], $arGuests[
'N'], $arGuests[
'Q']);
540 if (mb_strlen(
$res[
'DESCRIPTION']) > 150)
542 $res[
'DESCRIPTION'] = CUtil::closetags(mb_substr(
$res[
'DESCRIPTION'], 0, 150)).
'...';
550 $res =
array(
'error' =>
'event not found');
556 private static function DateSort(
$a, $b)
558 if (
$a[
'SORT'] == $b[
'SORT'])
562 if (
$a[
'SORT'] < $b[
'SORT'])
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
static plannerActionShow($arParams)
static OnPlannerAction($action, $params)
static OnPlannerInit($params)
static plannerActionAdd($arParams)
static MakeDateTime($date, $time)
static getEvent($arParams)
static GetEventFromToForUser($params, $userId)
static GetCurrentOffsetUTC($userId=false)
static urlDeleteParams($url, $delete_params, $options=array())
static urlAddParams($url, $add_params, $options=[])
static RegisterExt($name, $arPaths)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
IsAmPmMode($returnConst=false)
FormatDate($format="", $timestamp=false, $now=false, ?string $languageId=null)
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
GetMessage($name, $aReplace=null)
MakeTimeStamp($datetime, $format=false)
if(empty($signedUserToken)) $key
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']