This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
с точки зрения программиста
12th Central and Eastern European Software Engineering Conference in Russia – CEE-SECR 2016
Moodle — система управления курсами (электронное обучение), также известная как система управления обучением или виртуальная обучающая среда (англ.). Является аббревиатурой от англ. Modular Object-Oriented Dynamic Learning Environment (модульная объектно-ориентированная динамическая обучающая среда). Представляет собой свободное (распространяющееся по лицензии GNU GPL) веб-приложение, предоставляющее возможность создавать сайты для онлайн-обучения.
с точки зрения программиста
October 28-30, 2016
Как всегда – Introduction
Официальный сайт https://moodle.org/
Год основания 2003
Текущая версия 3.1.2 (28.10.2016)
Язык программирования PHP
База данных Реляционная: MySQL, PostgreSQL, MSSQL, Oracle
Владение ООП PHP Хорошее владение SQL Умение тестировать код Терпение
с точки зрения программиста
October 28-30, 2016
Архитектура. Абстракция
Классическая трехслойная архитектура
Model (DB)-Library-View (index.php)
с точки зрения программиста
October 28-30, 2016
Архитектура. Абстракция
moodledata – папка для хранения динамических файлов Moodle (картинки, кеши, загруженные
файлы итп)
Разработчик вправе строить свои слои, подключать свои библиотеки,
г*вн*кодить итд.Нет строгой архитектуры
зависимостей и связок
* разработчик только изучивший PHP* профессиональный (ленивый) разработчик
с точки зрения программиста
October 28-30, 2016
Архитектура. Модули в ядреМ – модульностьВсе кроме шаблонов (тем) и админки в ядре Moodle – это модули• Moodle – это главный модуль• Тест – модуль• Авторизация – модуль• Блок с информацией – модуль• Отчеты – модуль• итд
* модули в папке /mod – это часть модулей, просто они официально называются «Модули»
с точки зрения программиста
October 28-30, 2016
Архитектура. Типы модулейДополнительные модули (плагины) делятся по типам (модульность).
Каждый тип модуля имеет свою папку «точку входа» (могут отличаться) и набор обязательных файлов и папок
https://docs.moodle.org/dev/Plugin_types
* входная точка модуля – (как правило) конструктор класса, имеющего родительский класс
Дополнительные модулиАлгоритм разработки дополнительного модуля
(плагина) Выбор типа плагина согласно задаче Продумывание архитектуры кода (опционально – только для
больших плагинов), изучение базового класса Заполнение базовой (необходимой) структуры модуля
(version.php, lang/en, «точка входа»), наименования Заход в «точку входа» Программированиеfor ($i=1;$i<={уверенность в качестве кода и отладке};$i++) { Тестирование Отладка} «Причесывание» кода Production
с точки зрения программиста
October 28-30, 2016
Дополнительные модули. Пример. Блок (Block) feedback
/blocks/feedback/db
/blocks/feedback
/blocks/feedback/lang/en
с точки зрения программиста
October 28-30, 2016
Дополнительные модули. Пример. Блок (Block) feedback. Код
База данных. Moodle Data API. ТонкостиСоветы, тонкости, кейсы
Если Вы используете нативные запросы (а Вы из будете использовать =), тестируйте их еще хотя бы на одном драйвере, например MySQL + PostgreSQL
ВАЖНО. При выборке нескольких записей (из нескольких таблиц с помощью JOIN) и нативном запросе (например методом get_records_sql) возвращается массив с ключами первого поля выборки, поэтому необходимо обеспечить уникальность первого ключа и явно указывать нужные поля выборки (вместо SELECT *)
При insert-запросах пользоваться транзакциями Слабая поддержка большого количества insert-запросов
(настройка MySQL не помогает, отрабатывает не более 50 insert-запросов в цикле)
$DB->insert_record($table, $dataobject, $returnid=true, $bulk=false)$bulk не участвует в жизни метода (MySQL)
Объект $CFG содержит в себе конфигурационные данные и данные из БДВызов: global $CFG;
HTTP(s) адрес текущего Moodle: $CFG->wwwrootСерверный адрес текущего Moodle: $CFG->dirrootСерверный адрес к папке moodledata: $CFG->datarootПолный список ключей и значений объекта: print_r($CFG);
с точки зрения программиста
October 28-30, 2016
FrontEnd (JavaScript) Базовый JS-фреймворк – YUI (Yahoo User Interface).
http://yuilibrary.com/ RIP since 2014. Документация - https://docs.moodle.org/dev/YUI
С версии 2.9 (май 2015) в Moodle внедрена поддержка jQuery из ядра, НО! через AMD-модули, подключаемые через RequireJS: http://requirejs.org/. Все подключаемые из вне скрипты/библиотеки должны поддерживать AMD. Поддержка в Moodle – папка amd с подпапками build (production) и src (development)require(['jquery', ‘block_feedback/timer'], function(jQuery, timer) {…});
Документация: https://docs.moodle.org/dev/Javascript_Modules Доступ к информационным объектам через javascript-переменную-
объект M, например к данным из $CFG данные можно получить через строку M.cfg.wwwroot
Совет. Если не знаете точно ожидаемый тип данных – используйте PARAM_CLEAN
Проверка Session Key. В сессию записывается хешированная строка в зависимости от ID текущего пользователя confirm_sesskey( $sesskey = NULL ) – проверка $sesskey из параметра
или из $_POST[‘sesskey’] require_sesskey() – блокирует все вызовы, если confirm_sesskey()
выдала false В javascript – M.cfg.sesskey
Система контекстов - https://docs.moodle.org/dev/Access_APIс