MDL-39846 simplify context parameter when creating new evetns
This commit is contained in:
+14
-27
@@ -147,55 +147,42 @@ abstract class base implements \IteratorAggregate {
|
||||
$event->data['relateduserid'] = isset($data['relateduserid']) ? $data['relateduserid'] : null;
|
||||
|
||||
if (isset($event->context)) {
|
||||
if (isset($data['context']) and $event->context->id != $data['context']->id) {
|
||||
throw new \coding_exception('Given context does not match expected context');
|
||||
if (isset($data['context'])) {
|
||||
debugging('Context was already set in init() method, ignoring context parameter', DEBUG_DEVELOPER);
|
||||
}
|
||||
$event->data['contextid'] = $event->context->id;
|
||||
$event->data['contextlevel'] = $event->context->contextlevel;
|
||||
$event->data['contextinstanceid'] = $event->context->instanceid;
|
||||
|
||||
} else if (!empty($data['context'])) {
|
||||
$event->context = $data['context'];
|
||||
if (isset($event->data['contextlevel']) and $event->data['contextlevel'] != $event->context->contextlevel) {
|
||||
throw new \coding_exception('Context does not match expected context level');
|
||||
}
|
||||
$event->data['contextid'] = $event->context->id;
|
||||
$event->data['contextlevel'] = $event->context->contextlevel;
|
||||
$event->data['contextinstanceid'] = $event->context->instanceid;
|
||||
|
||||
} else if (!empty($data['contextid'])) {
|
||||
$event->context = null;
|
||||
if (isset($data['contextlevel']) and isset($data['contextinstanceid'])) {
|
||||
// Useful especially when deleting contexts because we can nto fetch it from DB anymore.
|
||||
$event->data['contextid'] = $data['contextid'];
|
||||
$event->data['contextlevel'] = $data['contextlevel'];
|
||||
$event->data['contextinstanceid'] = $data['contextinstanceid'];
|
||||
$event->context = \context::instance_by_id($data['contextid'], IGNORE_MISSING);
|
||||
} else {
|
||||
$event->context = \context::instance_by_id($data['contextid'], MUST_EXIST);
|
||||
$event->data['contextid'] = $event->context->id;
|
||||
$event->data['contextlevel'] = $event->context->contextlevel;
|
||||
$event->data['contextinstanceid'] = $event->context->instanceid;
|
||||
}
|
||||
$event->context = \context::instance_by_id($data['contextid'], MUST_EXIST);
|
||||
|
||||
} else {
|
||||
throw new \coding_exception('context (or contextid) is a required event property, system context may be hardcoded in init() method.');
|
||||
}
|
||||
|
||||
if (isset($event->data['contextlevel']) and $event->data['contextlevel'] != $event->context->contextlevel) {
|
||||
throw new \coding_exception('Context does not match expected context level');
|
||||
}
|
||||
$event->data['contextid'] = $event->context->id;
|
||||
$event->data['contextlevel'] = $event->context->contextlevel;
|
||||
$event->data['contextinstanceid'] = $event->context->instanceid;
|
||||
|
||||
if (!isset($event->data['courseid'])) {
|
||||
if ($event->context and $coursecontext = $event->context->get_course_context(false)) {
|
||||
if ($coursecontext = $event->context->get_course_context(false)) {
|
||||
$event->data['courseid'] = $coursecontext->id;
|
||||
} else {
|
||||
$event->data['courseid'] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (!array_key_exists('relateduserid', $data) and $event->context and $event->context->contextlevel == CONTEXT_USER) {
|
||||
if (!array_key_exists('relateduserid', $data) and $event->context->contextlevel == CONTEXT_USER) {
|
||||
$event->data['relateduserid'] = $event->context->instanceid;
|
||||
}
|
||||
|
||||
// Warn developers if they do something wrong.
|
||||
if (debugging('', DEBUG_DEVELOPER)) { // This should be replaced by new $CFG->slowdebug flag if introduced.
|
||||
static $automatickeys = array('eventname', 'component', 'action', 'object', 'timecreated');
|
||||
static $automatickeys = array('eventname', 'component', 'action', 'object', 'contextlevel', 'contextinstanceid', 'timecreated');
|
||||
static $initkeys = array('crud', 'level', 'objecttable');
|
||||
|
||||
foreach ($data as $key => $ignored) {
|
||||
|
||||
@@ -76,9 +76,6 @@ class core_event_testcase extends advanced_testcase {
|
||||
|
||||
$event2 = \core_tests\event\unittest_executed::create(array('courseid'=>1, 'contextid'=>$system->id, 'objectid'=>5, 'other'=>array('sample'=>null, 'xx'=>10)));
|
||||
$this->assertSame($event->get_context(), $event2->get_context());
|
||||
|
||||
$event3 = \core_tests\event\unittest_executed::create(array('courseid'=>1, 'contextid'=>999, 'contextlevel'=>CONTEXT_COURSE, 'contextinstanceid'=>4554645, 'objectid'=>5, 'other'=>array('sample'=>null, 'xx'=>10)));
|
||||
$this->assertSame(false, $event3->get_context());
|
||||
}
|
||||
|
||||
public function test_observers_parsing() {
|
||||
@@ -632,13 +629,9 @@ class core_event_testcase extends advanced_testcase {
|
||||
}
|
||||
|
||||
$event = \core_tests\event\problematic_event3::create(array());
|
||||
$this->assertDebuggingNotCalled();
|
||||
$event = \core_tests\event\problematic_event3::create(array('context'=>\context_system::instance()));
|
||||
try {
|
||||
$event = \core_tests\event\problematic_event3::create(array('context'=>\context_course::instance(1)));
|
||||
$this->fail('Exception expected when $data contains matching or no context if hardcoded in init');
|
||||
} catch (\moodle_exception $e) {
|
||||
$this->assertInstanceOf('\coding_exception', $e);
|
||||
}
|
||||
$this->assertDebuggingCalled();
|
||||
|
||||
$event = \core_tests\event\problematic_event4::create(array('other'=>1));
|
||||
$this->assertDebuggingNotCalled();
|
||||
|
||||
Reference in New Issue
Block a user