}
public function save_changes() {
- global $DB;
+ global $DB, $USER;
if (!$this->roleid) {
// Creating role.
// Updating role.
$DB->update_record('role', $this->role);
+ // Trigger role updated event.
+ \core\event\role_updated::create([
+ 'userid' => $USER->id,
+ 'objectid' => $this->role->id,
+ 'context' => $this->context,
+ 'other' => [
+ 'name' => $this->role->name,
+ 'shortname' => $this->role->shortname,
+ 'description' => $this->role->description,
+ 'archetype' => $this->role->archetype,
+ 'contextlevels' => $this->contextlevels
+ ]
+ ])->trigger();
+
// This will ensure the course contacts cache is purged so name changes get updated in
// the UI. It would be better to do this only when we know that fields affected are
// updated. But thats getting into the weeds of the coursecat cache and role edits
--- /dev/null
+<?php
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
+
+/**
+ * Role updated event.
+ *
+ * @package core
+ * @copyright 2019 Simey Lameze <simey@moodle.com>
+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+namespace core\event;
+
+defined('MOODLE_INTERNAL') || die();
+
+/**
+ * Role updated event class.
+ *
+ * @package core
+ * @since Moodle 3.8
+ * @copyright 2019 Simey Lameze <simey@moodle.com>
+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+class role_updated extends base {
+ /**
+ * Initialise event parameters.
+ */
+ protected function init() {
+ $this->data['objecttable'] = 'role';
+ $this->data['crud'] = 'u';
+ $this->data['edulevel'] = self::LEVEL_OTHER;
+ }
+
+ /**
+ * Returns localised event name.
+ *
+ * @return string
+ */
+ public static function get_name() {
+ return get_string('eventroleupdated', 'role');
+ }
+
+ /**
+ * Returns non-localised event description with id's for admin use only.
+ *
+ * @return string
+ */
+ public function get_description() {
+ return "The user with id '$this->userid' updated the role with id '$this->objectid'.";
+ }
+
+ /**
+ * Returns relevant URL.
+ *
+ * @return \moodle_url
+ */
+ public function get_url() {
+ return new \moodle_url('/admin/roles/define.php', ['action' => 'edit', 'roleid' => $this->objectid]);
+ }
+
+ /**
+ * Returns array of parameters to be passed to legacy add_to_log() function.
+ *
+ * @return array
+ */
+ protected function get_legacy_logdata() {
+ return [SITEID, 'role', 'update', 'admin/roles/manage.php?action=edit&roleid=' . $this->objectid,
+ $this->other['shortname'], ''];
+ }
+
+ /**
+ * Custom validation.
+ *
+ * @throws \coding_exception
+ * @return void
+ */
+ protected function validate_data() {
+ parent::validate_data();
+
+ if (!isset($this->other['shortname'])) {
+ throw new \coding_exception('The \'shortname\' value must be set in other.');
+ }
+ }
+}