Script import Scorm

Script import Scorm

par Mathieu Domingo,
Nombre de réponses : 5

Bonjour,

Toute ma belle explication qui a disparue fâché , du coup version courte :

Je fais un script pour importer une liste de scorm en format zip. Un de mes scorms est corrompu ce qui provoque une erreur et une trace (sans vraiment de rapport) vers shutdown_manager.php

Après recherche, le problème de scorm corrompu déclenche un vieux 'die' dans scormlib.php :

die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($this->resparser)), xml_get_current_line_number($this->resparser)));

Je l'ai donc remplacer par un : throw new Exception('XML Parse Error'); que je catch dans course/modlib.php fonction add_moduleinfo pour pouvoir faire un $DB->force_transaction_rollback(); et passer proprement a mon tour de boucle suivant.

Avantage :

  • Mon script fonctionne de manière globale (malgré quelques erreurs qui seront dans les logs)
  • Si on ne catch pas l'erreur on obtient une vraie trace vers le throw.

Question :

  1. Est ce qu'il existe un moyen de faire un 'catch' de die ? (Pour éviter de trop modifier les fichiers de moodle, ça commence à en faire plusieurs déjà :s)
  2. Qui contacter pour suggérer cette modification ? (le fichier indique 1999 onwards Roberto Pinna, je ne sais pas si 20 ans après c'est toujours lui qui s'occupe de ca pensif
  3. Est ce qu'il y a une façon particulière de gérer les erreur dans moodle ?


Bonne journée,

Mathieu

Moyenne des évaluations  -
En réponse à Mathieu Domingo

Re: Script import Scorm

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

Bonjour Mathieu,

Pour tes questions :

1. Je crains que non... mais je n'ai jamais vraiment essayé. Regarde ce qui se dit là : https://stackoverflow.com/questions/3836524/can-i-catch-exit-and-die-messages
Tu verras que les avis et les solutions sont confuses.

2. De quelle modification parles-tu ? Cela-dit, tu peux tenter un « pull request » si ce sont des fonctions CORE de MOODLE pensif

3. Tu pourras trouver des éléments dans la partie Coding Style (https://docs.moodle.org/dev/Coding_style#Exceptions). Mais rien de "particulier".

Ton script est-il prévu pour être intégré à un module tiers ? Comment se présente-t-il ?

Il permet d'importer un ensemble de modules d'activité SCORM ?

À bientôt,
Patrick

En réponse à Patrick Lemaire

Re: Script import Scorm

par Mathieu Domingo,

Bonjour,

1 : Oui j'ai cherché aussi pour 'catch' le die, cela semble vaguement possible mais relativement compliqué par rapport à un simple catch. (Globalement c'est fais dans moodle vu que j'obtiens une erreur de shutdown_manager.php , c'est bien qu'il y a une interception avant de quitter, mais c'est peu pratique pour moi)

2 : Ce que j'ai modifié (et que j'aurai voulu suggéré à quelqu'un de modifier dans les sources officielles), c'est de remplacer le die par un throw new exception dans la fonction parse du fichier /mod/scorm/datamodels/scormlib.php. Ca me fait penser à git, mais je vais chercher ce qu'est un "pull request" pour moodle du coup sourire

3 : Merci , donc plutôt qu'une exception générique, ça doit plutôt être une 'file_exception' vu que c'est un des fichiers "parsé" dans le zip qui est mal formé.


Je ne vois pas bien ce que tu entends par module tiers incertain, mais a priori non, mon script n'est pas prévu d’être intégré dans quoi que ce soit, il est "autosuffisant" cool

L'import des scorms, c'est seulement une partie du script. L'idée globale c'est de transférer les données d'une autre plateforme de cours (chamilo) vers moodle. (Après avoir pas mal bataillé) Cela permet de crée les cours(avec enseignants), et d'y mettre l'ensemble des dossiers et fichiers, des liens et des scorms. Le code est probablement améliorable mais j'ai essayé autant que possible d'utiliser des fonctionnalités existantes de moodle sans (trop...) modifier les fichiers d'origine de moodle. Le résultat n'est pas parfait non plus, mais cela devrait permettre aux enseignants de ne pas repartir de 0 sur la nouvelle plateforme.

Bonne journée,

Mathieu

En réponse à Mathieu Domingo

Re: Script import Scorm

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

Bonjour Mathieu,

C'est donc un script de migration de Chamilo vers Moodle ?! Cela pourrait être intéressant de le proposer à la communauté. Il existe sans doute des contextes dans lesquels ton script pourrait faciliter les opérations de bascule d'une plateforme à l'autre.

Penses-tu le proposer au téléchargement un jour ? Peut-être pourrais-tu alors bénéficier d'une amélioration collective ?! As-tu un lien GitHub ?

À bientôt,
Patrick

En réponse à Patrick Lemaire

Re: Script import Scorm

par Mathieu Domingo,

Bonjour,

Oui pour le moment sur le serveur de test cela fonctionne avec une dizaine de cours. Il y a toujours des imprévus donc bon.. je m'attends à rencontrer de nouvelles erreurs lors du passage en production, mais je suis plutôt confiant que cela sera assez limité.

A priori c'est prévu de rendre le code disponible à la communauté, mais je ne sais pas quand ni de quelle manière (et cela sera manifestement trop tard pour bénéficier d'une amélioration collective).

Le problème c'est qu'une fois rendu disponible, je n'aurai probablement pas énormément de temps à y consacrer pour aider à le faire évoluer :s.

L'autre problème, c'est que j'ai modifié quelques fichiers de moodle et de chamilo pour faire fonctionner les scorms ce qui ne sera pas forcement simple à suivre/appliquer.

Bonne journée,

Mathieu

En réponse à Mathieu Domingo

Re: Script import Scorm

par Mathieu Domingo,

Bon j'ai enfin trouvé un peu de temps pour nettoyer mon script grand sourire

Je viens de déposer le script sur gist : https://gist.github.com/MathieuDomingo/28467fd619c7f2893cc1eefeefdb45da
Globalement ça a plutôt bien fonctionné cool (mais je n'ai pas eu beaucoup de retours incertain )

Les différentes choses à faire :
-Faire les modifications que j'ai effectué dans les fichiers (j’espère juste que je n'en ai pas oublié pensif ). J'ai essayé de fournir des indications pour chaque fichier. Généralement pour trouver la partie modifié des fonctions j'ai rajouté des MD_ (au moins au départ, parfois à la fin)
-Remplir correctement $Chamilo_db
-Lancer la fonction creer_zips() du script d'import pour générer un script (via des echo ...) qui va permettre de générer des zips dans les dossiers documents/scorms des différents cours (c'est un traitement spécifique pour les scorms de type 'Dokeos'). Copier le script généré puis l’exécuter. Cela doit ouvrir plein d'onglet dans firefox. Au fur et a mesure cela doit rajouter des zips sur le serveur Chamilo. Cela correspond globalement à la partie "Modifications de Chamilo" qu'il faudrait très sérieusement améliorer mais je n'aurai pas le temps (et encore moins l'utilité) de le faire.
-Créer une nouvelle catégorie qui va servir de "catégorie d'accueil" aux cours importés de chamilo  puis mettre le numéro de cette catégorie dans la fonction main() du script d'import ( pour le moment :  $categoryid=1290; )
-Dans la fonction get_Chamilo_cours() du script d'import, il faut adapter la requête pour choisir quels sont les cours que l'on importe. J'ai laissé 2 exemples (celui actif est très limitatif pour mes tests)
-Dans la fonction main() du script d'import il faut aussi préciser l'emplacement des dossiers des cours de chamilo en remplaçant /opt/fake_chamilo_mount/ par le chemin vers vos fichiers.
-Une fois que tout ça c'est bon, normalement il suffit de lancer la fonction main pour que cela importe les cours de chamilo à moodle.

Sur les points à améliorer, il y a la fonction creer_zips() qui est assez catastrophique (plus un moyen de contournement du problème (faire que le script soit identifié comme si c'était l'admin) qu'une vrai solution mais dans l'urgence je n'ai pas eu le temps ni le courage de m'investir plus que ça dans le fonctionnement de chamilo).
Il y a également les logs qui sont assez bof (pratique pour voir ou le script en ai dans le traitement, mais assez peu pratique pour être analyser plus en détails (surtout si vous activez celui qui fait une ligne par fichier qui "flood" énormément)


Si vous avez des questions ou des retours à me faire n'hésitez pas, j'essayerai de trouver un peu de temps pour répondre sourire
A plus endormi