Генерировать события при ключевых действиях пользователя в задании

Issue #19 new
Oleg Sychev repo owner created an issue

Originally reported on Google Code with ID 19

Moodle содержит механизм отправки событий (events) при различных ситуациях.

Необходимо испускать события при получении студентов задания, отправки ответа (особенно
окончательного), получения оценки и т.д.

Reported by oasychev on 2011-01-24 21:11:07

Comments (30)

  1. Oleg Sychev reporter

    Reported by `oasychev` on 2011-01-24 21:11:50 - Labels added: Type-Enhancement, Component-Poasassignment - Labels removed: Type-Defect

  2. Former user Account Deleted

    ``` Рассылка сообщений будет методом класса модели. В настройках модуля есть две опции-уведомлять учителя и уведомлять студентов. Соответственно, требуется формирование сообщений следующего вида: Оповещения учителя: 1) Студент выбрал задание 2) Студент загрузил ответ 3) Студент отменил задание (хотя, наверное, глупо) и выбрал другое

    Оповещения студента 4) Преподаватель оценил работу (выставил оценку имеется в виду) 5) Преподаватель изменил задание или отлучил студента он его текущего варианта вовсе

    Для каждой ситуации один метод с выбором внутри? Или несколько разных методов, У которых общее выделено будет в один обобщенный метод отправки писем ```

    Reported by `oggfire` on 2011-01-27 16:26:55

  3. Oleg Sychev reporter

    ``` Вы не совсем поняли. Нотификация пользователей - отдельная задача.

    События же нотифицируют другие части Moodle о том, что у вас что-то произошло. Например отдельный блок может содержать перенастройку роли на другие возможности (например блокировать чат и прочие средства общения) при получении задания в виде модификации и возвращать прежние права когда оно выполнено и загружено. Он подпишется на ваши события и будет по ним работать.

    P.S. В связи с этим надо проверить, есть ли у студента возможность пометить свой ответ окончательным (так, чтобы до проверки учителем он уже не мог перезагрузить свою работу). Она должна быть отключаемой, но должна быть. ```

    Reported by `oasychev` on 2011-01-27 18:14:40

  4. Oleg Sychev reporter

    ``` Оно как, сделано или нет?

    Реально может быть необходимо блоку Совы для стыковки с вашим модулем... ```

    Reported by `oasychev` on 2012-09-23 21:32:34

  5. Oleg Sychev reporter
    Нужно сделать программные оповещения (события - events) для следующих событий:
    1) модуль открыт для студентов (это происходит либо сразу после создания, либо там
    есть дата открытия - когда доступно основное условие) - указывается cmid как параметр
    2) студент получил задание (индивидуальное) - указывается cmid и userid студента
    3) студент загрузил ответ на задание (не черновик!) - указывается cmid и userid студента
    4) преподаватель оценил ответ студента  - указывается cmid и userid студента, и финализирована
    ли оценка
    
    Это нужно сделать побыстрее, т.к. эти события будет ловить другой модуль.... Там дело
    в общем-то простое, достаточно документацию по events почитать...
    

    Reported by oasychev on 2013-12-27 21:11:22 - Labels added: Priority-Critical - Labels removed: Priority-Medium

  6. Former user Account Deleted
    Давайте заведем страницу на wiki (у меня на это прав нет), где будут перечислены испускаемые
    события и передаваемые с ними данные (аналогично странице с capabilities). Думаю, разработчикам
    других модулей от этого будет проще жить.
    

    Reported by nixorv on 2014-02-26 19:28:55

  7. Oleg Sychev reporter
    Удобнее сделать это здесь: http://docs.moodle.org/dev/Assignment_development#Events
     (по английски, разумеется). Для прав достаточно зарегистрироваться на moodle.org
    

    Reported by oasychev on 2014-02-26 20:33:43

  8. Oleg Sychev reporter
    P.S. А со вставкой файлов в HTML-редактор доделали или бросили?
    

    Reported by oasychev on 2014-02-26 20:34:35

  9. Former user Account Deleted
    На docs.moodle.org добавил список событий, интересуют замечания по их названиям. Описания
    пока добавлять не стал: не слишком уверен в свой грамотности.
    
    Вставку файлов пока бросил, но, если все пойдет по плану, то к выходным будет готово.
    

    Reported by nixorv on 2014-02-27 07:46:27

  10. Oleg Sychev reporter
    Поправил названия и некоторые комменты. За грамотность не беспокойтесь - напишите как
    сделаете, мне куда проще исправить ее в существующем тексте чем написать самому.
    

    Reported by oasychev on 2014-02-27 09:42:50

  11. Oleg Sychev reporter
    Описания нормальные пока, я там раньше уже поправил - например доступным задание становится
    по разному - если создается видимым, либо когда из скрытого делается видимым - и все
    это при условии что срок уже прошел - короче условия посылки сигнала - когда студент
    может увидеть текст задания...
    

    Reported by oasychev on 2014-02-28 10:11:08

  12. Oleg Sychev reporter
    Если вы надолго выпадите из-за больницы из работы, очень хотелось бы получить события
    до этого, т.к. их отсутствие тормозит работу Поцелуйко. Там вроде несложно и немного.
    

    Reported by oasychev on 2014-03-09 10:29:06

  13. Former user Account Deleted
    Сделал небольшой блок, который может послать событие coursemodule_visibility_changed,
    такие же события ловит и сохраняет в БД. Разумеется, используя новый API для событий.
    
    Вобщем-то теперь точно нет смысла использовать устаревший API. Сейчас нужно пересмотреть
    наши эвенты и подправить передаваемую с ними информацию. В Events 2 теперь вместе с
    событием передается куча параметров (http://docs.moodle.org/dev/Event_2#Information_contained_in_events
    также на этой странице написаны рекомендуемые глаголы для именования событий).
    
    Поцелуйко скажу про новые слушатели событий.
    

    Reported by nixorv on 2014-03-12 20:26:53

    <hr> * Attachment: vischanged.zip

  14. Oleg Sychev reporter
    Наверное вы не очень поняли насчет блока. Насколько я понимаю, мы можем описать текущую
    ситуацию как баг в Moodle следующим образом:
    1) если мы редактируем настройки модуля и изменяем только видимость, то сигнал об его
    обновлении испускается
    2) если мы меняем видимость не редактируя настройки модуля, а через редактирование
    курса - то сигнал не испускается, хотя изменения те же самые.
    
    Я прав? Если так, то нужен блок который наглядно показывал бы - был сигнал или нет...
    

    Reported by oasychev on 2014-03-12 20:33:28

  15. Former user Account Deleted
    Не правильно. Сейчас там вообще ничего не посылается. Видимость при изменении через
    настройки модуля можно отследить только из-за того, что выполняется функция update_instance
    (наш код), в которой доступны новые параметры. Так что это не баг, а запрос новой возможности,
    а именно - события.
    
    Вообще можно было бы написать класс события полностью и дать его разработчикам, но
    пока я не в состоянии описать его полностью.
    

    Reported by nixorv on 2014-03-12 21:33:48

  16. Oleg Sychev reporter
    А разве стандартного события "изменились настройки модуля" для update в Moodle нет?
    

    Reported by oasychev on 2014-03-12 22:24:00

  17. Oleg Sychev reporter
    Судя по комментариям в lib/db/events.php есть событие mod_updated. Если оно не испускается
    при изменении видимости через страницу курса, это баг. Проверьте...
    

    Reported by oasychev on 2014-03-13 16:15:51

  18. Former user Account Deleted
    Да, действительно баг. Подправил блок, теперь он ловит все события \core\event\course_module_updated.
    Там наглядно видно, что событие испускается только если зайти в настройки модуля и
    нажать "сохранить".
    
    По нашим событиям. Допустим, будет функция для крона (там вроде function cron() в lib.php
    просто добавить), все равно нужно знать было ли уже отправлено событие или нет. У меня
    только есть мысль о добавлении поля в БД.
    

    Reported by nixorv on 2014-03-13 18:37:48

    <hr> * Attachment: modupdated.zip

  19. Oleg Sychev reporter
    Создал https://tracker.moodle.org/browse/MDL-44627
    

    Reported by oasychev on 2014-03-13 20:17:20

  20. Former user Account Deleted
    Добавил классы для всех событий. Отправляются три: task_selected, assessable_submitted,
    submission_graded.
    
    \mod_poasassignment\event\assessable_submitted extends \core\event\assessable_submitted
    
    Таблица событий немного обновилась: http://docs.moodle.org/dev/Assignment_development#Events.
    

    Reported by nixorv on 2014-03-16 11:54:10

  21. Oleg Sychev reporter
    Ссылку на изменение таблицы лучше было отправить в таком виде:
    http://docs.moodle.org/dev/index.php?title=Assignment_development&diff=44161&oldid=44014
    
    Получить такое можно через вкладку history вверху страницы, там можно выбрать версии
    для сравнения.
    
    Код посмотрю чуть позже, по обстоятельствам загрузки - неделя крайне тяжелая. Но как
    раз в четверг встреча по поводу использования этих событий...
    

    Reported by oasychev on 2014-03-16 18:31:10

  22. Former user Account Deleted
    Завтра меня уже не будет. Хочу сделать instance_(un)available хоть в каком-нибудь виде.
    Так как запонимать, что событие отправлено (#22)?
    
    Если этих двух событий не будет, то Настя может эмулировать их отправку - классы для
    них я написал и вытолкнул.
    

    Reported by nixorv on 2014-03-16 18:35:13

  23. Oleg Sychev reporter
    Придется ввести колонку в основную таблицу модуля (которая poasassignment), содержащую
    статус последнего отправленного события, чтобы ее сравнивать с текущим статусом и если
    есть изменения - отправлять событие и обновлять значение.
    При создании модуля эта колонка задается в "недоступен" если модуль создается скрытым,
    или время показа в момент создания не наступило - событие в момент такого создания
    не нужно; если сразу доступен - значит при создании отправляется событие available
    и колонка выставляется что доступен.
    

    Reported by oasychev on 2014-03-16 18:42:24

  24. Oleg Sychev reporter
    Давайте ка это оперативно дофиксим...
    

    Reported by oasychev on 2015-03-01 22:53:33

  25. Oleg Sychev reporter

    Никита, как у нас обстоит дело с этой проблемой?

  26. Log in to comment