- Модуль: 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;
}