- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/classes/general/usertype.php
- Класс: CAllUserTypeEntity
- Вызов: CAllUserTypeEntity::Update
function Update($ID, $arFields)
{
global $DB, $USER_FIELD_MANAGER, $CACHE_MANAGER, $APPLICATION;
$ID = intval($ID);
unset($arFields["ENTITY_ID"]);
unset($arFields["FIELD_NAME"]);
unset($arFields["USER_TYPE_ID"]);
unset($arFields["MULTIPLE"]);
if(!$this->CheckFields($ID, $arFields))
return false;
if(array_key_exists("SETTINGS", $arFields))
$arFields["SETTINGS"] = serialize($USER_FIELD_MANAGER->PrepareSettings($ID, $arFields));
if(array_key_exists("MANDATORY", $arFields) && $arFields["MANDATORY"] !== "Y")
$arFields["MANDATORY"] = "N";
if(array_key_exists("SHOW_FILTER", $arFields))
{
$arFields["SHOW_FILTER"] = mb_substr($arFields["SHOW_FILTER"], 0, 1);
if(mb_strpos("NIES", $arFields["SHOW_FILTER"]) === false)
$arFields["SHOW_FILTER"] = "N";
}
if(array_key_exists("SHOW_IN_LIST", $arFields) && $arFields["SHOW_IN_LIST"] !== "N")
$arFields["SHOW_IN_LIST"] = "Y";
if(array_key_exists("EDIT_IN_LIST", $arFields) && $arFields["EDIT_IN_LIST"] !== "N")
$arFields["EDIT_IN_LIST"] = "Y";
if(array_key_exists("IS_SEARCHABLE", $arFields) && $arFields["IS_SEARCHABLE"] !== "Y")
$arFields["IS_SEARCHABLE"] = "N";
// events
foreach(GetModuleEvents("main", "OnBeforeUserTypeUpdate", true) as $arEvent)
{
if(ExecuteModuleEventEx($arEvent, array(&$arFields)) === false)
{
if($e = $APPLICATION->GetException())
{
return false;
}
$aMsg = array();
$aMsg[] = array(
"id" => "FIELD_NAME",
"text" => GetMessage("USER_TYPE_UPDATE_ERROR", array(
"#FIELD_NAME#" => htmlspecialcharsbx($arFields["FIELD_NAME"]),
"#ENTITY_ID#" => htmlspecialcharsbx($arFields["ENTITY_ID"]),
))
);
$e = new CAdminException($aMsg);
$APPLICATION->ThrowException($e);
return false;
}
}
if(is_object($USER_FIELD_MANAGER))
$USER_FIELD_MANAGER->CleanCache();
$strUpdate = $DB->PrepareUpdate("b_user_field", $arFields);
static $arLabels = array("EDIT_FORM_LABEL", "LIST_COLUMN_LABEL", "LIST_FILTER_LABEL", "ERROR_MESSAGE", "HELP_MESSAGE");
$arLangs = array();
foreach($arLabels as $label)
{
if(is_array($arFields[$label]))
{
foreach($arFields[$label] as $lang => $value)
{
$arLangs[$lang][$label] = $value;
}
}
}
if($strUpdate <> "" || !empty($arLangs))
{
if(CACHED_b_user_field !== false)
{
$CACHE_MANAGER->CleanDir("b_user_field");
}
if($strUpdate <> "")
{
$strSql = "UPDATE b_user_field SET " . $strUpdate . " WHERE ID = " . $ID;
if(array_key_exists("SETTINGS", $arFields))
$arBinds = array("SETTINGS" => $arFields["SETTINGS"]);
else
$arBinds = array();
$DB->QueryBind($strSql, $arBinds);
}
if(!empty($arLangs))
{
$DB->Query("DELETE FROM b_user_field_lang WHERE USER_FIELD_ID = " . $ID, false, "FILE: " . __FILE__ . "
LINE: " . __LINE__);
foreach($arLangs as $lang => $arLangFields)
{
$arLangFields["USER_FIELD_ID"] = $ID;
$arLangFields["LANGUAGE_ID"] = $lang;
$arInsert = $DB->PrepareInsert("b_user_field_lang", $arLangFields);
$DB->Query("INSERT INTO b_user_field_lang (".$arInsert[0].") VALUES (".$arInsert[1].")");
}
}
foreach(GetModuleEvents("main", "OnAfterUserTypeUpdate", true) as $arEvent)
{
ExecuteModuleEventEx($arEvent, array($arFields, $ID));
}
}
return true;
}