Цитата |
---|
Виталий Пичугин написал: Цитата Александр Чертан написал: Кастомизируйте шаблон редактирования профиля, сделайте поле логина readonly Тогда кому надо будет, сможет его изменить, отправив нужное значение в поле. Надо на сервере запрещать, а не на клиенте. |
Абсолютно верно! Жаль что такое не предусмотрено битриксом из коробки. Вполне типовая ситуация для многих сайтов.
Вот такое событие перед обновлением профиля, прописывать в local/php_interface/init.php.
Принимаем емайл с формы находим по нему пользователя в бд и подсовываем его логин.
Код |
---|
AddEventHandler("main", "OnBeforeUserUpdate", array("UserHandlers", "OnBeforeUserUpdateHandler"));
function OnBeforeUserUpdateHandler(&$arFields)
{
if (isset($_POST["EMAIL"]))
{
$isMail = strpos($_POST["EMAIL"], "@");
if ($isMail > 0)
{
$filter = array("=EMAIL" => $_POST["EMAIL"]);
$rsUsers = CUser::GetList($by = "id", $order = "asc", $filter);
if ($user = $rsUsers->GetNext())
{
$arFields["LOGIN"] = $user["LOGIN"];
}
}
}
}
|
И не забудьте в форме указать
Код |
---|
<input type="hidden" name="LOGIN" value="disable" /> |
Иначе будет вылезать ошибка. При таком варианте какой угодно логин можно отправлять с клиента, на сервер поступит логин из профиля пользователя полученного по емайл. Правда в админке тоже логин сменить не получится, если добавить этот код)