Réinitialisation en masse des cours

Réinitialisation en masse des cours

par Pascal Maury,
Nombre de réponses : 33
Avatar Développeurs de plugins

Bonjour,

Nous souhaitions réinitialiser en masse tous les cours de notre plate-forme (exceptés qq uns).

Nous avons donc repris le formulaire de réinitialisation de cours et nous l'avons adapté afin qu'il permette
- de supprimer en masse (en incluant ou excluant certains cours si besoin)
- de supprimer aussi les méthodes d'inscriptions

Le script est en PJ. Je l'ai utilisé sur mon site de production de 1200 des cours (taille de la base de données : 4 Go, dont 1.7 de log, taille après suppression des logs et réinitialisation : 1 Go). 
Il a fallu 5 heures pour réinitialiser tous les cours (sauf quelques-uns).
Il est arrivé que la page ne ​​s'arrête jamais de charger. Mais la réinitialisation est bien faite.
Par sécurité, je conseille de modifier le code afin d'ajouter une entrée dans la table log pour s'assurer que tous les cours soient bien traités.

Attention, avant de lancer le script, vous devez vérifier la configuration du serveur PHP (valeur de max_execution_time) si vous prévoyez de réinitialiser un grand nombre de cours (j'avais aussi changer la valeur de user_ini.cache_ttl mais je ne pense pas que cela soit nécessaire).

2 façons de le faire:
- dans le fichier php.ini (max_execution_time = "300000")
- en utilisant php_value dans un fichier htaccess:. php_value max_execution_time "300000"

Note: j'ai essayé avec "0" et j'obtiens "PHP Fatal error: Le temps maximum d'exécution de 0 seconde dépassé".

Enfin, en cherchant (mieux que la première fois), j'ai découvert les scripts en ligne de commande de Tomasz Muras qui est pourrait une alternative intéressante pour les traitements en masse (je n'ai pas testé) :
- https://moodle.org/mod/forum/discuss.php?d=171862#p1027763
- https://github.com/tmuras/moosh#course-restore

Pascal

 

Moyenne des évaluations Utile (5)
En réponse à Pascal Maury

Re: Réinitialisation en masse des cours

par Patrick Lemaire,
Avatar Développeurs de plugins Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Merci Pascal sourire

Ce sera surement bien utile sur notre plateforme V2.

En réponse à Patrick Lemaire

Re: Réinitialisation en masse des cours

par Pascal Maury,
Avatar Développeurs de plugins

De rien ;)

J'oubliais de préciser que ma plate-forme était en 2.5.1.

En réponse à Pascal Maury

Re: Réinitialisation en masse des cours

par Anne Garnavault Remy,

Merci Pascal

Je viens de tester ton script. Cela fonctionne sur ma plate-forme de test . J'avais juste besoins de désactiver les accès et supprimer les traces des étudiants. sourire

En réponse à Anne Garnavault Remy

Re: Réinitialisation en masse des cours

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Bonjour,

Merci Pascal.

Je pense que ça (me) sera très utile dans quelques mois, pour préparer la rentrée 2014 !

Séverin

En réponse à Séverin Terrier

Re: Réinitialisation en masse des cours

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Bonjour,

Je relance cette discussion, n'ayant pas encore testé ces différentes solutions, mais étant fortement intéressé en vue de la préparation de la rentrée 2014.

J'ai par contre testé la fonctionnalité de Moodle 2.6 qui permet de créer des cours par lot, et devrait permettre également (si j'ai bien compris) de les ré-initialiser : en fait, les inscriptions des utilisateurs sont bien supprimées, mais pas le contenu qu'ils ont déposé ! triste

Est-ce que d'autres personnes ont avancé sur le sujet ?

Pascal : est-ce que ta procédure serait compatible Moodle 2.6 ? Et 2.7 ?

Séverin

En réponse à Séverin Terrier

Re: Réinitialisation en masse des cours

par Pascal Maury,
Avatar Développeurs de plugins

Salut Severin !

T'as de la chance, je venais poster un message à propos de 2.7 et dans ma recherche j'ai vu ton message !

Faut pas hésiter à m'envoyer un message lorsque vous répondez à un de mes messages, car je ne suis pas abonné au forum.

Pr te répondre : bonne question !! je n'en ai aucune idée sourire

Je viens tout juste de discuter de 2.7 avec mes collègues, donc on en vient doucement aux scripts et plugins. Dans tous les cas, on doit le faire fonctionner pour 2.6 ou 2.7 (selon le cas) avant septembre. Je suis pas trop inquiet pour 2.6, dans ce que je découvre de 2.7 je ne pense pas que le script pose problème mais il faut tester !

Je ne pourrais pas tester de suite car mes serveurs n'ont pas les pré-requis pour 2.7 mais j'essaye de te tenir au courant !

En réponse à Pascal Maury

Re: Réinitialisation en masse des cours

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Salut Pascal,

Merci de l'information, je le saurais pour une prochaine fois, pour te relancer.

Je te laisse avancer sur les points techniques et nous informer.

Malgré tout, mon but était aussi de relancer cette discussion à propos de cette problématique qui intéresse pas mal de monde, et regrouper les retours d'expérience sur les outils existants.

Séverin

En réponse à Séverin Terrier

Re: Réinitialisation en masse des cours

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Pour information sur ce sujet, j'ai pour le moment testé le script de Pascal sur un Moodle 2.4, et cela fonctionne bien sourire

Par contre, une information utile pour l'utilisation : le premier champ, qui permet de choisir les cours à réinitialiser doit être rempli en spécifiant les différents identifiant (id) des cours à réinitialiser, séparés par une virgule, mais sans espace (sinon, ça plante) !

Comme ce n'est (sauf erreur de ma part) écrit nul part clairement, cela va mieux en le disant clin d’œil

En tout cas, je pense que ce script nous sera utile.

En réponse à Séverin Terrier

Re: Réinitialisation en masse des cours

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Et également les liens vers quelques éléments dans le traqueur de bogues à ce propos : MDL-26936 et MDL-11349

En réponse à Séverin Terrier

Re: Réinitialisation en masse des cours

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Voila, du nouveau dans notre préparation de la rentrée.

Cette semaine, j'ai donc :

  • réalisé une archive complète de la plateforme de production (avec le contenu 2013-2014)
  • fait la mise à jour 2.4.10 => 2.7.1 (en installant certains plugins certifiés 2.6, mais pas encore 2.7)
  • réinitialisé des centaines (pour ne pas dire milliers) de cours grâce à la procédure fournie par Pascal. Merci, ça nous a bien aidés ! Étrangement, quelques cours ont généré une erreur, mais en les relançant après coup, c'est passé correctement (je n'ai du coup pas fouillé pour avoir plus d'explication).
  • désinscrits des dizaines de milliers d'inscription d'étudiants (via la méthode "base de données externe")
  • installé un paramétrage "maison" du thème More réalisé par une collègue

Maintenant, on va commencer à faire face aux retours des utilisateurs...

Séverin

Moyenne des évaluations Utile (1)
En réponse à Séverin Terrier

Re: Réinitialisation en masse des cours

par Pascal Maury,
Avatar Développeurs de plugins

De rien, de rien, c'est le travail de Daniel pr info ! sourire


En réponse à Pascal Maury

Re: Réinitialisation en masse des cours

par anthony leduc,

Au risque de paraître idiot, comment vous lancez le script.

  1. Vous le rendez exécutable sous linux et vous le démarrer ensuite par ./fichierscript.php
  2. Où vous l'exécutez à partir de votre navigateur web


Je viens  de trouver ta réponse :


https://moodle.org/mod/forum/discuss.php?d=171862


En réponse à anthony leduc

Re: Réinitialisation en masse des cours

par anthony leduc,

Bon,

J'ai installé le plugin comme ce qui est décris.

J'ai modifié les droits du répertoire par chmod -R 771 reset_courses

et chown -R root:www reset_courses

J'essaye d'accéder au script par cette url :

http://moodle_site//local/reset_courses/commit_reset_course.php

Et j'obtiens cette erreur


En réponse à anthony leduc

Re: Réinitialisation en masse des cours

par Pascal Maury,
Avatar Développeurs de plugins

Etes-vous connecté en tant qu'administrateur du site ?

Pour éviter que n'importe qui l'exécute, le code vérifie que l'utilisateur connecté a les droits de "Modification du site" (droits attribué aux administrateurs à la base, peut etre à d'autres rôles je ne sais plus) ...

En réponse à Pascal Maury

Re: Réinitialisation en masse des cours

par Pascal Maury,
Avatar Développeurs de plugins
J'ai modifié les droits du répertoire par chmod -R 771 reset_courses
et chown -R root:www reset_courses

Il n'est pas nécessaire de lui attribuer ces droits, il suffit que le fichier soit accessible en lecture à l'utilisateur www (ou équivalent), ce qui devrait être le cas par défaut dans votre système.

En réponse à Pascal Maury

Re: Réinitialisation en masse des cours

par anthony leduc,

Bon cela fonctionne. Il fallait créer un répertoire commit et placer les scripts php.


en revanche, bien que le script fonctionne, j'obtiens cette erreur :


En réponse à anthony leduc

Re: Réinitialisation en masse des cours

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Bonjour,

Tu obtiens ces messages car tu as du activer le mode débogage...

En effet, ce plugin n'est pas complètement finalisé, on constate notamment des noms de chaîne de caractères entre double crochet, signifiant qu'elle n'existe pas, et c'est ce dont t'informent les messages.

Séverin

En réponse à Séverin Terrier

Re: Réinitialisation en masse des cours

par Pascal Maury,
Avatar Développeurs de plugins
Antony
Au risque de paraître idiot, comment vous lancez le script.
1. Vous le rendez exécutable sous linux et vous le démarrer ensuite par ./fichierscript.php
2.
Où vous l'exécutez à partir de votre navigateur web
Le script mis à disposition reprends l'interface de réinitialisation des cours de Moodle, il ne peut donc être exécuté en ligne de commande pour le coup.

Severin
En effet, ce plugin n'est pas complètement finalisé, on constate notamment des noms de chaîne de caractères entre double crochet, signifiant qu'elle n'existe pas, et c'est ce dont t'informent les messages.

La raison n'est pas exactement celle-là : en fait ces scripts font partie d'un plugin "commit" qui est en fait une "librairie" de fonctions communes que nous utilisons ensuite dans d'autres plugins. Je pense que je n'avais fourni le package complet car il y avait des mots de passes dans certains fichiers. Ils ont normalement été retiré. Je vais voir avec Daniel pour fournir le package complet, mis à jour pour 2.7 d'ailleurs. Car je me souviens que le plugin écrit une ligne dans les logs pour chaque cours réinitialisé. Or avec le nouveau système de log, je ne sais pas comment ca se passe.
Bon dans tous les cas, ca marche et visiblement même avec seulement avec les 2 fichiers si tu as réussi Séverin.
Là je viens de tester avec 2 cours dans 2.7
(D'ailleurs dans un des 2 cours, il reste des messages et des pages wiki ?? mais vu que j'ai le même résultat quand je le réinitialise directement dans le cours, le pb ne vient pas de notre script mais plutôt du cours ... ?)

Je vous tiens au courant.

En réponse à Séverin Terrier

Re: Réinitialisation en masse des cours

par anthony leduc,

Oui , j'ai activé le module de debug...J'en ai eu besoin pour un autre plugin qui refusait de fonctionner.

En réponse à anthony leduc

Re: Réinitialisation en masse des cours

par Pascal Maury,
Avatar Développeurs de plugins

Pour revenir sur ce que je disais : il vaut mieux utiliser le package complet commit car celui-ci crée la table commit_log dans laquelle va être écrite 1 ligne pour chaque cours réinitialisé. Cela permet d'être sûr que tous les cours ont été traités. En effet, je viens de lancer la réinitialisation des 1500 cours de ma PF (4h) et la page ne se recharge jamais. La seule manière de voir que le processus était terminé a été de vérifier dans ces logs.

J'ai lancé la réinitialisation depuis ma PF 2.5 pour être tranquille (j'avais déjà utilisé le code l'année dernière) mais je viendrai mettre ici la version pour 2.7 de commit qd elle sera ok, ce qui devrait etre le cas d'ici demain (même si visiblement la version fournie fonctionne déjà en 2.7 vu que Séverin l'a essayé avec succès).

Séverin comment t'es-tu assuré que tout s'était bien passé ? La page s'était rechargée ?

NB : s'il y a beaucoup de cours, il vaut mieux ajouter un fichier .htaccess contenant la ligne :

php_value max_execution_time "300000"


En réponse à Pascal Maury

Re: Réinitialisation en masse des cours

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

De notre côté, nous avons traité par lots de quelques dizaines (voire centaines) de cours, mais en "tronçonnant" le travail à effectuer.

Et du coup, on voyait directement s'afficher la progression sur la page, au fil du traitement et du chargement/affichage. Et soit on voyait le résultat à la fin (et le pied de page), soit on voyait le dernier cours traité avant de rencontrer une erreur. Il ne restait plus qu'à reprendre au suivant...

Et cette version 2.7 ? langue tirée

En réponse à Séverin Terrier

Re: Réinitialisation en masse des cours

par Pascal Maury,
Avatar Développeurs de plugins

Alors, pr la version 2.7, je la fournis mais toujours en mode fichiers seuls car à part pour 2 chaines de texte, COMmit n'est pas nécessaire (et vu qu'il est bien rempli ca sert à rien de charger la barque juste pr lancer un script autonome).

Je préviens : je n'ai testé ce code que sur 1 seul cours. Cependant c'est quasi le même (voir exactement le même) que j'ai utilisé pour la réinitialisation de mes 1500 cours de ma PF 2.5.
Je vous invite comme toujours à la prudence : exécutez ce script sur une PF de test d'abord et vérifiez par vous-mêmes que tout s'est bien passé.
Ce code fait de toute façon simplement appelle à la fonction reset_course_userdata($data) (utilisé dans le fichier course/reset.php de Moodle) pour les cours sélectionnés. Donc ce script ne fait rien de plus ou de moins que Moodle, si ce n'est en masse. Mais il peut toujours y avoir une coquille, donc testez, testez, testez !

J'ai intégré les textes pour qu'il n'y ait plus d'erreurs.

Rappel :

> Dépassé un grand nombre de cours, la page ne se chargera plus, donc
- soit vous faites comme Séverin, au coup par coup
- soit vous vous assurez que tout s'est bien passé dans le fichiers de log (et dans les logs de Moodle ?)
Faites des essais !

> s'il y a beaucoup de cours, il vaut mieux ajouter un fichier .htaccess contenant la ligne :
php_value max_execution_time "300000"

> à ma connaissance, il y a toujours le problème des wikis qui ne sont pas "resetés" (problème de Moodle), par contre celui des ateliers l'est mais seulement pr 2.6.6 et 2.7.3 !

Utilisation :
- dézipper le zip dans le dossier local/ de Moodle
- appeler le script par le navigateur : http://votremoodle.fr/local/commit/commit_reset_course.php
Moyenne des évaluations Utile (1)
En réponse à Pascal Maury

Re: Réinitialisation en masse des cours

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Salut Pascal,

Un an plus tard, même travail, mêmes problématiques, et mêmes outils !

Avez-vous fait évoluer ce script pour Moodle 2.9 ?

Malgré tout, la version de l'année dernière semble fonctionner avec Moodle 2.9.

Séverin

En réponse à Séverin Terrier

Re: Réinitialisation en masse des cours

par Pascal Maury,
Avatar Développeurs de plugins

Bonjour Séverin !

Non nous restons en 2.7 cette année donc nous n'avons rien développé pour 2.9.

Mais effectivement le script *devrait* fonctionner en 2.9.

Je n'ai pas encore installé de PF 2.9 donc je ne peux pas tester pour le moment ... Je suis preneur de tout retour à ce sujet !


En réponse à Pascal Maury

Re: Réinitialisation en masse des cours

par Giliane Marty,

Bonsoir à tous

Nous l'avons utilisé en 2.9 à l'université des Antilles sans problème cool.

Nous l'avions déjà utilisé avec succès pour la 2.7 l'an dernier


Bon week-end

Giliane

En réponse à Pascal Maury

Re: Réinitialisation en masse des cours

par Anne Garnavault Remy,

Bonjour,

Je suis en cours de test de la version Moodle 3.0 pour installation cet été.

Je viens de tester le script. Il fonctionne bien.

Nous en avons besoin en début d'année scolaire pour réinitialiser des centaines de cours tout en conservant des options (ex: vider les groupes mais pas les supprimer...)  , ce qui est impossible avec l'outil de modifications en lot de Moodle.

Est-ce que vous l'avez aussi testé pour Moodle 3.0?

Merci de vos retours

Anne

En réponse à Anne Garnavault Remy

Re: Réinitialisation en masse des cours

par Luiggi Sansonetti,
Avatar Développeurs de plugins Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Titulaires du Moodle Course Creator Certificate Avatar Traducteurs

Salut Anne

dans la fonction core de réinitialisation, il y a possibilité de "vider" les groupes sans supprimer ces groupes.

As-tu essayé de trouver le code à ajouter au script ?

(je ne développe pas du tout, j'image juste que c'est possible...)

En réponse à Luiggi Sansonetti

Re: Réinitialisation en masse des cours

par Anne Garnavault Remy,

@luiggi

C'est justement l’intérêt du script de Pascal. Cette fonction est intégrée au plugin.


En fait je suis en train de regarder comment le rendre valide pour la version 3.0 de Moodle . Si c'est le cas , on pourrais peut-être le proposer à la communauté?

En réponse à Anne Garnavault Remy

Re: Réinitialisation en masse des cours

par Luiggi Sansonetti,
Avatar Développeurs de plugins Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Titulaires du Moodle Course Creator Certificate Avatar Traducteurs

autant pour moi

Et oui bien sûr, ça pourrait bien servir...

En réponse à Luiggi Sansonetti

Re: Réinitialisation en masse des cours

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Ça pourrait effectivement servir, et également pour Moodle 3.1 (et m'intéresserait beaucoup) clin d’œil

En réponse à Séverin Terrier

Re: Réinitialisation en masse des cours

par Anne Garnavault Remy,

Bonjour

Avec beaucoup de retard.

Je n'ai pas fait grand chose hormis modifier le fichier version.php et les fichiers de langue.

Le gros du travail avait déjà été fait , merci Pascal !


Installation du zip  via l’installeur de plugins sur 3.03 et 3.1+ ok

Test avec quelques cours ok .

Attention le plugin n'installe pas d'entrée sur l'interface.


Cas d'usages :

En fin d'année universitaire, il est possible de réinitialiser un ensemble de cours appartenant à un dispositif. (ex : IFSI, cours FI en FOAD….)
Ces réinitialisations permettent de supprimer les traces des étudiants des espaces de cours.

Mode opératoire

La procédure de réinitialisation est toujours effectuée après une procédure de sauvegarde des cours.


L'export se fait à partir d'une requête SQL sur la table mdl_course. La requête permet d'obtenir l'identifiant de chaque cours à réinitialiser.
Enregistrer l'export csv avec le délimiteur de champs « , »
Ouvrir le fichier d'export avec un éditeur de texte (emacs, gedit, blocnote…). Ce fichier est composé d'une suite de chiffres (la suite des identifiants)
Ouvrir la page suivante : http://monmoodle.fr/moodle/local/commit/commit_reset_course.php
Copier/coller la suite des identifiants de cours à réinitialiser séparés par des virgules dans la fenêtre « Formulaire de réinitialisation »
Cocher ensuite les paramètres de réinitialisation souhaités ( voir https://docs.moodle.org/27/en/Reset_course)

Faire une vérification dans quelques cours.

Attention : la procédure de réinitialisation peut être assez longue.

NB : la modification de cours en lot standard, disponible dans l'administration du site, ne permet pas le paramétrage fin de la réinitialisation.


Si vous avez le temps de le tester et de me donner quelques retours.


Moyenne des évaluations Utile (1)
En réponse à Anne Garnavault Remy

Re: Réinitialisation en masse des cours

par Pascal Maury,
Avatar Développeurs de plugins

Bonjour,

Merci à chacun pour vos retours.

Je viens de tester le script sur Moodle 3.1 mais je n'ai pas de cours avec des données pertinentes pour être sur que tout va bien. J'attends que nous remontions la nouvelle PF test. En tout cas le script s'exécute correctement. Pour Moodle 3 et +, il faut utiliser le zip de Anne qui contient un fichier version.php sinon vous aurez des messages d'erreurs à la connexion au tableau de bord par exemple.

Je pense que le script fonctionne sans soucis, cependant il n'est pas prévu que nous l'utilisions en production cette année dans mon établissement.

Comme je le disais plus haut, il s'agit du travail d'un de mes anciens collègues de Nanterre (Daniel), moi je n'en fait que la promotion sourire

Bonne nouvelle, la réinitilisation des pages du wiki est normalement opérationnelle depuis Moodle 3.0 : MDL-49028


Il y a plusieurs propositions et discussions autour d'un outil de réinitialisation des cours en masse, n'hésitez pas à voter : MDL-26936

En réponse à Pascal Maury

Re: Réinitialisation en masse des cours

par Patrick Lemaire,
Avatar Développeurs de plugins Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Bonjour,

Personnellement, je continue à utiliser un vieux script (échangé avec Pascal, et Fabien à l'époque, le 30/09/2010 vers 8h37, j'ai encore le mail grand sourire) qui tournait sur ma 1.9 et continue, après quelques adaptations, à fonctionner sur ma 3.1.

Rien n'est diffusable à la communauté, le script est en mode DoItYourself avec un fichier CSV à côté qui contient les ID des cours que l'on extrait à l'aide d'une requête... triste

J'ai prévu d'y ajouter une fonctionnalité de suppression des contenus (ressources / activités) optionnelle parce que les demandes arrivent chez moi. On garde les mêmes espaces de cours mais on veut qu'ils soient vierges (besoin de conserver les ID des cours).

J'ai voté pour la demande d'improvment .

A suivre...
Patrick