Разработка:sync/courseenrolment — различия между версиями

Материал из DOF
Перейти к: навигация, поиск
(API)
 
(не показано 5 промежуточных версий 2 участников)
Строка 1: Строка 1:
 
{{Infobox_Plugin
 
{{Infobox_Plugin
| name = courseenrolments
+
| name = courseenrolment
 
| type = sync
 
| type = sync
 
}}
 
}}
Строка 35: Строка 35:
 
* $mdlgroupid - id группы в курсе, куда будет записываться пользователь
 
* $mdlgroupid - id группы в курсе, куда будет записываться пользователь
 
* $mdluserid - id пользователя в moodle
 
* $mdluserid - id пользователя в moodle
 +
 +
 +
=== get_cfg() ===
 +
* ''Краткое описание:''
 +
Позволяет обращаться к конфигурационному файлу данного плагина.
 +
* ''Логика работы:''
 +
** Для работы требуется переменная класса для хранения массива параметров из файла, т.е. обращение в файл производится только при первой попытке.
 +
** Ищет конфигурационный файл (в соответствии с логикой работы dof - $this->dof->plugin_path($this->type(),$this->code(),'/cfg/cfg.php'))
 +
** Возвращает значение по ключу (если ключ не указан, то возвращает весь массив параметров из файла). к примеру return @$mas['a'], т.е. если нет значения, то не генерируется ошибка, а возвращается null.
 +
* ''Аргументы:''
 +
** string[optional] $key=null Ключ в массиве, т.е. искомый параметр. Если параметр не передан, то возвращается весь массив.
 +
* ''Возвращаемое значение:''
 +
** Параметр или null (если конфигурационный файл не найден или если параметр не найден в файле или если он найден и его значение null, это стоит учитывать)
 +
 +
=== sync_grades() ===
 +
* ''Краткое описание:''
 +
Синхронизирует оценки деканата и moodle (запускается кроном)
 +
* ''Логика работы:''
 +
** Выбирает указанное в кофиге кол-во активных самых давно синхронизированных cstream`ов (отсортированных по дате последней синхронизации в порядке возрастания)
 +
** вернет false, если нет параметра в конфиге
 +
** запускает sync_cstream()
 +
* ''Аргументы:''
 +
* ''Возвращаемое значение:''
 +
** bool успешность. Если в конфиге не найдено количество cstream`ов, синхронизируемых за раз, то false. Так же false в случае, если произошла ошибка синхронизации хоть одного cstream`а
 +
 +
=== sync_cstream() ===
 +
* ''Краткое описание:''
 +
Синхронизирует оценки деканата и moodle по конкретному cstream`у
 +
* ''Логика работы:''
 +
** Смотрит в дисциплине из таблицы programmitems (связанной с cstream`ом) флаг gradesyncenabled. Если false, то не синхронизируем
 +
** Выбирает все активные cpassed`ы для данного cstream`а
 +
** получает оценку с помощью метода get_scale_grade
 +
** Формирует и исполняет ведомость (с помощью класса, который находится в папке плагина в файле order_itog_grades.php), которая проставляет оценку в cpassed.
 +
** В зависимости от оценки и параметров дисциплины incjournwithoutgrade и incjournwithunsatisfgrade может не исполнить ведомость. Если передан параметр closing то в любом случае исполняет ведомость.
 +
* ''Аргументы:''
 +
** int $cstreamid id cstream
 +
** bool $closing[optional] = false Если закрываем cstream (т.е. закрываем не здесь, но значит все cpassed надо обязательно проставить)
 +
* ''Возвращаемое значение:''
 +
** bool
 +
 +
=== get_scale_grade() ===
 +
* ''Краткое описание:''
 +
получает оценку для указанного cpassed`а из таблиц moodle
 +
* ''Логика работы:''
 +
** Ищет итоговую оценку курса в таблице grade_grades, id которого указан в cpassed`е. Если в дисциплине указан altgradeitem, то берет оценку из нее, т.е. из записи из grade_items с указанным id (пока для этого варианта не работает приведение оценки к шкале дисциплины ЭД)
 +
** С помощью метода bring_grade_to_scale оценку в шкалу для данной дисциплины деканата
 +
* ''Аргументы:''
 +
** int|object $cpassed id cpassed`а или сам объект
 +
** int|object[optional] $pitem id programmitem`а или сам объект
 +
* ''Возвращаемое значение:''
 +
** Приведенная к шкале оценка
 +
** false в случае ошибки
 +
** null - если нет оценки пока
 +
 +
=== init_logs() ===
 +
* ''Краткое описание:''
 +
Инициализация логов (не обязательно вызывать метод, для использования логов)
 +
* ''Логика работы:''
 +
** Инициализирует переменную logs, которая является свойством текущего класса.
 +
** Если переменная уже инициализированна раннее или в конфигурационном файле не установлено или отключено ведение логов, то ничего не делает
 +
** Инициализация подразумевает установку:
 +
*** формат даты для названий файлов
 +
*** директории логов
 +
*** базовых имен файлов. т.е. название файла логов для всех сообщений будет выглядеть так <дата в установленном формате>log.txt, а для лога с ошибками <дата в установленном формате>errorlog.txt
 +
*** абсолютных путей к файлам логов, в которые будут писаться сообщения в данном экземпляре класса
 +
** Вызывает метод, устанавливающий абсолютные пути файлов логов. Если говорить кратко (лучше смотреть в коде), он ищет два файла логов (обычный и для ошибок), к которым недавно происходило обращение для записи (не более заданного в конфиге кол-ва секунд). Если не находит таких файлов, то создает новые в соответствии с заданным форматом имени.
 +
* ''Аргументы:''
 +
** -
 +
* ''Возвращаемое значение:''
 +
** на данный момент не предусмотрено возвращаемого значения
 +
 +
=== delete_old_logs() ===
 +
* ''Краткое описание:''
 +
Стирает старые логи в папке логов для данного плагина (эта директория устанавливается в init_logs)
 +
* ''Логика работы:''
 +
** Вызывать нужно только после инициализации логов, иначе ничгео метод не сделает.
 +
** По заданному формату даты в названии логов ищет файлы, которые созданы более чем заданное в конфиге кол-во дней, и удаляет их.
 +
** Если в папке будут лишние файлы, формат названия которых не соответствует заданному, то они также могут быть удалены.
 +
* ''Аргументы:''
 +
* ''Возвращаемое значение:''
 +
** на данный момент не предусмотрено возвращаемого значения
 +
 +
=== log() ===
 +
* ''Краткое описание:''
 +
Запись сообщения в лог (для корректной работы не требуется вызывать больше ничего, устанавливать параметры - все автоматически)
 +
* ''Логика работы:''
 +
** Для корректной работы не требуется вызывать больше ничего, устанавливать параметры - все автоматически
 +
** Метод вызывает инициализацию логов
 +
** Пишет сообщение $message в лог для всех сообщений и если передан параметр $error, то пишет еще и в лог ошибок
 +
* ''Аргументы:''
 +
** string $message Сообщение об ошибке
 +
** bool[optional] $error Если это сообщение об ошибке
 +
* ''Возвращаемое значение:''
 +
** на данный момент не предусмотрено возвращаемого значения
 +
 +
=== log_get_str() ===
 +
* ''Краткое описание:''
 +
Вызывает log, но в качестве сообщения надо подавать код сообщения и параметр как в get_string()
 +
* ''Логика работы:''
 +
** Получает сообщение используя get_string и вызывает log()
 +
* ''Аргументы:''
 +
** string $message Сообщение об ошибке
 +
** mixed $a Параметры для строки из файла локализации
 +
** bool[optional] $error Если это сообщение об ошибке
 +
* ''Возвращаемое значение:''
 +
** на данный момент не предусмотрено возвращаемого значения
 +
 +
== Cron ==
 +
* ''Периодичность запуска''
 +
** Значение берется из конфигурационного файла (стоит учитывать, что это происходит только при установке или обновлении плагина)
 +
* ''Что выполняется''
 +
** sync_grades()
 +
* ''Условия запуска (нюансы, логика запуска)''
 +
** Запускатся если в конфигурационном файле задана переменная, активирующая синхронизацию и если пониженная нагрузка системы в данный момент, иначе вернет true.
 +
 +
==Перехватываемые события==
 +
{| border="1"
 +
|+ Таблица событий, которые перехватывает этот плагин
 +
! Тип плагина
 +
! Код плагина
 +
! Код события
 +
! Пояснение
 +
|-
 +
| workflow
 +
| cpassed
 +
| cpassed_active
 +
| Событие смены статуса на активный
 +
|-
 +
| workflow
 +
| cpassed
 +
| cpassed_not_active
 +
| Событие смены статуса с активного на любой другой
 +
|-
 +
| workflow
 +
| cstreams
 +
| cstreams_active
 +
| Событие смены статуса на активный
 +
|-
 +
| workflow
 +
| cstreams
 +
| cstreams_passive
 +
| Событие смены статуса с любого на неактивный
 +
|-
 +
| workflow
 +
| cstreams
 +
| cstreams_not_active
 +
| Событие смены статуса с активного на любой другой
 +
|-
 +
| storage
 +
| cpassed
 +
| insert
 +
| Событие добавления записи в справочник
 +
|-
 +
| storage
 +
| cpassed
 +
| delete
 +
| Событие удаления записи из справочника
 +
|-
 +
| storage
 +
| cstreams
 +
| insert
 +
| Событие добавления записи в справочник
 +
|-
 +
| storage
 +
| cstreams
 +
| update
 +
| Событие обновления записи в справочнике
 +
|-
 +
| storage
 +
| cstreams
 +
| delete
 +
| Событие удаления записи из справочника
 +
|}

Текущая версия на 14:44, 14 января 2015

Плагин
Название courseenrolment
Тип sync


Синхронизация подписок на учебные потоки с подписками на курсы Moodle.

  • Подписка на курс Moodle (вызывается из рабочего процесса cpassed при переводе объекта cpassed в статус "active", в случае, если для ученика существует пользователь Moodle, а для дисциплины задан курс Moodle). При этом, если для потока задана группа moodle, она тоже передается и при подписке происходит включение в эту группу.
  • Отписка от курса Moodle (вызывается из рабочего процесса cpassed при выводе подписки из статуса active).

Подписка, отписка и включение в группу происходит с использованием плагина modlibs/ama (modlib('ama')->course($mcourse)->role()->enrol(), modlib('ama')->course($mcourse)->role()->unenrol(), modlib('ama')->course($mcourse)->group($mgroup)->add_member($muser),

API

enrol_to_course()

Записывает пользователя на курс.

  • возвращаемое значение: (bool)
    • true если пользователя удалось подписать
    • false если произошла ошибка
  • $mdlcourseid - id курса в Moodle на который подписывается пользователь
  • $mdluserid - id пользователя в moodle
  • $mdlgroupid[optional] - id группы, в которую будет записан пользователь или null, если пользователь не будет записан в группу
  • @param int $mdlroleid[optional] - id роли прльзователя в курсе (из таблицы moodle). Роль по умолчанию - ученик.
  • @param int $timeend[optional] - время окончания обучения на курсе в формете unixtime (при наступлении этой даты пользователь булет отписан с курса)
  • @param bool $hidden[optional] - записать пользователя в скрытом режиме (он не будет отображаться в списке пользователей для учеников и учителей курса)

unenrol_from_course()

Отписывает пользователя из курса

  • возвращаемое значение: (bool)
    • true если пользователя удалось отписать
    • false если произошла ошибка
  • $mdlcourseid - id курса в Moodle с которого отписывается пользователь
  • $mdluserid - id пользователя в moodle

add_to_group()

Записывает пользователя в группу moodle

  • возвращаемое значение: (bool)
  • $mdlcourseid - id курса в Moodle в котором находится группа
  • $mdlgroupid - id группы в курсе, куда будет записываться пользователь
  • $mdluserid - id пользователя в moodle


get_cfg()

  • Краткое описание:

Позволяет обращаться к конфигурационному файлу данного плагина.

  • Логика работы:
    • Для работы требуется переменная класса для хранения массива параметров из файла, т.е. обращение в файл производится только при первой попытке.
    • Ищет конфигурационный файл (в соответствии с логикой работы dof - $this->dof->plugin_path($this->type(),$this->code(),'/cfg/cfg.php'))
    • Возвращает значение по ключу (если ключ не указан, то возвращает весь массив параметров из файла). к примеру return @$mas['a'], т.е. если нет значения, то не генерируется ошибка, а возвращается null.
  • Аргументы:
    • string[optional] $key=null Ключ в массиве, т.е. искомый параметр. Если параметр не передан, то возвращается весь массив.
  • Возвращаемое значение:
    • Параметр или null (если конфигурационный файл не найден или если параметр не найден в файле или если он найден и его значение null, это стоит учитывать)

sync_grades()

  • Краткое описание:

Синхронизирует оценки деканата и moodle (запускается кроном)

  • Логика работы:
    • Выбирает указанное в кофиге кол-во активных самых давно синхронизированных cstream`ов (отсортированных по дате последней синхронизации в порядке возрастания)
    • вернет false, если нет параметра в конфиге
    • запускает sync_cstream()
  • Аргументы:
  • Возвращаемое значение:
    • bool успешность. Если в конфиге не найдено количество cstream`ов, синхронизируемых за раз, то false. Так же false в случае, если произошла ошибка синхронизации хоть одного cstream`а

sync_cstream()

  • Краткое описание:

Синхронизирует оценки деканата и moodle по конкретному cstream`у

  • Логика работы:
    • Смотрит в дисциплине из таблицы programmitems (связанной с cstream`ом) флаг gradesyncenabled. Если false, то не синхронизируем
    • Выбирает все активные cpassed`ы для данного cstream`а
    • получает оценку с помощью метода get_scale_grade
    • Формирует и исполняет ведомость (с помощью класса, который находится в папке плагина в файле order_itog_grades.php), которая проставляет оценку в cpassed.
    • В зависимости от оценки и параметров дисциплины incjournwithoutgrade и incjournwithunsatisfgrade может не исполнить ведомость. Если передан параметр closing то в любом случае исполняет ведомость.
  • Аргументы:
    • int $cstreamid id cstream
    • bool $closing[optional] = false Если закрываем cstream (т.е. закрываем не здесь, но значит все cpassed надо обязательно проставить)
  • Возвращаемое значение:
    • bool

get_scale_grade()

  • Краткое описание:

получает оценку для указанного cpassed`а из таблиц moodle

  • Логика работы:
    • Ищет итоговую оценку курса в таблице grade_grades, id которого указан в cpassed`е. Если в дисциплине указан altgradeitem, то берет оценку из нее, т.е. из записи из grade_items с указанным id (пока для этого варианта не работает приведение оценки к шкале дисциплины ЭД)
    • С помощью метода bring_grade_to_scale оценку в шкалу для данной дисциплины деканата
  • Аргументы:
    • int|object $cpassed id cpassed`а или сам объект
    • int|object[optional] $pitem id programmitem`а или сам объект
  • Возвращаемое значение:
    • Приведенная к шкале оценка
    • false в случае ошибки
    • null - если нет оценки пока

init_logs()

  • Краткое описание:

Инициализация логов (не обязательно вызывать метод, для использования логов)

  • Логика работы:
    • Инициализирует переменную logs, которая является свойством текущего класса.
    • Если переменная уже инициализированна раннее или в конфигурационном файле не установлено или отключено ведение логов, то ничего не делает
    • Инициализация подразумевает установку:
      • формат даты для названий файлов
      • директории логов
      • базовых имен файлов. т.е. название файла логов для всех сообщений будет выглядеть так <дата в установленном формате>log.txt, а для лога с ошибками <дата в установленном формате>errorlog.txt
      • абсолютных путей к файлам логов, в которые будут писаться сообщения в данном экземпляре класса
    • Вызывает метод, устанавливающий абсолютные пути файлов логов. Если говорить кратко (лучше смотреть в коде), он ищет два файла логов (обычный и для ошибок), к которым недавно происходило обращение для записи (не более заданного в конфиге кол-ва секунд). Если не находит таких файлов, то создает новые в соответствии с заданным форматом имени.
  • Аргументы:
    • -
  • Возвращаемое значение:
    • на данный момент не предусмотрено возвращаемого значения

delete_old_logs()

  • Краткое описание:

Стирает старые логи в папке логов для данного плагина (эта директория устанавливается в init_logs)

  • Логика работы:
    • Вызывать нужно только после инициализации логов, иначе ничгео метод не сделает.
    • По заданному формату даты в названии логов ищет файлы, которые созданы более чем заданное в конфиге кол-во дней, и удаляет их.
    • Если в папке будут лишние файлы, формат названия которых не соответствует заданному, то они также могут быть удалены.
  • Аргументы:
  • Возвращаемое значение:
    • на данный момент не предусмотрено возвращаемого значения

log()

  • Краткое описание:

Запись сообщения в лог (для корректной работы не требуется вызывать больше ничего, устанавливать параметры - все автоматически)

  • Логика работы:
    • Для корректной работы не требуется вызывать больше ничего, устанавливать параметры - все автоматически
    • Метод вызывает инициализацию логов
    • Пишет сообщение $message в лог для всех сообщений и если передан параметр $error, то пишет еще и в лог ошибок
  • Аргументы:
    • string $message Сообщение об ошибке
    • bool[optional] $error Если это сообщение об ошибке
  • Возвращаемое значение:
    • на данный момент не предусмотрено возвращаемого значения

log_get_str()

  • Краткое описание:

Вызывает log, но в качестве сообщения надо подавать код сообщения и параметр как в get_string()

  • Логика работы:
    • Получает сообщение используя get_string и вызывает log()
  • Аргументы:
    • string $message Сообщение об ошибке
    • mixed $a Параметры для строки из файла локализации
    • bool[optional] $error Если это сообщение об ошибке
  • Возвращаемое значение:
    • на данный момент не предусмотрено возвращаемого значения

Cron

  • Периодичность запуска
    • Значение берется из конфигурационного файла (стоит учитывать, что это происходит только при установке или обновлении плагина)
  • Что выполняется
    • sync_grades()
  • Условия запуска (нюансы, логика запуска)
    • Запускатся если в конфигурационном файле задана переменная, активирующая синхронизацию и если пониженная нагрузка системы в данный момент, иначе вернет true.

Перехватываемые события

Таблица событий, которые перехватывает этот плагин
Тип плагина Код плагина Код события Пояснение
workflow cpassed cpassed_active Событие смены статуса на активный
workflow cpassed cpassed_not_active Событие смены статуса с активного на любой другой
workflow cstreams cstreams_active Событие смены статуса на активный
workflow cstreams cstreams_passive Событие смены статуса с любого на неактивный
workflow cstreams cstreams_not_active Событие смены статуса с активного на любой другой
storage cpassed insert Событие добавления записи в справочник
storage cpassed delete Событие удаления записи из справочника
storage cstreams insert Событие добавления записи в справочник
storage cstreams update Событие обновления записи в справочнике
storage cstreams delete Событие удаления записи из справочника