MDL-39846 simplify context parameter when creating new evetns

This commit is contained in:
Petr Škoda
2013-07-19 08:43:30 +02:00
parent fddd1018f6
commit 097011c450
2 changed files with 16 additions and 36 deletions
+14 -27
View File
@@ -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) {
+2 -9
View File
@@ -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();