Проблема с метакурсами

Проблема с метакурсами

от Алексей Лапченко -
Количество ответов: 3

Добрый день.

Проблема с метакурсами.

Версия Moodle 3.6.10 (Build: 20200511) (также есть тестовый сервер с версией 3.10.7 для экспериментов).

Проблема заключается в следующем. У меня есть курсы-зачетки, на которые студенты записаны синхронизацией с ГГ, и есть учебные курсы, связанные с зачеткой метасвязью.

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

В режиме отладки выдает, например, такое:

Exception encountered in event observer 'enrol_meta_observer::user_enrolment_created': Не удается найти данную запись в таблице groups базы данных. (SELECT * FROM {groups} WHERE id = ? [array (0 => '1327',)]) 

line 1622 of /lib/dml/moodle_database.php: call to moodle_database->get_record_select() 

line 64 of /group/lib.php: call to moodle_database->get_record() 

line 177 of /enrol/meta/locallib.php: call to groups_add_member() 

line 61 of /enrol/meta/locallib.php: call to enrol_meta_handler::sync_with_parent_course() 

line 55 of /enrol/meta/classes/observer.php: call to enrol_meta_handler::sync_course_instances() 

line ? of unknownfile: call to enrol_meta_observer::user_enrolment_created() 

line 155 of /lib/classes/event/manager.php: call to call_user_func() 

line 75 of /lib/classes/event/manager.php: call to core\event\manager::process_buffers() 

line 834 of /lib/classes/event/base.php: call to core\event\manager::dispatch() 

line 2086 of /lib/enrollib.php: call to core\event\base->trigger() 

line 207 of /enrol/cohort/locallib.php: call to enrol_plugin->enrol_user() 

line 120 of /enrol/cohort/lib.php: call to enrol_cohort_sync() 

line 96 of /enrol/editinstance.php: call to enrol_cohort_plugin->add_instance() 

Exception encountered in event observer 'enrol_meta_observer::role_assigned': Не удается найти данную запись в таблице groups базы данных. (SELECT * FROM {groups} WHERE id = ?[array (0 => '1177',)]) 

line 1622 of /lib/dml/moodle_database.php: call to moodle_database->get_record_select() 

line 64 of /group/lib.php: call to moodle_database->get_record() 

line 177 of /enrol/meta/locallib.php: call to groups_add_member() 

line 61 of /enrol/meta/locallib.php: call to enrol_meta_handler::sync_with_parent_course() 

line 127 of /enrol/meta/classes/observer.php: call to enrol_meta_handler::sync_course_instances() 

line ? of unknownfile: call to enrol_meta_observer::role_assigned() 

line 155 of /lib/classes/event/manager.php: call to call_user_func() 

line 75 of /lib/classes/event/manager.php: call to core\event\manager::process_buffers() 

line 834 of /lib/classes/event/base.php: call to core\event\manager::dispatch() 

line 1629 of /lib/accesslib.php: call to core\event\base->trigger() 

line 263 of /enrol/cohort/locallib.php: call to role_assign() 

line 120 of /enrol/cohort/lib.php: call to enrol_cohort_sync() 

line 96 of /enrol/editinstance.php: call to enrol_cohort_plugin->add_instance() 


Также, при попытке в некоторых учебных курсах создать новую метасвязь тоже выдает подобную ошибку. А в других – все нормально.

После многократного ручного запуска задачи Meta enrolment sync task в планировщике задач все нормализовывается, но при дальнейшем добавлении студентов в курс-зачетку ошибка возникает опять.

Проблеме уже около года, не могу разобраться, а наш сотрудник, которому поручено заниматься программной частью работы с moodle утверждает, что ничего исправить нельзя, нужно все удалять удалять и создавать заново, но одних курсов больше 1000 и в каждом не одна метасвязь.

Может, кто сталкивался? Помогите!!


В ответ на Алексей Лапченко

Re: Проблема с метакурсами

от Vadim Tabunshchik -
Изображение пользователя Developers
Если группы в метакурсах не синхронизируются, то запускать задачу enrol_meta_sync бесполезно.
Верните плагин local_metagroups, добавьте в планировщик (cron) задачу (https://moodle.org/mod/forum/discuss.php?d=414530#p1721312):
путь_к_php /каталог_moodle/local/metagroups/cli/sync.php с нужной частотой и будет вам счастье: при добавлении/удалении студента в/из глобальной группы все изменения отражаются в курсах-дисциплинах (ну, это понятно) и переносятся в метакурсы. Студенты записываются/отписываются без проблем и ошибок.
ЗЫ: после установки local_metagroups можете запустить один раз задачу синхронизации групп вручную, подробности смотрите в файле /local/metagroups/cli/sync.php
В ответ на Vadim Tabunshchik

Re: Проблема с метакурсами

от Алексей Лапченко -
Запускали скрипт и вручную, и в крон добавили задачу, а проблема осталась.
Как выявить курсы с проблемными метасвязями? Если их все найти, удалить и создать по-новой, это спасет положение? Но все метасвязи удалять... Общее количество курсов около 1400, и, как я понял, если хоть в одном будет ошибка, то синхронизация работать не будет
В ответ на Vadim Tabunshchik

Re: Проблема с метакурсами

от Алексей Лапченко -

Обнаружил в одном из курсов несколько одинаковых метасвязей, т.е. дублей. 


Как так могло получиться, ведь дважды метасвязь с одним и тем же курсом создать нельзя?

В режиме отладки при попытке обновить метасвязь выдало:


Может это и есть причина того, что синхронизация не работает? Как выявить подобные ошибки?