Skip to content

Latest commit

 

History

History
134 lines (80 loc) · 4.86 KB

File metadata and controls

134 lines (80 loc) · 4.86 KB

Configuration

On suit toutes les étapes expliquées ici :

https://moodle.gymnasedebeaulieu.ch/admin/category.php?category=webservicesettings

Un rôle spécifique webservice role

https://moodle.gymnasedebeaulieu.ch/admin/roles/manage.php

Le rôle webservice doit avoir les capabilités :

  • moodle/course:viewhiddencourses pour pouvoir lister les cours cachés et obtenir leur id pour pouvoir les supprimer
  • moodle/course:view pour pouvoir supprimer des cours dont l'utilisateur webservice n'est pas membre
  • moodle/cohort:view pour voir les cohortes
  • moodle/cohort:create pour créer les cohortes
  • moodle/cohort:manage pour supprimer les cohortes
  • moodle/user:viewdetails + moodle/site:viewuseridentity pour pouvoir récupérer les informations des élèves

Une config dans les politiques utilisateur

Afin de pouvoir récupérer les emails des utilisateurs existants dans moodle, il faut que le champ "email" soit coché dans la section "Afficher l'identité de l'utilisateur" de cette page

https://moodle.gymnasedebeaulieu.ch/admin/settings.php?section=userpolicies

Un utilisateur spécifique webservice_user

Cet utilisateur doit avoir la méthode d'authentification "comptes manuels" (on doit donc inventer un mot de passe)

On est forcé d'assigner une adresse email unique à cet utilisateur technique (on l'invente)

Assigner le rôle webservice role à cet utilisateur en utilisant https://moodle.gymnasedebeaulieu.ch/admin/roles/assign.php?contextid=1

Un service spécifique admin_api

https://moodle.gymnasedebeaulieu.ch/admin/settings.php?section=externalservices

Avec les fonctions dont on a besoin:

  • core_cohort_create_cohorts

  • core_cohort_delete_cohorts

  • core_cohort_get_cohort_members

  • core_cohort_search_cohorts

  • core_course_delete_courses

  • core_course_get_categories

  • core_course_get_courses_by_field

  • core_course_search_courses

  • core_user_get_users_by_field`

Avec webservice user comme seul utilisateur autorisé

Générer un jeton

Générer un jeton pour l'utilisateur webservice_user. https://moodle.gymnasedebeaulieu.ch/admin/webservice/tokens.php

  • Cliquer sur le bouton "Créer jeton"

    • Utilisateur : webservice user
    • Service : admin_api
    • Valide jusqu'au : un an plus tard
  • Le jeton est affiché (et ne le sera plus jamais). Copier la valeur du jeton.

Exporter une variable d'environnement TOKEN avec la valeur de ce jeton.

Il est aussi possible de créer un fichier .env avec une ligne TOKEN=la valeur du jeton. Ce fichier sera automatiquement lu par le programme au démarrage

Utilisation

Pour supprimer les cours

Note : Le script supprime aussi les backups de cours. Supprimer les cours à la main fait la même chose.

  • Aller sur la page https://moodle.gymnasedebeaulieu.ch/course/management.php pour trouver l'id de la catégorie de cours à supprimer (le script supprime récursivement tous les cours dans cette catégorie et ses sous-catégories)

  • Lancer le script en passant l'id de la catégorie à supprimer en paramètre

  • Le script liste les cours qui vont être supprimés. Confirmer la suppression. Le script tourne pendant plus d'une heure et affiche une barre de progression. En juillet 2023 le script a pris 1h20, l'utilisation disque est passée de 139GB a 51GB.

  • Vérifier dans Moodle que la catégorie et les sous-catégories ne contiennent plus de cours

  • Supprimer manuellement les catégories (choisir supprimer les sous-catégories)

Technique

Documentation des webservices

Documentation automatique générée par notre instance https://moodle.gymnasedebeaulieu.ch/admin/webservice/documentation.php

Comprendre l'erreur dml_missing_record_exception

Quand on se trompe de nom de fonction webservice on obtient une erreur très bas niveau:

 'exception': 'dml_missing_record_exception', 'errorcode': 'invalidrecord',
 'message': "Can't find data record in database table external_functions."

Comprendre accessexception

On obtient une accessexception si on a soit oublié d'ajouter la permission, soit oublié d'ajouter la fonction

Trouver le code source qui traite un appel à une fonction webservice

En utilisant le code source de Moodle sur github:

Obtenir des exceptions plus détaillées

En réglant les messages de déboggage à "Normal":

https://moodle.gymnasedebeaulieu.ch/admin/settings.php?section=debugging

on obtient un champ supplémentaire "debuginfo" dans les exceptions

Contextes

On passe des contextes un peu partout aux fonctions webservice. Voici une doc qui aide à comprendre :

https://docs.moodle.org/404/en/Context

On trouve aussi les noms à utiliser dans l'API dans le code source de Moodle : moodle/lib/classes/context/