Example #1
0
 /**
  * <p>Метод удаляет свойство и все его значения. Метод статический.</p>
  *
  *
  * @param int $ID  Код свойства.
  *
  * @return bool <p>В случае успешного удаления возвращается true, иначе - false. </p> <br><br>
  *
  * @static
  * @link http://dev.1c-bitrix.ru/api_help/iblock/classes/ciblockproperty/delete.php
  * @author Bitrix
  */
 public static function Delete($ID)
 {
     /** @var CMain $APPLICATION */
     global $DB, $APPLICATION;
     $ID = IntVal($ID);
     $APPLICATION->ResetException();
     foreach (GetModuleEvents("iblock", "OnBeforeIBlockPropertyDelete", true) as $arEvent) {
         if (ExecuteModuleEventEx($arEvent, array($ID)) === false) {
             $err = GetMessage("MAIN_BEFORE_DEL_ERR") . ' ' . $arEvent['TO_NAME'];
             if ($ex = $APPLICATION->GetException()) {
                 $err .= ': ' . $ex->GetString();
             }
             $APPLICATION->throwException($err);
             return false;
         }
     }
     foreach (GetModuleEvents("iblock", "OnIBlockPropertyDelete", true) as $arEvent) {
         ExecuteModuleEventEx($arEvent, array($ID));
     }
     if (!CIBlockPropertyEnum::DeleteByPropertyID($ID, true)) {
         return false;
     }
     CIBlockSectionPropertyLink::DeleteByProperty($ID);
     $rsProperty = CIBlockProperty::GetByID($ID);
     $arProperty = $rsProperty->Fetch();
     if ($arProperty["VERSION"] == 2) {
         if ($arProperty["PROPERTY_TYPE"] == "F") {
             if ($arProperty["MULTIPLE"] == "Y") {
                 $strSql = "\n\t\t\t\t\t\tSELECT\tVALUE\n\t\t\t\t\t\tFROM\tb_iblock_element_prop_m" . $arProperty["IBLOCK_ID"] . "\n\t\t\t\t\t\tWHERE\tIBLOCK_PROPERTY_ID=" . $ID . "\n\t\t\t\t\t";
             } else {
                 $strSql = "\n\t\t\t\t\t\tSELECT\tPROPERTY_" . $ID . " VALUE\n\t\t\t\t\t\tFROM\tb_iblock_element_prop_s" . $arProperty["IBLOCK_ID"] . "\n\t\t\t\t\t\tWHERE\tPROPERTY_" . $ID . " is not null\n\t\t\t\t\t";
             }
             $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 = "\n\t\t\t\tDELETE\n\t\t\t\tFROM b_iblock_element_prop_m" . $arProperty["IBLOCK_ID"] . "\n\t\t\t\tWHERE IBLOCK_PROPERTY_ID=" . $ID . "\n\t\t\t";
         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();
     return $DB->Query("DELETE FROM b_iblock_property WHERE ID=" . $ID, true);
 }