• Модуль: dav
  • Путь к файлу: ~/bitrix/modules/dav/classes/general/calendarhandler.php
  • Класс: CDavCalendarHandler
  • Вызов: CDavCalendarHandler::PrepareFilters
private function PrepareFilters(&$arFilter, $requestDocument, $id)
	{
		$arNodes = $requestDocument->GetPath('/*/filter');
		if (count($arNodes) > 0)
		{
			$dateStartOld = $arFilter['DATE_START'];
			$dateEndOld = $arFilter['DATE_END'];

			unset($arFilter['DATE_START']);
			unset($arFilter['DATE_END']);

			$numberOfItems = count($arFilter);

			$arNodes = $requestDocument->GetPath('/*/filter/*/*/time-range');
			if (count($arNodes) > 0)
			{
				if ($s = $arNodes[0]->GetAttribute('start'))
					$arFilter['DATE_START'] = CDavICalendarTimeZone::GetFormattedServerDateTime($s);
				if ($s = $arNodes[0]->GetAttribute('end'))
					$arFilter['DATE_END'] = CDavICalendarTimeZone::GetFormattedServerDateTime($s);
			}

			if (count($arFilter) == $numberOfItems)			// no filters set - restore default start and end time
			{
				$arFilter['DATE_START'] = $dateStartOld;
				$arFilter['DATE_END'] = $dateEndOld;
			}
		}

		if ($id)
		{
			if (false && is_numeric($id))
				$arFilter["ID"] = intval($id);
			else
				$arFilter['XML_ID'] = basename(urldecode($id), '.ics');
		}
		elseif ($requestDocument->GetRoot()->GetTag() == 'calendar-multiget')
		{
			$arIds = array();
			$arXmlIds = array();

			$arProp = $requestDocument->GetPath('/calendar-multiget/DAV::href');
			foreach ($arProp as $prop)
			{
				$parts = explode('/', $prop->GetContent());
				if (!($idTmp = basename(urldecode(array_pop($parts)), '.ics')))
					continue;

				if (false && is_numeric($idTmp))
					$arIds[] = $idTmp;
				else
					$arXmlIds[] = $idTmp;
			}

			if ($arIds)
				$arFilter["ID"] = (count($arIds) > 1 ? $arIds : $arIds[0]);
			if ($arXmlIds)
				$arFilter["XML_ID"] = (count($arXmlIds) > 1 ? $arXmlIds : $arXmlIds[0]);
		}

		return true;
	}