• Модуль: webdav
  • Путь к файлу: ~/bitrix/modules/webdav/classes/iblockbizproc.php
  • Класс: CIBlockDocumentWebdav
  • Вызов: CIBlockDocumentWebdav::GetDocument
static function GetDocument($documentId)
{
	if (!function_exists("__get_user_fullname"))
	{
		function __get_user_fullname($ID)
		{
			$ID = intval($ID);
			$result = "";
			if ($ID > 0)
			{
				if (!array_key_exists("User".$ID, $GLOBALS["WEBDAV"]["CACHE"]))
				{
					$db = CUser::GetByID($ID);
					if ($db && $res = $db->GetNext())
					{
						$result = CUser::FormatName(CSite::GetNameFormat(false), $res);
						$result = (empty($result) ? $res["LOGIN"] : $result);
					}
					$GLOBALS["WEBDAV"]["CACHE"]["User".$ID] = $result;
				}
				else
				{
					$result = $GLOBALS["WEBDAV"]["CACHE"]["User".$ID];
				}
			}
			return $result;
		}
	}

	$documentId = intval($documentId);
	if ($documentId <= 0)
		throw new CBPArgumentNullException("documentId");

	$arResult = null;

	$dbDocumentList = CIBlockElement::GetList(
		array(),
		array("ID" => $documentId, "SHOW_NEW"=>"Y", "SHOW_HISTORY" => "Y")
	);
	if ($objDocument = $dbDocumentList->GetNextElement())
	{
		$arDocumentFields = $objDocument->GetFields();
		$arDocumentProperties = $objDocument->GetProperties();

		if($dfile = self::needProxyToDiskByDocProp($arDocumentProperties, $arDocumentFields))
		{
			return self::proxyToDisk(__FUNCTION__, array($dfile->getId()));
		}

		foreach ($arDocumentFields as $fieldKey => $fieldValue)
		{
			if ($fieldKey == "MODIFIED_BY" || $fieldKey == "CREATED_BY")
			{
				$arResult[$fieldKey] = "user_".$fieldValue;
				$arResult[$fieldKey."_PRINTABLE"] = __get_user_fullname($fieldValue);
			}
			else
			{
				if (mb_substr($fieldKey, 0, 1) != "~")
					$arResult[$fieldKey] = $fieldValue;
			}
		}

		foreach ($arDocumentProperties as $propertyKey => $propertyValue)
		{
			$valueNew = null;

			if ($propertyValue["USER_TYPE"] <> '')
			{
				$arPropertyValue = (is_array($propertyValue["VALUE"]) ? $propertyValue["VALUE"] : array($propertyValue["VALUE"]));
				if ($propertyValue["USER_TYPE"] == "UserID")
				{
					$arUserName = array();
					foreach ($arPropertyValue as $userId)
					{
						$valueNew[$userId] = "user_".$userId;
						$sUserName = __get_user_fullname($userId);
						if (!empty($sUserName))
							$arUserName[] = $sUserName;
					}
					$arResult["PROPERTY_".$propertyKey."_PRINTABLE"] = implode(", ", $arUserName);
				}
				else
				{
					$valueNew = $propertyValue["VALUE"];
				}
			}
			elseif ($propertyValue["PROPERTY_TYPE"] == "L")
			{
				$arPropertyValue = $propertyValue["VALUE"];
				$arPropertyKey = $propertyValue["VALUE_ENUM_ID"];
				if (!is_array($arPropertyValue))
				{
					$arPropertyValue = array($arPropertyValue);
					$arPropertyKey = array($arPropertyKey);
				}

				for ($i = 0, $cnt = count($arPropertyValue); $i < $cnt; $i++)
					$valueNew[$arPropertyKey[$i]] = $arPropertyValue[$i];
			}
			elseif ($propertyValue["PROPERTY_TYPE"] == "F")
			{
				$arPropertyValue = $propertyValue["VALUE"];
				if (!is_array($arPropertyValue))
					$arPropertyValue = array($arPropertyValue);

				foreach ($arPropertyValue as $v)
				{
					$ar = CFile::GetFileArray($v);
					if ($ar)
						$valueNew[intval($v)] = $ar["SRC"];
				}
			}
			else
			{
				$valueNew = $propertyValue["VALUE"];
			}

			$arResult["PROPERTY_".$propertyKey] = $valueNew;
		}
	}
	unset($arResult["WF_NEW"]);
	return $arResult;
}