Moodle с точки зрения пользователя и программиста
Igor Sazonov ( @tigusigalpa, lmstech.ru / lms-service.org )
IT Global Meetup #5, Saint-Petersburg, Russia, June 6, 2015
Банальная информация
Moodle – Modular Object-Oriented Dynamic Learning
Environment ( Модульная объектно-ориентированная динамическая среда )
Бесплатная open-source система ( https://moodle.org/ )
Количество пользователей: ~71 485 909
Количество стран: 222
Текущая версия: 2.9
Доля среди LMS: 96%
Первая версия: 2003 год
* https://wappalyzer.com/categories/lms
Преимущества
Бесплатный
Огромное комьюнити
Постоянные обновления (раз в полгода) и улучшения по просьбам пользователей
Много возможностей и настроек (?!)
Много разных плагинов
Недостатки
Большое число настроек
Сложность освоения
Требуется сервер с мощными ресурсами
Ограниченные возможности по кастомизации внешнего вида
Сложная архитектура БД
«Жесткая» структура файлов и классов
Малое количество документации
Расслабьтесь
Moodle с точки зрения пользователя
Управление курсами
Управление элементами курсов
Система ролей
Система отчетов
Банк вопросов
Блоки
Языки интерфейса
Дополнительные плагины
Управление курсамиКурс – конечная сущность, состоящая из элементов курса (тесты, задания, лекции)
Курс может быть представлен одним из форматов:
Разделы по неделям – организует расписание курса (неделя за неделей) с точным сроком начала и окончания. Каждая неделя это модуль курса.
Разделы по темам – внешне похож на Разделы по неделям, но не имеет временных ограничений и не привязан к календарю. Каждая неделя это модуль курса.
Форум – курс организуется на основе одного большого форума. Может использоваться как одна большая доска сообщений
Управление элементами курсов
Элемент курса – одна из составляющих курса, может быть представлена Тестом, Заданием, Лекцией, Опросом итп
Система ролей
Роль – набор разрешений (прав), определенных для всей системы, Вы можете назначить роль пользователю или создать свою роль. Роль подчиняется уровням (сайт, категория, курс итд). Управляющий – управляющие имеют доступ к курсу и могут изменять его.
Они, как правило, не участвуют в курсах.
Создатель курса – создатели курсов могут создавать новые курсы.
Учитель – учителя могут делать в курсе всё, в том числе изменять элементы курса и оценивать студентов.
Ассистент (без права редактирования) – ассистент может преподавать в курсах и выставлять оценки, но он не может изменять содержание курса.
Студент – обычно студенты обладают меньшим набором прав в рамках курса.
Гость – обычно гости имеют минимальный набор прав и не могут нигде вводить текст.
Администрирование > Пользователи > Права >
Система ролейКонтексты – участники иерархической архитектуры зависимости прав относительно конкретного элемента системы.
Количество прав, которые можно назначить роли – более 520
Например, Управлять файлами в области личных файлов или Просматривать профили других пользователей.
Система отчетов (в рамках курса)
Отчет по оценкам Отчет формируется для каждого пользователя согласно пройденным им
элементам курса
История оценок: все попытки пользователя, втч и неудачные
Можно даже назначать оценки
Поддержка экспорта в форматы OpenDocument, Excel, XML, текстовый файл
Настройки Курса > Управление курсом > Оценки
Журнал событийОтчет о всевозможных действиях пользователей на сайте
Настройки Курса > Управление курсом > Отчеты
Банк вопросовБанк вопросов позволяет управлять всеми вопросами, которые есть во всех тестах текущего курса.
Вы можете редактировать, дублировать, удалять, править вопросы из списка Банка вопросов курса.
Настройки курса > Управление тестом > Банк вопросов
БлокиБлоки – это виджеты с определенном контентом, которые могут добавлены на страницу в Moodle (обычно в колонках справа или слева).
Они могут быть как встроенные в Moodle, так и предоставляемые сторонними плагинами (в данном случае это понятие «Блок»).
https://docs.moodle.org/29/en/Blocks
Языки интерфейса
В Moodle, начиная с версии 2.5 внедрена поддержка переключения языка интерфейса (не контента!).
Дополнительные плагины
Модули / плагины разделяются на категории по их функциональности
Установка только через FTP
https://moodle.org/plugins/
Moodle с точки программиста
Проблемы для программиста
Полезные функции и глобальные переменные
Система контекстов
Логирование отчетов
Написание плагинов, блоков
Работа с БД
Проблемы для программиста
Мало документации (система узкоспециализирована)
Не проинициализированы подключения файлов
328 таблиц в Базе Данных !!!
Строгая структура файлов
Строгое разделение плагинов на блоки / модули
Запутанная система работы с javascript
Полезные функции и переменные
create_course($data)
Функция для создания курса, записывает в таблицу courseзначения объекта (!) $data (ключи = колонки таблицы)
course/lib.php
optional_param($parname, $default, $type)
Обрабатывает параметры из $_GET, $_POST по ключу $parname, если ключ пустой, то возвращает $default, а также проверяет полученное значение $type
lib/moodlelib.php
get_config($plugin)
Возвращает объект всех опций плагина $plugin из таблицы config_plugins
lib/moodlelib.php
Полезные функции и переменные
$CFG – глобальная переменная-объект с системными данными (wwwroot (http://site.ru), libdir (/lib), tempdir)
require_capability($capability, $context);
Функция запрашивает права $capability на показ $context
lib/accesslib.php
get_string($string_id, $component);
Примеры: $id = optional_param('id', '', PARAM_INT);
$new_course = create_course($object);
include_once($CFG->libdir . '/formslib.php');
Система контекстов
Контексты имеют так называемые context level:
define('CONTEXT_SYSTEM', 10);
define('CONTEXT_USER', 30);
define('CONTEXT_COURSECAT', 40);
define('CONTEXT_COURSE', 50);
define('CONTEXT_MODULE', 70);
define('CONTEXT_BLOCK', 80);
Каждое право «подчиняется» своему contextlevel
Чем contextlevel меньше, тем больше прав
Каждая сущность в Moodle должна иметь свой контекст
Таблица context
https://docs.moodle.org/dev/Access_API
Логирование отчетов
Каждое действие должно (желательно) логироваться. Функции работы с логированием:
add_to_log($courseid, $module, $action, $url='', $info='',
$cm=0, $user=0)
$coursed – ID курса
$module – имя модуля/плагина которое совершает $action
$action – 'view', 'update', 'add' или 'delete‘
$cm – id модуля курса
$user – id пользователя, который совершает $action
get_logs($select, array $params=null, $order='l.time DESC',
$limitfrom='', $limitnum='', &$totalcount)
get_logs_usercourse($userid, $courseid, $coursestart)
https://docs.moodle.org/dev/Logging_API
Написание плагинов/блоков
Плагины в Moodle имеют довольно много типов (блоки, утилиты админ панели итп):
https://docs.moodle.org/dev/Plugin_types
Общие моменты:
Точка входа – файл php (его имя должно соответствовать типу плагина)
Точка входа – это класс, который наследуется от базового класса нужного типа плагина. Этот класс может переписывать методы родительского класса.
Структура каталогов одинаковая
Написание плагинов/блоков
Пример структуры каталогов и главного класса блока simplehtml =>
Пример инициализации входного класса
Работа с БД
СУБД может быть как MySQL так и Postgresql
С БД работает глобальный объект $DB ( global $DB; )
Примеры: $user = $DB->get_record('user', array('id'=>'1'));
$DB->get_records($table, array $conditions=null, $sort='', $fields='*', $limitfrom=0,
$limitnum=0)
$DB->set_field($table, $newfield, $newvalue, array $conditions=null)
$DB->delete_records($table, array $conditions=null)
$DB->insert_record($table, $dataobject, $returnid=true, $bulk=false)
$DB->update_record($table, $dataobject, $bulk=false)
………..
https://docs.moodle.org/dev/Data_manipulation_API