Мой пост будет намного многословнее, чем у Керка. Потому что я - графоман
Итак, пишет клиент (техадминю много лет, но (к сожалению) не одна я там техадминила). Мол, юзера жалуются,
не работает восстановление пароля. 4ка (это важно, но это я поняла потом).
ОК, как мы всегда шаблонно реагируем на такое? - правильно, "пусть смотрит в папке СПАМ".
- Нет, - говорит, - смотрел.
Чтобы вы понимали: я общаюсь с владельцем форума в ЛС на его форуме, а он в каком-то мессенжере общается с юзером, у которого траблы. Испорченный телефон, классический.
Выкапываю тестовый акк с регистрацией 2013-го забытого года, запрашиваю восстановление пароля на мыло, всё приходит (и даже не в "спам"), всё круто, всё работает.
Ну, думаю, там несколько лет назад была конвертация в УТФ, всякое бывает... Прошу ссылку на профиль.
Нет, всё нормально, ник хоть и кириллицей, условно скажем, Вася, но коллизий нет.
- Нет, - говорит, - не в этом дело. Он не может сменить пароль в кабинете, потому что там реклама, а у него блокировщик рекламы, реклама блокируется вместе с первой строкой:
нет поля для ввода действующего пароля.
Вау, - думаю я и иду мучить браузеры. Задействовав три компа, ноут и телефон (убунту + другая убунту + эмулятор винды на убунте + таки честная винда + Андроид) и пачку браузеров в каждом (почти каждом) случае (ФФ, Хром, Хромиум, Опера новая, Опера старая, Стринги (в смысле, яшко-браузер), Вивальди и даже ИЕ (от 7 и выше, и реинкарнация его) - ничего... Ни-че-го, "от слова совсем" (с). У меня всё работает.
Предлагаю сходить в дефолтном стиле, даю прямую ссылку. Нет, всё то же.
Пациент тем временем шлёт скрин. Тут я его не покажу, и не потому, что там мыло видно, а потому, что там как раз ни пса не видно: это фото с планшета, без резкости и под углом.
Но главное я увидела.
Нет не только поля для ввода действующего пароля.
Во фразе
Изменение пароля (не обязательно) нет куска "
(не обязательно)"
Стоооооооп....... никакая резалка рекламы не может вынести кусок строки.
Для тройки я точно знаю, в каком случае (единственном, насколько мне известно) не выводится эта фраза, "
(не обязательно)": когда пароль устарел. А в 4ке?
Регистрирую новый тестовый акк (через фронтенд, нЕ через админку)
Кабинет - Смена email и пароля - вуаля!
Для сравнения, из серии "найдите три отличия":
Видно, да?
И тут у меня включается состояние "Стоять! Бояться! Доберман взял след!!!" Я вижу проблему
у себя, это значит, что я могу с ней работать.
Полетели!
Стиль:
template name="modifypassword"
Code:
<h3 class="blocksubhead">{vb:rawphrase edit_password}<vb:if condition="$show['password_optional'] AND $show['oldpasswordinput']"> ({vb:rawphrase optional})</vb:if></h3>
oldpasswordinput в условиях
в каких?
profile.php
Code:
// only show old password input if user is vb user,
// and not facebook only user (which means they have no password)
$show['oldpasswordinput'] = ($vbulletin->userinfo['logintype'] == 'vb');
опа...
платформа Facebook выключена (сейчас, когда я регистрировала тестовый акк) и была выключена, когда регистрировался этот юзер, у которого проблемы. Она вообще никогда там не подключалась, регистрация через Фейсбук.
БД, таблица user, смотрю свой свежезереганный акк, logintype - NULL
смотрю этого юзера - аналогично, NULL
тыкаюсь в сортировки в ПМА, получаю картину:
Итого:
юзер с ИД ***, зарегистрировавшийся 26 ноября 2014 года - последний юзер, у которого нормально работает в кабинете смена пароля
у юзера с ИД ***, регистрация 1 декабря 2014 года, уже есть проблемы: он, как и Вася, как и все, кто регистрировался после, НЕ видит поля для ввода старого пароля, потому что у них в базе записано logintype не vb, а NULL.
NULL, конечно, не fb, но и никак не vb и с vb никогда не сравнится, поэтому никакого поля для действующего пароля не выводится. Всё логично.
Раскопки в админлоге ничего особо не дают, или наоборот, дают слишком много: там был движняк, в этот период, и нехилый движняк. Что-то ставилось, что-то удалялось, форум обновлялся.
В общем, вопрос "кто виноват" прояснить не удалось. Могу сказать с 99% уверенностью: это не какой-то хак и не обновление. Возможно, восстановление из бэкапа, что-то там "пошло не так", что снесло дефолтное значение поля (полей, видно на скрине, их много, кто вдруг стал NULL).
Лечение:
согласно mysql-schema.php
Code:
logintype ENUM('vb', 'fb') NOT NULL DEFAULT 'vb'
проставить значения для поля logintype в таблице user, главное - чтобы никаких NULL
чтобы в структуре было так:
всем, у кого проставилось это NULL, выставить vb
Всё. Спасибо тем, кто дочитал...