Ca me titillait alors j'ai creusé.
Alors, si je dis pas de bêtise, la liste est remplie avec toutes les cohortes auxquelles appartiennent tous participants du cours.
Vous allez me dire : bah ce sont les cohortes avec lesquelles le cours est synchronisé ? Et non, pas que : Moodle va chercher TOUTES les cohortes qui sont au niveau catégorie/ss-catégorie/système et dans lesquels les participants sont inscrits.
Prenons un exemple : un cours de "Licence 2 Mathématiques". Pour inscrire les utilisateurs du cours, j'ai synchronisé la cohorte "2014 L2 Maths". Dans cette cohorte, il y a Julie. Il se trouve que Julie est également inscrite en "2014 L2 Psycho". Il existe aussi une cohorte "Etudiants" dans lequel tous les étudiants sont inscrits. Donc elle en fait aussi partie.
Enfin sur ma PF, j'ai gardé pour le moment les cohortes 2013. Et donc Julie fait partie de la cohorte "2013 L1 Maths".
Eh bien toutes ces cohortes sont ajoutées à la liste (pas que celle de Julie hein) avec un petit numéro. Pr rappel l'enseignant n'a choisi que le public "2014 L2 Maths", mais il voit :
2014 L2 Maths (50)
2014 L2 Psycho (1)
Enseignants (5)
Etudiants (50)
2013 L1 Maths (1)
Les chiffres () représentent les nombres de "membres", je m'explique :
- 50 = 50 participants du cours qui sont dans la cohorte 2014 L2 Maths y compris Julie (normal j'ai fait la synchro avec le cours, 50 est donc le nombre de membres de cette cohorte)
- 1 = 1 participant du cours qui est dans la cohorte 2014 L2 Psycho => la fameuse Julie (mais en vrai dans la cohorte il y a 70 personnes niveau système, 1 est le nombre de participant du cours qui sont dans cette cohorte)
- 5 = 5 participants du cours qui est dans la cohorte Enseignants : les 5 enseignants inscrits à la main (mais Moodle est parti récupérer les cohortes systèmes dans lesquels ils sont aussi inscrits)
- 50 = 50 participants du cours qui sont dans la cohorte Etudiants y
compris Julie
- 1 = 1 participant du cours qui est dans la cohorte 203 L1 Maths => la fameuse Julie
En y réfléchissant ce n'est pas idiot : j'ai pris un exemple simple ci-dessus mais poussons le raisonnement : prenons maintenant le cours "3GPH31 - Histoire du XXe siècle" dispensé à la fois en "L1 histoire (H1HIS141)" et en "L1 Géographie (H1GEO141)".
J'attache désormais mon cours à la cohorte "3GPH31" dans lesquels sont inscrits uniquement les 120 étudiants qui suivent ce cours qu'ils soient de L1 Histoire ou de Géo.
Si je veux ensuite créer des groupes à partir des cohortes, Moodle va me proposer dans la liste : (évidemment il faut que j'ai créé les cohortes niveau diplôme)
- 3GPH31 (120)
- H1HIS141 (78)
- H1GEO141 (42)
Cela me permet donc de créer automatiquement 4 groupes pour les étudiants d'Histoire et puis 3 groupes pr ceux de Géo.
C'est pas bête MAIS :
- c'est pas simple : de prime abord les cohortes qui apparaissent n'ont rien de cohérent pour l'enseignant
- il faut que le système d'information et Moodle soit béton
Bon déjà chez moi, les inscriptions pédagogiques sont loin d'être saisies suffisamment et d'autres part, la synchro avec les cohortes se fait encore pour le moment à la connexion de l'étudiant. Mais même si je synchronisais tout automatiquement, la création automatique des groupes n'est toujours que partielle : si un étudiant s'inscrit ou change son inscription, il n'est pas inscrit automatiquement dans un groupe (d'où les autres plugins développés : https://moodle.org/mod/forum/discuss.php?d=256039#p1176831)
Et si toutes les inscriptions étaient à jour, dans mon 2e exemple, la liste des cohortes seraient interminables (si on considère que chaque étudiant est inscrit à 30 cours par exemple au niveau de l'IP).
Bref, à mon humble avis, il faudrait ajouter un paramètre de comportement : par défaut, seules les cohortes synchronisés avec le cours devraient apparaître ici. Et si on les veut toutes, il faudrait cocher une case dans la config de Moodle.
Je dis ca, j'ai résolu mon souci en retirant la permission, mais cette fonctionnalité pourrait bien m'être demandé !
Le code de la fonction qui gère cette liste est là : line 213 of file cohort/lib.php.
cohort_get_visible_list |
( |
|
$course, |
|
|
|
$onlyenrolled = true |
|
) |
|
|
La requête sql est la suivante :
SELECT c.id, c.name, c.contextid, c.idnumber, COUNT(u.id) AS cnt
FROM cohort c
JOIN (cohort_members cm
JOIN (SELECT DISTINCT eu1_u.id
FROM user eu1_u
JOIN user_enrolments eu1_ue ON eu1_ue.userid = eu1_u.id
JOIN enrol eu1_e ON (eu1_e.id = eu1_ue.enrolid AND eu1_e.courseid = 1626*)
WHERE eu1_u.deleted = 0 AND eu1_u.id <> 1*)
u ON u.id = cm.userid) ON cm.cohortid = c.id
WHERE c.contextid IN (82*,35*,1*)
GROUP BY c.id, c.name, c.contextid, c.idnumber HAVING COUNT(u.id) > 0
ORDER BY c.name, c.idnumber
Les chiffres avec des * sont des paramètres :
- [eu1_guestid] => 1
- [eu1_courseid] => 1626
- [param8] => 82 = id du contexte de la sous-catégorie (dans laquelle se trouve le cours)
- [param9] => 35 = id du contexte de la catégorie (dans laquelle se trouve la ss categ)
- [param10] => 1 = id du contexte système