• Модуль: calendar
  • Путь к файлу: ~/bitrix/modules/calendar/lib/core/managers/accessibility.php
  • Класс: BitrixCalendarCoreManagersAccessibility
  • Вызов: Accessibility::getAbsences
public function getAbsences(array $userIds, int $timestampFromUTC, int $timestampToUTC): array
{
	if (!CCalendar::IsIntranetEnabled())
	{
		return [];
	}

	[$from, $to] = $this->formatLimitFromTimestamps($timestampFromUTC, $timestampToUTC);
	$usersAbsence = CIntranetUtils::GetAbsenceData(
		array(
			'DATE_START' => $from,
			'DATE_FINISH' => $to,
			'USERS' => $userIds,
			'PER_USER' => true,
		),
		BX_INTRANET_ABSENCE_HR
	);

	$serverOffset = (int)date('Z');
	$userOffset = CCalendar::GetOffset(CCalendar::GetUserId());
	$accessibility = $this->initAccessibility($userIds);
	foreach($usersAbsence as $userId => $absenceData)
	{
		foreach($absenceData as $event)
		{
			$fromUTC = CCalendar::TimestampUTC($event['DATE_ACTIVE_FROM']);
			$toUTC = CCalendar::TimestampUTC($event['DATE_ACTIVE_TO']);
			$isFullDay = $this->isFullDay($event['DATE_ACTIVE_FROM'], $event['DATE_ACTIVE_TO']);
			if ($this->isDateWithoutTimeOrIsMidnight($event['DATE_ACTIVE_TO']))
			{
				$toUTC += CCalendar::GetDayLen();
			}

			if ($isFullDay)
			{
				$from = Util::formatDateTimestampUTC($fromUTC);
				$to = Util::formatDateTimestampUTC($toUTC);
			}
			else
			{
				$from = Util::formatDateTimeTimestampUTC($fromUTC - $serverOffset - $userOffset);
				$to = Util::formatDateTimeTimestampUTC($toUTC - $serverOffset - $userOffset);
			}
			$accessibility[$userId][] = [
				'from' => $from,
				'to' => $to,
				'isFullDay' => $isFullDay,
				'name' => $event['PROPERTY_ABSENCE_TYPE_VALUE'] ?? null,
			];
		}
	}

	return $accessibility;
}