Пожелания дополнений Event List

Обсуждение новой системы расширения функциональности phpBB 4.0-dev, разработки новых расширений.
c61
Сообщения: 21
Зарегистрирован: 08 авг 2014, 10:33

Пожелания дополнений Event List

Сообщение c61 »

Не нашёл обобщённой информации о требуемых дополнениях Event List ( https://wiki.phpbb.com/Event_List ) для портирования имеющихся в 3.0.12 модов и хуков, поэтому создал тему.

Для портироования некоторых модов потребуются PHP Events:
  • в add_form_key (functions.php) для изменения S_FORM_TOKEN - так можно упростить портирование antibot100500
  • после phpbb_generate_debug_output (functions.php) для изменения DEBUG_OUTPUT - так можно упростить выдачу отладочной информации расширениями а также привычным для 3.0.12 способом добавлять код html/js (если включен DEBUG)
  • в login_forum_box (functions.php) для определения факта формирования S_LOGIN_ACTION (в других местах хуки имеются, а также требуется add_form_key - см. ранее) - это требуется для портирования мода шифрования паролей

Аватара пользователя
rxu
Сообщения: 1125
Зарегистрирован: 21 янв 2014, 21:20
Откуда: Krasnoyarsk
Github repo: https://github.com/rxu
Контактная информация:

Пожелания дополнений Event List

Сообщение rxu »

c61 писал(а):в add_form_key (functions.php) для изменения S_FORM_TOKEN
Хватит события с возможностью изменения $s_fields?
c61 писал(а):после phpbb_generate_debug_output (functions.php) для изменения DEBUG_OUTPUT
Здесь событию передавать $debug_info - достаточно?
c61 писал(а):в login_forum_box (functions.php) для определения факта формирования S_LOGIN_ACTION
Не совсем понял. Тут надо получить возможность переопределения указанной переменной шаблона, или как?

c61
Сообщения: 21
Зарегистрирован: 08 авг 2014, 10:33

Пожелания дополнений Event List

Сообщение c61 »

rxu писал(а):Хватит события с возможностью изменения $s_fields?
Да.
rxu писал(а):Здесь событию передавать $debug_info - достаточно?
Да - с возможностью изменения, конечно.
rxu писал(а):...получить возможность переопределения указанной переменной шаблона
Достаточно определить факт такого события (переопределять нет необходимости), чтобы в дальнейшем добавить в футер необходимый код javascript. Это будет происходить по событиям, возникающим при создании переменных шаблона: S_FORM_TOKEN или S_LOGIN_ACTION.

Аватара пользователя
rxu
Сообщения: 1125
Зарегистрирован: 21 янв 2014, 21:20
Откуда: Krasnoyarsk
Github repo: https://github.com/rxu
Контактная информация:

Пожелания дополнений Event List

Сообщение rxu »

c61 писал(а):Это будет происходить по событиям, возникающим при создании переменных шаблона: S_FORM_TOKEN или S_LOGIN_ACTION.
Так это можно прописать в слушателе шаблона рядовыми условиями типа <!-- IF S_FORM_TOKEN --> ... <!-- ENDIF --> ?

c61
Сообщения: 21
Зарегистрирован: 08 авг 2014, 10:33

Re: Пожелания дополнений Event List

Сообщение c61 »

rxu писал(а):Так это можно прописать в слушателе шаблона рядовыми условиями типа <!-- IF S_FORM_TOKEN --> ... <!-- ENDIF --> ?
Алгоритм хука 3.0.12 был таков:
- проверяем наличие в template S_FORM_TOKEN или S_LOGIN_ACTION
- если есть любой из них, генерируем пару ключей RSA, сохраняем их в БД и добавляем в footer код javascript, ответственный за шифрование.

Таким образом, если в template нет ни S_FORM_TOKEN, ни S_LOGIN_ACTION ресурсы сервера не будут "скушаны" на генерацию ключей (на слабом процессоре это долгая процедура). Поскольку S_FORM_TOKEN присутствует в template почти всегда, то и ключи генерируются почти на любой странице, что непродуктивно.

Следовательно, лучше, если на страничке шаблона дествительно присутствует S_FORM_TOKEN или S_LOGIN_ACTION, тогда ключи будут сгенерированы лишь при необходимости. И алгоритм расширения будет таков:
- при наличии в template S_FORM_TOKEN или S_LOGIN_ACTION "дергается" слушатель и ставит флажок - типа нужно генерировать ключи и тд
- затем при обработке footer дергается слушатель, в котором проверяется наличие флажка, если да - генерируются ключи и тд.

Это более выгодно с точки зрения "поедания" ресурсов сервера.

Аватара пользователя
rxu
Сообщения: 1125
Зарегистрирован: 21 янв 2014, 21:20
Откуда: Krasnoyarsk
Github repo: https://github.com/rxu
Контактная информация:

Пожелания дополнений Event List

Сообщение rxu »

Всё равно не понял с точки зрения события ядра, что конкретно надо.

c61
Сообщения: 21
Зарегистрирован: 08 авг 2014, 10:33

Пожелания дополнений Event List

Сообщение c61 »

В идеале - если на странице есть S_FORM_TOKEN или S_LOGIN_ACTION, то это является событием, по которому можно выполнить некую функцию php в слушателе. Однако, такое невозможно, если я правильно понимаю, как в 3.1 все эти события работают ))

Поэтому требуется PHP Event core.login_forum_box - для определения факта попадания в функцию login_forum_box (functions.php), где формируется S_LOGIN_ACTION, сразу после $template->assign_vars..., никаких параметров передавать в функцию не надо.

c61
Сообщения: 21
Зарегистрирован: 08 авг 2014, 10:33

Пожелания дополнений Event List

Сообщение c61 »

Может наконец кто-то из админов отключит премодерацию ? Иначе наши разговоры и далее будут похожи на общение центра управления полётами с экипажем на орбите Сатурна ))

Или давайте я портирую расширением антибот 100500, если премодерация включена из-за спамеров, никто ещё не озаботился...

Аватара пользователя
rxu
Сообщения: 1125
Зарегистрирован: 21 янв 2014, 21:20
Откуда: Krasnoyarsk
Github repo: https://github.com/rxu
Контактная информация:

Пожелания дополнений Event List

Сообщение rxu »

c61, у вас уже нет премодерации :)
Всё-таки надо уточнить, где должно быть событие.
В принципе, проверить наличие переменной шаблона можно и в футере через событие 'core.page_footer'.
Другой вопрос - где должно быть событие для мода шифрования паролей и какие переменные ему нужны.

Аватара пользователя
rxu
Сообщения: 1125
Зарегистрирован: 21 янв 2014, 21:20
Откуда: Krasnoyarsk
Github repo: https://github.com/rxu
Контактная информация:

Пожелания дополнений Event List

Сообщение rxu »

https://github.com/phpbb/phpbb/pull/2845
https://github.com/phpbb/phpbb/pull/2846

По login_forum_box() надо определиться с местом и параметрами.
Структура функции выстроена так, что сначала проверяется наличие действующей сессии, если она есть - выход. Если нет - выдается страница для ввода имени/пароля.
Если введен пароль, он проверяется, если верен - создается новая сессия и далее на выход, если неверен - выдается снова страница для ввода с сообщением об ошибке пароля.
S_LOGIN_ACTION выдается при генерации страницы.

Возможное место - перед вызовом page_header(), но передавать туда нечего.
Можно сделать 2 штуки - второе (или первое) перед проверкой $password.

Ответить