From 097011c45046104e71e97f9c2cc2a9ff647a3522 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20S=CC=8Ckoda?= Date: Mon, 15 Jul 2013 12:25:18 +0200 Subject: [PATCH] MDL-39846 simplify context parameter when creating new evetns --- lib/classes/event/base.php | 41 +++++++++++++------------------------- lib/tests/event_test.php | 11 ++-------- 2 files changed, 16 insertions(+), 36 deletions(-) diff --git a/lib/classes/event/base.php b/lib/classes/event/base.php index 0f4dabd95db..65a23cbd89a 100644 --- a/lib/classes/event/base.php +++ b/lib/classes/event/base.php @@ -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) { diff --git a/lib/tests/event_test.php b/lib/tests/event_test.php index 8a211d59ea2..2abc8bbb816 100644 --- a/lib/tests/event_test.php +++ b/lib/tests/event_test.php @@ -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();