static function Delete($ID)
{
$err_mess = "FILE: ".__FILE__."
LINE: ";
/** @global CDatabase $DB */
global $DB;
/** @global CMain $APPLICATION */
global $APPLICATION;
/** @global CUserTypeManager $USER_FIELD_MANAGER */
global $USER_FIELD_MANAGER;
$ID = (int)$ID;
if ($ID <= 0)
{
return false;
}
$APPLICATION->ResetException();
foreach(GetModuleEvents("iblock", "OnBeforeIBlockDelete", true) as $arEvent)
{
if(ExecuteModuleEventEx($arEvent, array($ID)) === false)
{
$err = GetMessage("MAIN_BEFORE_DEL_ERR").' '.$arEvent['TO_NAME'];
$ex = $APPLICATION->GetException();
if(is_object($ex))
$err .= ': '.$ex->GetString();
$APPLICATION->throwException($err);
return false;
}
}
foreach (GetModuleEvents("iblock", "OnIBlockDelete", true) as $arEvent)
ExecuteModuleEventEx($arEvent, array($ID));
$iblockSections = CIBlockSection::GetList(Array(), Array(
"IBLOCK_ID" => $ID,
"DEPTH_LEVEL" => 1,
"CHECK_PERMISSIONS" => "N",
), false, Array("ID"));
while($iblockSection = $iblockSections->Fetch())
{
if(!CIBlockSection::Delete($iblockSection["ID"], false))
return false;
}
$iblockElements = CIBlockElement::GetList(Array(), Array(
"IBLOCK_ID" => $ID,
"SHOW_NEW" => "Y",
"CHECK_PERMISSIONS" => "N",
), false, false, array("IBLOCK_ID", "ID"));
while($iblockElement = $iblockElements->Fetch())
{
if(!CIBlockElement::Delete($iblockElement["ID"]))
return false;
}
$props = CIBlockProperty::GetList(array(), array(
"IBLOCK_ID" => $ID,
"CHECK_PERMISSIONS" =>"N",
));
while($property = $props->Fetch())
{
if(!CIBlockProperty::Delete($property["ID"]))
return false;
}
CFile::Delete(self::GetArrayByID($ID , "PICTURE"));
$seq = new CIBlockSequence($ID);
$seq->Drop(true);
$obIBlockRights = new CIBlockRights($ID);
$obIBlockRights->DeleteAllRights();
$ipropTemplates = new BitrixIblockInheritedPropertyIblockTemplates($ID);
$ipropTemplates->delete();
CIBlockSectionPropertyLink::DeleteByIBlock($ID);
$DB->Query("delete from b_iblock_offers_tmp where PRODUCT_IBLOCK_ID=".$ID, false, $err_mess.__LINE__);
$DB->Query("delete from b_iblock_offers_tmp where OFFERS_IBLOCK_ID=".$ID, false, $err_mess.__LINE__);
if(!$DB->Query("DELETE FROM b_iblock_messages WHERE IBLOCK_ID = ".$ID, false, $err_mess.__LINE__))
return false;
if(!$DB->Query("DELETE FROM b_iblock_fields WHERE IBLOCK_ID = ".$ID, false, $err_mess.__LINE__))
return false;
$USER_FIELD_MANAGER->OnEntityDelete("IBLOCK_".$ID."_SECTION");
if(!$DB->Query("DELETE FROM b_iblock_group WHERE IBLOCK_ID=".$ID, false, $err_mess.__LINE__))
return false;
if(!$DB->Query("DELETE FROM b_iblock_rss WHERE IBLOCK_ID=".$ID, false, $err_mess.__LINE__))
return false;
if(!$DB->Query("DELETE FROM b_iblock_site WHERE IBLOCK_ID=".$ID, false, $err_mess.__LINE__))
return false;
if(!$DB->Query("DELETE FROM b_iblock WHERE ID=".$ID, false, $err_mess.__LINE__))
return false;
$DB->DDL("DROP TABLE b_iblock_element_prop_s".$ID, true, $err_mess.__LINE__);
$DB->DDL("DROP TABLE b_iblock_element_prop_m".$ID, true, $err_mess.__LINE__);
$DB->DDL("DROP SEQUENCE sq_b_iblock_element_prop_m".$ID, true, $err_mess.__LINE__);
CIBlock::CleanCache($ID);
foreach(GetModuleEvents("iblock", "OnAfterIBlockDelete", true) as $arEvent)
ExecuteModuleEventEx($arEvent, array($ID));
self::clearIblockTagCache($ID);
CDiskQuota::recalculateDb();
return true;
}