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