Проверка уникальности никнейма для 1.10.x

1198
Проверка уникальности никнейма при регистрации и редактировании профиля.
предыстория: /forum/thread14031-1.html



Качать тут

Редактировались дефолтные файлы 1.10.1
Решил сделать "по феншую", поэтому добавил несколько строк в языковые файлы.
Не бойтесь менять core/ajax/registration.php - это не суперсистемный файл, а просто проверка логина при реге. Сейчас в него добавлена проверка никнейма.
В данном варианте никнейм может состоять из рус/анг букв, цифр, пробелов и символов _-
Если хотите добавить свои правила, нужно изменить Регулярное выражение, по которому осуществляется проверка аж в ЧЕТЫРЁХ файлах:
check.js
registration.php
/registration/frontend.php
/users/frontend.php
Это не я придумал - это так и было!

Спасибо за внимание.
Создание статей с отложенной публикацией
Комментарии (38)
Реклама
cms
EVV 27 марта 2013 в 00:29 +3
small user social cms
по ссылке загружается файл создание статей с отложенной публикацией 1-10.rar
Олег Васильевич я 27 марта 2013 в 01:25 0
small user social cms
на этот момент пост имеет 10+ (оценили - 10). В очерередной раз убеждаюсь: стадом мы (люди) были, стадом и останемся =)))
Олег Васильевич я 27 марта 2013 в 01:27 0
small user social cms
упс, пока писал стало 13 (нашего полку прибыло laugh )
letsgo 27 марта 2013 в 01:43 -1
small user social cms
Причем тут стадо и оценки вообще? Странная логика.
Роман 27 марта 2013 в 04:17 +1
small user social cms
Весна. Обострение :))
Ленивый 27 марта 2013 в 06:47 0
small user social cms
))) Прошу прощения - не в тот файл ткнул, когда ссылку делал.
Всё поправил.
Май 27 марта 2013 в 07:15 +1
small user social cms
Ленивый, огромное спасибо, очень ждал этого хака. Потестил, все работает как надо. Очень сильно порадовали, для моего сайта это решение проблемы, уже накопилось множество дублей никнеймов, пользователи были не довольны этим. Теперь с этим будет порядок.
Роман 27 марта 2013 в 08:58 +3
small user social cms
Осталось внести только в релиз
Май 27 марта 2013 в 17:07 0
small user social cms
Нашел серьезный баг. При попытке отредактировать профиль, оставляя никнейм без изменений, например изменить телефон или какую либо другую информацию - срабатывает блокировка, система проверяет никнейм находит его в базе и не дает сохранить изменения.

Ленивый, нид хелп!
Ленивый 27 марта 2013 в 18:51 +2
small user social cms
Ух ты!! Прикольный косяк!!
Пришлось в com_users_edit_profile.tpl добавить скрытое поле со старым ником и делать проверку, только в случае, если ник был отредактирован.

Архив поправил, перезалил.
lokanaft 27 марта 2013 в 19:03 +1
small user social cms
Он был настолько ленивым...
Май 27 марта 2013 в 20:20 +1
small user social cms
Спасибо. Теперь все работает правильно.
ded-pikto 27 марта 2013 в 22:58 0
small user social cms
Плюс, конечно! Но ведь нет предела совершенству)))
Задавал уже вопрос в теме http://instantcms.ru/forum/thread14031-2.html.
ded-pikto:
2. Запрещённые админом ники. Сообщения addSessionMessage имеются. Не хватает быстрых js сообщений под окном ввода никнейма. Ведь при данном хаке есть вероятность, что ДОпользователь сначала получит сообщение "Вы можете использовать этот никнейм", а после заполнения формы и нажатия на кнопку "Регистрация" система сообщит ему, что "Выбранный никнейм запрещен администратором!" Пока нашёл выход в том, чтобы или выводить сообщение "Вы можете использовать этот никнейм, если он не запрещён администратором", или не выводить никакого. Пробовал разными способами (см. "Мартышка и очки") вызвать проверку BadNickname из таблицы cms_components, дабы с if-else вывести сообщение о запрете ника. Но или руки))), или вложенность, или всё вместе мешают. Подскажите, как это можно сделать?
Можно ли в качестве костыля приспособить для быстрых запросов по запрещённым никам файл \www\components\registration\model.php\www\components\registration\model.php ?
ded-pikto 27 марта 2013 в 23:09 0
small user social cms
Извиняюсь, файл \www\components\registration\model.php
Ленивый 28 марта 2013 в 08:34 +1
small user social cms
Мысль понял. Добавлю. В субботу.
Ленивый 28 марта 2013 в 08:36 0
small user social cms
..и ещё, кажется Вы же задавали вопрос по поводу логинзы? Что она, зараза, может делать дубли никнеймов??
ded-pikto 28 марта 2013 в 14:44 0
small user social cms
Да, я - это был он.
Но логинза - такая скользкая штучка. Многие с ней намучились. Для её приживления без дублей и сопутствующих косяков в систему поди с десяток файлов лопатить понадобится?.. Вот зашёл в первый раз по логинзе в Вебмани и теперь я - ПочтовыйЯщик Батькович Фамильев))) Претензии администрацией не принимаются - сам дурак. Знаю, что дурак. "Но опыт есть!")))
EVV 27 марта 2013 в 23:31 +1
small user social cms
Ленивый, хорошо было бы, если расписать, что в каких файлах заменено (добавлено). А то у меня (да думаю не только у меня) эти файлы модифицировались, поэтому заливать так невозможно.
ded-pikto 27 марта 2013 в 23:54 0
small user social cms
EVV, неленивый товарищ по движку мог бы сравнить мигратором или файловым менеджером хак и дефолтные файлы...
Тимофей 29 марта 2013 в 07:25 0
small user social cms
Тоже озадачился этим вопросом, но тут все просто. Нашел в нете бесплатную программу которая сравнивает два файла.
""
WinMerge.
PolarOne 2 октября 2013 в 00:54 0
small user social cms
расписал crazy
EVV 28 марта 2013 в 23:28 0
small user social cms
При изменении данных в профиле они не сохраняются! У меня у одного так?
Тимофей 29 марта 2013 в 07:28 0
small user social cms
Присоеденяюсь. Тоже самое. Пишет Никнейм ,,,,,, уже занят! И ничего не сохраняет.
Тимофей 29 марта 2013 в 09:01 0
small user social cms
Сам спросил, сам разобрался и сам ответил)) Для тех кто скачал старый архив как я, достаточно скачать новый и заменить файлы /components/users/frontend.php и /templates/ваш_шаблон/components/com_users_edit_profile.tpl и все должно заработать.
Май 29 марта 2013 в 09:09 +1
small user social cms
Да. Надо было почитать коменты выше
EVV 29 марта 2013 в 13:55 0
small user social cms
Скачал, заменил, но профиль все равно не сохраняется, причем проблем с никнеймом не было
Май 29 марта 2013 в 14:21 0
small user social cms
Подробнее опишите проблему, что значит не сохраняется? О каких проблемах с никнеймом вы говорите? Первоначально баг был в том, что производилась блокировка если в поле был тот же ник что и раньше, сейчас это пофиксили, и все работает правильно, изменения в профиле сохраняются. У меня работает корректно.
EVV 29 марта 2013 в 20:08 0
small user social cms
Не сохраняется, когда изменяешь какие-нибудь параметры в настройках профиля
EVV 30 марта 2013 в 14:52 0
small user social cms
Нашел у себя проблему. Конфликтовало с хаком "Обрезка аватара во время загрузки".
Удалил, теперь все работает.
ValeraK 20 апреля 2014 в 14:45 0
no avatar
А можно лир исправить так что б конфликта с этим хаком Обрезка аватара не было? Нужно и обрезка аватара и проверка уникальности никнейма.
PolarOne 2 октября 2013 в 00:52 0
small user social cms
Мне к сожалению не годилось - скачать и перезалить. Перелопачивать в ручную.
(У меня уже стояла проверка на уникальность логина, то ли базовая, то ли добавленная, не помню и измененная капча)
Сделал копии файлов на всякий случай) Но все. тьху тьху работает после правок.

1.\components\registration\frontend.php
около 150 строки заменил все // Проверяем nickname или имя и фамилию
Код PHP:
  1.  
  2. // Проверяем nickname или имя и фамилию
  3. if($model->config['name_mode']=='nickname'){
  4. if(!$item['nickname']) { cmsCore::addSessionMessage($_LANG['TYPE_NICKNAME'], 'error'); $errors = true; }
  5. } else {
  6. if(!$item['realname1']) { cmsCore::addSessionMessage($_LANG['TYPE_NAME'], 'error'); $errors = true; }
  7. if(!$item['realname2']) { cmsCore::addSessionMessage($_LANG['TYPE_SONAME'], 'error'); $errors = true; }
  8. $item['nickname'] = trim($item['realname1']) . ' ' . trim($item['realname2']);
  9. }
  10. if(mb_strlen($item['nickname'])<2 || mb_strlen($item['nickname'])>25 || !preg_match("/^([a-zA-Zа-яА-Я0-9_ -])+$/ui", $item['nickname'])) {
  11. cmsCore::addSessionMessage($_LANG['ERR_NICKNAME'], 'error'); $errors = true;
  12. }
  13. if($model->getBadNickname($item['nickname'])){ cmsCore::addSessionMessage($_LANG['ERR_NICK_EXISTS'], 'error'); $errors = true;}
  14. if($inDB->get_field('cms_users', "nickname='".$item['nickname']."'", 'id') > 0){
  15. cmsCore::addSessionMessage($_LANG['NICKNAME'].' "'.$item['nickname'].'" '.$_LANG['IS_BUSY'], 'error'); $errors = true;
  16. }
  17.  
2.\components\registration\js\check.js
Заменил полностью

3.\components\users\frontend.php
около 215 строки заменил все // Если сохраняем профиль
Код PHP:
  1.  
  2. // Если сохраняем профиль
  3. if ($opt == 'save'){
  4.  
  5. $errors = false;
  6.  
  7.  
  8. $users['nickname'] = cmsCore::request('nickname', 'str');
  9. if($users['nickname'] != cmsCore::request('nickname_old', 'str')){
  10. if(mb_strlen($users['nickname'])<2 || mb_strlen($users['nickname'])>25 || !preg_match("/^([a-zA-Zа-яА-Я0-9_ -])+$/ui", $users['nickname'])) {
  11. cmsCore::addSessionMessage($_LANG['ERR_NICKNAME'], 'error'); $errors = true;
  12. }
  13. cmsCore::loadModel('registration');
  14. $modreg = new cms_model_registration();
  15. if (!$inUser->is_admin){if($modreg->getBadNickname($users['nickname'])) { cmsCore::addSessionMessage($_LANG['ERR_NICK_EXISTS'], 'error'); $errors = true; }}
  16. if($inDB->get_field('cms_users', "nickname='".$users['nickname']."'", 'id') > 0){
  17. cmsCore::addSessionMessage($_LANG['NICKNAME'].' "'.$users['nickname'].'" '.$_LANG['IS_BUSY'], 'error'); $errors = true;
  18. }
  19. }
  20. $profiles['gender'] = cmsCore::request('gender', 'str');
  21. $profiles['city'] = cmsCore::request('city', 'str');
  22. if (mb_strlen($profiles['city'])>25) { cmsCore::addSessionMessage($_LANG['LONG_CITY_NAME'], 'error'); $errors = true; }
  23.  
  24. $users['email'] = cmsCore::request('email', 'email');
  25. if (!$users['email']) { cmsCore::addSessionMessage($_LANG['REALY_ADRESS_EMAIL'], 'error'); $errors = true; }
  26. if($usr['email'] != $users['email']){
  27. $is_set_email = $inDB->get_field('cms_users', "email='{$users['email']}'", 'id');
  28. if ($is_set_email) { cmsCore::addSessionMessage($_LANG['ADRESS_EMAIL_IS_BUSY'], 'error'); $errors = true; }
  29. }
  30.  
  31. $profiles['showmail'] = cmsCore::request('showmail', 'int');
  32. $profiles['email_newmsg'] = cmsCore::request('email_newmsg', 'int');
  33. $profiles['showbirth'] = cmsCore::request('showbirth', 'int');
  34. $profiles['description'] = cmsCore::request('description', 'str', '');
  35. $users['birthdate'] = (int)$_REQUEST['birthdate']['year'].'-'.(int)$_REQUEST['birthdate']['month'].'-'.(int)$_REQUEST['birthdate']['day'];
  36. $profiles['signature'] = $inDB->escape_string(cmsCore::request('signature', 'html', ''));
  37. $profiles['signature_html'] = $inDB->escape_string(cmsCore::parseSmiles(cmsCore::request('signature', 'html', ''), true));
  38. $profiles['allow_who'] = cmsCore::request('allow_who', 'str');
  39. if (!preg_match('/^([a-zA-Z]+)$/ui', $profiles['allow_who'])) { $errors = true; }
  40. $users['icq'] = preg_replace('/([^0-9])/ui', '', cmsCore::request('icq', 'str'));
  41. $profiles['showicq'] = cmsCore::request('showicq', 'int');
  42. $profiles['cm_subscribe'] = cmsCore::request('cm_subscribe', 'str');
  43. if (!preg_match('/^([a-zA-Z]+)$/ui', $profiles['cm_subscribe'])) { $errors = true; }
  44.  
  45.  
4.\core\ajax\registration.php
Заменил полностью

5.\languages\ru\components\users.php
Добавилась строчка (около 28)
Код PHP:
  1.  
  2. $_LANG['ERR_NICKNAME'] ='Никнейм должен состоять только из русских или латинских букв и цифр, не короче 2 и не более 25 символов!';
  3.  
6.\languages\ru\components\registration.php
Около 36 строчки добавилось следующее
Код PHP:
  1.  
  2. $_LANG['ERR_NICKNAME'] ='Никнейм должен состоять только из русских или латинских букв и цифр, не короче 2 и не более 25 символов!';
  3. $_LANG['BIG_NICKNAME'] ='Никнейм не может быть длинее 25 символов!';
  4.  
и около 53
Код PHP:
  1.  
  2. $_LANG['YOU_NICKNAME_COMPLETE'] ='Вы можете использовать этот никнейм';
  3.  
7.\templates\_default_\components\com_users_edit_profile.tpl
Не уверен что так уж оно нужно было
заменил свою строчку (около 38)
Код PHP:
  1. <input name="nickname" type="text" class="text-input" id="nickname" style="width:300px" value="{$usr.nickname|escape:'html'}"/>
на
Код PHP:
  1.  
  2. <input name="nickname" type="text" class="text-input" id="nickname" style="width:300px" value="{$usr.nickname|escape:'html'}"/>
  3. <input name="nickname_old" type="hidden" class="text-input" id="nickname_old" style="width:300px" value="{$usr.nickname}"/>
  4.  
8.\languages\ru\components\com_registration.tpl
заменил 48 строчку у себя
эту
Код PHP:
  1.  
  2. <input name="nickname" id="nickinput" class="text-input" type="text" style="width:300px" value="{$item.nickname|escape:'html'}" />
  3. <span class="regstar">*</span>
  4.  
на эту
Код PHP:
  1.  
  2. <input name="nickname" id="nickinput" class="text-input" type="text" style="width:300px" value="{$item.nickname|escape:'html'}" onchange="checkNickname()" autocomplete="off"/>
  3. <span class="regstar">*</span>
  4. <div id="nicknamecheck"></div>
  5.  
Если заметили ошибку - поправте меня авторы, ну в если кому пригодилось - не поленитесь, плюс в карму.
У меня проверка работает.
instantcms 1.10.1
propit 21 декабря 2013 в 23:24 0
small user social cms
Все отлично работает на 1.10.3

Единственное пришлось подправить файл
2.\components\registration\js\check.js Заменил полностью

Готовое содержимое файла в спойлере:
Спойлер

и еще одно маленькое замечание. Путь к Файлу com_registration.tpl, описанному в пункте № 8
8.\languages\ru\components\com_registration.tpl
на самом деле находится тут:
8.\templates\_default_\components\com_registration.tpl

Огромное спасибо за труд!
mullo 15 апреля 2014 в 00:51 0
small user social cms
2.\components\registration\js\check.js Заменил полностью
У меня ироглифы показывает из этого файла при проверке
mullo 15 апреля 2014 в 00:52 0
small user social cms
и не чего не появляеться при проверке ника
Ivan84 7 января 2014 в 18:24 0
small user social cms
Огромное спасибо за труд
Ivan84 7 июня 2014 в 00:16 0
small user social cms
У меня после обновления с 1.10.1 до 10.3 и наката хака не работает проверка на уникальность. при переходе на страницу регистрации вылетает белая - пустая страница и тоже самое с профилем пользователя. У кого нибудь есть соображение.
mashen&ka 27 декабря 2014 в 19:01 0
small user social cms
Спасибо PolarOne и propit. Всё получилось, только вот не большая проблемка, теперь в профиле ничего не меняется. Я захожу в профиль меняю город, нажимаю "сохранить" он пишет "такой логин уже есть" и не сохраняет даже изменение города... или даты рождения... ну или еще чего-нибудь в профиле.
mashen&ka 20 января 2015 в 22:47 0
small user social cms
Тут кто-нибудь есть?