обновление с 1.10.1 до 1.9 (логины)

+30
1.43K
Конечно, заголовок — шутка, но доля истины в нём есть.
Речь о Логинах, которые в 1.9 спокойно могли полностью состоять цифр, а в 1.10 сие пресекается!!! Поэтому юзеры с такими логинами не могут попасть в свой профиль и ещё бог знает куда.
Данная тема для тех, кто обновился до 1.10 но не хочет терять своих пользователей, которые не ведая о грядущих переменах, беспечно сделали себе числовой логин!!


Для любознательных: Пользователи с числовыми никами не могут попасть в свой профиль из-за функции getUser, которая в 1.10 стала умной и по тому, какая информация ей передана, числовая или текстовая, сама определяет, как ей искать пользователя, по id или по login
Именно поэтому ей нельзя передавать цифровой логин — она "подумает", что это id пользователя и вернёт что попало!
Забавность ситуации в том, что на всём сайте эта функция используется всего ДВАЖДЫ. Причём, один раз с id и один раз с login.


ПРАКТИЧЕСКАЯ ЧАСТЬ:

Чтобы все пользователи могли попадать в свой профиль:
в /components/users/frontend.php
УДАЛЯЕМ стр. 321
if(is_numeric($login)) { cmsCore::error404(); }
кому жалко — комментим.

Далее, стр. 323
$usr = $model->getUser($login);
ЗАМЕНИТЬ НА

$id_user = $inDB->get_field('cms_users', "login='{$login}'", 'id');
$usr = $model->getUser($id_user);

Суть замены проста: по логину юзера, получить его id и с этим id обратиться к функции getUser


ТЕПЕРЬ НЕ РАССЛАБЛЯТЬСЯ! Есть ещё одна, такая же хитрая функция — getShortUserData
И если вы не хотите, чтобы пользователи словили еррор 404 в других неожиданных местах, придётся сделать ещё несколько подобных замен:

в /components/comments/frontend.php стр. 50
в /components/forum/frontend.php стр. 1189
в /components/board/frontend.php стр. 147

строку $user = cmsUser::getShortUserData($login); ЗАМЕНИТЬ НА:

$id_user = $inDB->get_field('cms_users', "login='{$login}'", 'id');
$user = cmsUser::getShortUserData($id_user);


ДАЛЕЕ
в /components/users/photos.php стр. 120
и в том же файле
/components/users/photos.php стр. 521

строку $usr = cmsUser::getShortUserData($login); ЗАМЕНИТЬ НА:

$id_user = $inDB->get_field('cms_users', "login='{$login}'", 'id');
$usr = cmsUser::getShortUserData($id_user);

(обращаю внимание: выше была переменная $user а тут $usr)

И ПОСЛЕДНИЙ МОМЕНТ!!
в /components/registration/frontend.php стр. 53
используется e-mail — $usr = cmsUser::getShortUserData($email);
поэтому данную строчку нужно ЗАМЕНИТЬ НА

$id_user = $inDB->get_field('cms_users', "email='{$email}'", 'id');
$usr = cmsUser::getShortUserData($id_user);
0
Реклама Реклама #
+2
Сергей Петрович Сергей Петрович 8 лет назад #
В догонку:
Все эти манипуляции позволят старым пользователям с цифровыми логинами спокойно жить на обновлённом сайте, НО новым пользователям зарегаться с цифровым логином не получится. Если кому-то надо и это убрать - обращайтесь.
+3
Сергей Петрович Сергей Петрович 8 лет назад #
Продолжая тему обновления с 1.10 до 1.9 -
На двух сайтах пришлось вернуть форму отправки комментов, которая открываются, собственно, как тут, а не во всплывающем окне посередине экрана. Причина - пользователям нужно иметь возможность смотреть то, что они комментят. Ещё кому-нибудь актуально??
0
Александр I Александр I 8 лет назад #
Да, актуально.
0
Zau4man Zau4man 8 лет назад #
Очень актуально.
+2
Dost Dost 8 лет назад #
А поздно...Мои пользователи с одного сайта разбежались и причем, как оказалось, на них весь сайт держался. Но лучше поздно, чем никогда)) Плюсы и спасибо!!!
0
reload reload 8 лет назад #
Dost, никогда не поздно) Вы им рассылочку сделайте с извинениями, и вернуться) возможно) попробовать стоит!)
0
Александр Александр 8 лет назад #
Продолжая тему обновления с 1.10 до 1.9 -
На двух сайтах пришлось вернуть форму отправки комментов, которая открываются, собственно, как тут, а не во всплывающем окне посередине экрана. Причина - пользователям нужно иметь возможность смотреть то, что они комментят. Ещё кому-нибудь актуально??

Актуально все к чему привыкли на 1.9
Моим тоже многим не понравилось вылетающее окно
0
Def Def 8 лет назад #
а можешь выложить хак?
0
Dost Dost 8 лет назад #
Я их пол года развлекал, пока они наконец стали сами между собой общаться. Одной рассылки мало. Нужно им что то еще предложить. Неее, поезд ушел и я перегорел. Отдал под Sape уже и забыл.
0
eoleg eoleg 8 лет назад #
+
0
Zau4man Zau4man 8 лет назад #
Премного благодарен.
Пойду тестировать.
0
lokanaft lokanaft 8 лет назад #
Эммм, а не судьба юзерам было логины просто переделать и если на них ссылаются где любо, то редирект по единому префиксу?
0
Fuze Fuze 8 лет назад #
ИМХО - решение не гуд,

- добавляется еще один запрос к базе на каждый метод
- много редактировать и соответственно поддерживать потом

lokanaft:
а не судьба юзерам было логины просто переделать
единственное правильное решение.

думаю тут можно обойтись запросом к базе, например так (к числовым логинам добавится префикс prefix )
Код SQL:
  1. UPDATE cms_users SET `login` = CONCAT('prefix', login) WHERE `login` REGEXP '^([0-9]+)$';
не забываем про бекапы
+2
picaboo picaboo 8 лет назад #
надо было подобное в мигратор кинуть, матюгался бы народ, но ошибок бы не возникало зато.
0
Сергей Петрович Сергей Петрович 8 лет назад #
Тот факт, что народ бы матюкался - это есть главная ошибка! ИМХО
0
Сергей Петрович Сергей Петрович 8 лет назад #
Fuze:
ИМХО - решение не гуд,
Я бы отнёс эту фразу кое к чему другому!!! )))

Но с Вами вступать в полемику не буду.
0
Fuze Fuze 8 лет назад #
Я бы отнёс эту фразу кое к чему другому!!! )))
опять на свой личный счет приняли? Зачем?)

покритиковал немного, обосновал, предложил свое решение - в чем недовольство?

Но с Вами вступать в полемику не буду.
зачем вообще писали комментарий тогда.
+1
StaryiSV StaryiSV 8 лет назад #
для тех, кто регистрировался через вконтакте, с номером телефона вместо логина, не плохое решение. Ленивый , от меня плюс.
+1
Нил™ Нил™ 8 лет назад #
блин я смотрю переход к 1.10 это не обновление, это больше похоже на переход к другой цмс(( при чем не факт что более лучшую. Увы, но пока только такое впечатление по тому что вижу. если только вопросы безопасности...
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.