• Модуль: 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;
}