• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/classes/general/user.php
  • Класс: CAllUser
  • Вызов: CAllUser::SendPassword
static function SendPassword($LOGIN, $EMAIL, $SITE_ID = false, $captcha_word = '', $captcha_sid = 0, $phoneNumber = '', $shortCode = false)
{
	/** @global CMain $APPLICATION */
	global $DB, $APPLICATION;

	$arParams = [
		"LOGIN" => $LOGIN,
		"EMAIL" => $EMAIL,
		"SITE_ID" => $SITE_ID,
		"PHONE_NUMBER" => $phoneNumber,
		"SHORT_CODE" => $shortCode,
	];

	$result_message = ["MESSAGE" => GetMessage('ACCOUNT_INFO_SENT') . "
", "TYPE" => "OK"]; $APPLICATION->ResetException(); $bOk = true; foreach (GetModuleEvents('main', 'OnBeforeUserSendPassword', true) as $arEvent) { if (ExecuteModuleEventEx($arEvent, [&$arParams]) === false) { if ($err = $APPLICATION->GetException()) { $result_message = ["MESSAGE" => $err->GetString() . "
", "TYPE" => "ERROR"]; } $bOk = false; break; } } if ($bOk && !$arParams["SHORT_CODE"] && Option::get('main', 'captcha_restoring_password', 'N') == 'Y') { if (!($APPLICATION->CaptchaCheckCode($captcha_word, $captcha_sid))) { $result_message = ["MESSAGE" => GetMessage("main_user_captcha_error") . "
", "TYPE" => "ERROR"]; $bOk = false; } } if ($bOk) { $found = false; if ($arParams["PHONE_NUMBER"] != '') { //user registered by phone number $siteId = ($arParams["SITE_ID"] === false ? null : $arParams["SITE_ID"]); $result = static::SendPhoneCode($arParams["PHONE_NUMBER"], "SMS_USER_RESTORE_PASSWORD", $siteId); if ($result->isSuccess()) { $found = true; $result_message = ["MESSAGE" => GetMessage("main_user_pass_request_sent") . "
", "TYPE" => "OK", "TEMPLATE" => "SMS_USER_RESTORE_PASSWORD"]; if (Option::get('main', 'event_log_password_request', 'N') === 'Y') { $data = $result->getData(); CEventLog::Log('SECURITY', 'USER_INFO', 'main', $data["USER_ID"]); } } else { if ($result->getErrorCollection()->getErrorByCode("ERR_NOT_FOUND") === null) { //user found but there is another error $found = true; $result_message = ["MESSAGE" => implode("
", $result->getErrorMessages()), "TYPE" => "ERROR"]; } } } elseif ($arParams["LOGIN"] != '' || $arParams["EMAIL"] != '') { $confirmation = (Option::get('main', 'new_user_registration_email_confirmation', 'N') == 'Y'); $strSql = ''; if ($arParams["LOGIN"] != '') { $strSql = "SELECT ID, LID, ACTIVE, BLOCKED, CONFIRM_CODE, LOGIN, EMAIL, NAME, LAST_NAME, LANGUAGE_ID " . "FROM b_user u " . "WHERE LOGIN='" . $DB->ForSQL($arParams["LOGIN"]) . "' " . " AND (ACTIVE='Y' OR NOT(CONFIRM_CODE IS NULL OR CONFIRM_CODE='')) " . ( // $arParams["EXTERNAL_AUTH_ID"] can be changed in the OnBeforeUserSendPassword event isset($arParams["EXTERNAL_AUTH_ID"]) && $arParams["EXTERNAL_AUTH_ID"] != '' ? " AND EXTERNAL_AUTH_ID='" . $DB->ForSQL($arParams["EXTERNAL_AUTH_ID"]) . "' " : " AND (EXTERNAL_AUTH_ID IS NULL OR EXTERNAL_AUTH_ID='') " ); } if ($arParams["EMAIL"] != '') { if ($strSql != '') { $strSql .= "nUNIONn"; } $strSql .= "SELECT ID, LID, ACTIVE, BLOCKED, CONFIRM_CODE, LOGIN, EMAIL, NAME, LAST_NAME, LANGUAGE_ID " . "FROM b_user u " . "WHERE EMAIL='" . $DB->ForSQL($arParams["EMAIL"]) . "' " . " AND (ACTIVE='Y' OR NOT(CONFIRM_CODE IS NULL OR CONFIRM_CODE='')) " . ( isset($arParams["EXTERNAL_AUTH_ID"]) && $arParams["EXTERNAL_AUTH_ID"] != '' ? " AND EXTERNAL_AUTH_ID='" . $DB->ForSQL($arParams["EXTERNAL_AUTH_ID"]) . "' " : " AND (EXTERNAL_AUTH_ID IS NULL OR EXTERNAL_AUTH_ID='') " ); } $res = $DB->Query($strSql); while ($arUser = $res->Fetch()) { if ($arParams["SITE_ID"] === false) { if (defined("ADMIN_SECTION") && ADMIN_SECTION === true) { $arParams["SITE_ID"] = CSite::GetDefSite($arUser["LID"]); } else { $arParams["SITE_ID"] = SITE_ID; } } if ($arUser["ACTIVE"] == 'Y') { if ($arUser["BLOCKED"] != 'Y') { $found = true; if ($arParams["SHORT_CODE"]) { $result = static::SendEmailCode($arUser["ID"], $arParams["SITE_ID"]); if ($result->isSuccess()) { $result_message = ["MESSAGE" => GetMessage("main_send_password_email_code") . "
", "TYPE" => "OK", "USER_ID" => $arUser["ID"], "RESULT" => $result]; } else { $result_message = ["MESSAGE" => implode("
", $result->getErrorMessages()), "TYPE" => "ERROR", "RESULT" => $result]; } } else { static::SendUserInfo($arUser["ID"], $arParams["SITE_ID"], GetMessage("INFO_REQ"), true, 'USER_PASS_REQUEST'); } } } elseif ($confirmation) { $found = true; //unconfirmed registration - resend confirmation email $arFields = [ "USER_ID" => $arUser["ID"], "LOGIN" => $arUser["LOGIN"], "EMAIL" => $arUser["EMAIL"], "NAME" => $arUser["NAME"], "LAST_NAME" => $arUser["LAST_NAME"], "CONFIRM_CODE" => $arUser["CONFIRM_CODE"], "USER_IP" => $_SERVER["REMOTE_ADDR"], "USER_HOST" => @gethostbyaddr($_SERVER["REMOTE_ADDR"]), ]; $event = new CEvent; $event->SendImmediate("NEW_USER_CONFIRM", $arParams["SITE_ID"], $arFields, 'Y', '', [], $arUser["LANGUAGE_ID"]); $result_message = ["MESSAGE" => GetMessage("MAIN_SEND_PASS_CONFIRM") . "
", "TYPE" => "OK"]; } if (Option::get('main', 'event_log_password_request', 'N') === 'Y') { CEventLog::Log('SECURITY', 'USER_INFO', 'main', $arUser['ID']); } } } if (!$found) { return ["MESSAGE" => GetMessage('DATA_NOT_FOUND1') . "
", "TYPE" => "ERROR"]; } } return $result_message; }