- Модуль: iblock
- Путь к файлу: ~/bitrix/modules/iblock/classes/general/iblockdocument.php
- Класс: CIBlockDocument
- Вызов: CIBlockDocument::GetDocument
static function GetDocument($documentId)
{
$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(false, true))
{
$arDocumentFields = $objDocument->GetFields();
$arDocumentProperties = $objDocument->GetProperties();
foreach ($arDocumentFields as $fieldKey => $fieldValue)
{
if (mb_substr($fieldKey, 0, 1) == "~")
continue;
$arResult[$fieldKey] = $fieldValue;
if (in_array($fieldKey, array("MODIFIED_BY", "CREATED_BY")))
{
$arResult[$fieldKey] = "user_".$fieldValue;
$arResult[$fieldKey."_PRINTABLE"] = $arDocumentFields[($fieldKey == "MODIFIED_BY") ? "USER_NAME" : "CREATED_USER_NAME"];
}
elseif (in_array($fieldKey, array("PREVIEW_TEXT", "DETAIL_TEXT")))
{
if ($arDocumentFields[$fieldKey."_TYPE"] == "html")
$arResult[$fieldKey] = HTMLToTxt($arDocumentFields["~".$fieldKey]);
}
}
foreach ($arDocumentProperties as $propertyKey => $propertyValue)
{
if ($propertyValue["USER_TYPE"] <> '')
{
if ($propertyValue["USER_TYPE"] == "UserID" || $propertyValue["USER_TYPE"] == "employee" &&
(COption::GetOptionString("bizproc", "employee_compatible_mode", "N") != "Y"))
{
if(empty($propertyValue["VALUE"]))
{
continue;
}
if(!is_array($propertyValue["VALUE"]))
{
$propertyValue["VALUE"] = array($propertyValue["VALUE"]);
}
$listUsers = implode(' | ', $propertyValue["VALUE"]);
$userQuery = CUser::getList('ID', 'ASC',
array('ID' => $listUsers) ,
array('FIELDS' => array('ID' ,'LOGIN', 'NAME', 'LAST_NAME')));
while($user = $userQuery->fetch())
{
if($propertyValue["MULTIPLE"] == "Y")
{
$arResult["PROPERTY_".$propertyKey][] = "user_".intval($user['ID']);
$arResult["PROPERTY_".$propertyKey."_PRINTABLE"][] = "(".$user["LOGIN"].")".
(($user["NAME"] <> '' || $user["LAST_NAME"] <> '') ? " " : "").$user["NAME"].
(($user["NAME"] <> '' && $user["LAST_NAME"] <> '') ? " " : "").$user["LAST_NAME"];
}
else
{
$arResult["PROPERTY_".$propertyKey] = "user_".intval($user['ID']);
$arResult["PROPERTY_".$propertyKey."_PRINTABLE"] = "(".$user["LOGIN"].")".
(($user["NAME"] <> '' || $user["LAST_NAME"] <> '') ? " " : "").$user["NAME"].
(($user["NAME"] <> '' && $user["LAST_NAME"] <> '') ? " " : "").$user["LAST_NAME"];
}
}
}
elseif($propertyValue["USER_TYPE"] == "DiskFile")
{
if(is_array($propertyValue["VALUE"]))
{
if($propertyValue["MULTIPLE"] == "Y")
{
$propertyValue["VALUE"] = current($propertyValue["VALUE"]);
}
if(!is_array($propertyValue["VALUE"]))
{
continue;
}
foreach($propertyValue["VALUE"] as $attachedId)
{
$userType = CIBlockProperty::getUserType($propertyValue['USER_TYPE']);
$fileId = null;
if (array_key_exists('GetObjectId', $userType))
{
$fileId = call_user_func_array($userType['GetObjectId'], array($attachedId));
}
if(!$fileId)
{
continue;
}
$printableUrl = '';
if (array_key_exists('GetUrlAttachedFileElement', $userType))
{
$printableUrl = call_user_func_array($userType['GetUrlAttachedFileElement'], array($documentId, $fileId));
}
$arResult["PROPERTY_".$propertyKey][$attachedId] = $fileId;
$arResult["PROPERTY_".$propertyKey."_PRINTABLE"][$attachedId] = $printableUrl;
}
}
else
{
continue;
}
}
else
{
$arResult["PROPERTY_".$propertyKey] = $propertyValue["VALUE"];
}
}
elseif ($propertyValue["PROPERTY_TYPE"] == "L")
{
$arPropertyValue = $propertyValue["VALUE"];
$arPropertyKey = ((self::GetVersion() > 1) ? $propertyValue["VALUE_XML_ID"] : $propertyValue["VALUE_ENUM_ID"]);
if (!is_array($arPropertyValue))
{
$arPropertyValue = array($arPropertyValue);
$arPropertyKey = array($arPropertyKey);
}
for ($i = 0, $cnt = count($arPropertyValue); $i < $cnt; $i++)
$arResult["PROPERTY_".$propertyKey][$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)
{
$arResult["PROPERTY_".$propertyKey][intval($v)] = $ar["SRC"];
$arResult["PROPERTY_".$propertyKey."_printable"][intval($v)] = "[url=/bitrix/tools/bizproc_show_file.php?f=".urlencode($ar["FILE_NAME"])."&i=".$v."&h=".md5($ar["SUBDIR"])."]".htmlspecialcharsbx($ar["ORIGINAL_NAME"])."[/url]";
}
}
}
else
{
$arResult["PROPERTY_".$propertyKey] = $propertyValue["VALUE"];
}
}
$documentFields = static::GetDocumentFields(static::GetDocumentType($documentId));
foreach ($documentFields as $fieldKey => $field)
{
if (!array_key_exists($fieldKey, $arResult))
$arResult[$fieldKey] = null;
}
}
return $arResult;
}