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