- Модуль: iblock
- Путь к файлу: ~/bitrix/modules/iblock/classes/general/iblockdocument.php
- Класс: CIBlockDocument
- Вызов: CIBlockDocument::RecoverDocumentFromHistory
static function RecoverDocumentFromHistory($documentId, $arDocument)
{
$documentId = intval($documentId);
if ($documentId <= 0)
throw new CBPArgumentNullException("documentId");
$arFields = $arDocument["FIELDS"];
if ($arFields["PREVIEW_PICTURE"] <> '')
$arFields["PREVIEW_PICTURE"] = CFile::MakeFileArray($arFields["PREVIEW_PICTURE"]);
if ($arFields["DETAIL_PICTURE"] <> '')
$arFields["DETAIL_PICTURE"] = CFile::MakeFileArray($arFields["DETAIL_PICTURE"]);
$arFields["PROPERTY_VALUES"] = array();
$dbProperties = CIBlockProperty::GetList(
array("sort" => "asc", "name" => "asc"),
array("IBLOCK_ID" => $arFields["IBLOCK_ID"])
);
while ($arProperty = $dbProperties->Fetch())
{
if (trim($arProperty["CODE"]) <> '')
$key = $arProperty["CODE"];
else
$key = $arProperty["ID"];
if (!array_key_exists($key, $arDocument["PROPERTIES"]))
continue;
$documentValue = $arDocument["PROPERTIES"][$key]["VALUE"];
if($arProperty["USER_TYPE"] == '' && $arProperty["PROPERTY_TYPE"] == "F")
{
$arFields["PROPERTY_VALUES"][$key] = array();
//Mark files to be deleted
$rsFiles = CIBlockElement::GetProperty($arFields["IBLOCK_ID"], $documentId, array("ID"=>$arProperty["ID"], "EMPTY"=>"N"));
while($arFile = $rsFiles->Fetch())
{
if($arFile["PROPERTY_VALUE_ID"] > 0)
$arFields["PROPERTY_VALUES"][$key][$arFile["PROPERTY_VALUE_ID"]] = array(
"VALUE" => array("del"=>"Y"),
"DESCRIPTION" => "",
);
}
//Restore from history
$io = CBXVirtualIo::GetInstance();
if(is_array($documentValue))
{
$n = 0;
foreach ($documentValue as $i => $v)
if($v <> '')
{
$arFields["PROPERTY_VALUES"][$key]["n".($n++)] = array(
"VALUE" => CFile::MakeFileArray($io->GetPhysicalName($v)),
"DESCRIPTION" => $arDocument["PROPERTIES"][$key]["DESCRIPTION"][$i]
);
}
}
else
{
if($documentValue <> '')
{
$arFields["PROPERTY_VALUES"][$key]["n0"] = array(
"VALUE" => CFile::MakeFileArray($io->GetPhysicalName($documentValue)),
"DESCRIPTION" => $arDocument["PROPERTIES"][$key]["DESCRIPTION"]
);
}
}
}
else
{
if(is_array($documentValue))
{
$n = 0;
foreach ($documentValue as $i => $v)
if($v <> '')
$arFields["PROPERTY_VALUES"][$key]["n".($n++)] = array(
"VALUE" => $v,
"DESCRIPTION" => $arDocument["PROPERTIES"][$key]["DESCRIPTION"][$i]
);
}
else
{
if($documentValue <> '')
$arFields["PROPERTY_VALUES"][$key]["n0"] = array(
"VALUE" => $documentValue,
"DESCRIPTION" => $arDocument["PROPERTIES"][$key]["DESCRIPTION"]
);
}
}
}
$iblockElement = new CIBlockElement();
$res = $iblockElement->Update($documentId, $arFields);
if (intval($arFields["WF_STATUS_ID"]) > 1 && intval($arFields["WF_PARENT_ELEMENT_ID"]) <= 0)
self::UnpublishDocument($documentId);
if (!$res)
throw new Exception($iblockElement->LAST_ERROR);
return true;
}