- Модуль: iblock
- Путь к файлу: ~/bitrix/modules/iblock/classes/general/iblockdocument.php
- Класс: CIBlockDocument
- Вызов: CIBlockDocument::CloneElement
static function CloneElement($ID, $arFields = array())
{
global $DB;
$ID = intval($ID);
$db_element = CIBlockElement::GetList(array(), array("ID"=>$ID, "SHOW_HISTORY"=>"Y"), false, false,
array(
"ID",
"MODIFIED_BY",
"DATE_CREATE",
"CREATED_BY",
"IBLOCK_ID",
"ACTIVE",
"ACTIVE_FROM",
"ACTIVE_TO",
"SORT",
"NAME",
"PREVIEW_PICTURE",
"PREVIEW_TEXT",
"PREVIEW_TEXT_TYPE",
"DETAIL_PICTURE",
"DETAIL_TEXT",
"DETAIL_TEXT_TYPE",
"WF_STATUS_ID",
"WF_PARENT_ELEMENT_ID",
"WF_COMMENTS",
"IN_SECTIONS",
"CODE",
"TAGS",
"XML_ID",
"TMP_ID",
)
);
if($ar_element = $db_element->Fetch())
{
$IBLOCK_ID = $ar_element["IBLOCK_ID"];
if($ar_element["WF_PARENT_ELEMENT_ID"] > 0)
{
throw new Exception(GetMessage("IBD_ELEMENT_NOT_FOUND"));
}
else
{
if($ar_element["PREVIEW_PICTURE"])
$ar_element["PREVIEW_PICTURE"] = CFile::MakeFileArray($ar_element["PREVIEW_PICTURE"]);
if($ar_element["DETAIL_PICTURE"])
$ar_element["DETAIL_PICTURE"] = CFile::MakeFileArray($ar_element["DETAIL_PICTURE"]);
$ar_element["IBLOCK_SECTION"] = array();
if($ar_element["IN_SECTIONS"] == "Y")
{
$rsSections = CIBlockElement::GetElementGroups($ar_element["ID"], true, array('ID', 'IBLOCK_ELEMENT_ID'));
while($arSection = $rsSections->Fetch())
$ar_element["IBLOCK_SECTION"][] = $arSection["ID"];
}
$ar_element["PROPERTY_VALUES"] = array();
foreach($arFields as $field_id => $value)
if(array_key_exists($field_id, $ar_element))
$ar_element[$field_id] = $value;
$ar_element["WF_PARENT_ELEMENT_ID"] = $ID;
$ar_element["IBLOCK_ID"] = $IBLOCK_ID;
$arProps = &$ar_element["PROPERTY_VALUES"];
//Add new proiperty values
$rsProps = CIBlockElement::GetProperty($ar_element["IBLOCK_ID"], $ar_element["ID"], array("value_id" => "asc"));
$i = 0;
while($arProp = $rsProps->Fetch())
{
if(array_key_exists($arProp["CODE"], $ar_element["PROPERTY_VALUES"]))
continue;
$i++;
if(!array_key_exists($arProp["ID"], $arProps))
$arProps[$arProp["ID"]] = array();
if($arProp["PROPERTY_VALUE_ID"])
{
if($arProp["PROPERTY_TYPE"] == "F")
$arProps[$arProp["ID"]]["n".$i] = array(
"VALUE" => CFile::MakeFileArray($arProp["VALUE"]),
"DESCRIPTION" => $arProp["DESCRIPTION"],
);
else
$arProps[$arProp["ID"]]["n".$i] = array(
"VALUE" => $arProp["VALUE"],
"DESCRIPTION" => $arProp["DESCRIPTION"],
);
}
}
if (CIBlock::GetArrayByID($IBLOCK_ID, "RIGHTS_MODE") === "E")
{
$ibRights = new CIBlockElementRights(intval($IBLOCK_ID), $ID);
$arRights = $ibRights->GetRights();
$arNewRights = array();
$rightIndex = 0;
foreach($arRights as $rightID=>$right)
{
if ($right['IS_INHERITED'] !== 'Y')
$arNewRights['n'.$rightIndex++] = $right;
}
$ar_element['RIGHTS'] = $arNewRights;
}
$obElement = new CIBlockElement;
$NEW_ID = $obElement->Add($ar_element);
if(!$NEW_ID)
throw new Exception($obElement->LAST_ERROR);
else
return $NEW_ID;
}
}
else
{
throw new Exception(GetMessage("IBD_ELEMENT_NOT_FOUND"));
}
}