Разработка:Создание плагина

Материал из DOF
Перейти к: навигация, поиск

Основные шаги по созданию нового плагина из примера

  1. Выберите тип создаваемого плагина
  2. Выберите имя для создаваемого плагина. Имя может состоять из 1-20 латинских букв (без цифры и знаков подчеркивания).
  3. Создайте папку по имени плагина в папке, соответствующей типу плагина
  4. Скопируйте в эту папку файлы примеры плагина того же типа (начинается на exempl), но проследите, чтоб в папку не попали файлы .svn, которые находятся в каждой папке проекта.
  5. Отредактируйте файл init.php. Минимальные правки: имя класса, версия, код плагина, зависимости , прослушиваемые события, минимальный срок между запусками крона в плагине (если нужен крон), другие упоминания старого имени плагина.
  6. Отредактируйте языковые файлы.
  7. Для плагина типа im - отредактируйте файл lib.php, убрав оттуда упоминания старого имени плагина. Остальные файлы можно удалить или использовать в качестве заготовок страниц.

Основные возможности, которые можно использовать в плагинах

  • Обращение к плагину
  • Получение пути к плагину или файлу внутри него
  • Получение url плагина или файла внутри него
  • Перевод интерфейса
  • Шаблон оформления и элементы навигации
  • Вывод блока в интерфейсе FDO
  • Вывод текста в основной блок в Moodle


Права доступа

Установка, обновление и удаление плагинов

Для реализации собственных методов установки, обновления и удаления плагинов, необходимо разместить соответствующий код в методах install(), upgrade($oldversion) и uninstall() плагина. В метод upgrade($oldversion) передается номер старой версии плагина, внутри метода обновления должен располагаться ряд условий вида if ($oldversion < 2008100700), расположенных в порядке возрастания версий. При обновлении, условия срабатывают по очереди, выполняя постепенное обновление структуры БД и других данных со старой версии до текущей.

Установка, обновление и удаление плагинов выполняется через соответствующие методы класса dof_control:

  • Установка плагина происходит через метод $DOF->plugin_install($type,$code);
    • Проверяет, нет ли уже записи в block_dof_plugins об этом плагине, если есть - ошибка
    • Проверяет совместимость интерфейса плагина с интерфесом системы.
    • Вызывает собственный метод install() плагина
    • Регистрирует плагин как слушателя событий
    • Регистрирует плагин в block_dof_plugins
  • Обновление $DOF->plugin_upgrade($type,$code);
    • Проверяет совместимость интерфейса плагина с интерфесом системы.
    • Вызывает собственный метод upgrade($oldver) плагина, передавая ему в качестве параметров старую версию плагина из БД
    • Обновляет информацию в БД о зарегистрированном плагине
  • Удаление $DOF->plugin_uninstall($type,$code);
    • Проверяет, не осталось ли плагинов, зависящих от удаляемого плагина
    • Удаляем плагин из списка "слушателей" событий
    • Выполняет собственный метод плагина удаления uninstall(), который должен удалить таблицу из БД
    • Удаляем плагин из списка зарегистрированных плагинов
  • Контроль возможности установки и обновленя плагинов с учетом зависимостей: если класс плагина содержит метод is_setup_possible($oldversion), где $oldversion - это номер старой версии плагина или NULL, если этот плагин не был пока установлен, то он будет запущен перед попыткой автоматической установки всех плагинов. Если метод вернет true, будет предпринята попытка его установки, если матод вернет false - плагин будет пропущен. После установки первой группы плагинов, для которы is_setup_possible() вернула true, проверка будет выполнена повторно и так до тех пор, пока останется хотя бы один плагин, пригодный для установки. Эта функция предназначена для проверки зависимостей, актуальных именно в момент установки плагинов, поэтому должна возвращать false если установка действительно невозможно или если плагин, от которого зависит текущий совсем отсутствует в системе. Это позволяет настраивать порядок обновления плагинов так, чтобы если требуется сперва обновить один плагин, а потом другой, данная последовательность была соблюдена.


Создание таблиц в БД для справочников

В родительском классе dof_storage уже реализован стандартный метод install(), использующий файл db/install.xml плагина. Создание файла install.xml:

  • Из закладки "Разное" администраторского блока заходим в XMLDB-редактор;
  • Находим среди предложенного списка нужную нам папку и если файл install.xml еще не создан, то создаем его. Далее загружаем файл и идем его редактировать;
  • Перед вами появится страница, где вы можете создать и отредактировать таблицы, а также просмотреть исходный xml-код, сгенерировать его в php или sql коды. Делаем то, что нам необходимо. Подробная справка лежит здесь: Разработка:XMLDB
  • Возвращаемся назад к списку и сохраняем наш файл.

Обновление таблиц в БД для справочников

Организация обновления таблиц с помощью классов XMLDBTable и XMLDBField:

  • Обновляем исходный файл install.xml внося необходимые изменения при помощи XMLDB-редактора;
  • В собственном методе update() плагина записываем код обновления таблицы. Выглядеть он будет приблизительно так:

Метод обновления с Moodle 2.0

  global $DB; 
  $dbman = $DB->get_manager();
  if ( $oldversion < ХХХХХХХХ00 ) //ХХХХХХХХ00 - формат кода новой версии
  {
      $table = new xmldb_table('table_name');//загружаем таблицу для изменения
      $field = new xmldb_field('table_field',XMLDB_TYPE_TEXT, 'small', null, null, null, null, null, null, 'visible');//загружаем методы для работы с полем table_field таблицы table_name
      if ( !$dbman->field_exists($table, $field) )
      {
          $dbman->add_field($table, $field);применяем изменения
      }
  }

Начиная с Moodle 2.0 методы работы с полями возвращают всегда значение NULL, поэтому наш метод update() теперь всегда будет возвращать true уповая на то, что мудловские методы сделали все корректно. В некоторых случаях придется вызывать дополнительные методы, например, для добавления поля в БД придется вызвать метод проверки существования этого поля в БД. В таких случаях может помочь XMLDB-редактор, он подскажет что и где добавлять.

Старый метод обновления.

  // Подключаем функции MOODLE из библиотеки "/lib/ddllib.php" для обновления таблиц
  global $CFG;
  require_once($CFG->libdir.'/ddllib.php');
  // Модификация базы данных через XMLDB
  $result = true; 
  if ($result && $oldversion < ХХХХХХХХ00) //ХХХХХХХХ00 - формат кода новой версии
  {
      $table = new XMLDBTable('table_name');//загружаем таблицу для изменения
      $field = new XMLDBField('table_field');//загружаем методы для работы с полем table_field таблицы table_name
      //установливаем новые атрибуты этого поля
      $field->setAttributes(XMLDB_TYPE_TEXT, 'small', null, null, null, null, null, null, 'visible');
      $result = $result &&  add_field($table, $field);применяем изменения и возвращаем результат
  }

Примечиние: В Moodle XMLDB-редактор самостоятельно генерирует php-код внесенных изминений, и его можно просто скопировать в метод update() плагина.

Удаление таблиц в БД для справочников

В родительском классе dof_storage уже реализован стандартный метод uninstall(), использующий файл db/install.xml плагина.

Запуск заданий по расписанию

Одноразовое задание для выполнения в фоновом режиме

События

Обращения к объектам Moodle