Ошибка Moodle cohort_add_cohort

Я разрабатываю собственный плагин аутентификации 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 ().

Аутентификация работает без указания когорт. Но с когортной частью аутентификация не выполняется, и я перенаправляюсь на страницу входа.

Заголовок страницы изменен на «Ошибка», но это единственное сообщение об ошибке, которое я получаю.

Что я делаю неправильно? Я надеюсь, что кто-нибудь сможет помочь мне создать когорты и добавить участников.


person Regicollis    schedule 17.10.2014    source источник


Ответы (1)


Это может быть связано с тем, что глобальный объект $ 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

person Russell England    schedule 18.10.2014
comment
У меня включена отладка. Однако сообщения отладки отображаются только тогда, когда пользователь вошел в систему, и поскольку ошибка когорты приводит к сбою всего процесса аутентификации, я никогда не входил в систему и, следовательно, не могу видеть сообщения отладки. - person Regicollis; 21.10.2014
comment
Я думаю, вы правы в том, что объект $ USER не заполняется. Если я сделаю дамп объекта $ USER прямо перед тем, как попытаться создать когорту, я получу что-то вроде этого: object (stdClass) # 83 (4) {[id] = ›int (0) [mnethostid] =› string (1 ) 1 [предпочтение] = ›массив (0) {} [sessionskey] =› строка (10) z7tcT7Ev8k} - person Regicollis; 21.10.2014
comment
Спасибо за ваш ответ. Это привело меня в правильном направлении, и я обнаружил, что мне тоже нужно указать контекст. - person Regicollis; 22.10.2014