• Модуль: iblock
  • Путь к файлу: ~/bitrix/modules/iblock/classes/general/iblockproperty.php
  • Класс: CAllIBlockProperty
  • Вызов: CAllIBlockProperty::Delete
static function Delete($ID)
{
	global $DB, $APPLICATION;
	$ID = (int)$ID;
	if ($ID <= 0)
	{
		return false;
	}

	$APPLICATION->ResetException();
	foreach (GetModuleEvents("iblock", "OnBeforeIBlockPropertyDelete", true) as $arEvent)
	{
		if(ExecuteModuleEventEx($arEvent, array($ID))===false)
		{
			if($ex = $APPLICATION->GetException())
			{
				$APPLICATION->ThrowException($ex->GetString());
			}
			else
			{
				$APPLICATION->ThrowException(GetMessage("MAIN_BEFORE_DEL_ERR1"));
			}

			return false;
		}
	}

	foreach (GetModuleEvents("iblock", "OnIBlockPropertyDelete", true) as $arEvent)
		ExecuteModuleEventEx($arEvent, array($ID));

	if(!CIBlockPropertyEnum::DeleteByPropertyID($ID, true))
		return false;

	CIBlockSectionPropertyLink::DeleteByProperty($ID);
	IblockPropertyFeatureTable::deleteByProperty($ID);

	$rsProperty = CIBlockProperty::GetByID($ID);
	$arProperty = $rsProperty->Fetch();
	if($arProperty["VERSION"] == 2)
	{
		if($arProperty["PROPERTY_TYPE"]=="F")
		{
			if($arProperty["MULTIPLE"]=="Y")
			{
				$strSql = "
					SELECT	VALUE
					FROM	b_iblock_element_prop_m".$arProperty["IBLOCK_ID"]."
					WHERE	IBLOCK_PROPERTY_ID=".$ID."
				";
			}
			else
			{
				$strSql = "
					SELECT	PROPERTY_".$ID." VALUE
					FROM	b_iblock_element_prop_s".$arProperty["IBLOCK_ID"]."
					WHERE	PROPERTY_".$ID." is not null
				";
			}
			$res = $DB->Query($strSql);
			while($arr = $res->Fetch())
				CFile::Delete($arr["VALUE"]);
		}
		if(!$DB->Query("DELETE FROM b_iblock_section_element WHERE ADDITIONAL_PROPERTY_ID=".$ID, true))
			return false;
		$strSql = "
			DELETE
			FROM b_iblock_element_prop_m".$arProperty["IBLOCK_ID"]."
			WHERE IBLOCK_PROPERTY_ID=".$ID."
		";
		if(!$DB->Query($strSql))
			return false;
		$arSql = CIBlockProperty::DropColumnSQL("b_iblock_element_prop_s".$arProperty["IBLOCK_ID"], array("PROPERTY_".$ID,"DESCRIPTION_".$ID));
		foreach($arSql as $strSql)
		{
			if(!$DB->DDL($strSql))
				return false;
		}
	}
	else
	{
		$res = $DB->Query("SELECT EP.VALUE FROM b_iblock_property P, b_iblock_element_property EP WHERE P.ID=".$ID." AND P.ID=EP.IBLOCK_PROPERTY_ID AND P.PROPERTY_TYPE='F'");
		while($arr = $res->Fetch())
			CFile::Delete($arr["VALUE"]);
		if(!$DB->Query("DELETE FROM b_iblock_section_element WHERE ADDITIONAL_PROPERTY_ID=".$ID, true))
			return false;
		if(!$DB->Query("DELETE FROM b_iblock_element_property WHERE IBLOCK_PROPERTY_ID=".$ID, true))
			return false;
	}

	$seq = new CIBlockSequence($arProperty["IBLOCK_ID"], $ID);
	$seq->Drop();

	CIBlock::clearIblockTagCache($arProperty["IBLOCK_ID"]);

	IblockPropertyTable::cleanCache();

	$res = $DB->Query("DELETE FROM b_iblock_property WHERE ID=".$ID, true);

	foreach (GetModuleEvents("iblock", "OnAfterIBlockPropertyDelete", true) as $arEvent)
		ExecuteModuleEventEx($arEvent, array($arProperty));

	return $res;
}