MDL-40697 core: added grade_deleted event
[moodle.git] / lib / classes / event / grade_deleted.php
1 <?php
2 // This file is part of Moodle - http://moodle.org/
3 //
4 // Moodle is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
8 //
9 // Moodle is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 // GNU General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License
15 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
17 /**
18  * Grade deleted event.
19  *
20  * @package    core
21  * @copyright  2014 Mark Nelson <markn@moodle.com>
22  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23  */
25 namespace core\event;
27 defined('MOODLE_INTERNAL') || die();
29 /**
30  * Grade deleted event class.
31  *
32  * @property-read array $other {
33  *      Extra information about the event.
34  *
35  *      - int itemid: grade item id.
36  *      - bool overridden: is this a grade override?
37  *      - float finalgrade: (optional) the final grade value.
38  * }
39  *
40  * @package    core
41  * @since      Moodle 2.8
42  * @copyright  2014 Mark Nelson <markn@moodle.com>
43  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
44  */
45 class grade_deleted extends base {
47     /** @var \grade_grade $grade */
48     protected $grade;
50     /**
51      * Init method.
52      *
53      * @return void
54      */
55     protected function init() {
56         $this->data['objecttable'] = 'grade_grades';
57         $this->data['crud'] = 'd';
58         $this->data['edulevel'] = self::LEVEL_TEACHING;
59     }
61     /**
62      * Utility method to create new event.
63      *
64      * @param \grade_grade $grade
65      * @return user_graded
66      */
67     public static function create_from_grade(\grade_grade $grade) {
68         $event = self::create(array(
69             'objectid'      => $grade->id,
70             'context'       => \context_course::instance($grade->grade_item->courseid),
71             'relateduserid' => $grade->userid,
72             'other'         => array(
73                 'itemid'     => $grade->itemid,
74                 'overridden' => !empty($grade->overridden),
75                 'finalgrade' => $grade->finalgrade),
76         ));
77         $event->grade = $grade;
78         return $event;
79     }
81     /**
82      * Get grade object.
83      *
84      * @throws \coding_exception
85      * @return \grade_grade
86      */
87     public function get_grade() {
88         if ($this->is_restored()) {
89             throw new \coding_exception('get_grade() is intended for event observers only');
90         }
91         return $this->grade;
92     }
94     /**
95      * Return localised event name.
96      *
97      * @return string
98      */
99     public static function get_name() {
100         return get_string('eventgradedeleted', 'core_grades');
101     }
103     /**
104      * Returns description of what happened.
105      *
106      * @return string
107      */
108     public function get_description() {
109         return "The user with id '$this->userid' deleted the grade with id '$this->objectid' for the user with " .
110             "id '$this->relateduserid' for the grade item with id '{$this->other['itemid']}'.";
111     }
113     /**
114      * Custom validation.
115      *
116      * @throws \coding_exception when validation does not pass.
117      * @return void
118      */
119     protected function validate_data() {
120         parent::validate_data();
122         if (!isset($this->relateduserid)) {
123             throw new \coding_exception('The \'relateduserid\' must be set.');
124         }
126         if (!isset($this->other['itemid'])) {
127             throw new \coding_exception('The \'itemid\' value must be set in other.');
128         }
130         if (!isset($this->other['overridden'])) {
131             throw new \coding_exception('The \'overridden\' value must be set in other.');
132         }
133     }