- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/classes/general/user.php
- Класс: CAllUser
- Вызов: CAllUser::Delete
static function Delete($ID)
{
global $DB, $APPLICATION, $USER_FIELD_MANAGER, $CACHE_MANAGER;
$ID = intval($ID);
$rsUser = $DB->Query("
SELECT ID, LOGIN, NAME, LAST_NAME, EXTERNAL_AUTH_ID, PERSONAL_PHOTO, WORK_LOGO
FROM b_user
WHERE ID = {$ID}
AND ID <> 1
");
$arUser = $rsUser->Fetch();
if (!$arUser)
{
return false;
}
$events = array_merge(GetModuleEvents('main', 'OnBeforeUserDelete', true), GetModuleEvents('main', 'OnUserDelete', true));
foreach ($events as $arEvent)
{
if (ExecuteModuleEventEx($arEvent, [$ID]) === false)
{
$err = GetMessage("MAIN_BEFORE_DEL_ERR1") . ' ' . $arEvent['TO_MODULE_ID'];
if ($ex = $APPLICATION->GetException())
{
$err .= ': ' . $ex->GetString();
}
$APPLICATION->throwException($err);
if (Option::get('main', 'event_log_user_delete', 'N') === 'Y')
{
$UserName = ($arUser["NAME"] != '' || $arUser["LAST_NAME"] != '') ? trim($arUser["NAME"] . ' ' . $arUser["LAST_NAME"]) : $arUser["LOGIN"];
$res_log = [
"user" => $UserName,
"err" => $err,
];
CEventLog::Log('SECURITY', 'USER_DELETE', 'main', $ID, serialize($res_log));
}
return false;
}
}
if ($arUser['PERSONAL_PHOTO'] > 0)
{
CFile::Delete($arUser['PERSONAL_PHOTO']);
}
if ($arUser['WORK_LOGO'] > 0)
{
CFile::Delete($arUser['WORK_LOGO']);
}
CAccess::OnUserDelete($ID);
$DB->Query("DELETE FROM b_user_group WHERE USER_ID=" . $ID);
$DB->Query("DELETE FROM b_user_digest WHERE USER_ID=" . $ID);
$userFilter = ['=USER_ID' => $ID];
ApplicationPasswordTable::deleteByFilter($userFilter);
MainUserPhoneAuthTable::delete($ID);
ShortCode::deleteByUser($ID);
UserPasswordTable::deleteByFilter($userFilter);
UserStoredAuthTable::deleteByFilter($userFilter);
UserHitAuthTable::deleteByFilter($userFilter);
UserDeviceTable::deleteByFilter($userFilter);
$USER_FIELD_MANAGER->Delete("USER", $ID);
if (Option::get('main', 'event_log_user_delete', 'N') === 'Y')
{
$res_log["user"] = ($arUser["NAME"] != '' || $arUser["LAST_NAME"] != '') ? trim($arUser["NAME"] . ' ' . $arUser["LAST_NAME"]) : $arUser["LOGIN"];
CEventLog::Log('SECURITY', 'USER_DELETE', 'main', $arUser['LOGIN'], serialize($res_log));
}
if (!$DB->Query("DELETE FROM b_user WHERE ID=" . $ID . " AND ID<>1"))
{
return false;
}
if (defined("BX_COMP_MANAGED_CACHE"))
{
$isRealUser = !$arUser['EXTERNAL_AUTH_ID'] || !in_array($arUser['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_CARD");
}
static::clearUserGroupCache($ID);
MainUserAuthActionTable::addLogoutAction($ID);
UserProfileHistoryTable::deleteByFilter($userFilter);
if (Option::get('main', 'user_profile_history') === 'Y')
{
UserProfileHistoryTable::addHistory($ID, UserProfileHistoryTable::TYPE_DELETE);
}
MainUserTable::deleteIndexRecord($ID);
foreach (GetModuleEvents('main', 'OnAfterUserDelete', true) as $arEvent)
{
ExecuteModuleEventEx($arEvent, [$ID]);
}
return true;
}