From 2f3b70985956a987232178123a52850c153f9484 Mon Sep 17 00:00:00 2001 From: Stephen Bourget Date: Wed, 7 Feb 2018 12:34:24 -0500 Subject: [PATCH] MDL-45837 Grades: Add events for scales --- lang/en/grades.php | 3 + lib/classes/event/scale_created.php | 93 +++++++++++++++++++++++++++++ lib/classes/event/scale_deleted.php | 81 +++++++++++++++++++++++++ lib/classes/event/scale_updated.php | 93 +++++++++++++++++++++++++++++ lib/grade/grade_scale.php | 60 ++++++++++++++++++- 5 files changed, 327 insertions(+), 3 deletions(-) create mode 100644 lib/classes/event/scale_created.php create mode 100644 lib/classes/event/scale_deleted.php create mode 100644 lib/classes/event/scale_updated.php diff --git a/lang/en/grades.php b/lang/en/grades.php index b166512456c..a8df6cd77df 100644 --- a/lang/en/grades.php +++ b/lang/en/grades.php @@ -195,6 +195,9 @@ $string['errorupdatinggradecategoryaggregation'] = 'Error updating the aggregati $string['errorupdatinggradeitemaggregationcoef'] = 'Error updating the aggregation coefficient (weight or extra credit) of grade item ID {$a->id}'; $string['eventgradedeleted'] = 'Grade deleted'; $string['eventgradeviewed'] = 'Grades were viewed in the gradebook'; +$string['eventscalecreated'] = 'Scale created'; +$string['eventscaledeleted'] = 'Scale deleted'; +$string['eventscaleupdated'] = 'Scale updated'; $string['eventusergraded'] = 'User graded'; $string['excluded'] = 'Excluded'; $string['excluded_help'] = 'If ticked, the grade will not be included in any aggregation.'; diff --git a/lib/classes/event/scale_created.php b/lib/classes/event/scale_created.php new file mode 100644 index 00000000000..9156184b95e --- /dev/null +++ b/lib/classes/event/scale_created.php @@ -0,0 +1,93 @@ +. + +/** + * Scale created event. + * + * @package core + * @copyright 2017 Stephen Bourget + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace core\event; + +defined('MOODLE_INTERNAL') || die(); + +/** + * Scale created event class. + * + * @package core + * @since Moodle 3.5 + * @copyright 2017 Stephen Bourget + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class scale_created extends base { + + /** + * Init method. + * + * @return void + */ + protected function init() { + $this->data['objecttable'] = 'scale'; + $this->data['crud'] = 'c'; + $this->data['edulevel'] = self::LEVEL_OTHER; + } + + /** + * Return localised event name. + * + * @return string + */ + public static function get_name() { + return get_string('eventscalecreated', 'core_grades'); + } + + /** + * Returns description of what happened. + * + * @return string + */ + public function get_description() { + if ($this->courseid) { + return "The user with id '$this->userid' created the custom scale with id '$this->objectid'". + " from the course in the id '".$this->courseid."'."; + } else { + return "The user with id '$this->userid' created the standard scale with id '$this->objectid'."; + } + } + + /** + * Returns relevant URL. + * @return \moodle_url + */ + public function get_url() { + $url = new \moodle_url('/grade/edit/scale/index.php'); + if ($this->courseid) { + $url->param('id', $this->courseid); + } + return $url; + } + + /** + * Used for mapping events on restore + * @return array + */ + public static function get_objectid_mapping() { + return array('db' => 'scale', 'restore' => 'scale'); + } + +} diff --git a/lib/classes/event/scale_deleted.php b/lib/classes/event/scale_deleted.php new file mode 100644 index 00000000000..d14acf75215 --- /dev/null +++ b/lib/classes/event/scale_deleted.php @@ -0,0 +1,81 @@ +. + +/** + * Scale deleted event. + * + * @package core + * @copyright 2017 Stephen Bourget + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace core\event; + +defined('MOODLE_INTERNAL') || die(); + +/** + * Scale deleted event class. + * + * @package core + * @since Moodle 3.5 + * @copyright 2017 Stephen Bourget + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class scale_deleted extends base { + + /** + * Init method. + * + * @return void + */ + protected function init() { + $this->data['objecttable'] = 'scale'; + $this->data['crud'] = 'd'; + $this->data['edulevel'] = self::LEVEL_OTHER; + } + + /** + * Return localised event name. + * + * @return string + */ + public static function get_name() { + return get_string('eventscaledeleted', 'core_grades'); + } + + /** + * Returns description of what happened. + * + * @return string + */ + public function get_description() { + if ($this->courseid) { + return "The user with id '$this->userid' deleted the custom scale with id '$this->objectid'". + " from the course with the id '".$this->courseid."'."; + } else { + return "The user with id '$this->userid' deleted the standard scale with id '$this->objectid'."; + } + } + + /** + * Used for mapping events on restore + * @return array + */ + public static function get_objectid_mapping() { + return array('db' => 'scale', 'restore' => 'scale'); + } + +} diff --git a/lib/classes/event/scale_updated.php b/lib/classes/event/scale_updated.php new file mode 100644 index 00000000000..e363ea2d8a4 --- /dev/null +++ b/lib/classes/event/scale_updated.php @@ -0,0 +1,93 @@ +. + +/** + * Scale updated event. + * + * @package core + * @copyright 2017 Stephen Bourget + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace core\event; + +defined('MOODLE_INTERNAL') || die(); + +/** + * Scale added event class. + * + * @package core + * @since Moodle 3.5 + * @copyright 2017 Stephen Bourget + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class scale_updated extends base { + + /** + * Init method. + * + * @return void + */ + protected function init() { + $this->data['objecttable'] = 'scale'; + $this->data['crud'] = 'u'; + $this->data['edulevel'] = self::LEVEL_OTHER; + } + + /** + * Return localised event name. + * + * @return string + */ + public static function get_name() { + return get_string('eventscaleupdated', 'core_grades'); + } + + /** + * Returns description of what happened. + * + * @return string + */ + public function get_description() { + if ($this->courseid) { + return "The user with id '$this->userid' updated the custom scale with id '$this->objectid'". + " from the course in the id '".$this->courseid."'."; + } else { + return "The user with id '$this->userid' updated the standard scale with id '$this->objectid'."; + } + } + + /** + * Returns relevant URL. + * @return \moodle_url + */ + public function get_url() { + $url = new \moodle_url('/grade/edit/scale/index.php'); + if ($this->courseid) { + $url->param('id', $this->courseid); + } + return $url; + } + + /** + * Used for mapping events on restore + * @return array + */ + public static function get_objectid_mapping() { + return array('db' => 'scale', 'restore' => 'scale'); + } + +} diff --git a/lib/grade/grade_scale.php b/lib/grade/grade_scale.php index 450fa67e0e4..96850088082 100644 --- a/lib/grade/grade_scale.php +++ b/lib/grade/grade_scale.php @@ -119,7 +119,26 @@ class grade_scale extends grade_object { public function insert($source=null) { $this->timecreated = time(); $this->timemodified = time(); - return parent::insert($source); + + $result = parent::insert($source); + if ($result) { + // Trigger the scale created event. + if (!empty($this->standard)) { + $eventcontext = context_system::instance(); + } else { + if ((!empty($this->courseid)) && ($this->courseid != SITEID)) { + $eventcontext = context_course::instance($this->courseid); + } else { + $eventcontext = context_system::instance(); + } + } + $event = \core\event\scale_created::create(array( + 'objectid' => $result, + 'context' => $eventcontext + )); + $event->trigger(); + } + return $result; } /** @@ -130,17 +149,52 @@ class grade_scale extends grade_object { */ public function update($source=null) { $this->timemodified = time(); - return parent::update($source); + + $result = parent::update($source); + if ($result) { + // Trigger the scale updated event. + if (!empty($this->standard)) { + $eventcontext = context_system::instance(); + } else { + if ((!empty($this->courseid)) && ($this->courseid != SITEID)) { + $eventcontext = context_course::instance($this->courseid); + } else { + $eventcontext = context_system::instance(); + } + } + $event = \core\event\scale_updated::create(array( + 'objectid' => $this->id, + 'context' => $eventcontext + )); + $event->trigger(); + } + return $result; } /** - * Deletes this outcome from the database. + * Deletes this scale from the database. * * @param string $source from where was the object deleted (mod/forum, manual, etc.) * @return bool success */ public function delete($source=null) { global $DB; + + // Trigger the scale deleted event. + if (!empty($this->standard)) { + $eventcontext = context_system::instance(); + } else { + if ((!empty($this->courseid)) && ($this->courseid != SITEID)) { + $eventcontext = context_course::instance($this->courseid); + } else { + $eventcontext = context_system::instance(); + } + } + $event = \core\event\scale_deleted::create(array( + 'objectid' => $this->id, + 'context' => $eventcontext + )); + $event->trigger(); if (parent::delete($source)) { $context = context_system::instance(); $fs = get_file_storage();