From 3a396286b1ffad2c1726001cead1ec45e6585015 Mon Sep 17 00:00:00 2001 From: David Monllao Date: Tue, 20 Jun 2017 09:16:22 +0200 Subject: [PATCH] MDL-57791 analytics: Always absolute full class names Some extra tiny changes as well. --- admin/settings/analytics.php | 2 +- admin/tool/models/classes/output/renderer.php | 6 ++--- analytics/classes/calculable.php | 2 +- analytics/classes/local/indicator/binary.php | 2 +- .../community_of_inquiry_activity.php | 2 +- .../classes/local/indicator/discrete.php | 2 +- analytics/classes/local/indicator/linear.php | 2 +- .../classes/local/time_splitting/base.php | 2 +- analytics/classes/manager.php | 5 ++++- analytics/classes/model.php | 22 ++++++++++++++++++- 10 files changed, 35 insertions(+), 12 deletions(-) diff --git a/admin/settings/analytics.php b/admin/settings/analytics.php index f8aa88dfc49..bc615702a4f 100644 --- a/admin/settings/analytics.php +++ b/admin/settings/analytics.php @@ -65,7 +65,7 @@ if ($hassiteconfig) { $timesplittingoptions = array(); $timesplittingdefaults = array('\\core_analytics\\local\\time_splitting\\quarters_accum', - '\\core_analytics\\local\\time_splitting\\quarters'); + '\\core_analytics\\local\\time_splitting\\quarters', '\\core_analytics\\local\\time_splitting\\no_splitting'); foreach ($alltimesplittings as $key => $timesplitting) { $timesplittingoptions[$key] = $timesplitting->get_name(); } diff --git a/admin/tool/models/classes/output/renderer.php b/admin/tool/models/classes/output/renderer.php index e966dd7f43c..6f1455b66ce 100644 --- a/admin/tool/models/classes/output/renderer.php +++ b/admin/tool/models/classes/output/renderer.php @@ -42,11 +42,11 @@ class renderer extends plugin_renderer_base { /** * Defer to template. * - * @param templatable $templatable + * @param \tool_models\output\models_list $templatable * @return string HTML */ - protected function render_models_list(templatable $templatable) { - $data = $templatable->export_for_template($this); + protected function render_models_list(\tool_models\output\models_list $modelslist) { + $data = $modelslist->export_for_template($this); return parent::render_from_template('tool_models/models_list', $data); } diff --git a/analytics/classes/calculable.php b/analytics/classes/calculable.php index ed8170170e3..ca6c68d9139 100644 --- a/analytics/classes/calculable.php +++ b/analytics/classes/calculable.php @@ -75,7 +75,7 @@ abstract class calculable { * @return string */ public static function get_name() { - return get_called_class(); + return '\\' . get_called_class(); } /** diff --git a/analytics/classes/local/indicator/binary.php b/analytics/classes/local/indicator/binary.php index b642475d901..7f4c3460cc3 100644 --- a/analytics/classes/local/indicator/binary.php +++ b/analytics/classes/local/indicator/binary.php @@ -91,7 +91,7 @@ abstract class binary extends discrete { */ public static function get_feature_headers() { // Just 1 single feature obtained from the calculated value. - return array(get_called_class()); + return array('\\' . get_called_class()); } /** diff --git a/analytics/classes/local/indicator/community_of_inquiry_activity.php b/analytics/classes/local/indicator/community_of_inquiry_activity.php index 318fd52cff2..25e6c1b23f1 100644 --- a/analytics/classes/local/indicator/community_of_inquiry_activity.php +++ b/analytics/classes/local/indicator/community_of_inquiry_activity.php @@ -511,7 +511,7 @@ abstract class community_of_inquiry_activity extends linear { switch ($potentiallevel) { case 5: - // Cognitive level 4 is to comment on feedback. + // Cognitive level 5 is to submit after feedback. if ($this->any_feedback('submitted', $cm, $contextid, $user)) { $score += $scoreperlevel * 5; break; diff --git a/analytics/classes/local/indicator/discrete.php b/analytics/classes/local/indicator/discrete.php index a557fb40c4a..0b51e0d1c86 100644 --- a/analytics/classes/local/indicator/discrete.php +++ b/analytics/classes/local/indicator/discrete.php @@ -50,7 +50,7 @@ abstract class discrete extends base { * @return string[] */ public static function get_feature_headers() { - $fullclassname = get_called_class(); + $fullclassname = '\\' . get_called_class(); $headers = array($fullclassname); foreach (self::get_classes() as $class) { diff --git a/analytics/classes/local/indicator/linear.php b/analytics/classes/local/indicator/linear.php index df2f646742c..691aa8a7590 100644 --- a/analytics/classes/local/indicator/linear.php +++ b/analytics/classes/local/indicator/linear.php @@ -51,7 +51,7 @@ abstract class linear extends base { */ public static function get_feature_headers() { - $fullclassname = get_called_class(); + $fullclassname = '\\' . get_called_class(); if (static::include_averages()) { // The calculated value + context indicators. diff --git a/analytics/classes/local/time_splitting/base.php b/analytics/classes/local/time_splitting/base.php index 60b7f8ffad9..23adfb1f6d1 100644 --- a/analytics/classes/local/time_splitting/base.php +++ b/analytics/classes/local/time_splitting/base.php @@ -389,7 +389,7 @@ abstract class base { // The target as well. if ($target) { - $headers[] = get_class($target); + $headers[] = $target->get_id(); } return $headers; diff --git a/analytics/classes/manager.php b/analytics/classes/manager.php index 132beebf9b9..9c852719be2 100644 --- a/analytics/classes/manager.php +++ b/analytics/classes/manager.php @@ -106,7 +106,10 @@ class manager { $models = array(); foreach ($modelobjs as $modelobj) { - $models[$modelobj->id] = new \core_analytics\model($modelobj); + $model = new \core_analytics\model($modelobj); + if ($model->is_available()) { + $models[$modelobj->id] = $model; + } } return $models; } diff --git a/analytics/classes/model.php b/analytics/classes/model.php index 4e54856b7fd..c1f59141b31 100644 --- a/analytics/classes/model.php +++ b/analytics/classes/model.php @@ -135,6 +135,26 @@ class model { $this->model = $model; } + /** + * Quick safety check to discard site models which required components are not available anymore. + * + * @return bool + */ + public function is_available() { + $target = $this->get_target(); + if (!$target) { + return false; + } + $analyser = $this->get_target(); + + $classname = $target->get_analyser_class(); + if (!class_exists($classname)) { + return false; + } + + return true; + } + /** * Returns the model id. * @@ -1217,7 +1237,7 @@ class model { if (!is_object($indicator) && !is_scalar($indicator)) { $indicator = strval($indicator); } else if (is_object($indicator)) { - $indicator = get_class($indicator); + $indicator = '\\' . get_class($indicator); } throw new \moodle_exception('errorinvalidindicator', 'analytics', '', $indicator); }