Разработка:sync/courseenrolment — различия между версиями
Nickkang (обсуждение | вклад) (Добавлены методы синхронизации оценок) |
|||
(не показаны 4 промежуточные версии 2 участников) | |||
Строка 1: | Строка 1: | ||
{{Infobox_Plugin | {{Infobox_Plugin | ||
− | | name = | + | | name = courseenrolment |
| type = sync | | type = sync | ||
}} | }} | ||
Строка 51: | Строка 51: | ||
=== sync_grades() === | === sync_grades() === | ||
* ''Краткое описание:'' | * ''Краткое описание:'' | ||
− | + | Синхронизирует оценки деканата и moodle (запускается кроном) | |
* ''Логика работы:'' | * ''Логика работы:'' | ||
** Выбирает указанное в кофиге кол-во активных самых давно синхронизированных cstream`ов (отсортированных по дате последней синхронизации в порядке возрастания) | ** Выбирает указанное в кофиге кол-во активных самых давно синхронизированных cstream`ов (отсортированных по дате последней синхронизации в порядке возрастания) | ||
Строка 62: | Строка 62: | ||
=== sync_cstream() === | === sync_cstream() === | ||
* ''Краткое описание:'' | * ''Краткое описание:'' | ||
− | + | Синхронизирует оценки деканата и moodle по конкретному cstream`у | |
* ''Логика работы:'' | * ''Логика работы:'' | ||
** Смотрит в дисциплине из таблицы programmitems (связанной с cstream`ом) флаг gradesyncenabled. Если false, то не синхронизируем | ** Смотрит в дисциплине из таблицы programmitems (связанной с cstream`ом) флаг gradesyncenabled. Если false, то не синхронизируем | ||
Строка 88: | Строка 88: | ||
** false в случае ошибки | ** false в случае ошибки | ||
** null - если нет оценки пока | ** 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 | Событие удаления записи из справочника |