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