diff --git a/analytics/classes/analysis.php b/analytics/classes/analysis.php index 25d926a1698..32b5abe9fa7 100644 --- a/analytics/classes/analysis.php +++ b/analytics/classes/analysis.php @@ -313,7 +313,8 @@ class analysis { } try { - $indicators = $this->analyser->get_indicators(); + // Instantiate empty indicators to ensure that no garbage is dragged from previous analyses. + $indicators = $this->analyser->instantiate_indicators(); foreach ($indicators as $key => $indicator) { // The analyser attaches the main entities the sample depends on and are provided to the // indicator to calculate the sample. diff --git a/analytics/classes/local/analyser/base.php b/analytics/classes/local/analyser/base.php index 1c65e2c6273..185f573cddb 100644 --- a/analytics/classes/local/analyser/base.php +++ b/analytics/classes/local/analyser/base.php @@ -237,6 +237,18 @@ abstract class base { return $this->indicators; } + /** + * Instantiate the indicators. + * + * @return \core_analytics\local\indicator\base[] + */ + public function instantiate_indicators() { + foreach ($this->indicators as $key => $indicator) { + $this->indicators[$key] = call_user_func(array($indicator, 'instance')); + } + return $this->indicators; + } + /** * Samples data this analyser provides. *