From 523698dc4ca8cae90eaf1f95d41ea1fa6b281105 Mon Sep 17 00:00:00 2001 From: Frederic Massart Date: Thu, 1 Aug 2013 17:47:42 +0800 Subject: [PATCH] MDL-39954 assignment_online: Replacing old-style event_trigger --- .../type/online/assignment.class.php | 25 ++-- .../classes/event/assessable_uploaded.php | 116 ++++++++++++++++++ .../type/online/lang/en/assignment_online.php | 2 + 3 files changed, 131 insertions(+), 12 deletions(-) create mode 100644 mod/assignment/type/online/classes/event/assessable_uploaded.php diff --git a/mod/assignment/type/online/assignment.class.php b/mod/assignment/type/online/assignment.class.php index a917d31eb4a..63c436728d1 100644 --- a/mod/assignment/type/online/assignment.class.php +++ b/mod/assignment/type/online/assignment.class.php @@ -201,19 +201,20 @@ class assignment_online extends assignment_base { $this->update_grade($submission); $fs = get_file_storage(); $files = $fs->get_area_files($this->context->id, 'mod_assignment', 'submission', $submission->id); + // Let Moodle know that an assessable content was uploaded (eg for plagiarism detection) - $eventdata = new stdClass(); - $eventdata->modulename = 'assignment'; - $eventdata->name = 'update_submission'; - $eventdata->cmid = $this->cm->id; - $eventdata->itemid = $update->id; - $eventdata->courseid = $this->course->id; - $eventdata->userid = $USER->id; - $eventdata->content = trim(format_text($update->data1, $update->data2)); - if ($files) { - $eventdata->pathnamehashes = array_keys($files); - } - events_trigger('assessable_content_uploaded', $eventdata); + $params = array( + 'context' => $this->context, + 'objectid' => $submission->id, + 'other' => array( + 'content' => trim(format_text($update->data1, $update->data2)), + 'pathnamehashes' => array_keys($files), + 'triggeredfrom' => 'update_submission' + ) + ); + $event = \assignment_online\event\assessable_uploaded::create($params); + $event->trigger(); + return $submission; } diff --git a/mod/assignment/type/online/classes/event/assessable_uploaded.php b/mod/assignment/type/online/classes/event/assessable_uploaded.php new file mode 100644 index 00000000000..7712f4bf382 --- /dev/null +++ b/mod/assignment/type/online/classes/event/assessable_uploaded.php @@ -0,0 +1,116 @@ +. + +/** + * assignment_online assessable uploaded event. + * + * @package assignment_online + * @copyright 2013 Frédéric Massart + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace assignment_online\event; + +defined('MOODLE_INTERNAL') || die(); + +/** + * assignment_online assessable uploaded event class. + * + * @package assignment_online + * @copyright 2013 Frédéric Massart + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class assessable_uploaded extends \core\event\assessable_uploaded { + + /** + * Returns localised description of what happened. + * + * @return \lang_string + */ + public function get_description() { + return new \lang_string('event_assessable_uploaded_desc', 'assignment_online', $this->get_data()); + } + + /** + * Legacy event data if get_legacy_eventname() is not empty. + * + * @return stdClass + */ + protected function get_legacy_eventdata() { + $eventdata = new \stdClass(); + $eventdata->modulename = 'assignment'; + $eventdata->name = $this->other['triggeredfrom']; + $eventdata->cmid = $this->context->instanceid; + $eventdata->itemid = $this->objectid; + $eventdata->courseid = $this->courseid; + $eventdata->userid = $this->userid; + $eventdata->content = $this->other['content']; + if ($this->other['pathnamehashes']) { + $eventdata->pathnamehashes = $this->other['pathnamehashes']; + } + return $eventdata; + } + + /** + * Return the legacy event name. + * + * @return string + */ + protected function get_legacy_eventname() { + return 'assessable_content_uploaded'; + } + + /** + * Return localised event name. + * + * @return \lang_string + */ + public static function get_name() { + return new \lang_string('event_assessable_uploaded', 'assignment_online'); + } + + /** + * Get URL related to the action. + * + * @return \moodle_url + */ + public function get_url() { + return new \moodle_url('/mod/assignment/view.php', array('id' => $this->context->instanceid)); + } + + /** + * Init method. + * + * @return void + */ + protected function init() { + parent::init(); + $this->data['objecttable'] = 'assignment_submissions'; + } + + /** + * Custom validation + * + * @throws coding_exception + * @return void + */ + protected function validate_data() { + parent::validate_data(); + if (!isset($this->other['triggeredfrom'])) { + throw new coding_exception('triggeredfrom must be set in $other'); + } + } +} diff --git a/mod/assignment/type/online/lang/en/assignment_online.php b/mod/assignment/type/online/lang/en/assignment_online.php index 33cca313f75..6b4da2b75bf 100644 --- a/mod/assignment/type/online/lang/en/assignment_online.php +++ b/mod/assignment/type/online/lang/en/assignment_online.php @@ -23,4 +23,6 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ +$string['event_assessable_uploaded'] = 'An online text has been uploaded.'; +$string['event_assessable_uploaded_desc'] = 'User {$a->userid} has saved an online text in submission {$a->objectid}.'; $string['pluginname'] = 'Online';