MDL-57791 analytics: Always absolute full class names
authorDavid Monllao <davidm@moodle.com>
Tue, 20 Jun 2017 07:16:22 +0000 (09:16 +0200)
committerDavid Monllao <davidm@moodle.com>
Mon, 24 Jul 2017 06:36:50 +0000 (08:36 +0200)
Some extra tiny changes as well.

admin/settings/analytics.php
admin/tool/models/classes/output/renderer.php
analytics/classes/calculable.php
analytics/classes/local/indicator/binary.php
analytics/classes/local/indicator/community_of_inquiry_activity.php
analytics/classes/local/indicator/discrete.php
analytics/classes/local/indicator/linear.php
analytics/classes/local/time_splitting/base.php
analytics/classes/manager.php
analytics/classes/model.php

index f8aa88d..bc61570 100644 (file)
@@ -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();
         }
index e966dd7..6f1455b 100644 (file)
@@ -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);
     }
 
index ed81701..ca6c68d 100644 (file)
@@ -75,7 +75,7 @@ abstract class calculable {
      * @return string
      */
     public static function get_name() {
-        return get_called_class();
+        return '\\' . get_called_class();
     }
 
     /**
index b642475..7f4c346 100644 (file)
@@ -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());
     }
 
     /**
index 318fd52..25e6c1b 100644 (file)
@@ -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;
index a557fb4..0b51e0d 100644 (file)
@@ -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) {
index df2f646..691aa8a 100644 (file)
@@ -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.
index 60b7f8f..23adfb1 100644 (file)
@@ -389,7 +389,7 @@ abstract class base {
 
         // The target as well.
         if ($target) {
-            $headers[] = get_class($target);
+            $headers[] = $target->get_id();
         }
 
         return $headers;
index 132beeb..9c85271 100644 (file)
@@ -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;
     }
index 4e54856..c1f5914 100644 (file)
@@ -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);
             }