Форум разработчиков

Структура модуля freedeansoffice

 
Изображение пользователя Алексей Дьяченко
Структура модуля freedeansoffice
от Алексей Дьяченко - Среда, 21 Май 2008, 16:44
 
Коллеги, предлагаю обсудить структуру новой версии модуля "Электронный деканат".
В приложенном файле - диаграмма классов.
Класс doffice_control используется в момент инициализации деканата и создает объект $DOFFICE, с помощью которого осуществляется доступ к API деканата и всех плагинов, входящих в его состав.

Например, получение студента с id = 35 из справочника "студенты" будет выглядеть следующим образом:
$student = $DOFFICE->storage('students')->get(35);

С помощью этого же объекта осуществляется доступ к API деканата, например, получение строки из файла локализации будет выглядеть так:
echo $DOFFICE->get_string('successaddstudent','students');
При этом будет возвращена строка с кодом 'successaddstudent' из файла
/blocks/doffice/lang/ru_utf8/block_doffice_im_students.php

Каждый тип плагина должен объявлять класс, с именем вида
doffice_типплагина_имяплагина, который должен быть дочерним классом от класса doffice_типплагина.
Все они обязательно реализуют следующие методы:
  • install() - установка БД плагина;
  • upgrade() - обновление БД плагина;
  • version() - версия плагина;
  • interface() - имя интерфейса, которому соответсвует плагин (эта переменная нужна для того, чтобы отслеживать совместимость плагинов с разными версиями деканата. Например, при смене версий деканата не обязательно будет меняться версия интерфейса и плагин может сохранить совместимость);
  • type() - тип плагина ('storage','im','msync','worgflow')
  • code() - короткое имя плагина
  • require() - массив плагинов с их типами и версиями, от которых зависит данный плагин;
  • is_access() - возвращает true или false в зависимости от того, должен пользователь получить доступ к какой-то функции или нет. Сам механизм контроля доступа реализуется внутри каждого плагина и зависит от его разработчиков. Возможно, в будущем, будет принят какой-то общий механизм для управления доступом, больших изменений кода это вызвать не должно.
Плагин-справочник реализует интерфейс работы с соответствующей таблицей в БД. Он основывается на стандартных функциях из lib/datalib.php, но нет необходимости каждый раз указывать название таблицы. Кроме того, операции get и delete могут работать по id объекта. Кроме того, при реализации этих методов, возможно предусмотреть выполнение сопутствующих действия при операциях над записью в БД. Кроме того, по усмотрению разработчика справочника, могут быть добавлены другие методы, выполняющие различные sql-запросы к данной таблицей (общее правило кодирование - никакого sql-кода за пределом справочника быть не должно).

Плагин типа workflow реализует следующий набор методов (помимо стандартных, реализуемых всеми типами плагинов):
  • list() - массив со списком возможных состояний для данного объекта
  • avialable() - состояния, в которые возможен переход из текущего состояния данного объекта
  • change() - сменить состояние на указанное. Одновременно могут выполняться сопутствующие этому процессу действия (например, отписка от всех курсов студента, состояние которого изменяется на "отчислен").