Я разрабатываю собственный плагин аутентификации Moodle для Moodle 2.7.
Когда пользователь проходит аутентификацию, я хочу, чтобы он был добавлен в определенную группу. Если эта когорта не существует, мне нужно, чтобы она была создана автоматически. Я использую функцию user_authenticated_hook () в моем плагине аутентификации для достижения этой цели.
Мой код для создания когорты это
$data = new stdClass();
$data->name = 'Name string';
$data->idnumber = 'ID string';
$data->description = 'Description string';
$cohortId = cohort_add_cohort($data);
Я включил cohort / lib.php в файл auth.php и объявил глобальные переменные $ DB, $ CFG и $ SESSION в первой строке функции user_authenticated_hook ().
Аутентификация работает без учета когорт. Но при наличии когортной части аутентификация не проходит, и я перенаправлен на страницу входа.
Название страницы изменено на «Ошибка», но это единственное сообщение об ошибке, которое я получаю.
Что я делаю неправильно? Я надеюсь, что кто-нибудь сможет помочь мне создать когорты и добавить участников.
Это может быть потому, что глобальный объект $ USER еще не существует или еще не заполнен.
У вас включена отладка? config.php
?
$CFG->debug = 32767;
$CFG->debugdisplay = 1;
Может быть лучше ответить на событие user_created. Поэтому, если пользователь создан другим методом, он все равно будет добавлен в группу. например:
Создайте локальный плагин, например:
/local/add_cohorts
Создайте events.php
/local/add_cohorts/db/events.php
Который имеет что-то вроде этого
$handlers = array (
'user_created' => array (
'handlerfile' => '/local/add_cohorts/lib.php',
'handlerfunction' => 'local_add_cohorts_user_created',
'schedule' => 'instant',
'internal' => 1,
),
);
Затем в /local/add_cohorts/lib.php есть
function local_add_cohorts_user_created($user) {
// Do your cohort processing here and add the user
// Use $user->id to add to the cohort members
}
Затем создайте version.php и установите плагин, тогда обработчик событий будет зарегистрирован.
События api — https://docs.moodle.org/dev/Events_API
Других решений пока нет …