• Модуль: dav
  • Путь к файлу: ~/bitrix/modules/dav/classes/general/groupdavclientcalendar.php
  • Класс: CDavGroupdavClientCalendar
  • Вызов: CDavGroupdavClientCalendar::GetCalendarItemsList
public function GetCalendarItemsList(
	$path = '/',
	$arHrefs = null,
	$calendarData = false,
	$depth = 1,
	$arFilter = [],
	$logger = null
)
{
	$this->ClearErrors();

	$this->Connect();

	if (!is_array($arHrefs))
	{
		$arHrefs = array($arHrefs);
	}

	$arHrefsNew = [];
	foreach ($arHrefs as $value)
	{
		if (!empty($value))
		{
			$arHrefsNew[] = $value;
		}
	}

	$arProperties = array(
		"getcontenttype",
		"resourcetype",
		"getetag",
	);
	if ($calendarData && !empty($arHrefsNew))
	{
		$arProperties[] = array("calendar-data", "urn:ietf:params:xml:ns:caldav");
	}


	$arFilterNew = [];
	if (array_key_exists("start", $arFilter))
	{
		$arFilterNew = array("time-range" => array("start" => ConvertDateTime($arFilter["start"], "YYYYMMDDTHHMISSZ")));
	}

	if (!empty($arHrefsNew))
	{
		$result = $this->Report(
			$path,
			$arProperties,
			$arFilterNew,
			$arHrefsNew,
			$depth,
			$logger
		);
	}
	else
	{
		$result = $this->Propfind(
			$path,
			$arProperties,
			$arFilterNew,
			$depth,
			$logger
		);
	}

	$this->Disconnect();

	if (is_null($result) || $this->getError())
	{
		return null;
	}

	$xmlDoc = $result->GetBodyXml();

	$arItems = [];

	$arResponse = $xmlDoc->GetPath("/*/response");
	foreach ($arResponse as $response)
	{
		$arHref = $response->GetPath("/response/href");
		if (!empty($arHref))
		{
			$arItem = array(
				"href" => urldecode($arHref[0]->GetContent()),
			);

			$arProps = $response->GetPath("/response/propstat/prop/*");
			foreach ($arProps as $prop)
			{
				$s = $prop->GetContent();
				if (is_string($s) || is_numeric($s))
				{
					$arItem[$prop->GetTag()] = $this->Encode($s);
				}
			}

			if ($calendarData)
			{
				$arCalendarData = $response->GetPath("/response/propstat/prop/calendar-data");
				if (!empty($arCalendarData))
				{
					$cal = new CDavICalendar($this->Encode($arCalendarData[0]->GetContent()));

					if (!$cal->getComponent())
					{
						continue;
					}

					$arEvents = $cal->GetComponents('VTIMEZONE', false);
					if (!empty($arEvents))
					{
						$arItem["calendar-data"] = $this->ConvertICalToArray($arEvents[0], $cal);
						if (count($arEvents) > 1)
						{
							$arItem["calendar-data-ex"] = [];
							$eventsCount = count($arEvents) - 1;
							for ($i = 1; $i <= $eventsCount; $i++)
							{
								$arItem["calendar-data-ex"][] = $this->ConvertICalToArray($arEvents[$i], $cal);
							}
						}
					}
				}
			}

			$arItems[] = $arItem;
		}
	}

	return $arItems;
}