Création et import de données
Cette section explique comment créer et/ou importer un ensemble de données dans une instance PAD+. La démarche comprend 4 étapes principales, dans l'ordre :
- Création de l'arborescence des catégories
- Création de séquences dans l'arborescence (avec ou sans sauvegardes de séquences existantes)
- Création des comptes utilisateurs et inscription optionnelle aux séquences
- Attribution des rôles utilisateurs dans les catégories
Cette section donne des indications sur les scripts Moodle ou commandes Moosh à utiliser avec leurs formats de fichier respectifs. Ces étapes peuvent être automatisées avec un playbook Ansible.
Prérequis
Création de l'arborescence des catégories
Créez un ou plusieurs fichiers
.xmlavec l'arborescence des catégories. Notez que vous pouvez avoir plusieurs catégories à la racine.<categories>
<category name="Niveau 1">
<category name="Niveau 2">
<category name="Niveau 3">
<category name="Niveau 4"></category>
</category>
</category>
</category>
<category name="Niveau 1">
<category name="Niveau 2">
<category name="Niveau 3">
<category name="Niveau 4"></category>
</category>
</category>
</category>
</categories>Numéro d'identifiant de catégorie
Il est possible d'ajouter un attribut idnumber='category-1-1', qui correspond au champ "Numéro d'identifiant de catégorie" dans les paramètres de la catégorie. Cet identifiant pourra être utilisé lors de l'import des séquences à la place du chemin des catégories.
Il n'est par contre pas possible d'ajouter des descriptions de catégorie par cette méthode.
Placez le fichier dans votre dossier PAD+ puis importez le avec la commande moosh
category-import:moosh category-import categories.xml
Catégorie "Divers"
Par défaut Moodle crée une catégorie "Divers" ou "Miscellaneous" à l'installation. On peut simplement la supprimer avec la commande moosh category-delete 1.
Description des catégories
Il est recommandé d'ajouter des descriptions sur certaines catégories pour aider les usagers.
Sur la page de la catégorie visée, ouvrir son menu d'actions et sélectionner l'option "Modifier cette catégorie" pour pouvoir éditer sa description.
Par exemple sur les catégories "Ateliers complémentaires" :
Voici la liste des ateliers disponibles proposés par votre établissement. Il peut s'agir de rencontres avec des intervenants extérieurs, d'ateliers collectifs autour d'un sujet en particulier comme la recherche d'emploi, une initiation à la méditation, une sortie culturelle, etc...
Ils sont ouverts en auto-inscription pour tous les stagiaires.
Par exemple pour la catégorie des ressources professionnelles :
Bienvenue dans l’espace collaboratif ouvert aux professionnels de chaque établissement. Vous y retrouverez toutes les ressources mises à disposition en libre service : des séquences complètes, des fiches pratiques, des document types, etc...
La description s'affiche immédiatement sous le titre de la catégorie.

Export d'une arborescence existante
Si vous avez déjà une instance Moodle avec une arborescence, vous pouvez en exporter tout ou partie avec la commande moosh category-export. L'export au format XML contient les titres et numéros d'identifiant des catégories et peut être réutilisé pour l'import.
# Export de toute l'arborescence des catégories
moosh category-import 0
Moosh propose des commandes pour manipuler différents types de données Moodle. Voir par exemple les commandes Moosh dédiées aux catégories.
Création des séquences
Moodle fournit une fonctionnalité pour créer en masse des séquences (MoodleDoc) et importer du contenu existant (au format .mbz des sauvegardes de séquence). Cette fonctionnalité est accessible via l'interface ou via la ligne de commande.
Voici un example de procédure :
Créez un dossier
donnees/backupavec les sauvegardes de séquence au format.mbzsi vous en avez.Créez un fichier
.csvavec la liste des séquences à créer (voir example de fichier sequences.csv)fullname,shortname,category_path,startdate,backupfile
Les métiers du numerique,num,Niveau 1 / Niveau 2 / Niveau 3 / Niveau 4,2022-02-01,../../../../donnees/backup/les-metiers-du-numerique.mbzPoints d'attention
- shortname : le nom court d'une séquence doit être unique sur tout le site (mais pas le fullname) - établissez une convention de nommage ;
- category_path : bien utiliser les titres (attribut name) et la hiérarchie des catégories - l'espace entre les barres obliques est nécessaire ;
- startdate : la date de début est fixée par défaut à un jour après l'import. Vous pouvez indiquer une autre date afin que les séquences apparaissent aux stagiaires à la date donnée ;
- backupfile (facultatif) : le chemin est relatif à la position du script Moodle dans
admin/tool/uploadcourse/cli/- si vos sauvegardes sont dans un dossierdonnees/backupà la racine, il faut donc remonter de 4 niveaux d'abord../../../../donnees/backup.
Importez les cours en ligne de commande (notez le chemin relatif du fichier csv à la racine du projet) :
php admin/tool/uploadcourse/cli/uploadcourse.php --mode=createnew --file=../../../../donnees/sequences.csv
Champs supplémentaires
Il existe de nombreux autres champs pour configurer l'import des séquences (MoodleDoc). Voici quelques détails supplémentaires :
- une colonne category_idnumber peut remplacer category_path pour utiliser le numéro d'identifiant des catégories ;
- format : pour préciser le format de séquence (thématique par défaut), il faut renseigner une colonne format avec topics, singleactivity... Attention le champ "type d'activité" n'est pas disponible pour le format "activité unique" - il faut le corriger à la main si besoin (forum par défaut) ;
- summary : pour préciser le résumé de la séquence ; attention il faut après import éditer la séquence pour sauvegarder le résumé avec le format correct (HTML, Markdown, texte brut...)
- enrolment_[number] : différents champs permettent de configurer les méthodes d'inscription si besoin.
Notez que cette fonctionnalité d'import en masse ne gère pas toutes les options, contrairement à la restauration unique d'une séquence (MoodleDoc). En particulier le format du résumé (HTML, Markdown, texte brut), l'image de séquence, le type d'activité unique sont ignorés.
Import des gabarits
Les gabarits sont des modèles de séquence ou d'atelier complémentaire que vous pouvez importer sur votre instance PAD+ pour les mettre à disposition de vos contributeurs :
- gabarit "séquence" : un modèle de séquence structuré avec 4 séances par défaut et quelques conseils pour la présentation et l'accessibilité
- gabarit "atelier complémentaire" : un modèle pour les informations d'un atelier complémentaire, sans séance mais avec une activité "feedback"
Depuis la page Administration du site / Séquences / Restaurer une séquence, déposez un des fichiers de gabarit ci-dessus et suivez la procédure de restauration. Pour le gabarit "Atelier complémentaire", il est conseillé de sélectionner "Oui" pour le choix "Inclure les méthodes d'inscription" qui permet de garder l'auto-inscription pour les stagiaires. A vous de voir dans quel endroit de l'arborescence les importer pour les rendre facilement disponible pour vos usagers (par exemple, parmi les ressources pour les professionnels).
Création des utilisateurs et inscription aux séquences
Moodle fournit une fonctionnalité pour créer des utilisateurs (MoodleDoc). Cette fonctionnalité peut aussi les inscrire automatiquement à des séquences. Cette fonctionnalité est accessible via l'interface ou via la ligne de commande.
Créez un fichier
.csvavec les utilisateurs (voir example de fichier utilisateurs.csv).username,firstname,lastname,email,password,sysrole1,course1,role1,course2,role2,
jordan,Jordan,Richard,jordan.richard@padplus.org,randompassword,manager,,,,
rose,Rose,Garnier,rose.garnier@padplus.org,randompassword,,shortnamecourse,editingteacher,shortname2,studentPoints d'attention
- les 4 premiers champs sont requis - le champ "mot de passe" est requis ou non en fonction de la configuration du site ;
- sysrole1 : il s'agit de rôle au niveau système (instance globale) - dans une organisation PAD+, seuls les gestionnaires d'instance ont ce rôle
manager; aucun autre rôle ne doit être attribué à ce niveau ; - course1 : utiliser le nom court de la séquence ;
- role1 : rôle de l'utilisateur dans la séquence, soit editingteacher pour un intervenant normal, teacher pour un intervenant non éditeur, student pour un stagiaire.
Importez les utilisateurs (attention au chemin du fichier csv) :
php admin/tool/uploaduser/cli/uploaduser.php --file=../../../../donnees/utilisateurs.csv --delimiter_name=comma
Champs supplémentaires
Il existe de nombreux autres champs pour la création des utilisateurs (MoodleDoc).
Attribution des rôles utilisateurs dans les catégories
Pour finaliser une organisation PAD+, il faut que les utilisateurs se voient affecter les rôles adéquats dans les catégories concernées. Si cela est possible par des procédures manuelles dans l'interface, le script assign_category_roles.php permet d'attribuer ses rôles à partir d'un fichier .csv.
Créez un fichier
.csvavec les attributions des rôles par catégorie aux utilisateurs (voir example de fichier utilisateurs_categories.csv).category_name,role,username1,username2,username3
Site 1,coursecreator,farida,felix,
Ateliers 1,coursecreator,farida,felix,
Ateliers 1,student,sabine,sami,saraPoints d'attention
- category_name : le nom de la catégorie (le nom doit être unique - il s'agit normalement d'une catégorie à la racine) ;
- role : le rôle à attribuer dans cette catégorie, soit
managerpour un gestionnaire de site,coursecreatorpour un professionnel contributeur,studentpour un stagiaire ; - username_[number] : la liste des utilisateurs pour qui attribuer le rôle dans la catégorie ;
- l'attribution des rôles est idempotent : le script peut donc être joué plusieurs fois.
Attribuez les rôles (attention au chemin du fichier csv) :
php local/padplusextensions/cli/assign_category_roles.php ../../../donnees/utilisateurs_categories.csv
Automatisation des imports avec Ansible
Les étapes ci-dessus peuvent être enchaînées par un playbook Ansible si toutes les données sont préparées à l'avance.
Construisez votre dossier des données à importer avec les différents fichiers
.xml,.csvet.mbz. Voici un exemple d'organisation :📂 donnees
┣📂 backup
┃ ┣ architecture-construction.mbz
┃ ┣ les-metiers-du-numerique.mbz
┃ ┗ tout-sur-le-droit-au-logement.mbz
┣ category_1.xml
┣ category_2.xml
┣ sequences_1.csv
┣ sequences_2.csv
┣ utilisateurs.csv
┗ utilisateurs_categories.csvNommage du dossier source et chemins des fichiers
Lors de l'exécution du playbook, les données sont transférées sur le serveur, à la racine du site, dans un dossier qui porte le nom terminal du dossier source. Par exemple si vos données sont dans un dossier local
/PAD/donnees, les données seront transférées sur le serveur dans un dossier/var/www/my-pad.org/donnees(où/var/www/my-pad.org/est le dossier du site). Il faut donc choisir un nom terminal sans collision avec les sources du site. Le dossier de données sur le serveur est supprimé à la fin du playbook.Vérifiez que le chemin d'accès aux fichiers de sauvegarde est correct dans les fichiers csv de séquence. Le chemin est relatif au script Moodle
admin/tool/uploadcourse/cli/uploadcourse.php, et doit donc commencer par../../../../pour remonter à la racine du projet. Dans les exemples ci-dessus, le chemin vers les sauvegardes commence toujours par../../../../donnees/backup. On peut aussi utiliser des chemins absolus si connus d'avance.Dans votre fichier d'inventaire Ansible, rajouter une section
import_data. Notez qu'il est possible de scinder les spécifications des catégories et séquences en plusieurs fichiers qui seront lus les uns à la suite des autres :all:
children:
webservers:
hosts:
XXX # adresse du serveur web
vars:
moodle:
# ...paramètres Moodle
db:
# ...paramètres base de données
import_data: # paramètres pour l'import des données
# chemin vers le dossier source des données, sans barre oblique à la fin
source_folder: ../../PAD/donnees
# le nom terminal du dossier source sera le nom du dossier cible sur le serveur, ici 'donnees'
users_file: donnees/utilisateurs.csv
users_categories_file: donnees/utilisateurs_categories.csv
category_files:
- donnees/categories_1.xml
- donnees/categories_2.xml
course_files:
- donnees/sequences_1.csv
- donnees/sequences_2.csvExécutez le playbook Ansible
import_data.ymlavec votre fichier d'inventaire (e.g.my-pad.hosts.yml) :ansible-playbook import_data.yml -i my-pad.hosts.yml -u root
Exécution sélective des tâches
Il est possible de n'exécuter qu'une partie des tâches d'import avec les tags Ansibles. Notez que chaque étape dépend des précédentes :
- transfer-data : transfert des données d'import sur le serveur
- categories : création de l'arborescence des catégories
- courses : création de séquences dans l'arborescence
- users : création des comptes utilisateurs et inscription aux séquences
- users_categories : attribution des rôles utilisateurs dans les catégories
- cleanup : suppression du dossier de données sur le serveur
Par exemple, pour n'exécuter que la création des catégories puis des séquences :
ansible-playbook import_data.yml -i my-pad.hosts.yml -u root --tags categories,courses
Par défaut la première et dernière tâche sont toujours exécutées : transfert des données sur le serveur puis suppression quand les autres tâches sont effectuées.
Si on souhaite ignorer la tâche suppression pour conserver les données sur le serveur, il suffit d'utiliser la commande :
ansible-playbook import_data.yml -i my-pad.hosts.yml -u root --skip-tags cleanup
Tâches optionnelles
Le playbook définit aussi des tâches qui ne sont pas exécutées par défaut mais à la demande avec des tags :
--tags remove-misc-category: supprimer la catégorie par défaut de Moodle (avec l'identifiant 1, "Divers" ou "Miscellaneous").--tags force-single-activity-page: forcer le type d'activité "page" pour toutes les séquences à activité unique (le type d'activité n'est pas restauré par l'import, ces séquences se retrouvent alors avec une activité "forum" par défaut).--tags force-one-page-per-topic: forcer la mise en page de toutes les séquences à une séance par page (format recommandé pour la PAD+)--tags force-html-format-for-description-and-summary: forcer le format HTML pour les descriptions des catégories et les résumés des séquences (ce format n'est pas restauré par l'import).