• Модуль: dav
  • Путь к файлу: ~/bitrix/modules/dav/classes/general/webdav.php
  • Класс: CDavWebDav
  • Вызов: CDavWebDav::CopyMove
private function CopyMove($what)
{
	/** @var CDavRequest $request */
	$request = $this->request;
	$response = $this->response;

	$httpDestination = $request->GetParameter("HTTP_DESTINATION");
	$pu = parse_url($httpDestination);

	$path = urldecode($pu['path']);
	$httpHost = $pu['host'];
	if (isset($pu['port']) && (int)$pu['port'] !== 80 && (int)$pu['port'] !== 443)
	{
		$httpHost .= ":" . $pu['port'];
	}

	$httpHeaderHost = preg_replace("/:(80|443)$/", "", $request->GetParameter("HTTP_HOST"));

	if ($httpHost == $httpHeaderHost /*&& !strncmp($request->GetParameter("SCRIPT_NAME"), $path, strlen($request->GetParameter("SCRIPT_NAME")))*/)
	{
		$dest = $path;
		if (!strncmp($request->GetParameter("SCRIPT_NAME"), $path, mb_strlen($request->GetParameter("SCRIPT_NAME"))))
		{
			$dest = mb_substr($path, mb_strlen($request->GetParameter("SCRIPT_NAME")));
		}
		if (!$this->CheckLockStatus($dest))
		{
			$response->SetHttpStatus("423 Locked");
			return;
		}
	}
	else
	{
		$response->SetHttpStatus("412 precondition failed");
		return;
	}

	// RFC 2518 Sections 9.6, 8.8.4, 8.9.3
	$httpOverwrite = $request->GetParameter("HTTP_OVERWRITE");
	if (!is_null($httpOverwrite))
	{
		$overwrite = ($httpOverwrite === "T");
	}
	else
	{
		$overwrite = true;
	}

	$stat = $this->$what($dest, $httpDestination, $overwrite);
	$response->SetHttpStatus($stat);
}