diff --git a/lib/externallib.php b/lib/externallib.php index 698a9efc12c..2c32071481d 100644 --- a/lib/externallib.php +++ b/lib/externallib.php @@ -371,9 +371,9 @@ class external_api { */ protected static function get_context_from_params($param) { $levels = context_helper::get_all_levels(); - if (isset($param['contextid'])) { + if (!empty($param['contextid'])) { return context::instance_by_id($param['contextid'], IGNORE_MISSING); - } else if (isset($param['contextlevel']) && isset($param['instanceid'])) { + } else if (!empty($param['contextlevel']) && isset($param['instanceid'])) { $contextlevel = "context_".$param['contextlevel']; if (!array_search($contextlevel, $levels)) { throw new invalid_parameter_exception('Invalid context level = '.$param['contextlevel']); diff --git a/lib/tests/externallib_test.php b/lib/tests/externallib_test.php index f0a2a04cee4..1012a6d6053 100644 --- a/lib/tests/externallib_test.php +++ b/lib/tests/externallib_test.php @@ -147,6 +147,33 @@ class core_externallib_testcase extends advanced_testcase { $fetchedcontext = test_exernal_api::get_context_wrapper(array("contextlevel" => "course", "instanceid" => $course->id)); $this->assertEquals($realcontext, $fetchedcontext); + // Passing empty values. + try { + $fetchedcontext = test_exernal_api::get_context_wrapper(array("contextid" => 0)); + $this->fail('Exception expected from get_context_wrapper()'); + } catch (moodle_exception $e) { + $this->assertInstanceOf('invalid_parameter_exception', $e); + } + + try { + $fetchedcontext = test_exernal_api::get_context_wrapper(array("instanceid" => 0)); + $this->fail('Exception expected from get_context_wrapper()'); + } catch (moodle_exception $e) { + $this->assertInstanceOf('invalid_parameter_exception', $e); + } + + try { + $fetchedcontext = test_exernal_api::get_context_wrapper(array("contextid" => null)); + $this->fail('Exception expected from get_context_wrapper()'); + } catch (moodle_exception $e) { + $this->assertInstanceOf('invalid_parameter_exception', $e); + } + + // Tests for context with instanceid equal to 0 (System context). + $realcontext = context_system::instance(); + $fetchedcontext = test_exernal_api::get_context_wrapper(array("contextlevel" => "system", "instanceid" => 0)); + $this->assertEquals($realcontext, $fetchedcontext); + // Passing wrong level. $this->setExpectedException('invalid_parameter_exception'); $fetchedcontext = test_exernal_api::get_context_wrapper(array("contextlevel" => "random", "instanceid" => $course->id));