• Модуль: webdav
  • Путь к файлу: ~/bitrix/modules/webdav/classes/iblock.php
  • Класс: CWebDavIblock
  • Вызов: CWebDavIblock::_move_from_iblock_to_iblock
static function _move_from_iblock_to_iblock($elementId, $targetIblockId, $targetSectionId = 0, $delete = true, $setNewNameIfNonUnique = false)
{
	$elementId = intval($elementId);
	$targetIblockId = intval($targetIblockId);
	$targetSectionId = intval($targetSectionId);
	if (($elementId <= 0) || ($targetIblockId <= 0))
		return false;

	$dbElement = CIBlockElement::GetList(array(), array("ID"=>$elementId, "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($element = $dbElement->Fetch())
	{
		$IBLOCK_ID = $element["IBLOCK_ID"];
		if($element["WF_PARENT_ELEMENT_ID"] > 0)
		{
			return false;
		}
		else
		{
			//public doc.
			$element["WF_STATUS_ID"] = 1;
			unset($element["WF_NEW"]);

			if($element["PREVIEW_PICTURE"])
				$element["PREVIEW_PICTURE"] = CFile::MakeFileArray($element["PREVIEW_PICTURE"]);

			if($element["DETAIL_PICTURE"])
				$element["DETAIL_PICTURE"] = CFile::MakeFileArray($element["DETAIL_PICTURE"]);

			$element["IBLOCK_SECTION_ID"] = $targetSectionId;
			$element["IN_SECTIONS"] = "N";

			$element["PROPERTY_VALUES"] = array();

			$arProps = &$element["PROPERTY_VALUES"];

			//Add new property values
			$rsProps = CIBlockElement::GetProperty($element["IBLOCK_ID"], $element["ID"], array("value_id" => "asc"));
			$i = 0;
			while($arProp = $rsProps->Fetch())
			{
				$i++;
				if(!array_key_exists($arProp["CODE"], $arProps))
					$arProps[$arProp["CODE"]] = array();

				if($arProp["PROPERTY_VALUE_ID"])
				{
					if($arProp["PROPERTY_TYPE"] == "F")
						$arPropValue = array(
							"VALUE" => CFile::MakeFileArray($arProp["VALUE"]),
							"DESCRIPTION" => $arProp["DESCRIPTION"],
						);
					else
					{
						if ($arProp["VALUE_XML_ID"] != null)
						{
							$arPropValue = array(
								"VALUE_XML_ID" => $arProp["VALUE_XML_ID"],
								"DESCRIPTION" => $arProp["DESCRIPTION"],
							);
						}
						else
						{
							$arPropValue = array(
								"VALUE" => $arProp["VALUE"],
								"DESCRIPTION" => $arProp["DESCRIPTION"],
							);
						}
					}
					$arProps[$arProp["CODE"]]["n".$i] = $arPropValue;
				}
			}
			$element["IBLOCK_ID"] = $targetIblockId;

			if($setNewNameIfNonUnique)
			{
				$mainPartName = $element['NAME'];
				$newName = $mainPartName;
				$count = 0;
				while(!self::sCheckUniqueName($targetIblockId, $targetSectionId, '', $newName, $res))
				{
					$count++;
					$newName = mb_strstr($mainPartName, '.', true)." ({$count})".mb_strstr($mainPartName, '.');
				}
				$element['NAME'] = $newName;
			}


			$newElement = new CIBlockElement;
			$newId = $newElement->Add($element);
			if(!$newId)
			{
				return false;
			}
			else
			{
				$element['ID'] = $newId;
				CWebDavDiskDispatcher::sendEventToOwners($element, null, 'move_from_block_to_block');
				if ($delete === true)
				{
					$ibe = new CIBlockElement();
					$result = $ibe->Delete($elementId);
				}
				return $newId;
			}
		}
	}
	else
	{
		return false;
	}
}