From aa8af6fcfc11d47fe3f8e25338c621e8bc778f4b Mon Sep 17 00:00:00 2001 From: =?utf8?q?David=20Mudr=C3=A1k?= Date: Tue, 12 Mar 2019 09:09:26 +0100 Subject: [PATCH] MDL-61667 analytics: Fix checking that a given model does not exist The original implementation did not work well for checking that the given model does NOT exist. If no record was found in the analytics_models table, the code execution continued and it reached the moment when indicators were checked. If no indicators were provided, the call ended up with error 'array_keys() expects parameter 1 to be array, boolean given' (because indicators were set to false). --- analytics/classes/model.php | 4 ++++ analytics/tests/manager_test.php | 1 + analytics/tests/model_test.php | 6 ++++++ 3 files changed, 11 insertions(+) diff --git a/analytics/classes/model.php b/analytics/classes/model.php index a96e6a6692f..5583535dded 100644 --- a/analytics/classes/model.php +++ b/analytics/classes/model.php @@ -407,6 +407,10 @@ class model { $existingmodels = $DB->get_records('analytics_models', array('target' => $target->get_id())); + if (!$existingmodels) { + return false; + } + if (!$indicators && $existingmodels) { return true; } diff --git a/analytics/tests/manager_test.php b/analytics/tests/manager_test.php index ab5708ac437..703446112e0 100644 --- a/analytics/tests/manager_test.php +++ b/analytics/tests/manager_test.php @@ -281,6 +281,7 @@ class analytics_manager_testcase extends advanced_testcase { // Check that no such model exists yet. $target = \core_analytics\manager::get_target('test_target_course_level_shortname'); $this->assertEquals(0, $DB->count_records('analytics_models', ['target' => $target->get_id()])); + $this->assertFalse(\core_analytics\model::exists($target)); // Check that the model is created. $created = \core_analytics\manager::create_declared_model($declaration); diff --git a/analytics/tests/model_test.php b/analytics/tests/model_test.php index 8eaac08e786..0e3385ad8ff 100644 --- a/analytics/tests/model_test.php +++ b/analytics/tests/model_test.php @@ -274,6 +274,12 @@ class analytics_model_testcase extends advanced_testcase { $target = \core_analytics\manager::get_target('\core\analytics\target\no_teaching'); $this->assertTrue(\core_analytics\model::exists($target)); + + foreach (\core_analytics\manager::get_all_models() as $model) { + $model->delete(); + } + + $this->assertFalse(\core_analytics\model::exists($target)); } /** -- 2.43.0