• Модуль: dav
  • Путь к файлу: ~/bitrix/modules/dav/classes/general/groupdav.php
  • Класс: constCDavGroupDav
  • Вызов: CDavGroupDav::ParsePath
private function ParsePath($path)
{
	$path = trim($path, "/");
	if ($path == '')
	{
		$siteId = $this->request->GetSiteId();
		$this->response->SetEncoding($siteId);
		return array(
			"site" => $siteId,
			"account" => null,
			"accountPrefix" => "/".$siteId,
			"application" => null,
			"path" => null,
			"id" => null
		);
	}

	$arParts = explode('/', trim($path, "/"));

	//	/ru/admin/calendar/25/1.ics
	//	/ru/group-7/calendar/43/4.ics
	//	/ru/calendar/12/48/3.ics

	$part = array_shift($arParts);

	$arSite = null;
	try
	{
		$dbSite = CSite::GetList('', '', array("LID" => $part, "ACTIVE" => "Y"));
		if (!($arSite = $dbSite->Fetch()))
			$arSite = null;
	}
	catch (Exception $e)
	{
		$arSite = null;
	}

	$site = null;
	if (!is_null($arSite))
	{
		$site = $arSite["ID"];
		$part = array_shift($arParts);
	}
	if (is_null($site))
		$site = $this->request->GetSiteId();

	$this->response->SetEncoding($site);

	try
	{
		$arAccount = CDavAccount::GetAccountByName($part);
		if (!$arAccount)
			$arAccount = CDavAccount::GetAccountByName(urldecode($part));
	}
	catch (Exception $e)
	{
		$arAccount = null;
	}

	$account = null;
	$accountPrefix = "/".$site;
	if (!is_null($arAccount))
	{
		$account = array($arAccount["TYPE"], $arAccount["ID"]);
		$accountPrefix .= '/'.$part;
		$part = array_shift($arParts);
	}

	$application = $part;

	$arPath = array();
	$id = null;

	while (count($arParts) > 0)
	{
		$part = array_shift($arParts);
		if (count($arParts) > 0 || (strcasecmp(".ics", mb_substr($part, -4)) && strcasecmp(".vcf", mb_substr($part, -4))))
			$arPath[] = $part;
		else
			$id = mb_substr($part, 0, -4);
	}

	return array(
		"site" => $site,
		"account" => $account,
		"accountPrefix" => $accountPrefix,
		"application" => $application,
		"path" => $arPath,
		"id" => $id
	);
}