- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/classes/general/user.php
- Класс: CAllUser
- Вызов: CAllUser::Add
public function Add($arFields)
{
/** @global CUserTypeManager $USER_FIELD_MANAGER */
global $DB, $USER_FIELD_MANAGER, $CACHE_MANAGER;
$ID = 0;
if (!$this->CheckFields($arFields))
{
$Result = false;
$arFields["RESULT_MESSAGE"] = &$this->LAST_ERROR;
}
else
{
unset($arFields["ID"]);
unset($arFields["STORED_HASH"]);
$arFields['ACTIVE'] = (is_set($arFields, 'ACTIVE') && $arFields['ACTIVE'] != 'Y' ? 'N' : 'Y');
$arFields['BLOCKED'] = (is_set($arFields, 'BLOCKED') && $arFields['BLOCKED'] == 'Y' ? 'Y' : 'N');
$arFields['PASSWORD_EXPIRED'] = (is_set($arFields, 'PASSWORD_EXPIRED') && $arFields['PASSWORD_EXPIRED'] == 'Y' ? 'Y' : 'N');
if (
!isset($arFields["PERSONAL_GENDER"])
|| ($arFields["PERSONAL_GENDER"] != "M" && $arFields["PERSONAL_GENDER"] != "F")
)
{
$arFields["PERSONAL_GENDER"] = '';
}
$originalPassword = $arFields["PASSWORD"];
$arFields["PASSWORD"] = Password::hash($arFields["PASSWORD"]);
$checkword = empty($arFields["CHECKWORD"]) ? Random::getString(32) : $arFields["CHECKWORD"];
$arFields["CHECKWORD"] = Password::hash($checkword);
$arFields["~CHECKWORD_TIME"] = $DB->CurrentTimeFunction();
if (is_set($arFields, "WORK_COUNTRY"))
{
$arFields["WORK_COUNTRY"] = intval($arFields["WORK_COUNTRY"]);
}
if (is_set($arFields, "PERSONAL_COUNTRY"))
{
$arFields["PERSONAL_COUNTRY"] = intval($arFields["PERSONAL_COUNTRY"]);
}
if (
array_key_exists("PERSONAL_PHOTO", $arFields)
&& is_array($arFields["PERSONAL_PHOTO"])
&& (
!array_key_exists("MODULE_ID", $arFields["PERSONAL_PHOTO"])
|| $arFields["PERSONAL_PHOTO"]["MODULE_ID"] == ''
)
)
{
$arFields["PERSONAL_PHOTO"]["MODULE_ID"] = 'main';
}
CFile::SaveForDB($arFields, "PERSONAL_PHOTO", 'main');
if (
array_key_exists("WORK_LOGO", $arFields)
&& is_array($arFields["WORK_LOGO"])
&& (
!array_key_exists("MODULE_ID", $arFields["WORK_LOGO"])
|| $arFields["WORK_LOGO"]["MODULE_ID"] == ''
)
)
{
$arFields["WORK_LOGO"]["MODULE_ID"] = 'main';
}
CFile::SaveForDB($arFields, "WORK_LOGO", 'main');
$arInsert = $DB->PrepareInsert("b_user", $arFields);
if (!is_set($arFields, "DATE_REGISTER"))
{
$arInsert[0] .= ", DATE_REGISTER";
$arInsert[1] .= ", " . $DB->GetNowFunction();
}
$strSql = "
INSERT INTO b_user (
" . $arInsert[0] . "
) VALUES (
" . $arInsert[1] . "
)
";
$DB->Query($strSql);
$ID = $DB->LastID();
$USER_FIELD_MANAGER->Update("USER", $ID, $arFields);
CAccess::RecalculateForUser($ID, CUserAuthProvider::ID);
if (is_set($arFields, "GROUP_ID"))
{
static::SetUserGroup($ID, $arFields["GROUP_ID"], true);
}
if (isset($arFields["PHONE_NUMBER"]) && $arFields["PHONE_NUMBER"] != '')
{
MainUserPhoneAuthTable::add([
"USER_ID" => $ID,
"PHONE_NUMBER" => $arFields["PHONE_NUMBER"],
]);
}
//update digest hash for http digest authorization
if (Option::get('main', 'use_digest_auth', 'N') == 'Y')
{
static::UpdateDigest($ID, $originalPassword);
}
//history of passwords
UserPasswordTable::add([
"USER_ID" => $ID,
"PASSWORD" => $arFields["PASSWORD"],
"DATE_CHANGE" => new MainTypeDateTime(),
]);
if (Option::get('main', 'user_profile_history') === 'Y')
{
UserProfileHistoryTable::addHistory($ID, UserProfileHistoryTable::TYPE_ADD);
}
$Result = $ID;
$arFields["ID"] = &$ID;
$arFields["CHECKWORD"] = $checkword;
}
$arFields["RESULT"] = &$Result;
foreach (GetModuleEvents('main', 'OnAfterUserAdd', true) as $arEvent)
{
ExecuteModuleEventEx($arEvent, [&$arFields]);
}
if ($ID > 0 && defined("BX_COMP_MANAGED_CACHE"))
{
$isRealUser = empty($arFields['EXTERNAL_AUTH_ID']) || !in_array($arFields['EXTERNAL_AUTH_ID'], MainUserTable::getExternalUserTypes());
$CACHE_MANAGER->ClearByTag("USER_CARD_" . intval($ID / TAGGED_user_card_size));
$CACHE_MANAGER->ClearByTag($isRealUser ? "USER_CARD" : "EXTERNAL_USER_CARD");
$CACHE_MANAGER->ClearByTag("USER_NAME_" . $ID);
$CACHE_MANAGER->ClearByTag($isRealUser ? "USER_NAME" : "EXTERNAL_USER_NAME");
}
MainUserTable::indexRecord($ID);
return $Result;
}