- Модуль: calendar
- Путь к файлу: ~/bitrix/modules/calendar/lib/rooms/accessibilitymanager.php
- Класс: BitrixCalendarRoomsAccessibilityManager
- Вызов: AccessibilityManager::checkAccessibility
static function checkAccessibility(string $location = '', array $params = []): bool
{
$location = Util::parseLocation($location);
$res = true;
if ($location['room_id'] || $location['mrid'])
{
$fromTs = CCalendar::Timestamp($params['fields']['DATE_FROM']);
$toTs = CCalendar::Timestamp($params['fields']['DATE_TO']);
if ($params['fields']['SKIP_TIME'])
{
$toTs += CCalendar::GetDayLen();
}
$eventId = (int)$params['fields']['ID'];
$from = CCalendar::Date($fromTs, false);
$to = CCalendar::Date($toTs, false);
$curUserId = CCalendar::GetCurUserId();
$deltaOffset = isset($params['timezone'])
? (CCalendar::GetTimezoneOffset($params['timezone']) - CCalendar::GetCurrentOffsetUTC($curUserId))
: 0
;
if ($location['mrid'])
{
$meetingRoomRes = IBlockMeetingRoom::getAccessibilityForMeetingRoom([
'allowReserveMeeting' => true,
'id' => $location['mrid'],
'from' => CCalendar::Date(
$fromTs - CCalendar::DAY_LENGTH,
false
),
'to' => CCalendar::Date(
$toTs + CCalendar::DAY_LENGTH,
false
),
'curEventId' => $location['mrevid'],
]);
foreach ($meetingRoomRes as $entry)
{
if ((int)$entry['ID'] !== (int)$location['mrevid'])
{
$entryFromTs = CCalendar::Timestamp($entry['DT_FROM']);
$entryToTs = CCalendar::Timestamp($entry['DT_TO']);
if ($entryFromTs < $toTs && $entryToTs > $fromTs)
{
$res = false;
break;
}
}
}
}
elseif ($location['room_id'])
{
$entries = self::getRoomAccessibility($location['room_id'], $from, $to);
foreach ($entries as $entry)
{
if ((int)$entry['ID'] !== (int)$location['room_event_id']
&& (int)$entry['PARENT_ID'] !== $eventId)
{
$entryFromTs = CCalendar::Timestamp($entry['DATE_FROM']);
$entryToTs = CCalendar::Timestamp($entry['DATE_TO']);
if ($entry['DT_SKIP_TIME'] !== 'Y')
{
$entryFromTs -= $entry['~USER_OFFSET_FROM'];
$entryToTs -= $entry['~USER_OFFSET_TO'];
$entryFromTs += $deltaOffset;
$entryToTs += $deltaOffset;
}
else
{
$entryToTs += CCalendar::GetDayLen();
}
if ($entryFromTs < $toTs && $entryToTs > $fromTs)
{
$res = false;
break;
}
}
}
}
}
return $res;
}