Lister les cours non actifs depuis un certain temps

Lister les cours non actifs depuis un certain temps

par Sébastien Mehr,
Nombre de réponses : 4
Avatar Développeurs Avatar Testeurs

Bonjour à tous,

En cette période de reprise, j'ai eu une demande d'une collègue ingénieure pédagogique pour identifier les cours qui ne sont plus utilisés ou actifs depuis un moment afin de faire du ménage au sein d'une catégorie.

Du coup j'ai réalisé une requête qui :

  • récupère les id des cours ayant enregistrés des actions (logs) depuis une date définie via une sous requête
  • récupère ensuite la liste de tous les cours de la plateforme ne figurant pas dans cette liste (et donc qui n'ont pas enregistré d'actions depuis la date précédemment définie)
Voici cette requête (compatible uniquement PostgreSQL à cause de la gestion de la date mais facilement transposable pour MariaDB/Mysql) :

SELECT c.id, c.shortname, c.fullname, ca.name AS "category" from mdl_course c
INNER JOIN mdl_course_categories AS ca ON c.category = ca.id
WHERE ca.path like '/8%' # ID de la catégorie parent
AND c.id not IN
    (SELECT distinct(courseid) from mdl_logstore_standard_log mlsl
     WHERE timecreated > extract(epoch from TO_TIMESTAMP('01-09-2020 01:00:00', 'DD-MM-YYYY HH:MI:SS'))
     AND userid != 2 # On ignore les actions effectuées par le compte admin )
Celle-ci fonctionne bien mais peut mettre du temps à s’exécuter.

Avez-vous été déjà confronté à cette problématique ? Avez-vous une autre technique pour identifier des cours non "actifs" ?

Seb

Moyenne des évaluations  -
En réponse à Sébastien Mehr

Re: Lister les cours non actifs depuis un certain temps

par Christian Bocquet,
Avatar Moodleurs particulièrement utiles

Bonjour,

On pourrait faire le choix qu'un cours non actif est un cours que les participants ne consultent plus depuis une certaine date, et utiliser la table mdl_user_lastaccess

Christian
Moyenne des évaluations Utile (1)
En réponse à Christian Bocquet

Re: Lister les cours non actifs depuis un certain temps

par Olivier Valentin,
Avatar Développeurs de plugins Avatar Moodleurs particulièrement utiles
Bonjour,

ou alors, on peut considérer un cours comme non actif s'il n'a pas un certain nombre de lignes de logs à son actif depuis un certain temps.
Un exemple de ce que cela donne en requête SQL :

SELECT c.id, c.fullname AS 'Nom du cours', COUNT(l.id) AS 'Activité',c.visible AS 'Visible',
DATE_FORMAT(FROM_UNIXTIME(c.timecreated), '%Y-%m-%d %H:%i') AS created,
DATE_FORMAT(FROM_UNIXTIME(c.timemodified), '%Y-%m-%d %H:%i') AS modified
FROM mdl_course AS c, mdl_logstore_standard_log AS l
WHERE l.courseid = c.id
GROUP BY c.id
HAVING Activité < 30

Tout cela rejoint un peu les discussions autour du "ménage" dans Moodle qui avaient eu lieu ici entre autres : https://moodle.org/mod/forum/discuss.php?d=37971
On retrouve toujours le fait que chacun a une manière de faire fonctionner son instance, et chacun aura donc sa façon de considérer ce que représente l'inactivité, s'il doit faire du ménage ou pas (par exemple si une instance est millésimée, le ménage devient peu intéressant)...

Pour ma part, en résumé, je lance des requêtes afin de repérer les cours n'enregistrant plus de connexions, ceux qui n'ont plus de logs de modifications par l'enseignant, les cours SANS enseignants, les cours totalement vides etc. Pour certaines recherches, je lance directement en SQL ; pour d'autres, je peux directement m'appuyer sur les statistiques que nous génère notre dispositif ELK.

Olivier

Moyenne des évaluations Utile (3)
En réponse à Olivier Valentin

Re: Lister les cours non actifs depuis un certain temps

par Daniel Méthot,
Avatar Moodleurs particulièrement utiles
Bonjour,
Même le tableau de bord plateforme ou le tableau de bord des cours ne donne pas cette information. Sauf à aller voir cours après cours la courbe des requêtes.
requetes
Mais cette fréquentation est souvent liée à l'organisation pédagogique annuelle: Cours séquencés, successifs, annuels, trimestriels ou semestriels, permanents...

Peut-être pourrait-on intégrer la requête demandée dans les modèles d'analyse de données ?
analyse
Mais dès qu'il s'agit de programmer je suis aux abonnés absents.
Daniel
En réponse à Daniel Méthot

Re: Lister les cours non actifs depuis un certain temps

par Sébastien Mehr,
Avatar Développeurs Avatar Testeurs
Merci à tous pour vos précieuses réponses.

J'ai fait quelques essais en ce qui concerne les requêtes sur les tables mdl_logstore_standard_log et mdl_user_lastaccess. J'arrive plus ou moins au même résultat selon que j'utilise l'une ou l'autre table. La seule différence que j'ai relevé c'est qu'en requêtant sur la table mdl_logstore_standard, on peut prendre en compte les connexions d'utilisateurs totalement anonymes (avec un id utilisateur à 0) lorsque le cours est ouvert à tous sans compte invité. En y réfléchissant ça parait logique, pour pouvoir enregistrer une action, dans la plupart des cas, si l'on ignore les actions effectuées par le compte administrateur, il faut forcément qu'un utilisateur accède au cours pour qu'une action apparaisse dans les logs.

Du coup, dans mon cas de figure, si l'on veut connaître les cours d'une catégorie n'ayant eu aucun accès (et donc aucune action) depuis une date précise voici la requête la plus rapide :

SELECT c.id, c.shortname, c.fullname, ca.name AS "category" from mdl_course c
INNER JOIN mdl_course_categories AS ca ON c.category = ca.id
WHERE ca.path like '/8%'
AND c.id not IN
(select distinct(courseid) from mdl_user_lastaccess mul
where timeaccess > extract(epoch from TO_TIMESTAMP('01-09-2020 01:00:00', 'DD-MM-YYYY HH:MI:SS'))
AND userid != 2)

Seb
Moyenne des évaluations Utile (4)