• Модуль: calendar
  • Путь к файлу: ~/bitrix/modules/calendar/lib/userfield/resourcebooking.php
  • Класс: BitrixCalendarUserFieldResourceBooking
  • Вызов: ResourceBooking::getFormDateTimeSlots
static function getFormDateTimeSlots($fieldName = '', $options = [])
{
	$from = (isset($options['from']) && $options['from'] instanceof Date) ? $options['from'] : new Date();
	if (isset($options['to']) && ($options['to'] instanceof Date))
	{
		$to = $options['to'];
	}
	else
	{
		$to = clone $from;
		$to->add($options['dateInterval'] ?? 'P5D');
	}

	$formData = BitrixCalendarUserFieldResourceBooking::getFillFormData(
		$options['settingsData'],
		[
			'fieldName' => $fieldName,
			'from' => $from,
			'to' => $to
		]
	);

	// Merge Accessibility
	$accessibility = [];
	if ($formData['fieldSettings']['USE_USERS'] === 'Y'
		&& isset($options['settingsData']['users']['value']))
	{
		$selectedUser = $options['settingsData']['users']['value'];
		if (
			isset($formData['usersAccessibility'])
			&& isset($formData['usersAccessibility'][$selectedUser])
		)
		{
			$accessibility = array_merge($accessibility, $formData['usersAccessibility'][$selectedUser]);
		}
	}

	if ($formData['fieldSettings']['USE_RESOURCES'] === 'Y'
		&& isset($options['settingsData']['resources']['value']))
	{
		$selectedResource = $options['settingsData']['resources']['value'];
		if (
			isset($formData['resourcesAccessibility'])
			&& isset($formData['resourcesAccessibility'][$selectedResource])
		)
		{
			$accessibility = array_merge($accessibility, $formData['resourcesAccessibility'][$selectedResource]);
		}
	}

	$result = null;
	if ($selectedUser || $selectedResource)
	{
		$format = Date::convertFormatToPhp(FORMAT_DATETIME);
		foreach ($accessibility as $i => $item)
		{
			$accessibility[$i]['fromTs'] = (new DateTime($item['dateFrom'], $format))->getTimestamp();
			$accessibility[$i]['toTs'] = (new DateTime($item['dateTo'], $format))->getTimestamp();
		}

		$result = self::getAvailableTimeSlots($accessibility, [
			'from' => $from,
			'to' => $to,
			'scale' => $options['settingsData']['time']['scale']
		]);
	}

	return $result;
}