- Модуль: calendar
- Путь к файлу: ~/bitrix/modules/calendar/classes/general/calendar_restservice.php
- Класс: CCalendarRestService
- Вызов: CCalendarRestService::ResourceBookingList
static function ResourceBookingList($params = [])
{
$type = 'resource';
$methodName = "calendar.resource.booking.list";
$userId = CCalendar::GetCurUserId();
if (Loader::includeModule('intranet') && !BitrixIntranetUtil::isIntranetUser())
{
throw new RestException(Loc::getMessage('CAL_REST_ACCESS_DENIED'));
}
$idList = $params['filter']['resourceIdList'];
if (isset($idList))
{
if(!is_array($idList) && $idList > 0)
{
$idList = [$idList];
}
if (!empty($idList))
{
$userId = CCalendar::GetCurUserId();
$resourseList = BitrixCalendarUserFieldResourceBooking::getResourceEntriesList($idList);
$entries = [];
$eventIdList = [];
$bookingIndex = [];
if (is_array($resourseList) && isset($resourseList['ENTRIES']) && is_array($resourseList['ENTRIES']))
{
foreach($resourseList['ENTRIES'] as $resEntry)
{
$eventIdList[] = $resEntry['EVENT_ID'];
$bookingIndex[$resEntry['EVENT_ID']] = (int)$resEntry['ID'];
}
if (count($eventIdList) > 0)
{
$entries = CCalendarEvent::GetList(
array(
'arFilter' => array(
'ID' => $eventIdList
),
'parseRecursion' => true,
'fetchAttendees' => false,
'userId' => $userId,
'fetchMeetings' => false,
'setDefaultLimit' => false
)
);
}
foreach($entries as $k => $entry)
{
$entries[$k]['RESOURCE_BOOKING_ID'] = $bookingIndex[$entry['ID']];
}
}
return $entries;
}
}
$resourceTypeIdList = $params['filter']['resourceTypeIdList'];
if (!isset($resourceTypeIdList) || !is_array($resourceTypeIdList) || !count($resourceTypeIdList))
{
throw new RestException(Loc::getMessage('CAL_REST_PARAM_EXCEPTION', array('#PARAM_NAME#' => 'filter['resourceTypeIdList']', '#REST_METHOD#' => $methodName)));
}
$from = isset($params['filter']['from']) ? CRestUtil::unConvertDateTime($params['filter']['from']) : false;
$to = isset($params['filter']['to']) ? CRestUtil::unConvertDateTime($params['filter']['to']) : false;
// Default values for from-to period
if ($from === false && $to === false)
{
// Limits
$ts = time();
$pastDays = 30;
$futureDays = 90;
$from = CCalendar::Date($ts - CCalendar::DAY_LENGTH * $pastDays, false);
$to = CCalendar::Date($ts + CCalendar::DAY_LENGTH * $futureDays, false);
}
elseif($from !== false && $to === false)
{
$to = CCalendar::Date(CCalendar::GetMaxTimestamp(), false);
}
$attendees = [];
$entries = CCalendar::GetEventList([
'type' => $type,
'userId' => $userId,
'section' => $resourceTypeIdList,
'fromLimit' => $from,
'toLimit' => $to
], $attendees);
$eventIdList = [];
$eventIndex = [];
foreach($entries as $i => $eventEntry)
{
$eventIdList[] = $eventEntry['ID'];
$eventIndex[$eventEntry['ID']] = $i;
$entries[$i]['RESOURCE_BOOKING_ID'] = null;
}
$resourseList = BitrixCalendarInternalsResourceTable::getList(
array(
"select" => ["ID","EVENT_ID"],
"filter" => array(
"=EVENT_ID" => $eventIdList
)
)
);
while ($resBooking = $resourseList->fetch())
{
if ($eventIndex[$resBooking['EVENT_ID']] >= 0)
{
$entries[$eventIndex[$resBooking['EVENT_ID']]]['RESOURCE_BOOKING_ID'] = $resBooking['ID'];
}
}
return $entries;
}