Как сделать запись (синхронизацию) студентов на много курсов

Как сделать запись (синхронизацию) студентов на много курсов

от Андрей Рабой -
Количество ответов: 52

Есть категория курсов  "Дисциплины  строителей 1 курса", в этой категории курсы: математика, информатика, история, информатика, химия, биология, астрономия и т.д. . Есть глобальная группа "Строители 1 курс". Сейчас я вручную добавляю синхронизацию группы в каждый курс.

Это превращается в Ад)) 10 групп * 10 предметов = головная боль

Как можно реализовать (сейчас фантазирую) запись группы в категорию курсов, чтобы группа записывалась на все вложенные (подчиненные) курсы? Хочется: при добавлении студента в группу "Строители 1 курс" он записывался на все дисциплины, которые преподаются для строителей 1 курса.

Поделитесь опытом

В ответ на Андрей Рабой

Re: Как сделать запись (синхронизацию) студентов на много курсов

от Alexandre Scherbyna -

Как существенно уменьшить объем работ администратора по переводу студентов на следующий год обучения рассматривалось мною в этой статье.

В ответ на Андрей Рабой

Re: Как сделать запись (синхронизацию) студентов на много курсов

от Vadim Tabunshchik -
Изображение пользователя Developers

Универсального способа нет, так, чтоб одну кнопку нажал и всё свершилось - не получится.

Можно использовать метод зачисления из категории (устаревший и отключен по умолчанию). Чтобы включить, нужно в настройках роли «Студент» (/admin/roles/define.php?action=edit&roleid=5) поставить галку у пункта «Категория» в настройке «Типы контекста, где эта роль может быть назначена» и отметить «Дать право» для разрешения enrol/category:synchronised. После этого пользователю можно дать роль студента на уровне категории курсов и он автоматом будет записан во все курсы этой категории.

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

Другой вариант можно использовать, если у вас несколько групп строителей 1 курса. Создаете доп. курс, записываете туда все группы методом «Синхронизация ГГ», потом проходите по всем курсам-дисциплинам (математика, информатика, история, информатика…) и добавляете метод записи «Метасвязь с курсом», все студенты всех групп из доп. курса будут записаны в курс-дисциплину. Кол-во операций: кол-во_групп+кол-во_курсов-дисциплин.

Судя по этому: «10 групп * 10 предметов», подойдет второй способ, если все 10 групп изучают одинаковые курсы.

Создайте пустой курс, можно в нем разместить какую-то инфу общего плана, записываете методом «Синхронизация ГГ» 10 групп (10 операций), идете в каждый курс-предмет и 1 раз создаете «Метасвязь с курсом». Если дисциплин 10, всего будет 20 операций, это меньше, чем 10х10 улыбаюсь

В ответ на Андрей Рабой

Re: Как сделать запись (синхронизацию) студентов на много курсов

от Dmitriy Makarov -

Самый оптимальный вариант это метакурсы в купе с глобальными группами. Допустим у вас есть ряд дисциплин первого семестра на которые вам нужно подписать группу пользователей. Создаете чистый курс "Первый семестр", после чего заходите в курсы  дисциплин и через способ записи на курс устанавливаете "Метасвязь с курсом", соответственно курсом этим станет курс "Первый семестр". После чего записывая глобальную группу на курс первого семестра, данные пользователи автоматически подпишутся на все связанные дисциплины. Единственный недостаток это наследование названия группы. Здесь придется зайти в каждый курс и в пользователях, раздел группы через автосоздание групп сформировать группу в курсе со ссылкой на глобальную группу. Нюанс тут заключается в том, что глобальная группа на момент записи должна быть сформирована окончательно, иначе при добавлении в нее нового пользователя наследоваться непосредственно в курсе дисциплины номер глобальной группы не будет, придется добавлять новых пользователей руками.


Соответственно метакурс  "Первый семестр" в данном случае можно использовать как информационный

В ответ на Dmitriy Makarov

Re: Как сделать запись (синхронизацию) студентов на много курсов

от Alexandre Scherbyna -

Категорически не согласен с тем, что Дмитрий пишет про группы.

Записывать студентов в мета-курсы дисциплин через дочерний курс "Первый семестр" (а не через глобальные группы) выгоднее именно тем, что перечень и состав созданных в этом курсе групп с помощью этого плагина можно синхронизировать с группами в мета-курсах всех дисциплин.

Синхронизация означает, что если мы вносим любые изменения в список групп или список студентов в группе в курсе "Первый семестр", то же самое произойдет и во всех связанных с ним мета-курсах дисциплин. На то она и синхронизация, что изменения эти можно вносить когда угодно. Не требуется формировать группы окончательно. Не нужно никого добавлять вручную. Не нужно никакого автосоздания групп, никаких ссылок на глобальные группы. Причем здесь вообще глобальные группы, если мы через мета-курсы решили работать?

В ответ на Alexandre Scherbyna

Re: Как сделать запись (синхронизацию) студентов на много курсов

от Dmitriy Makarov -

Цитирую:

Универсального способа нет...

Не все устанавливают плагины, пусть они и полезны в какой-то мере. А за интересный плагин спасибо. Статью не читал, ибо не силен в украинском языке.

В ответ на Dmitriy Makarov

Re: Как сделать запись (синхронизацию) студентов на много курсов

от Alexandre Scherbyna -

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

В ответ на Alexandre Scherbyna

Re: Как сделать запись (синхронизацию) студентов на много курсов

от Dmitriy Makarov -

Александр, попробовал установить рекомендованный Вами плагин Meta-course group synchronization однако возникли вопросы по его работе в целом, настройке. Текущая ситуация примерно такая:


На сколько я понимаю этот плагин должен создать группы в каждом курсе дисциплины (дисц1...дисцN) и взять он должен готовые группы из главного курса на который ведется подписка студентов. Но подобной синхронизации не происходит. В справке говорится про запуск скрипта cli/sync.php с дополнительными ключами о которых я что-то информации не нашел. Не могли бы Вы объяснить методику работы с данным плагином?


В ответ на Dmitriy Makarov

Re: Как сделать запись (синхронизацию) студентов на много курсов

от Vadim Tabunshchik -
Изображение пользователя Developers
запуск скрипта cli/sync.php с дополнительными ключами

Ключи в самом скрипте описаны:

-c, --course          Course ID (if not specified, then all courses will be synchronized)
-v, --verbose         Print verbose progess information
-h, --help            Print out this help

В основной курс студентов записываю через ГГ, в дисц 1(2…N) - метасвязь с основным курсом, если не хочется ждать, когда сработает крон и выполнится задача синхронизации групп курсов, запускаю в консоли скрипт: /usr/local/bin/php /moodle/local/metagroups/sync.php -v и наблюдаю за процессом.

В ответ на Vadim Tabunshchik

Re: Как сделать запись (синхронизацию) студентов на много курсов

от Dmitriy Makarov -
да уже понял ) что-то не додумался залезть в сам скрипт ) в readme висит только упоминание про cli/sync.php

спасибо за скорый ответ!

В ответ на Vadim Tabunshchik

Re: Как сделать запись (синхронизацию) студентов на много курсов

от Dmitriy Makarov -

В процессе использования плагина назрел еще один вопрос касающийся синхронизации групп, а именно вопрос создания ограничений на тот или иной курс. Ситуация аналогичная, есть главный курс с большим количеством связанных курсов дисциплин, соответственно главный курс выступает в качестве некоего подобия зачетной книжки с выгрузкой данных посредством субкурса. Модули семестров становятся доступны по расписанию по сути (добавлены наборы ограничений "поток", "дата"), тут все думаю понятно ограничения работают только в рамках этого главного курса, а вот ограничений по учебным дочерним курсам по сути нет, разве что сортировка по группам посредством указанного выше плагина. И все бы хорошо, но студенты лезут в более старшие курсы дисциплин и пытаясь схитрить выполняют эти курсы, тем самым создавая небольшую неразбериху... Вопрос: возможно ли глобально создать ограничения на пачку курсов? Допустим 5 дисциплин определенных должны быть в N семестре и до определенной даты заданной заранее, так называемой даты перевода в этот семестр дисциплины скрыты как это делается в целом для любого курса.

Выставлять ограничения вручную долго, более 800 курсов как никак... да и учебные планы меняются...

В ответ на Dmitriy Makarov

Re: Как сделать запись (синхронизацию) студентов на много курсов

от Alexandre Scherbyna -

Ограничения на даты доступа к курсу и его элементам нужно прописывать в самом курсе. Извне они не импортируются. Поэтому есть два пути:

1. Записать студентов на все курсы сразу, но в каждом курсе прописать ограничения по датам.

2. Записывать студентов на курсы только тогда, когда они действительно могут их изучать. В таком случае никакие ограничения прописывать не придется.

В ответ на Alexandre Scherbyna

Re: Как сделать запись (синхронизацию) студентов на много курсов

от Dmitriy Makarov -

да в том то и дело, что такой вариант не очень приемлем... 800 курсов отредактировать это не веселое занятие, как никак 3-й год так мучаемся улыбаюсь появилась задача именно оперативно устанавливать ограничения на пачку курсов... ну да ладно, нет решения и нет, будем дальше работать улыбаюсь  в любом случае спасибо за скорый ответ улыбаюсь

В ответ на Dmitriy Makarov

Re: Как сделать запись (синхронизацию) студентов на много курсов

от Alexandre Scherbyna -

Интересно, а почему не очень приемлем? Почему нельзя записать студентов сначала только на 200 курсов? Зачем записывать их аж на 800, а потом еще заморачиваться с  блокировкой 600 из них? Ради чего вся эта лишняя работа?

В ответ на Dmitriy Makarov

Re: Как сделать запись (синхронизацию) студентов на много курсов

от Alex Djachenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода Изображение пользователя ООО "Открытые Технологии" Изображение пользователя Тестер Moodle Изображение пользователя Эксперт по Moodle

Либо не используйте мета-курсы, и выполняете подписку-отписку другими инструментами, по графику.

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

Либо объединяйте группы в курсах-дисциплин в потоки и задавайте в элементах курсах зависимости от потока. Не обязательно задавать ограничение на каждый элемент курса: сделайте элементы зависимыми друг-от-друга или от одного элемента в начале курса, а уже на него поставьте правила с потоками.

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

В ответ на Alex Djachenko

Re: Как сделать запись (синхронизацию) студентов на много курсов

от Dmitriy Makarov -

по факту это не решение проблемы, а ее замена более мелкими улыбаюсь

В ответ на Dmitriy Makarov

Re: Как сделать запись (синхронизацию) студентов на много курсов

от Alex Djachenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода Изображение пользователя ООО "Открытые Технологии" Изображение пользователя Тестер Moodle Изображение пользователя Эксперт по Moodle

Если решение - это когда система загружает учебный план прямо из головы методиста по нейроинтерфейсу - то да, это не решение улыбаюсь

Надо просто понимать, чего Вы хотите достичь: если нужна подписка и отписка по правилам - то это есть, но эти правила кто-то должен установить хотя бы один раз.

Если нужна загрузка учебного плана - то из готовых инструментов только импорт подписок на курс из CSV или синхронизация подписок с внешней БД. Из нештатных - синхронизация учебного плана с модулем Электронный Деканат. Там и зачетки формируются и ведомости групповые, но это уже специализированный инструмент, ориентированный на Российский учебный процесс, а не универсальный.

В ответ на Dmitriy Makarov

Re: Как сделать запись (синхронизацию) студентов на много курсов

от Людмила Татарникова -

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

Как мы поступаем: в курсе-зачётке выводим итоговую оценку, равную сумме оценок за разделы, а за каждый раздел ставится оценка 1, если все его курсы выполнены на проходные оценки. В результате итоговая оценка показывает количество освоенных разделов.

В учебных курсах (всех, кроме курсов первого раздела) размещаем субкурс, ссылающийся на курс-зачётку - благодаря этому учебный курс "знает", сколько разделов освоил студент. И настраиваем доступ к темам курса в зависимости от достигнутой оценки (если, например, этот курс у данной группы изучается в 3 разделе, то для доступа требуется 2 балла за субкурс).

Настройки доступа простые, если у всех направлений этот курс изучается в одном и том же разделе, если же в разных, то получается сложное условие ( (группа1 И оценка1) ИЛИ (группа2 И оценка2) ИЛИ...).

Да, изначально настраивать долго, но зато потом работает всё на автомате.

Если для Вас допуск по датам критичен, то заведите в каждом разделе курса-зачётки элемент Задание и в конце года или семестра выставляйте в нём всем студентам оценку 1б - аналог перевода студента на следующий курс. Либо добавьте в журнал оценок доп. элемент оценивания с той же целью. Либо добавьте простенький итоговый тест, который открывается в конце периода, соответственно, пока они его не решат, на следующий курс не переведутся.

В ответ на Людмила Татарникова

Re: Как сделать запись (синхронизацию) студентов на много курсов

от Dmitriy Makarov -

Опять же это не решение. Возможно со временем и к такой работе можно привыкнуть, но по факту все сводится заменой на более мелкие заботы как я сказал ранее. Тут вероятно придется думать над конкретным решением данной проблемы посредством разработки плагинов. Проблема в том, что ограничение на доступ к курсу возможно установить только через запись вручную, и то дату в чистой 3.1 версии например менять нельзя, только текущий день или дата начала курса устанавливается, да и при записи через метакурс смысл всех операций пропадает, а метакурсы весьма мощный инструмент структурирования с минимумом рычагов воздействия/взаимодействия. 

Как мне видится необходима первоначально возможность ограничивать доступ к курсу как это реализовано для элементов и ресурсов, т.е. возможность создавать наборы ограничений по потоку, группе, дате и проч. А уже далее необходима возможность формировать для нескольких курсов наборы ограничений или же создание этих ограничений при создании метасвязи с курсом. 

В ответ на Dmitriy Makarov

Re: Как сделать запись (синхронизацию) студентов на много курсов

от Alex Djachenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода Изображение пользователя ООО "Открытые Технологии" Изображение пользователя Тестер Moodle Изображение пользователя Эксперт по Moodle

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

Когда этим летом партнеры Moodle голосовали за Roadmap, не только мы, но и многие партнеры из других стран проголосовали за добавление такого типа плагинов. Однако, пока что в ближайших планах этого инструмента нет. Мы разработали инструмент (в виде фиктивного элемента курса "Логика курса"), который позволяет при исполнении заданных условий внутри одного курса, подписать студента на другой курс, а так же дополнительные типы ограничений - время, прошедшее от начала подписки на курс данного студента, время, оставшееся до окончания подписки, время, прошедшее с момента последнего входа студента на курс. Комбинируя эти два инструмента можно добиться чего-то похожего. Возможно, рано или поздно будет добавлен новый тип плагина "ограничение доступа на курс", тогда эти возможности появятся и в community-версии.

В ответ на Alex Djachenko

Re: Как сделать запись (синхронизацию) студентов на много курсов

от Dmitriy Makarov -
изначально я вообще думал попросту менять роль в рамках конкретного курса по расписанию, что проще в реализации, и наработки были, но такой способ уж слишком ресурсозатратен, для 4 полноценных групп по 30 человек на момент подобного переопределения роли в 30 курсах вешалась вся система и после месяца работы от наработок отказались и обновились до 3.1 версии с использованием выше описанной мной системы подписки на ресурсы системы. 


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

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

В ответ на Dmitriy Makarov

Re: Как сделать запись (синхронизацию) студентов на много курсов

от Alex Djachenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода Изображение пользователя ООО "Открытые Технологии" Изображение пользователя Тестер Moodle Изображение пользователя Эксперт по Moodle

Голосование только для партнеров. Каждый голос - это 1000 долларов отчислений, который данный партнер перечислил в фонд Moodle. В ближайшие планы попали фичи, которые набрали тысячи голосов.

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

Звучит довольно жестко, но на самом деле, если никто не готов голосовать за функцию ограниченными ресурсами - значит она не особо нужна и без нее можно обойтись. Как нас учит экономика: потребности - безграничны, а ресурсы - ограничены, на их пересечении и рождается целесообразность улыбаюсь)))

В ответ на Dmitriy Makarov

Re: Как сделать запись (синхронизацию) студентов на много курсов

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода

Как в анекдоте, "Вам шашеччи или ехать?".

Если вы хотите что-то бесплатное, то вот вам бесплатный мудл, и бесплатные советы, как в разумных пределах снизить трудозатраты по управлению курсами.

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

Но только вы определитесь, по какому именно из двух путей вы хотите пойти. Готовы разрабатывать плагин или оплачивать его разработку - так и пишите, а то вам тут столько человек решения предлагают, а Вам всё не то.

В ответ на Vadim Dvorovenko

Re: Как сделать запись (синхронизацию) студентов на много курсов

от Dmitriy Makarov -

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

вопрос я думаю Вы внимательно прочитали и этот вопрос был вполне конкретный из разряда "возможно ли..." или "имеется ли что-то готовое...". мне ответили, что "нет. ничего готового не имеется кроме того, что разработали ОТ в своей сборке", все предельно понятно. нет и нет, от этого не жарко не холодно. так к чему этот весь фарс? если Вы забыли, это форум, здесь люди столкнувшись с проблемой обсуждают эту самую проблему, делятся опытом и мнением, мне предложили вариант, я высказал свое мнение, описал свой вариант, который как я окончательно убедился не реализовывался никем. ни больше ни меньше. все. дискутировать по сути не о чем. так к чему Ваши упреки? или это тот самый случай когда все вокруг одного человека идиоты которым нужно все объяснить, а он один все знает и умеет? не профессионально все это. 

з.ы. я если и задаю вопросы на данном форуме, то только тогда, когда сам не нашел информации по тем или иным функциям системы. и делаю это я для того чтобы окончательно убедиться в необходимости разработки чего-либо. 

з.з.ы. опять же исключительно для реализации "своих целей" улыбаюсь мир Вам улыбаюсь

В ответ на Dmitriy Makarov

Re: Как сделать запись (синхронизацию) студентов на много курсов

от Alexandre Scherbyna -

Агрессивный ответ..,  весь этот фарс...,  ваши упреки..., идиоты... выпучил глаза

На мой взгляд, это совершенно неадекватная реакция на спокойное и рассудительное высказывание Вадима Дворовенко.

Еще вы приписываете Вадиму слова "своих целей", которых он вообще не употреблял...

В ответ на Alexandre Scherbyna

Re: Как сделать запись (синхронизацию) студентов на много курсов

от Alex Djachenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода Изображение пользователя ООО "Открытые Технологии" Изображение пользователя Тестер Moodle Изображение пользователя Эксперт по Moodle

Коллеги, давайте уже остановимся. Это уже перебор. Не хватало нам тут еще всем переругаться улыбаюсь

В ответ на Dmitriy Makarov

Re: Как сделать запись (синхронизацию) студентов на много курсов

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода

Вот вам ещё в продолжение разговора несколько вариантов.

* Создайте дополнительные поля профиля пользователя и сделайте отдельное поле для семестра. Настройте запись студентов на курсы с помощью плагина https://moodle.org/plugins/enrol_attributes, указав в этом плагине записывать только определенный курс/семестр

* Кроме своего курса зачётки (единый для всех курсов направления подготовки), создайте по отдельному курсу на каждый семестр студентов с короткими именами по принципу "шифр_спецальности-номер_семестра". В эти курсы и зачисляйте студентов. В зачётку сделайте метасвязь для всех курсов специальности, а к дисциплинам - только для нужного семестра и выше. Здесь вам поможет плагин  https://moodle.org/plugins/enrol_metabulk


В ответ на Vadim Dvorovenko

Re: Как сделать запись (синхронизацию) студентов на много курсов

от Dmitriy Makarov -

курсы-семестры с 2017 года в России не актуальны, т.к. министерство темных дел министерство образования своими распоряжениями радикально меняют учебные планы, соответственно приходится в начале семестра много и упорно работать, иногда как оказывается в пустую улыбаюсь изначально то у нас и была такая структура, да только в этом учебном году дисциплины с 4 курса переехали по плану на второй курс улыбаюсь вы думаете из-за чего весь этот цирк случился улыбаюсь

а вот по части первого плагина решение очень даже интересное, за него спасибо. буду изучать. 

вчера изучал данный плагин тоже интересное решение только корректно работает на 2.8 версии, с 3.0 выдает ошибок кучу.

В ответ на Dmitriy Makarov

Re: Как сделать запись (синхронизацию) студентов на много курсов

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода

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

Вы можете сделать так.

Настройте курсы-семестры с короткими именами вида "шифр_специальности-номер_семестра". Зачислите студентов в эти курсы-семестры. Каждый семестр придётся перезачислять студентов. Если зачисляете их через csv, то там можно будет это делать, указывая колонку с именем курса, так что больших проблем не будет, за несколько минут можно обновить исходный файл в excel. Можно в каждый курс-семестр настроить самостоятельную запись и раз в полгода выдавать студентом пароль от очередного курса-семестра. Если у вас более сложная автоматизация, то будет своя специфика. Отчислять старых не нужно будет, так как они у вас, вроде бы, не должны терять доступа к пройденному, должны только приобретать доступ к новому.

Настройте по курсу-зачётке на каждую специальность и курс, с коротким именем вида "шифр_специальности-год_набора". В нём разместите учебный план в виде субкурсов для каждого из годов набора, так как он будет разный. В начале каждого нового года нужно будет копировать курс прошлого года для данной специальности, и, при необходимости, передвигать в нём дисциплины. Это займёт примерно (число направлений подготовки * 5 минут на курс) минут на копирование, без сверки с учебным планом.

В курсы зачётки зачислите студентов из курсов-зачёток с помощью метасвязей. Если через csv загружаете, то быстрее будет зачислять напрямую, указав название курса в исходном файле. Если через метасвязи, то каждые полгода потребуется добавлять в курсы-зачётки по одной новой метасвязи, и удалять по одной старой с номерами семестров. Лучше держать по ссылке на текущий и следующий семестр, а метасвязи менять в межсезонье, чтобы не нужно было одновременно менять зачисление студентов в семестр, и связь между семестром и зачёткой. Для четырёхгодичных бакалавров это займёт (число направлений подготовки * 4 курса * 1 минута / курс) минут каждые полгода, причём не разом, а можно растянуть на весь семестр.

А в учебные курсы студенты будут зачисляться через более-менее постоянные метасвязи с курсами-семестрами. Обновлять придется только там, где в учебных планах поменяются номера семестров с более высокого на более низкий (в остальных случая студенты уже всё равно будут иметь доступ). Если не будете отчислять студентов из курсов-семестров, то здесь будет достаточно по одной связи на курс, так как студенты для семестре N и выше будут копиться в курсе с соответствующим номером семестра. Если будете отчислять из семестров, то здесь потребуется изначально создать несколько метасвязей, по одной для текущего и каждого из последующих семестров.

В ответ на Vadim Dvorovenko

Re: Как сделать запись (синхронизацию) студентов на много курсов

от Dmitriy Makarov -
там проблема в том, что перечень дисциплин в конечном итоге не меняется, меняется их порядок и если выделять посеместровые курсы для каждого потока то нужен человек который будет за этим следить ) а за эту работу неблагодарную никто браться не хочет ) вот и получается, что приходится работать с единым курсом, а отображение дисциплин попросту настраивать ограничениями. ну не суть важно.
В ответ на Dmitriy Makarov

Re: Как сделать запись (синхронизацию) студентов на много курсов

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода

По мне так проще пять раз простой список перетаскиванием упорядочить, чем в каждый элемент залезать и настраивать ограничения по условиям. Но вам виднее

В ответ на Vadim Dvorovenko

Re: Как сделать запись (синхронизацию) студентов на много курсов

от Alexandre Scherbyna -
В курсы зачётки зачислите студентов из курсов-зачёток с помощью метасвязей.

Вадим, вы предлагаете в курсы-семестры зачислять студентов из курсов-зачёток или наоборот ?

А не пора ли создать плагин, который бы "сдвигал" студентов вместе с их группами из предыдущего курса-семестра в следующий?

В ответ на Alexandre Scherbyna

Re: Как сделать запись (синхронизацию) студентов на много курсов

от Alexandre Scherbyna -

Относительно организации сдвига.
В таблицах базы данных Moodle студенты и группы приписаны к определенному курсу-семестру номер Х. Достаточно ли просто заменить в этих таблицах X на Y, чтобы перевести студентов с их группами на следующий семестр ? Может плагин совсем простым окажется, зато очень много труда администратора сэкономит?

Чтобы замена X на Y не требовала дальнейших корректировок, курсы-семетры можно сделать совсем пустыми (без оценок даже), дабы процедуру сдвига не "отягощать"...

В ответ на Alexandre Scherbyna

Re: Как сделать запись (синхронизацию) студентов на много курсов

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода
Всё несколько сложнее. Есть таблица с экземплярами записи на курс, каждый привязан к соответствующему курсу. К экземпляру записи на курс привязана и студенту привязана запись о назначении ролей, в которой тоже, возможно, есть указание на id курса. Кроме того, назначение ролей всегда связано ещё с контекстом, поэтому где-то нужно будет менять и его, поскольку у разных курсов разный контекст.Поэтому менять нужно разом в 2-3 таблицах, плюс ещё как-то решать вопрос с контекстом.
Лично я считаю, что при нормальной организации системы, для студентов должен использоваться внешний источник данных, содержащий в том числе информацию о семестре. И обсуждать нужно, как правильно из этого источника данных студентов раскидать по соответствующим курсам или когортам. Потому что одно дело - администрировать сервер moodle, а другое - администрировать тысячи учётных записей студентов, которые постоянно зачисляются, отчисляются, меняют фамилии, переходят из группы в группу и т.п.
Когда, в своё время, мне приходилось управлять и учётными записями, я делал это в отдельной базе данных на access, откуда делал регулярный csv файл, чтобы грузить студентов в курсы зачётки
В ответ на Alexandre Scherbyna

Re: Как сделать запись (синхронизацию) студентов на много курсов

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода

Сейчас в moodle нельзя использовать несколько последовательных метасвязей, поэтому нельзя зачислить из зачёток в семестры, а оттуда в дисциплины. Но можно зачислить из семестров и в дисциплины, и в зачётки, поэтому я предлагаю этот вариант. Делать плагин смысла нет, слишком расплывчатая задача, сделаешь для одного, другим не подойдёт. Тем более, мы тут пока, вроде бы, обсуждаем варианты не связанные с разработкой. Если исходные студенты есть в Excel, то сдвинуть всем семестр можно и без всяких плагинов. Если есть какая-то внешняя система, то возможно, там есть информация о семестре в таком виде, что её можно загрузить в одно из полей профиля, а потом можно зачислять студентов в курсы-семестры с помощью плагина для зачисление через поля профиля

В ответ на Vadim Dvorovenko

Re: Как сделать запись (синхронизацию) студентов на много курсов

от Alexandre Scherbyna -

Ну почему же расплывчатая задача? По-моему яснее не бывает. Возьмем школу, например. Есть курсы-семестры: 1, 2, 3... а в них есть группы: А, Б, В,...

Каждый год учеников вместе с их группами нужно перемещать из одного курса-семестра в другой, чтобы 1-й Б класс стал 2-ым Б, 7-й А - 8-ым А и т.д. В университете та же история, но для каждой специальности отдельно.

Составляем текстовый файл, в каждой строке которого прописываем одну цепочку сдвига, составленную из названий курсов-семестров например:

АВС-1, АВС-2, АВС-3, АВС-4
ПП-1, ПП-2, ПП-3, ПП-4
... и т.п.

"Скармливаем" это файл плагину и перевод студентов всего университета на следующий семестр завершен. По трудозатратам это не идет ни в какое сравнение с загрузкой в каждый курс-семестр csv-файла со списком всех студентов.


В ответ на Alexandre Scherbyna

Re: Как сделать запись (синхронизацию) студентов на много курсов

от Dmitriy Makarov -
Просто добавлять вручную можно и стандартными средствами, например обновляя профили посредством csv. Вы правильно сказали "много труда администратора сэкономит". В moodle все прекрасно за исключением админки, и вроде бы и с ней жить можно, но все же улыбаюсь

По части переподписки (как я понял) все несколько сложнее чем кажется. Ситуация такова, что это так же частично решит проблему. Да упростит в какой-то степени работу администратора, но эта работа по прежнему останется ручной работой (файл нужно сформировать, загрузить, проверить корректность загрузки). 

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


Т.е. формально нужна обратная связь. А именно при установлении способа записи "метасвязь с курсом" выбирать набор ограничений... конкретно -  временное ограничение на глобальную группу с возможностью добавления новых ограничений. Это как с ограничением подписки при записи вручную... да работать руками придется в любом случае, но по факту это нужно будет сделать один раз для конкретного потока, т.к. учебные планы меняют для новых потоков, для тех, кто уже обучается как правило оставляют без изменений. Как результат - более или менее стабильная автоматическая подписка на N лет.


p.s. как отступление... ограничивать можно непосредственно из главного курса, но тут уже нужен отдельный элемент курса или плагин который реализует обратную связь с курсом дисциплины со всеми ограничениями... это сложнее как в реализации так и в настройке...

В ответ на Dmitriy Makarov

Re: Как сделать запись (синхронизацию) студентов на много курсов

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода

Я всё равно не могу Вас понять. Вы всё сетуете на то, что от ручной работы не уйти, но мне так из Ваших постов до сих пор не понятно, что у вас вообще автоматизировано.

Варианта облегчения Вашего труда два - автоматизация и перераспределение функций.

Технически проще перераспределить функции - оставить вам функции загрузки студентов в систему, а функции зачисления студентов в свои курсы отдать преподавателям, лаборантам кафедр, сотрудникам деканатов и т.п. Способы есть, и метакурсы, и когорты, зачисление по паролю и просто зачисление вручную, всем удобно по разному. Но в вашем случае, как я понимаю, о распределении Ваших функций между другими сотрудниками не может быть речи.

Чтобы настроить автоматизацию и избежать ручного труда в вашей ситуации необходимо, чтобы в некой информационной системе были а) все студенты с логинам и паролями и привязкой к группам б) привязка всех групп к учебным планам, в) все учебные планы г) связки между дисциплинами в учебных планах и соответствующими курсами в moodle. Тогда можно будет всё настроить автоматически, написав какое-то программное обеспечение для автоматизации зачисления конкретного студента в конкретный курс в moodle. Если у вас нет в структурированном виде какой-то информации из этой цепочки, то ручного труда не избежать никак. Если же вы захотите создать/купить/внедрить такую систему, то опять же, сразу речь пойдёт о перераспределении функций - студентами должны заниматься одни сотрудники, планами - другие, наполнением moodle - третьи. Иначе всю эту систему придётся наполнять и поддерживать в актуальном состоянии Вам самому, то есть опять всё сведется к Вашему ручному труду.

В ответ на Vadim Dvorovenko

Re: Как сделать запись (синхронизацию) студентов на много курсов

от Dmitriy Makarov -

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

В ответ на Dmitriy Makarov

Re: Как сделать запись (синхронизацию) студентов на много курсов

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода

Вы зря так про преподавателей. При построении сложной системы с большим числом пользователей нужно стараться распределить работу на как можно большее число людей. Здесь много плюсов: в этом случае каждому достанется небольшой объём работы, и не будет разговоров о том, что у кого-то из-за внедрения системы сильно возрос объём работы; когда какой-то технологией владеет много сотрудников, сильно снижаются риски связанные с увольнением ответственного сотрудника - всегда найдется кто-то другой, кто тоже сможет делать эту работу; снижаются затраты на обучение - операции становятся настолько атомарными, что сотруднику прощу будет просить у коллеги, чем идти к вам на обучение.

Любая разовая работы в этом отношении, наоборот, сплошной минус: когда вдруг потребуется сделать всё снова, все забудут как это делается и, возможно, не смогут воспроизвести; для таких работ больше вероятность, что их сложат именно на вас, а не на людей, которые реально должны за это отвечать; а после нескольких повторов такой авральной работы у всех возникнет стойкая уверенность, что именно вы должны этой работой заниматься. Поэтому лучше вместо любых разовых крупных работ проектировать в системе постоянную, но небольшую работу по поддержанию актуальности. Вот, например, из-за того, что при запуске системы я некоторое время "из сострадания" делал разовую работу по назначению прав в системе, вместо того, чтобы заставлять это делать ответственных сотрудников; мне пять лет спустя звонят и просят назначить права на курсы и очень обижаются, когда пытаюсь объяснить, что регламентом работы с системой уже давно закреплено, что этим должен заниматься не я. Мне кажется, вы постоянно тянете работу на себя. Зачем вам это? В moodle хорошая система протоколирования действий, поэтому в случае, если кто-то что-то сделает неправильно, всегда будет возможность найти причину и доказать вину соответствующих лиц.

С метакурсами сложнее - чтобы добавлять метасвязи нужно дать отдельные права на курс со студентами. А с глобальными группами проще - там вообще не нужно никаких особых прав давать вне курса, чтобы преподаватель мог к себе подключить тех студентов, с которыми работает. Зачем вам как администратору вмешиваться в процесс взаимодействия между студентами и преподавателями. Вы же в реальности так не делаете, значит и в виртуальной системе, которая является моделью реальных взаимоотношений, это должны делать не Вы.

В ответ на Alexandre Scherbyna

Re: Как сделать запись (синхронизацию) студентов на много курсов

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода
Ну у меня речь шла о загрузке в систему одного единственного файла - загрузка пользователей из CSV с указанием названий курсов-семестров в колонке course1.

О варианте с загрузкой списка курсов для сдвига из .CSV я как-то не подумал, мне виделось, что цепочки сдвига должны быть заложены где-то в moodle. С Вашим предложением случае, действительно, получается нечто достаточно простое и универсальное. Возможно когда-нибудь сделаю что-то такое, но точно обещать не могу, пока не успеваю даже оттестировать свои существующие модули под новыми версиями.
В ответ на Vadim Dvorovenko

Re: Как сделать запись (синхронизацию) студентов на много курсов

от Alexandre Scherbyna -

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

Создаем три уровня курсов:

   1-й уровень: курсы-зачетки (у меня они названы курсы "специальность - год поступления");

   2-й уровень: курсы-семестры (курсы "специальность-семестр");

   3-й уровень: курсы учебных дисциплин.

С помощью мета-курсов и плагина синхронизации групп переписываем студентов вместе с их группами из курсов 1-го уровня во 2-й и из 2-го в 3-й.

Тогда, чтобы перевести студентов на следующий семестр или год обучения, нужно изменить связи только между курсами 1-го и 2-го уровней. Связи между курсами 2-го и 3-го уровней (пока не изменится учебный план) остаются низменными. Это уменьшает работу администратора в D раз, где D - среднее количество дисциплин в семестре. По сравнению с использованием глобальных групп, метод мета-курсов позволяет сократить трудозатраты администратора еще в G раз, где G - среднее число параллельных групп на специальности. Таким образом, по сравнению с записью глобальных академических групп непосредственно в курсы дисциплин, предлагаемый метод позволяет сократить труд администратора в D*G раз.

Как правильно заметил Вадим, Moodle мета-мета-курсов не поддерживает. Это проявляется в том, что студенты, записанные методом мета-курсов из 1-го уровня во 2-й, далее в 3-й уровень не переписываться. Но, записанные туда другими способами, успешно переписываются из 2-го уровня в 3-й. Поэтому приходится записывать студентов из 1-го уровня во 2-й двумя способами одновременно: мета-курсом и глобальной группой (достаточно одной общей ГГ для всех студентов курса-зачетки). Тогда все работает: любые изменения в количестве и составе групп и студентов на первом уровне вызывает такие же изменения в курсах 2-го и 3-го уровней.

И тут у меня еще один вопрос к программистам. Нельзя ли подправить код Moodle, чтобы использование мета-мета-курсов не блокировалось? Тогда с глобальными группами не придется возиться.

В ответ на Alexandre Scherbyna

Re: Как сделать запись (синхронизацию) студентов на много курсов

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода

Раньше (в 1.9) метакурсы были иерархическими. Это приводило к очень ресурсоёмким запросам к базе данных. Я помню, что в когда-то вручную ограничивал синхронизацию метакурсов до 1 раза в день, потому что от варианта 1 раз в час были неудобства в работе сервера.  Запросы потом были постепенно оптимизированы так, чтобы даже при большом числе метасвязей в системе при синхронизации по cron не возникало большой нагрузки, но это возможно только при одноуровневой схеме. Собственно, разработчики рекомендуют использовать вместо метасвязей когорты, потому что они реализованы гораздо более эффективно. При многоуровневой схеме также возникает проблема цикличной записи - если есть два курса, ссылающиеся друг на друга, будет запись из первого курса во второй, из второго в первый и непонятно, как разорвать этот круг.

Но если жаждете экспериментов, то в /enrol/meta/locallib.php есть функция enrol_meta_sync. В ней есть несколько SQL-запросов или их фрагментов. В них встречается условия <> 'enrol_meta' и <> 'meta', которые и ограничивают дальнейшую синхронизацию студентов, записанных через метакурсы. Вы можете сделать в этом файле замену "<> 'enrol_meta'" на "<> 'enrol_meta1'" и "<> 'meta'" на "<> 'meta1'" и посмотреть, что выйдет. А если не понравится, всегда можно быстро сделать обратную замену.

В ответ на Vadim Dvorovenko

Re: Как сделать запись (синхронизацию) студентов на много курсов

от Alexandre Scherbyna -

Я знаю, что тогда появляется риск ошибки "зацикливания" ссылок, грозящий даже "зависанием" программы...

А как в описанном мною случае? Две "одинарные" мета-связи (уровень 1-2 + глобальная группа + уровень 2-3) создают меньшую нагрузку на сервер, чем одна "двойная" мета-мета-связь (уровни 1-2-3) ?

В ответ на Alexandre Scherbyna

Re: Как сделать запись (синхронизацию) студентов на много курсов

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода

Я не знаю, не с чем сравнивать - проблемы с производительностью возникали много лет назад, а глобальные группы я вообще никогда не применял. А про вариант мета-мета вообще не могу сказать, я его же не пробовал, я только обозначил, где в исходном коде снять ограничение. Может быть кто-то у кого есть тестовая копия базы попробует и расскажет, работает ли вообще это или нет, и что будет, если создать циклическую ссылку.

В ответ на Vadim Dvorovenko

Re: Как сделать запись (синхронизацию) студентов на много курсов

от Людмила Татарникова -

Циклическую ссылку я недавно обнаружила - два курса "мета-связывались" друг с другом. При попытке записи очередной группы (зачисляла синхронизацией с ГГ) система зависала минут на 5-10, потом сообщала об ошибке. Пока искала причину, сделала таких попыток штук 5.

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

Всё это случилось в обычной системе, никаких изменений для "мета-мета" я не делала, но получается, что запись всё-таки через "мета-связь" передавалась дальше.

В ответ на Vadim Dvorovenko

Re: Как сделать запись (синхронизацию) студентов на много курсов

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода

Вот появилась ещё одна идея по организации многоступенчатых метакурсов. Попался на глаза вот такой плагин https://moodle.org/plugins/enrol_grabber

Забираем студентов из курса А в курс Б метасвязью. Добавляем в курс Б наряду с метасвязью плагин grabber, и указываем ему забирать студентов из метасвязи. В результате (как я понимаю), одни и те же студенты формально будут в курс зачислены 2 раза - метасвязью, и граббером. 

Забираем студентов из курса Б в курс В метасвязью. Метасвязь не заберет студентов, зачисленных метасвязью, а вот тех же студентов из граббера она уже заберет. 

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

В ответ на Vadim Dvorovenko

Re: Как сделать запись (синхронизацию) студентов на много курсов

от Alexandre Scherbyna -

Да не нужен тут плагин граббер. Я вместо него использовал глобальную группу. Т.е. из курса А в курс Б студентов зачислял одновременно мета-связью и глобальной группой. Далее все успешно переписывалось в курс В. При этом плагин синхронизации групп успешно копировал перечень и состав групп из А в Б и из Б в В.

В ответ на Alexandre Scherbyna

Re: Как сделать запись (синхронизацию) студентов на много курсов

от Vadim Tabunshchik -
Изображение пользователя Developers

Вся эта «хренотень» с выдумыванием новых плагинов и т. п. от того, что никто, кроме админа, в системе работать не хочет. ИМХО.

В ответ на Vadim Tabunshchik

Re: Как сделать запись (синхронизацию) студентов на много курсов

от Alexandre Scherbyna -

Конечно хорошо если некоторую работу выполняет не один администратор, а N преподавателей. Но еще лучше, если ее будет выполнять компьютер. Вот ради этого и выдумывают плагины. Как поется в одной студенческой песне: "лень двигала прогресс всегда вперед". улыбаюсь

В ответ на Alexandre Scherbyna

Re: Как сделать запись (синхронизацию) студентов на много курсов

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

Здравствуйте. Попробовал установить этот плагин, все заработало, (версия 3.6). Но возникли проблемы. Обсуждение давно велось, но может подскажете 😁

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

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

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