$string['errorexistsroleshortname'] = 'Role name already exists';
$string['errorroleshortnametoolong'] = 'The short name must not exceed 100 characters';
$string['eventcapabilityassigned'] = 'Capability assigned';
+$string['eventcapabilityunassigned'] = 'Capability unassigned';
$string['eventroleallowassignupdated'] = 'Allow role assignment';
$string['eventroleallowoverrideupdated'] = 'Allow role override';
$string['eventroleallowswitchupdated'] = 'Allow role switch';
* @return boolean true or exception
*/
function unassign_capability($capability, $roleid, $contextid = null) {
- global $DB;
+ global $DB, $USER;
// Capability must exist.
if (!$capinfo = get_capability_info($capability)) {
$DB->delete_records('role_capabilities', array('capability'=>$capability, 'roleid'=>$roleid));
}
+ // Trigger capability_assigned event.
+ \core\event\capability_unassigned::create([
+ 'userid' => $USER->id,
+ 'context' => $context ?? context_system::instance(),
+ 'objectid' => $roleid,
+ 'other' => [
+ 'capability' => $capability,
+ ]
+ ])->trigger();
+
// Reset any cache of this role, including MUC.
accesslib_clear_role_cache($roleid);
--- /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/>.
+
+/**
+ * Capability unassigned event.
+ *
+ * @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
+ */
+
+namespace core\event;
+
+defined('MOODLE_INTERNAL') || die();
+
+/**
+ * Capability unassigned 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 capability_unassigned extends base {
+ /**
+ * Initialise event parameters.
+ */
+ protected function init() {
+ $this->data['objecttable'] = 'role_capabilities';
+ $this->data['crud'] = 'u';
+ $this->data['edulevel'] = self::LEVEL_OTHER;
+ }
+
+ /**
+ * Returns localised event name.
+ *
+ * @return string
+ */
+ public static function get_name() {
+ return get_string('eventcapabilityunassigned', 'role');
+ }
+
+ /**
+ * Returns non-localised event description with id's for admin use only.
+ *
+ * @return string
+ */
+ public function get_description() {
+ $capability = $this->other['capability'];
+
+ return "The user id id '$this->userid' has unassigned the '$capability' capability for role '$this->objectid'";
+ }
+
+ /**
+ * Returns relevant URL.
+ *
+ * @return \moodle_url
+ */
+ public function get_url() {
+ if ($this->contextlevel == CONTEXT_SYSTEM) {
+ return new \moodle_url('/admin/roles/define.php', ['action' => 'view', 'roleid' => $this->objectid]);
+ } else {
+ return new \moodle_url('/admin/roles/override.php', ['contextid' => $this->contextid,
+ 'roleid' => $this->objectid]);
+ }
+ }
+}