• Модуль: dav
  • Путь к файлу: ~/bitrix/modules/dav/classes/general/webdav.php
  • Класс: CDavWebDav
  • Вызов: CDavWebDav::ParceIfHeaderConditions
private function ParceIfHeaderConditions($str)
{
	$pos = 0;
	$len = mb_strlen($str);
	$arUri = array();

	while ($pos < $len)
	{
		$token = $this->SearchIfHeaderConditionsToken($str, $pos);

		if ($token[0] === "URI")
		{
			$uri = $token[1];
			$token = $this->SearchIfHeaderConditionsToken($str, $pos);
		}
		else
		{
			$uri = "";
		}

		if ($token[0] !== "CHAR" || $token[1] !== "(")
			return false;

		$arList = array();
		$level = 1;
		$not = "";
		while ($level)
		{
			$token = $this->SearchIfHeaderConditionsToken($str, $pos);
			if ($token[0] === "NOT")
			{
				$not = "!";
				continue;
			}

			switch ($token[0])
			{
				case "CHAR":
					switch ($token[1])
					{
						case "(":
							$level++;
							break;
						case ")":
							$level--;
							break;
						default:
							return false;
					}
					break;

				case "URI":
					$arList[] = $not."<".$token[1].">";
					break;

				case "ETAG_WEAK":
					$arList[] = $not."[W/'".$token[1]."']>";
					break;

				case "ETAG_STRONG":
					$arList[] = $not."['".$token[1]."']>";
					break;

				default:
					return false;
			}
			$not = "";
		}

		if (!array_key_exists($uri, $arUri))
		{
			$arUri[$uri] = [];
		}

		$arUri[$uri] = array_merge($arUri[$uri], $arList);
	}

	return $arUri;
}