- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/classes/general/user.php
- Класс: CAllUser
- Вызов: CAllUser::CheckInternalFields
static function CheckInternalFields($arFields, $ID = false)
{
global $DB;
$resultError = '';
$emailRequired = (Option::get('main', 'new_user_email_required', 'Y') != 'N');
$phoneRequired = (Option::get('main', 'new_user_phone_required', 'N') == 'Y');
if ($ID === false)
{
if (!isset($arFields["LOGIN"]))
{
$resultError .= GetMessage("user_login_not_set") . "
";
}
if (!isset($arFields["PASSWORD"]))
{
$resultError .= GetMessage("user_pass_not_set") . "
";
}
if ($emailRequired && !isset($arFields["EMAIL"]))
{
$resultError .= GetMessage("user_email_not_set") . "
";
}
if ($phoneRequired && !isset($arFields["PHONE_NUMBER"]))
{
$resultError .= GetMessage("main_user_check_no_phone") . "
";
}
}
if (is_set($arFields, "LOGIN") && $arFields["LOGIN"] != trim($arFields["LOGIN"]))
{
$resultError .= GetMessage("LOGIN_WHITESPACE") . "
";
}
if (is_set($arFields, "LOGIN") && mb_strlen($arFields["LOGIN"]) < 3)
{
$resultError .= GetMessage("MIN_LOGIN") . "
";
}
if (is_set($arFields, "PASSWORD"))
{
if (is_set($arFields, "CONFIRM_PASSWORD") && $arFields["PASSWORD"] !== $arFields["CONFIRM_PASSWORD"])
{
//we shouldn't show that password is correct
$resultError .= GetMessage("WRONG_CONFIRMATION") . "
";
}
else
{
if (array_key_exists("GROUP_ID", $arFields))
{
$arGroups = [];
if (is_array($arFields["GROUP_ID"]))
{
foreach ($arFields["GROUP_ID"] as $arGroup)
{
if (is_array($arGroup))
{
$arGroups[] = $arGroup["GROUP_ID"];
}
else
{
$arGroups[] = $arGroup;
}
}
}
$policy = static::getPolicy($arGroups);
}
elseif ($ID !== false)
{
$policy = static::getPolicy($ID);
}
else
{
$policy = static::getPolicy([]);
}
$passwordErrors = static::CheckPasswordAgainstPolicy($arFields["PASSWORD"], $policy->getValues(), ($ID !== false ? $ID : null));
if (!empty($passwordErrors))
{
$resultError .= implode("
", $passwordErrors) . "
";
}
}
}
if (is_set($arFields, "EMAIL"))
{
if (($emailRequired && mb_strlen($arFields["EMAIL"]) < 3) || ($arFields["EMAIL"] != '' && !check_email($arFields["EMAIL"], true)))
{
$resultError .= GetMessage("WRONG_EMAIL") . "
";
}
elseif (Option::get('main', 'new_user_email_uniq_check', 'N') === 'Y')
{
if ($arFields["EMAIL"] != '')
{
$oldEmail = '';
if ($ID > 0)
{
// the option 'new_user_email_uniq_check' might have been switched on after the DB already contained identical emails,
// so we let a user to have the old email, but not the existing new one
$dbr = $DB->Query("SELECT EMAIL FROM b_user WHERE ID=" . intval($ID));
if (($ar = $dbr->Fetch()))
{
$oldEmail = $ar['EMAIL'];
}
}
if (!$ID || $arFields["EMAIL"] != $oldEmail)
{
$res = static::GetList('', '',
[
"=EMAIL" => $arFields["EMAIL"],
"EXTERNAL_AUTH_ID" => $arFields["EXTERNAL_AUTH_ID"] ?? null,
],
[
"FIELDS" => ["ID"],
]
);
while ($ar = $res->Fetch())
{
if (intval($ar["ID"]) !== intval($ID))
{
$resultError .= GetMessage("USER_WITH_EMAIL_EXIST", ["#EMAIL#" => htmlspecialcharsbx($arFields["EMAIL"])]) . "
";
}
}
}
}
}
}
if (isset($arFields["PHONE_NUMBER"]))
{
if ($phoneRequired && $arFields["PHONE_NUMBER"] == '')
{
$resultError .= GetMessage("main_user_check_no_phone") . "
";
}
elseif ($arFields["PHONE_NUMBER"] != '')
{
//normalize the number: we need it normalized for validation
$phoneNumber = MainUserPhoneAuthTable::normalizePhoneNumber($arFields["PHONE_NUMBER"]);
//validation
$field = MainUserPhoneAuthTable::getEntity()->getField("PHONE_NUMBER");
$result = new MainORMDataResult();
$primary = ($ID === false ? [] : ["USER_ID" => $ID]);
$field->validateValue($phoneNumber, $primary, [], $result);
if (!$result->isSuccess())
{
$resultError .= implode("
", $result->getErrorMessages());
}
}
}
if (isset($arFields["GROUP_ID"]) && is_array($arFields["GROUP_ID"]) && !empty($arFields["GROUP_ID"]))
{
if (isset($arFields["GROUP_ID"][0]) && is_array($arFields["GROUP_ID"][0]) && !empty($arFields["GROUP_ID"][0]))
{
foreach ($arFields["GROUP_ID"] as $arGroup)
{
if ($arGroup["DATE_ACTIVE_FROM"] != '' && !CheckDateTime($arGroup["DATE_ACTIVE_FROM"]))
{
$error = str_replace("#GROUP_ID#", $arGroup["GROUP_ID"], GetMessage("WRONG_DATE_ACTIVE_FROM"));
$resultError .= $error . "
";
}
if ($arGroup["DATE_ACTIVE_TO"] != '' && !CheckDateTime($arGroup["DATE_ACTIVE_TO"]))
{
$error = str_replace("#GROUP_ID#", $arGroup["GROUP_ID"], GetMessage("WRONG_DATE_ACTIVE_TO"));
$resultError .= $error . "
";
}
}
}
}
return $resultError;
}