oliviervalentin / moodle-report_coursemanager

Course Managet is a report tool for Moodle for helping teachers to clean and manage their courses and contents. It is based on an automatic task which calculates reports, that are displayed in a general dashboard and directly in courses.
GNU General Public License v3.0
8 stars 5 forks source link

Erreur lors du déplacement à la corbeille #4

Closed gmanaud closed 1 year ago

gmanaud commented 1 year ago

Bonjour,

Sur Moodle 4.1 et PHP 8.1, quand j'accède au gestionnaire de cours et que je clique sur « Mettre à la corbeille », après validation j'arrive sur un message d'erreur

Exception : Attempt to assign property "id" on null

Plus d'informations sur cette erreur Info de débogage Error code: generalexceptionmessage Trace de la pile

line 110 of /report/coursemanager/delete_course.php: Error thrown

et en poursuivant encore, j'obtiens

[[delete_already_moved]]

Le cours est toutefois bien déplacé dans la catégorie corbeille.

En ajoutant $datahide = new stdClass; dans le fichier delete_course.php, juste avant la ligne 109, je n'ai plus cette erreur.

Par contre à la place j'ai :

Exception : Attempt to assign property "maildisplay" on string

Plus d'informations sur cette erreur Info de débogage Error code: generalexceptionmessage Trace de la pile

line 119 of /report/coursemanager/delete_course.php: Error thrown

Et là par contre je ne sais pas comment faire ;) Une idée ?

oliviervalentin commented 1 year ago

Effectivement, je découvre ce problème... C'est bizarre : le but de ce code est juste de passer le cours en "caché". Et la modification cherche ensuite ce "maildisplay" qui se trouve... je sais pas où ! Je vais essayer de comprendre tout cela.

gmanaud commented 1 year ago

Alors j'ai trouvé une façon de ne plus avoir l'erreur, en remplaçant, dans le fichier delete_course.php les lignes 117/118

$from = $CFG->supportname; $from->maildisplay = false;

par

$from = new stdClass; $from->maildisplay = false;

Mais j'avoue que je ne sais pas à quoi sert la ligne $from = $CFG->supportname; que j'ai supprimée. Est-elle importante ?

Par ailleurs je ne sais pas si c'est censé envoyer un mail en même temps, et donc si ça modifie la fonctionnalité, car les mails sont bloqués sur notre serveur de test.

oliviervalentin commented 1 year ago

En ajoutant $datahide = new stdClass; , cela résout le problème pour cacher le cours. Je pense que l'erreur suivante provient donc de l'envoi des mails à l'enseignant (ou aux enseignants) qui exécute la mise à la corbeille (ligne 123). En gros, s'il n'y a qu'un prof, on lui envoie le mail standard. S'il y en a plusieurs, cela envoie un mail à l'enseignant qui a supprimé avec information pour dire que d'autres enseignants ont été détectés et de se concerter avec eux. Idem, un mail est envoyé aux autres enseignants pour les informer de la suppression et qu'ils peuvent restaurer le cours en se concertant avec l'enseignant de départ.

Si l'erreur disparait avec l'ajout d'un stdClass pour le cours, il faudrait je pense faire pareil pour les mails ! Je vais voir comment faire.

EDIT : ta réponse vient juste d'apparaitre, je rajoute un élément. Le supportname récupère la variable Moodle qui indique l'envoyeur du mail indiquant que le cours a été supprimé. J'ai directement pris le supportname, ou "Nom d'assitance", qui se trouve dans Administration->Serveur->Contact d'assistance.

Le temps de reconfigurer mon serveur local pour l'envoi de mail et je teste tout cela au plus vite.

oliviervalentin commented 1 year ago

Re-bonjour, c'est donc bien un souci de stdClass. On en a créé un pour $datahide, mais il fallait aussi en créer un pour $a (infos passées dans le corps du message) et pour $from (informations de l'envoyeur). Manquait également pour $from de spécifier dans cet objet la variable $from->email. Et de cette façon, je reçois bien les emails. Il ne semble plus y avoir d'erreur de mon coté, si tu peux confirmer ! :) Olivier

gmanaud commented 1 year ago

Oui, ça marche nickel. Merci !

oliviervalentin commented 1 year ago

Génial, je ferme ! Un petit rajout toutefois, le mail envoyé ne contenait pas la période de suppression qu'on définir dans l'admin. Je viens de poser les modifications dans delete_course.php. Olivier