From 4f657eeed91691348f9d17a03cc2469b5aa2796e Mon Sep 17 00:00:00 2001 From: Ankit Agarwal Date: Thu, 30 Nov 2017 13:25:42 +0530 Subject: [PATCH 1/2] MDL-60861 analytics: Enabling a model requires timesplitting --- analytics/classes/model.php | 4 ++++ analytics/tests/model_test.php | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/analytics/classes/model.php b/analytics/classes/model.php index d8816458511..0bee65002ca 100644 --- a/analytics/classes/model.php +++ b/analytics/classes/model.php @@ -1013,6 +1013,10 @@ class model { if (!$this->is_static()) { $this->model->trained = 0; } + } else if (empty($this->model->timesplitting)) { + // A valid timesplitting method needs to be supplied before a model can be enabled. + throw new \moodle_exception('invalidtimesplitting', 'analytics', '', $this->model->id); + } // Purge pages with insights as this may change things. diff --git a/analytics/tests/model_test.php b/analytics/tests/model_test.php index 2685b64bbcb..d5d0153e9ac 100644 --- a/analytics/tests/model_test.php +++ b/analytics/tests/model_test.php @@ -226,7 +226,7 @@ class analytics_model_testcase extends advanced_testcase { $this->model->mark_as_trained(); $this->assertEquals($originaluniqueid, $this->model->get_unique_id()); - $this->model->enable(); + $this->model->enable('\core\analytics\time_splitting\deciles'); $this->assertEquals($originaluniqueid, $this->model->get_unique_id()); // Wait 1 sec so the timestamp changes. From f9e09bd96381682ae540a4be026c0c0fca9cc857 Mon Sep 17 00:00:00 2001 From: Ankit Agarwal Date: Thu, 30 Nov 2017 13:50:14 +0530 Subject: [PATCH 2/2] MDL-60861 analytics: Remove enable menu, if no timesplitting method --- .../analytics/classes/output/models_list.php | 30 +++++++++++-------- .../tool/analytics/lang/en/tool_analytics.php | 2 ++ .../analytics/templates/models_list.mustache | 3 ++ 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/admin/tool/analytics/classes/output/models_list.php b/admin/tool/analytics/classes/output/models_list.php index 0e8d4e8d61d..cbd0a60770d 100644 --- a/admin/tool/analytics/classes/output/models_list.php +++ b/admin/tool/analytics/classes/output/models_list.php @@ -119,6 +119,9 @@ class models_list implements \renderable, \templatable { debugging("The time splitting method '{$modeldata->timesplitting}' should include a '{$identifier}_help' string to describe its purpose.", DEBUG_DEVELOPER); } + } else { + $helpicon = new \help_icon('timesplittingnotdefined', 'tool_analytics'); + $modeldata->timesplittinghelp = $helpicon->export_for_template($output); } // Has this model generated predictions?. @@ -207,19 +210,22 @@ class models_list implements \renderable, \templatable { } // Enable / disable. - if ($model->is_enabled()) { - $action = 'disable'; - $text = get_string('disable'); - $icontype = 't/block'; - } else { - $action = 'enable'; - $text = get_string('enable'); - $icontype = 'i/checked'; + if ($model->is_enabled() || !empty($modeldata->timesplitting)) { + // If there is no timesplitting method set, the model can not be enabled. + if ($model->is_enabled()) { + $action = 'disable'; + $text = get_string('disable'); + $icontype = 't/block'; + } else { + $action = 'enable'; + $text = get_string('enable'); + $icontype = 'i/checked'; + } + $urlparams['action'] = $action; + $url = new \moodle_url('model.php', $urlparams); + $icon = new \action_menu_link_secondary($url, new \pix_icon($icontype, $text), $text); + $actionsmenu->add($icon); } - $urlparams['action'] = $action; - $url = new \moodle_url('model.php', $urlparams); - $icon = new \action_menu_link_secondary($url, new \pix_icon($icontype, $text), $text); - $actionsmenu->add($icon); // Export training data. if (!$model->is_static() && $model->is_trained()) { diff --git a/admin/tool/analytics/lang/en/tool_analytics.php b/admin/tool/analytics/lang/en/tool_analytics.php index f5c1014e8a3..157eee64df9 100644 --- a/admin/tool/analytics/lang/en/tool_analytics.php +++ b/admin/tool/analytics/lang/en/tool_analytics.php @@ -83,6 +83,8 @@ $string['previouspage'] = 'Previous page'; $string['samestartdate'] = 'Current start date is good'; $string['sameenddate'] = 'Current end date is good'; $string['target'] = 'Target'; +$string['timesplittingnotdefined'] = 'Time splitting is not defined.'; +$string['timesplittingnotdefined_help'] = 'You need to select a time-splitting method before enabling the model.'; $string['trainandpredictmodel'] = 'Training model and calculating predictions'; $string['trainingprocessfinished'] = 'Training process finished'; $string['trainingresults'] = 'Training results'; diff --git a/admin/tool/analytics/templates/models_list.mustache b/admin/tool/analytics/templates/models_list.mustache index 8eb6211a138..efdc4cabab5 100644 --- a/admin/tool/analytics/templates/models_list.mustache +++ b/admin/tool/analytics/templates/models_list.mustache @@ -160,6 +160,9 @@ {{/timesplitting}} {{^timesplitting}} {{#str}}notdefined, tool_analytics{{/str}} + {{#timesplittinghelp}} + {{>core/help_icon}} + {{/timesplittinghelp}} {{/timesplitting}}