- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/classes/general/usertype.php
- Класс: CAllUserTypeEntity
- Вызов: CAllUserTypeEntity::Delete
function Delete($ID)
{
global $DB, $CACHE_MANAGER, $USER_FIELD_MANAGER, $APPLICATION;
$ID = intval($ID);
$rs = $this->GetList(array(), array("ID" => $ID));
if($arField = $rs->Fetch())
{
/**
* events
* PROVIDE_STORAGE - use own uf subsystem to store data (uts/utm tables)
*/
$commonEventResult = array('PROVIDE_STORAGE' => true);
foreach(GetModuleEvents("main", "OnBeforeUserTypeDelete", true) as $arEvent)
{
$eventResult = ExecuteModuleEventEx($arEvent, array(&$arField));
if($eventResult === false)
{
if($e = $APPLICATION->GetException())
{
return false;
}
$aMsg = array();
$aMsg[] = array(
"id" => "FIELD_NAME",
"text" => GetMessage("USER_TYPE_DELETE_ERROR", array(
"#FIELD_NAME#" => htmlspecialcharsbx($arField["FIELD_NAME"]),
"#ENTITY_ID#" => htmlspecialcharsbx($arField["ENTITY_ID"]),
))
);
$e = new CAdminException($aMsg);
$APPLICATION->ThrowException($e);
return false;
}
elseif(is_array($eventResult))
{
$commonEventResult = array_merge($commonEventResult, $eventResult);
}
}
if(is_object($USER_FIELD_MANAGER))
$USER_FIELD_MANAGER->CleanCache();
$arType = $USER_FIELD_MANAGER->GetUserType($arField["USER_TYPE_ID"]);
//We need special handling of file type properties
if($arType)
{
if($arType["BASE_TYPE"] == "file" && $commonEventResult['PROVIDE_STORAGE'])
{
// only if we store values
if($arField["MULTIPLE"] == "Y")
$strSql = "SELECT VALUE_INT VALUE FROM b_utm_".mb_strtolower($arField["ENTITY_ID"]) . " WHERE FIELD_ID=" . $arField["ID"];
else
$strSql = "SELECT ".$arField["FIELD_NAME"]." VALUE FROM b_uts_".mb_strtolower($arField["ENTITY_ID"]);
$rsFile = $DB->Query($strSql, false, "FILE: " . __FILE__ . "
LINE: " . __LINE__);
while($arFile = $rsFile->Fetch())
{
CFile::Delete($arFile["VALUE"]);
}
}
elseif($arType["BASE_TYPE"] == "enum")
{
$obEnum = new CUserFieldEnum;
$obEnum->DeleteFieldEnum($arField["ID"]);
}
}
if(CACHED_b_user_field !== false) $CACHE_MANAGER->CleanDir("b_user_field");
$rs = $DB->Query("DELETE FROM b_user_field_lang WHERE USER_FIELD_ID = " . $ID, false, "FILE: " . __FILE__ . "
LINE: " . __LINE__);
if($rs)
$rs = $DB->Query("DELETE FROM b_user_field WHERE ID = " . $ID, false, "FILE: " . __FILE__ . "
LINE: " . __LINE__);
if($rs && $commonEventResult['PROVIDE_STORAGE'])
{
// only if we store values
$rs = $this->GetList(array(), array("ENTITY_ID" => $arField["ENTITY_ID"]));
if($rs->Fetch()) // more than one
{
foreach($this->DropColumnSQL("b_uts_".mb_strtolower($arField["ENTITY_ID"]), array($arField["FIELD_NAME"])) as $strSql)
$DB->Query($strSql, false, "FILE: " . __FILE__ . "
LINE: " . __LINE__);
$rs = $DB->Query("DELETE FROM b_utm_".mb_strtolower($arField["ENTITY_ID"]) . " WHERE FIELD_ID = '" . $ID . "'", false, "FILE: " . __FILE__ . "
LINE: " . __LINE__);
}
else
{
$DB->Query("DROP TABLE IF EXISTS b_uts_".mb_strtolower($arField["ENTITY_ID"]), false, "FILE: " . __FILE__ . "
LINE: " . __LINE__);
$rs = $DB->Query("DROP TABLE IF EXISTS b_utm_".mb_strtolower($arField["ENTITY_ID"]), false, "FILE: " . __FILE__ . "
LINE: " . __LINE__);
}
}
foreach(GetModuleEvents("main", "OnAfterUserTypeDelete", true) as $arEvent)
{
ExecuteModuleEventEx($arEvent, array($arField, $ID));
}
}
return $rs;
}