• Модуль: iblock
  • Путь к файлу: ~/bitrix/modules/iblock/classes/general/cml2.php
  • Класс: CIBlockCMLImport
  • Вызов: CIBlockCMLImport::DeactivateElement
function DeactivateElement($action, $start_time, $interval)
{
	$counter = array(
		"DEL" => 0,
		"DEA" => 0,
		"NON" => 0,
	);

	if(array_key_exists("bUpdateOnly", $this->next_step) && $this->next_step["bUpdateOnly"])
		return $counter;

	if($action!="D" && $action!="A")
		return $counter;

	$bDelete = $action=="D";

	//This will protect us from deactivating when next_step is lost
	$IBLOCK_ID = intval($this->next_step["IBLOCK_ID"]);
	if($IBLOCK_ID < 1)
		return $counter;

	$arFilter = array(
		">ID" => $this->next_step["LAST_ID"],
		"IBLOCK_ID" => $IBLOCK_ID,
	);
	if(!$bDelete)
		$arFilter["ACTIVE"] = "Y";

	$obElement = new CIBlockElement;
	$rsElement = $obElement->GetList(
		Array("ID"=>"asc"),
		$arFilter,
		false, false,
		Array("ID", "ACTIVE")
	);

	while($arElement = $rsElement->Fetch())
	{
		$rs = $this->_xml_file->GetList(
			array(),
			array("PARENT_ID+0" => 0, "LEFT_MARGIN" => $arElement["ID"]),
			array("ID")
		);
		$ar = $rs->Fetch();
		if(!$ar)
		{
			if($bDelete)
			{
				$obElement->Delete($arElement["ID"]);
				$counter["DEL"]++;
			}
			else
			{
				$elementFields = array("ACTIVE"=>"N");
				if ((string)BitrixMainConfigOption::get('iblock', 'change_user_by_group_active_modify') === 'Y')
				{
					$elementFields['MODIFIED_BY'] = $this->currentUserId;
				}
				$obElement->Update($arElement["ID"], $elementFields);
				$counter["DEA"]++;
			}
		}
		else
		{
			$counter["NON"]++;
		}

		$this->next_step["LAST_ID"] = $arElement["ID"];

		if($interval > 0 && (time()-$start_time) > $interval)
			break;

	}
	return $counter;
}