Skip to content

Commit

Permalink
MDL-40044 Roles: Added role_capabilites_updated event and replaced re…
Browse files Browse the repository at this point in the history
…lated add_to_log
  • Loading branch information
Rajesh Taneja committed Aug 9, 2013
1 parent a7524e3 commit 82ddcad
Show file tree
Hide file tree
Showing 5 changed files with 147 additions and 3 deletions.
18 changes: 16 additions & 2 deletions admin/roles/define.php
Expand Up @@ -196,8 +196,22 @@
// Process submission in necessary.
if (optional_param('savechanges', false, PARAM_BOOL) && confirm_sesskey() && $definitiontable->is_submission_valid()) {
$definitiontable->save_changes();
add_to_log(SITEID, 'role', $action, 'admin/roles/define.php?action=view&roleid=' .
$definitiontable->get_role_id(), $definitiontable->get_role_name(), '', $USER->id);
$tableroleid = $definitiontable->get_role_id();
// Trigger event.
$event = \core\event\role_capabilities_updated::create(
array(
'context' => $systemcontext,
'objectid' => $roleid,
'other' => array('name' => $definitiontable->get_role_name())
)
);
$event->set_legacy_logdata(array(SITEID, 'role', $action, 'admin/roles/define.php?action=view&roleid=' . $tableroleid,
$definitiontable->get_role_name(), '', $USER->id));
if (!empty($role)) {
$event->add_record_snapshot('role', $role);
}
$event->trigger();

if ($action === 'add') {
redirect(new moodle_url('/admin/roles/define.php', array('action'=>'view', 'roleid'=>$definitiontable->get_role_id())));
} else {
Expand Down
20 changes: 19 additions & 1 deletion admin/roles/override.php
Expand Up @@ -125,7 +125,25 @@
if (optional_param('savechanges', false, PARAM_BOOL) && confirm_sesskey()) {
$overridestable->save_changes();
$rolename = $overridableroles[$roleid];
add_to_log($course->id, 'role', 'override', 'admin/roles/override.php?contextid='.$context->id.'&roleid='.$roleid, $rolename, '', $USER->id);
// Trigger event.
$event = \core\event\role_capabilities_updated::create(
array(
'context' => $context,
'objectid' => $roleid,
'courseid' => $courseid,
'other' => array('name' => $rolename)
)
);

$event->set_legacy_logdata(
array(
$course->id, 'role', 'override', 'admin/roles/override.php?contextid=' . $context->id . '&roleid=' . $roleid,
$rolename, '', $USER->id
)
);
$event->add_record_snapshot('role', $role);
$event->trigger();

redirect($returnurl);
}

Expand Down
1 change: 1 addition & 0 deletions lang/en/role.php
Expand Up @@ -182,6 +182,7 @@
$string['errorexistsrolename'] = 'Role name already exists';
$string['errorexistsroleshortname'] = 'Role name already exists';
$string['eventroleassigned'] = 'Role assigned';
$string['eventrolecapabilitiesupdated'] = 'Role capabilities updated';
$string['eventroledeleted'] = 'Role deleted';
$string['eventroleunassigned'] = 'Role unassigned';
$string['existingadmins'] = 'Current site administrators';
Expand Down
90 changes: 90 additions & 0 deletions lib/classes/event/role_capabilities_updated.php
@@ -0,0 +1,90 @@
<?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/>.

namespace core\event;

/**
* Role updated event.
*
* @package core_event
* @copyright 2013 Rajesh Taneja <rajesh@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/

class role_capabilities_updated extends base {
/** @var array Legacy log data */
protected $legacylogdata = null;

/**
* Initialise event parameters.
*/
protected function init() {
$this->data['objecttable'] = 'role';
$this->data['crud'] = 'u';
// TODO: MDL-41040 set level.
$this->data['level'] = 50;
}

/**
* Returns localised event name.
*
* @return string
*/
public static function get_name() {
return get_string('eventrolecapabilitiesupdated', 'role');
}

/**
* Returns non-localised event description with id's for admin use only.
*
* @return string
*/
public function get_description() {
return 'Capabilities for role ' . $this->objectid . ' are updated by user ' . $this->userid;
}

/**
* Returns relevant URL.
*
* @return \moodle_url
*/
public function get_url() {
if ($this->contextlevel === CONTEXT_SYSTEM) {
return new \moodle_url('admin/roles/define.php', array('action' => 'view', 'roleid' => $this->objectid));
} else {
return new \moodle_url('/admin/roles/override.php', array('contextid' => $this->contextid, 'roleid' => $this->objectid));
}
}

/**
* Sets legacy log data.
*
* @param array $legacylogdata
* @return void
*/
public function set_legacy_logdata($legacylogdata) {
$this->legacylogdata = $legacylogdata;
}

/**
* Returns array of parameters to be passed to legacy add_to_log() function.
*
* @return null|array
*/
protected function get_legacy_logdata() {
return $this->legacylogdata;
}
}
21 changes: 21 additions & 0 deletions lib/tests/accesslib_test.php
Expand Up @@ -398,6 +398,27 @@ public function test_assign_capability() {
$this->assertTrue($result);
$permission = $DB->get_record('role_capabilities', array('contextid'=>$frontcontext->id, 'roleid'=>$student->id, 'capability'=>'moodle/backup:backupcourse'));
$this->assertEmpty($permission);

// Test event trigger.
$rolecapabilityevent = \core\event\role_capabilities_updated::create(array('context' => $syscontext,
'objectid' => $student->id,
'other' => array('name' => $student->shortname)
));
$expectedlegacylog = array(SITEID, 'role', 'view', 'admin/roles/define.php?action=view&roleid=' . $student->id,
$student->shortname, '', $user->id);
$rolecapabilityevent->set_legacy_logdata($expectedlegacylog);
$rolecapabilityevent->add_record_snapshot('role', $student);

$sink = $this->redirectEvents();
$rolecapabilityevent->trigger();
$events = $sink->get_events();
$sink->close();
$event = array_pop($events);

$this->assertInstanceOf('\core\event\role_capabilities_updated', $event);
$expectedurl = new moodle_url('admin/roles/define.php', array('action' => 'view', 'roleid' => $student->id));
$this->assertEquals($expectedurl, $event->get_url());
$this->assertEventLegacyLogData($expectedlegacylog, $event);
}

/**
Expand Down

0 comments on commit 82ddcad

Please sign in to comment.