Плагин для moodle. Изобретаю ли я велосипед?

Плагин для moodle. Изобретаю ли я велосипед?

от Владимир Владимир -
Количество ответов: 12

Перенес тему из общего форума:

Мое первое сообщение:

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

Хочу реализовать следующий функционал: У меня большая база пользователей (более 100к), настроено автоматическое добавление и обновление данных о пользователях и их принадлежности к глобальным группам. Группы распределены по разным категориям. Настроена синхронизация по глобальным группам. Создана роль с определенными правами и туда добавлен конкретный список пользователей, которые сами принадлежат определенной группе. Нужно, чтобы эти пользователи могли бы заходит на курс и зачислять нужных пользователей. Да, здесь я вроде говорю о стандартном функционале, но у меня есть определенные особенности. Во первых, у меня много пользователей и я не могу их посмотреть при зачислении даже в виде списка, а мне нужна таблица с отображение username(обязательно), ФИО. Во вторых, поиск происходит только по Имя/Фамилия, а мне нужно по username, т.к. ФИО может совпадать. Но этот вопрос я вроде нашел как решить на форуме. В третьих (наверное самое основное), мне не нужно отображать всех пользователей, а только тех, которые принадлежат к группе в которой состоит пользователь, а так же пользователей групп, относящихся к родительской категории.

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

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

Ответ от Alexandre Scherbyna:

Куда именно добавлен список пользователей? В каком контексте им дана эта роль: система, категория, курс?
Из ваших объяснений я так и не понял, что вы хотите сделать. Чтобы люди с этой ролью зачисляли пользователей на курсы? А почему бы не поручить преподавателю зачислять студентов на свой курс? Тем более, если речь идет о глобальных группах.

Мое второе сообщение:

Роль дается в контексте категории курсов. Есть глобальные группы, относящиеся к категории. Вопрос в том, чтобы преподаватель видел только пользователей тех групп, которые находятся в этой категории и видел их в удобном виде - таблица, к примеру. Проблем в том, что пользователей очень много и искать их из общего списка очень проблемно.

Ответ от Alexandre Scherbyna:

Сначала замечу, что вы разместили сообщение в неудачном месте. Лучше было бы писать в Технические вопросы, а то у меня и у вас тут отображается такое сообщение: Вы достигли разрешенного порога сообщений. Вы отвечали 1 раз за последние 1 день, лимит же составляет 2 сообщений.

Тому, кто имеет соответствующую роль в контексте категории, глобальные группы этой категории видны. Только просматривать их нужно по очереди: заходите в конкретную ГГ и видите, кто туда записан. Если хотите в одном списке видеть записанных во все ГГ категории, то можете написать запрос к базе данных, используя плагины Configurable Reports или  Ad-hoc database queries.

Мой ответ:

Я попробую немного прояснить ситуацию. В моем случае - есть много учреждений - филиалов, относящихся к одной головной организации. Группы пользователей сформированы по признаку принадлежности к учреждению, категория объединяет по принадлежности к головной организации. Вопрос в том, что это далеко не 10, а более 100 категорий( в сумме более 1800 учреждений). Вручную для каждой категории делать запросы не очень рационально. Даже если делать запрос из тех плагинов, что вы предложили, то они дают возможность просто увидеть перечень пользователей, а их еще нужно зачислить на курс


В ответ на Владимир Владимир

Re: Плагин для moodle. Изобретаю ли я велосипед?

от Alexandre Scherbyna -
Вы продолжаете рассказывать, как вы решаете какую-то задачу: там филиалам соответствуют группы (надо понимать глобальные), а головной организации - категория (видимо, курсов?). Ну а делать что нужно и зачем? Что смотреть и для чего? Постановка задачи непонятна.
В ответ на Alexandre Scherbyna

Re: Плагин для moodle. Изобретаю ли я велосипед?

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

Re: Плагин для moodle. Изобретаю ли я велосипед?

от Alexandre Scherbyna -
... зачислять пользователей на этот курс из определенной категории/
... должны быть пользователи только определенной категории а не все сразу.

А что вы называете категорией пользователей?

В ответ на Alexandre Scherbyna

Re: Плагин для moodle. Изобретаю ли я велосипед?

от Владимир Владимир -
Я имею ввиду пользователей, относящихся к определенной категории курсов
В ответ на Владимир Владимир

Re: Плагин для moodle. Изобретаю ли я велосипед?

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода
Владимир.
Для решения задач с филиалами есть разные подходы, moodle из коробки тут не всем хватает.
Есть TotaraLMS, не пробовал, но можете посмотреть в её сторону, она сделана поверх moodle, поэтому с миграцией контента не должно быть проблем
Есть какие-то решения у Открытых технологий, можете поинтересоваться у них. Возможно, при вашем числе пользователей приобретения подписки на решения открытых технологий будет оправданным.
Управлять структурой из 100К учеток средствами только moodle очень неудобно. Как вариант, управлять учетками во внешней БД/LDAP и настроить синхронизацию и запись на курс по внешнему источнику.
Если внешняя БД, то её придется разрабатывать самим, но её разработка будет на порядок дешевле разработки плагина для moodle, так как её можно разработать на том языке / framework-е, на котором вы уже имеете опыт работы, сможете сделать интерфейс максимально адаптированный под свои нужны, а в разработку под moodle придется входить долго и мучительно.
Также, разработав такую базу данных, вы можете генерировать в ней csv-файл по списком пользователей, и загружать его в moodle (при такой загрузке можно указывать глобальную группу и курс). Или обращаться в moodle по API для добавления пользователей.
Если LDAP - то вы сразу из коробки получите всякие возможности типа иерархической структуры, делегирования пользователям прав на конкретные подразделения, возможность создания кучи дополнительных полей для разных нужд, использование этого же источника для логинов / паролей в других системах. Но внешний вид будет зависеть уже от реализации LDAP

Теперь про плагины moodle. Вам желательно создать плагин типа enrol - это потребуется хотя бы для того, чтобы отличать от других способов записи. Например, если вы будете делать зачисление плагином типа local, то потребуется все-равно указать, каким способом зачислен студент, без собственного плагина останется только вариант manual. Но тогда, когда придет пора отчисляться, вы не сможете отличить тех, кого зачислили своим плагином от тех, кого зачислили вручную, так как у всех будет стоять зачисление manual. Поэтому начните с создания плагина enrol.
Плагин типа local вам тоже может подойти. В последних версиях у него есть достаточно методов для встраивания в меню, поэтому им тоже можно попробовать встроиться и в меню зачисления в курсе. Поэтому имея плагин зачисления минимальной структуры, вы можете все действия по зачислению делать в local плагине.
Точно так же вам может подойти плагин типа block. Только вместо встраивания в меню курса, для вызова действий нужно будет добавить ваш блок на страницу, и вызывать их через блок. Как вариант, администратор принудительно добавит блок во все курсы.
В ответ на Vadim Dvorovenko

Re: Плагин для moodle. Изобретаю ли я велосипед?

от Владимир Владимир -
Вадим, спасибо за развернутый ответ. Вариант с LDAP, конечно, удобен, но, к сожалению, я поставлен в такую ситуацию, когда решение с moodle необходимо втиснуть в имеющуюся инфраструктуру, не имея возможности на нее повлиять. Авторизация пользователей происходит как раз через LDAP, но развить эту тему в наших потребностях нельзя, т.к. LDAP так же заточен под определенные нужды в большой инфраструктуре, и самое главное, нет возможности что-то изменить в его схеме.
По поводу внешнего сервиса работы с БД - в принципе я так и поступил: у меня есть промежуточный инстанс с питоном. который как раз подготавливает базу для взаимодействия с moodle - приводит данные в определенный вид, сортирует по группам и курсам, добавляет и обновляет пользователей. Проблема в том, что остается элемент ручного взаимодействия. Было бы оптимально, чтобы пользователь в базе имел конкретный признак по которому его можно было бы точно определить в нужный курс. Однако такого нет (опять таки, на структуру базы повлиять нельзя), поэтому какой-то пользователь должен зайти и вручную выбрать конкретных пользователей из списка, который желательно сузить до определенной категории.
В ответ на Владимир Владимир

Re: Плагин для moodle. Изобретаю ли я велосипед?

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

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

В ответ на Vadim Dvorovenko

Re: Плагин для moodle. Изобретаю ли я велосипед?

от Владимир Владимир -
Вадим, если можно, задам вопрос уже по плагину. Как реализуется добавление плагина в список способов зачисления для курса - в settings.php или в lib.php классом, расширяющим enrol_plugin?
В ответ на Владимир Владимир

Re: Плагин для moodle. Изобретаю ли я велосипед?

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода
после того, как вы сделали enrol плагин, его нужно включить в администрирование - плагины - запись на курс, и тогда он сам появится в списке возможных способов зачисления на курс. По умолчанию его там не будет, в существующие курсу придется добавлять вручную. Для новых курсов можно задать по умолчанию, какие способы записи должны быть доступны
Документация по разработке плагинов этого типа https://docs.moodle.org/dev/Enrolment_plugins
Не забывайте, при разработке после каждого существенного изменения нужно обновлять version.php и запускать обновлений, иначе в кэше могут остаться старые значения, и из-за этого плагин может быть не виден.
В ответ на Vadim Dvorovenko

Re: Плагин для moodle. Изобретаю ли я велосипед?

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода
Ещё вспомнил. Есть платины admin/tool - у них есть метод _extend_navgaton_course с помощью которого можно расширять меню курса. Поэтому вы можете реализовать нужный функционал и таким плагином