- Модуль: 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;
}