Тех. вопрос о разработке модулей ...

Тех. вопрос о разработке модулей ...

от Doctor Pafos -
Количество ответов: 6

Здравствуйте!

Не уверен, что задаю вопрос в правильном топике, но всё же ...

Я нашёл на сйте информацию о том, как разработать свой модуль (plug-in), с помощью которого можно проводить кастомную аутентификацию пользователя (можно использовать для интеграции с существующими системами). Однако, код модуля выполняется только при входе пользователя в ситему.

Вопрос: поддерживает ли Moodle модули, код которых выполняется при выходе (logout) пользователя из ситсемы?

(Конкретно нужно решить следующую задачу: при разрегистрации пользователя нужно вызвать метод некоторого веб-сервиса, после чего вернуться на другой сайт.

Если кастомный модуль в этом случае не самое подходящее решение, то подскажите, пож., какое решение было бы наиболее правильным с точки зрения архитектуры Moodle).

===

Заранее благодарю ...

В ответ на Doctor Pafos

Re: Тех. вопрос о разработке модулей ...

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода
в вашем модуле (базирующемся на auth_plugin_base из lib/authlib.php) можно реализовать методы
logoutpage_hook (сначала вызывается он, в нём можно установить на какую страницу перейдёт пользователь после выхода из системы) и
prelogout_hook (вызывается после предыдущего, используется для подчистки сессии от мусора и для того, чтобы убедиться, что юзер разлогинился из всех систем).
Осторожно, оба метода запускаются для всех включенных плагинов аутентификации, поэтому в них необходимо делать проверку на предмет того, что пользователь зарегистрирован именно вашим плагином.
В ответ на Vadim Dvorovenko

Re: Тех. вопрос о разработке модулей ...

от Doctor Pafos -

Спасибо!

Это должно помочь, видимо ...

Ещё один сопуствующий вопрос тогда: каким образом (в терминах архитектуры Moodle) лучше хранить настройки, не относящиеся к native-настройкам самого Moodle (т.е., есть ли возможность добавить кастомные настройки, не трогая при этом код Moodle, так, чтобы они были доступны в моём модуле аутентификации)?

Например, тот же урл, на который я хочу перейти после разрегистрации?

Я, конечно, могу его захардкодить прямо в код моего модуля, но я подозреваю, что настоящие индейцы так делать не должны ... ;)

В ответ на Doctor Pafos

Re: Тех. вопрос о разработке модулей ...

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода
есть специальные функции get_config и set_config для хранения любых настроек по модулям.
Если ваш модуль аутентификации называется "lalala", то блок будет заваться "auth/lalala"
чтобы сохранить переменную $x под именем "nastrX":
set_config("nastrX", $x, "auth/lalala")
чтобы её достать $x = get_config("auth/lalala", "nastrX") Если такая настройка не записана - $x будет null.
Можно все настройки выдернуть в одну переменную объект $conf = get_config("auth/lalala"); $x = $conf->nastrX;
В ответ на Vadim Dvorovenko

Re: Тех. вопрос о разработке модулей ...

от Doctor Pafos -

Спасибо!

С этой объектной моделью всё ясно. Но это, что ксается доступа к кастомным настройкам программным путём. А, как задать значение переменной $x в самом начале? Я имею ввиду первоначальную ручную настройку, которую я собираюсь сделать, например, при развёртывании системы на production сервере? Или если я собираюсь поменять значение этой переменной извне?

В ответ на Doctor Pafos

Re: Тех. вопрос о разработке модулей ...

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода
Для этой цели есть процедуры config_form и process_config. Смотрите примеры в уже реализованных модулях.
Создаёте форму настроек, в форме можете прописать настройки по умолчанию, админ production сервера устанавливает все настройки вызывая вашу форму из меню управления пользователями и аутентификацией