Ciao Franky,
sicuramente il codice è debole perché in caso di errore dovrebbe saltare il processamento di quella informazione eventualmente scrivendo nei log che ha saltato quel dato.
Secondo me c'è - o c'è stato - nel tuo sistema qualche plug-in che non ha implementato correttamente la gestione degli eventi ma la mia è pura speculazione in questo momento.
Facendo una copia preliminare, prova a modificare il file analytics/classes/local/indicator/community_of_inquiry_activity.php in questo modo:
$ git diff
diff --git a/analytics/classes/local/indicator/community_of_inquiry_activity.php b/analytics/classes/local/indicator/community_of_inquiry_activity.php
index 555bb420e7c..ff22224e826 100644
--- a/analytics/classes/local/indicator/community_of_inquiry_activity.php
+++ b/analytics/classes/local/indicator/community_of_inquiry_activity.php
@@ -518,6 +518,12 @@ abstract class community_of_inquiry_activity extends linear {
// At the same time we want to keep this array reasonably "not-massive".
$processedevents = array();
foreach ($events as $event) {
+ // $event could be null if \core\event\base::restore() will not be able to recreate the \core\event\base object.
+ // Unfortunately \core\event\base::restore() does not log the reason of its failure; more in lib/classes/event/base.php.
+ if ($event === null) {
+ continue;
+ }
+
if (!isset($processedevents[$event->contextid])) {
$processedevents[$event->contextid] = array();
}
così facendo il codice salterà quegli eventi "anomali" che il sistema non riesce a ricostruire dalle sole informazioni su DB - si riferiscono a plug-in disinstallati?
Bisognerebbe aggiungere dei log in più in altre parti di codice per capire chi ha generato questi eventi e se il problema è "solo" perché sono stati "mal implementati"; prova, previa copia, a modificare anche lib/classes/event/base.php:
diff --git a/lib/classes/event/base.php b/lib/classes/event/base.php
index 0d7831fe731..63a58d26f59 100644
--- a/lib/classes/event/base.php
+++ b/lib/classes/event/base.php
@@ -375,6 +375,7 @@ abstract class base implements \IteratorAggregate {
// Security: make 100% sure this really is an event class.
if ($classname !== "\\{$component}\\event\\{$target}_{$action}") {
+ error_log("'${classname}' is not an event class name. Expected: '\\{$component}\\event\\{$target}_{$action}'");
return false;
}
@@ -383,6 +384,7 @@ abstract class base implements \IteratorAggregate {
}
$event = new $classname();
if (!($event instanceof \core\event\base)) {
+ error_log("'${classname}' does not implement \core\event\base");
return false;
}
Nota: le righe evidenziate in verde e con il "+" iniziale vanno aggiunte senza il "+" iniziale che è solo il marcatore della nuova linea aggiunta.
Non appena mi sarà più chiaro il problema aprirò un ticket sul Tracker di Moodle per descrivere come replicarlo.
HTH,
Matteo