Препарируем BT Login

Мне сегодня пожаловались на меня о_О.

Суть проста: есть модуль BT Login, в нём есть поддержка капчи, стандартная рекапча работает, мой плагин яндекскапчи - нет. Кто криворукий разработчик? Логично, Я!

Ан нет, это разработчикам BT Login нужно вырвать руки и затолкать их в задницу, да так глубоко, что бы могли почесать ими язык. Их косяки порочат моё честное имя и профессионализм.

Я не поленился и полез во внутренности этого модуля.

Открываем файл /modules/mod_bt_login/mod_bt_login.php и примерно на 130 строке видим:

if ($enabledRecaptcha == 'recaptcha') {
  // 	create instance captcha, get recaptcha
  $recaptchaPlg = JPluginHelper::getPlugin ( 'captcha', 'recaptcha' );
  $recaptchaPlgParams = new JRegistry ( $recaptchaPlg->params );
  $publicKey = $recaptchaPlgParams->get ( 'public_key' );
  $captcha = JCaptcha::getInstance ( 'recaptcha' );
  $reCaptcha = $captcha->display ( $publicKey, '' );
}else if($enabledRecaptcha == 2){
  $reCaptcha = modbt_loginHelper::getBuiltinCaptcha();
}

Видим и офигеваем. Они капчу по имени вызывают: 'recaptcha', строкой, в коде... Офигеть, а зачем вы настройку для выбора капчи вынесли? Если она у вас не работает? Хотя нет, работает, но только для встроенной капчи и 'recaptcha'. А в результате страдают неповинные люди (Я).

Именно для того, что бы такой херни не случалось, придумали стандарты. Друзья, следуйте стандартам.

Ну а чтобы научить BT Login работать с yacaptcha, заменяем код что выше, на код, что ниже или скачиваем и заменяем файл /modules/mod_bt_login/mod_bt_login.php в конце статьи.

if ($enabledRecaptcha == 'recaptcha') {
  // 	create instance captcha, get recaptcha
  $recaptchaPlg = JPluginHelper::getPlugin ( 'captcha', 'recaptcha' );
  $recaptchaPlgParams = new JRegistry ( $recaptchaPlg->params );
  $publicKey = $recaptchaPlgParams->get ( 'public_key' );
  $captcha = JCaptcha::getInstance ( 'recaptcha' );
  $reCaptcha = $captcha->display ( $publicKey, '' );
}else if ($enabledRecaptcha == 'yacaptcha') {
  //Разработчикам BT Login за это нужно в голову ГВОЗДЬ забить,
  //кривой лопатой, что бы дольше мучались
  $recaptchaPlg = JPluginHelper::getPlugin ('captcha', 'yacaptcha');
  $recaptchaPlgParams = new JRegistry ( $recaptchaPlg->params );
  $publicKey = $recaptchaPlgParams->get ('public_key');
  $captcha = JCaptcha::getInstance ('yacaptcha');
  $reCaptcha = $captcha->display ($publicKey, '');
}else if($enabledRecaptcha == 2){
  $reCaptcha = modbt_loginHelper::getBuiltinCaptcha();
}
Attachments:
Download this file (mod_bt_login.p_h_p.zip)mod_bt_login.p_h_p.zip[ ]2 kB

Comments  

0 # Дмитрий
Может я конечно и криворук, но после замены кода у меня прочно выбрасывается ошибка синтаксиса на 149 строке (это по ходу последняя закрывающая скобка). Переставлял код 2 раза - эффект аналогичный :-?
2014-12-12 07:02 Reply | Reply with quote | Quote
0 # Александр Хмельницкий
Да, скорее всего дело в скобке или запятой какой нибудь. Попробуйте просто файл заменить.
Для того чтобы якапча заработала, нужно установить её как капчу поумолчанию - это в глобальных настройках сайта и в настройках модуля выбрать капчу поумаолчанию.
2014-12-12 07:33 Reply | Reply with quote | Quote
0 # Дмитрий
"или скачиваем и заменяем файл /modules/mod_bt _login/mod_bt_l ogin.php в конце статьи". У меня уже по ходу и с глазами проблемы наступили! А где файл в конце статьи?.. :roll:
2014-12-12 22:44 Reply | Reply with quote | Quote
0 # Александр Хмельницкий
Извини, мой косяк, файл привязал, но не опубликовал. Сейчас он есть в конце статьи.
2014-12-12 22:46 Reply | Reply with quote | Quote
0 # Дмитрий
С заменой файла сайт заработал. Я еще вчера понял что в версии BT login 2.5.6., что стоял у меня и версии 2.6, которая рассматривалась в примере совсем малость, но все же различные коды, поэтому вылазила ошибка синтаксиса. Но... замена файла целиком убрала ошибку, но не решила главную проблему. Яндекс капча по прежнему не выводится в форме BT login. В самом BT модуле выбор двух позиций для капчи: "По умолчанию и BUILTIN_CAPTCHA " Яндекс капча в выборе отсутствует (хотя включена в общих настройках и менеджере пользователей). С выбором BUILTIN_CAPTCHA , BT использует её, а родная регистрация выводит Яндекс капчу. При установки в BT login положения капчи по умолчанию, в форме регистрации выводится надпись "Капча*" и далее пустое поле, а вот родная форма начинает истерить "ОШИБКА! Не задан API ключ".
2014-12-13 01:30 Reply | Reply with quote | Quote
0 # Дмитрий
После переключения в ВТ капчи на на BUILTIN_CAPTCHA родная регистрация опять работает. Замена нового API ключа картины тоже не изменила, как и переустановка версии ВТ логина с 2.5.6 до последней 2.6. Картина поведения остается не низменной :sad:
2014-12-13 01:32 Reply | Reply with quote | Quote
0 # Дмитрий
Опа! Оказывается работает плагин! :-) Но работает везде, кроме страниц, которые уже используют капчу, например форма обратной связи, форма оформления заказов и т.д. Вот судя по всему и причина данной ошибки с API. Она вылетает только на этих страницах. Есть мысль, как обойти данный конфликт? Совсем неохота наводнять сайт кучей разных капчей :sigh: И кстати при выводе Яндекс капчи в ВТ логин у меня тот же самый баг, отсутствие кнопки обнавить картинку...
2014-12-13 01:57 Reply | Reply with quote | Quote
0 # Дмитрий
Подметил к стати ещё один баг, но уже в этой форме отправки сообщений у меня не отображается "Обновить картинку" для капчи. Если что, приходится сохранять написанное сообщение и обновлять страницу целиком, что не совсем кошерно :-)
2014-12-13 01:36 Reply | Reply with quote | Quote
0 # Александр Хмельницкий
Много информации, я теряюсь :-)
Итак есть проблема: если на странице 2 и более капч они работают не верно. Что ж, этот вариант я сейчас протестирую, что касается кнопки "Обновить картинку" этот функционал обеспечивает не плагин капчи, а расширение, которое его использует. В данном случае BT Login.
2014-12-13 02:07 Reply | Reply with quote | Quote
0 # Дмитрий
Да, но кнопка "Обновить картинку" в Яндекс капче нигде не показывается, даже здесь, в форме отправки ЭТОГО СООБЩЕНИЯ! :-) У меня на других страницах сайта кстати тоже. А с конфликт двух 2 форм на сайте использующих капчу ПО УМОЛЧАНИЮ существует. И ещё по поводу ВТ логин. Кода ставишь капчу BUILTIN_CAPTCHA , то кнопка есть. Так что я думаю тут 2 варианта. Либо сам Яндекс не обеспечивает полную функциональност ь или в коде плагина есть недоработка :oops:
2014-12-13 02:52 Reply | Reply with quote | Quote
0 # Дмитрий
И здесь на сайте (в форме комментариев), кстати помимо того, что нет кнопки обновить картинку ещё после отправки написанного сообщения не обновляется код капчи. Т.е. приходится полностью обновлять всю страницу, если желаешь написать ещё одно сообщение. Тоже самое ежли допущена какая то ошибка. Вот оно как...
2014-12-13 02:59 Reply | Reply with quote | Quote
0 # Дмитрий
Между делом глянул, как это дело решено в самом Яндекс... никак. Кнопки обновить картинку похоже нет в самом сервисе :sad: Но у Яндекс капча обновляется после отправки сообщения сама, без перезагрузки страниц. Мелочь, а приятно...
2014-12-13 03:52 Reply | Reply with quote | Quote
0 # Александр Хмельницкий
Итак.
1. Если на странице включён только BT Login - яндекс капча работает отлично.
2. Если на странице включён BT Login и другое расширение, которое использует капчу - возникают проблемы. На скорую руку поправить не удалось, т.к. в BT Login придётся достаточно много менять, прежде всего в логике. Но я постараюсь решить этот вопрос в ближайшее время.
3. Что касается ЯндексКапчи и JComments, после отправки капча не обновляется. Это особенности реализации конкретного компонента JComments. Комментарий отправляется аяксом, а форма не обновляется. Дело в том, что у меня на сайте стоит версия для тестов. И об этом баге я напишу разработчику.

В целом я бы рекомендовал отказаться от BT Login - весьма кривая поделка и заменить его чем то другим.
Так же стало очевидно, что мне пора запустить тикет-систему поддержки, потому что мы с вами засрали все комменты :)
2014-12-13 04:45 Reply | Reply with quote | Quote
0 # Дмитрий
Такое количество комментариев обозначает, что плагин на самом деле нужный и вызывает интерес. Было бы по иному, я бы уже плюнул и искал, что нибудь другое :-)
2014-12-13 05:07 Reply | Reply with quote | Quote
# Guest
This comment has been deleted by Administrator
0 # Head
А если $recaptchaPlg = JPluginHelper:: getPlugin ( 'captcha', $enabledRecaptc ha ) и без if?
А, блин, встроенная просто цифрой идёт. А что об этом думает стандарт джумлы?
2015-01-21 14:12 Reply | Reply with quote | Quote
0 # Игорь
А можно выяснить почему в форме не все поля выводятся?
Я добавил в стандартную форму еще одно поле. В стандартной оно есть и работает.
А в bt login его просто нет.
2015-03-12 09:57 Reply | Reply with quote | Quote
0 # Игорь
Подолью масла в огонь: в окне авторизации модуля BT Login есть ссылка "Зарегистрируйт есь сейчас!", которая перебрасывает пользователя на всё ту же страницу регистрации Joomla. Модуль имеет два режима: всплывающее и выпадающее окно. Для последнего решение свёл к правке файла tmpl/default.php
А вот для всплывающего окна такой финт не проходит, потому как при нажатии на ссылку окно регистрации появляется и сразу исчезает. Дебаг у меня не вышел. Тут проблему не решил. Если есть предложения по решению данной проблемы - буду рад любому совету
2015-12-04 19:56 Reply | Reply with quote | Quote
0 # Александр Хмельницкий
Давайте ссылочку, посмотрим
2015-12-06 06:59 Reply | Reply with quote | Quote
+2 # Игорь Мазурик
Извините, не могу светить домен. Но, вообщем-то, здесь как в физическом эксперименте: повторить условия может каждый. Ставим Joomla 3.x, добавляем BT Login, в настройках модуля указываем "всплывающее окно", открываем сайт и после нажатия на кнопочку "Войти" нажимаем на ссылку "Зарегистрируйт есь сейчас!". При этом на секунду окно регистрации появляется, затем закрывается и только после этого система делает редирект на стандартную страницу регистрации. Если убрать редирект в файле tmpl/default.ph p, то окно регистрации BT Login всё равно закрывается, правда потом вас никто никуда не переадресовывае т.
2015-12-06 21:11 Reply | Reply with quote | Quote
-4 # Игорь Мазурик
Благо, нашёл решение данной проблемы вчера на англоязычном форуме авторов модуля. Нужно в файле mod_bt_login/tm pl/js/default.j s в строке setTimeout(func tion(){showRegi strationForm()} ,500); заменить 1000 на 500. Ну и в mod_bt_login/tm pl/default.php для этой ссылки убрать редирект. Без комментариев...
Так что мой вопрос закрыт. Спасибо всем, кто пытался помочь. Надеюсь этот коммент тоже кому-то поможет.
2015-12-06 21:11 Reply | Reply with quote | Quote
0 # Игорь Мазурик
Автору: таки да! Модуль содержит неточности. Конечно авторам я бы руки не вырывал, но Вами найденная ошибка, + указанная мной выше и не исправленная на их сайте до сих пор чести им не делает. И ещё одна проблема (пока без решения и не могу понять, кто виноват в ней и где копать):
если пользователь авторизовался, а потом не проявлял активность некоторое время, его сессия после таймаута станет невалидной. При этом если пользователь попытается зайти на страницу, доступную только для авторизованных пользователей, Joomla перебрасывает пользователя на страницу авторизации.... СВОЮ! Например так: /index.php/comp onent/users/?vi ew=login
2015-12-06 21:26 Reply | Reply with quote | Quote
0 # Игорь Мазурик
А ведь неплохо было бы (да и по уму), чтобы при установленном стороннем модуле авторизации всё-таки срабатывало окно этого модуля! Я программист, но с Joomla только знакомлюсь. Могу, конечно, расковырять её код и немного подправить под себя (как и делал несколько раз). Но как показала практика, лезть с молотком и зубилом не всегда умно и затратно по времени. Пусть даже хорошо ими владеешь. Как такую проблему можно решить, не изгаляясь над Joomla?
2015-12-06 21:27 Reply | Reply with quote | Quote

Add comment


Security code
Refresh

Found a typo? Please select it and press Ctrl + Enter.