Forum d'annonces réservé aux étudiants de l'année précédente

Forum d'annonces réservé aux étudiants de l'année précédente

par Séverin Terrier,
Nombre de réponses : 1
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Bonjour,

Ceci n'est pas une question, mais plutôt la présentation de la manière dont nous avons répondu à un besoin, et qui peut servir à d'autres personnes / établissements.

En préambule, petite présentation de quelques points de fonctionnement de notre université :

  • La plupart des formations bénéficient d'un "Espace général", qui regroupe les informations générales liées à la formation (et pas à une matière) ; ces "espaces généraux" sont principalement utilisés pour leur forum d'annonce, afin de faire parvenir des informations aux étudiants
  • Les cours Moodle sont ré-utilisés d'une année sur l'autre (et pas re-créés chaque année)
  • Il y a encore des informations à faire passer aux étudiants qui terminent leur année, alors que d'autres étudiants en commencent une nouvelle (dans le même cours Moodle)

Du coup, nous avons regardé comment ajouter dans les cours "Espace général" un forum "Annonces année précédente", qui ne serait visible que des étudiants qui terminent leur année, et pas des nouveaux étudiants. Les anciens étudiants ne devant par contre plus accéder au forum d'annonces.

Pour la première partie, la solution retenue est la suivante :

  • création d'un groupe "Promotion de l'année précédente"
  • création d'un forum "Annonces année précédente"
  • restriction du forum à ce groupe
Comme des dizaines de cours sont concernés, ces éléments sont sauvegardés, dans une sauvegarde "modèle".
Une requête nous permet de trouver les différents cours "Espace général", et de préparer un fichier plat, à partir duquel nous ferons une restauration par lot des éléments (groupe + forum restreint au groupe) en les ajoutant à tous les cours ou c'est souhaité.

Il restera ainsi, juste avant de procéder à l'inscription des étudiants de la nouvelle année, à :
  • inscrire tous les étudiants actuels dans le groupe "Promotion de l'année précédente" (c'est facile, sélectionner "tout le monde")
  • basculer les messages du forum "Annonces" vers le forum "Annonces année précédente"
Ça, c'était la partie facile, qui consistait à ajouter des éléments. Je détaille la suite dans un autre message.

Séverin

Moyenne des évaluations Utile (1)
En réponse à Séverin Terrier

Re: Forum d'annonces réservé aux étudiants de l'année précédente

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Le but maintenant est de modifier les forums d'annonces, afin qu'ils soient inaccessibles (et masqués) aux gens inscrits dans le groupe "Promotion de l'année précédente".

Il faut donc pour cela modifier de façon automatique les forums concernés, pour leur définir une condition de disponibilité. J'ai donc défini cette restriction sur un cours de test, pour relever la valeur en question, dans la table mdl_course_modules pour le champ availability.

Cela me permet de connaitre la forme de restriction à appliquer. Il me restera à trouver de façon dynamique l'identifiant du groupe, en fonction du cours concerné.

Pour la suite, je suis donc reparti de requêtes élaborées il y a quelques temps, et me permettant de modifier par lot les conditions de disponibilités, afin de rédiger les requêtes nécessaires.

Dans un premier temps, je regarde les éléments qui seraient concernés :

SELECT c.id, c.shortname, c.fullname
     , f.id, f.name
     , g.id, g.name
     , CONCAT('{"op":"!&","c":[{"type":"group","id":', g.id, '}],"show":false}') AS availability
FROM                     -- Les tables à utiliser
      mdl_course         AS c
     ,mdl_course_modules AS cm
     ,mdl_forum          AS f
     ,mdl_modules        AS m
     ,mdl_groups         AS g
WHERE m.name             = 'forum'
  AND cm.module          = m.id
  AND f.id               = cm.instance
  AND cm.course          = c.id
  AND c.fullname      LIKE '%Espace général%'
  AND c.fullname  NOT LIKE '%2015/2016%'
  AND f.name             = 'Annonces générales'
  AND g.courseid         = c.id
  AND g.name             = 'Promotion de l\'année précédente'
;

Puis voila la requête qui me permet de modifier les valeurs concernées :

UPDATE                   -- Les tables à utiliser
mdl_course         AS c
,mdl_course_modules AS cm
,mdl_forum          AS f
,mdl_modules        AS m
,mdl_groups         AS g
SET                      -- Les champs à mettre à jour
cm.availability    = CONCAT('{"op":"!&","c":[{"type":"group","id":', g.id, '}],"show":false}')
WHERE m.name             = 'forum'
AND cm.module          = m.id
AND f.id               = cm.instance
AND cm.course          = c.id
AND c.fullname      LIKE '%Espace général%'
AND c.fullname  NOT LIKE '%2015/2016%'
AND f.name             = 'Annonces générales'
AND g.courseid         = c.id
AND g.name             = 'Promotion de l\'année précédente'
;


Attention : il faudra bien évidemment adapter ces requêtes en fonction de vos nommages, et éventuellement affiner les conditions de sélection de la requête, pour limiter à certains cours.

Attention : pour que les modifications de restrictions de disponibilités (faites directement en base de données) s'appliquent au niveau de l'interface, il est nécessaire de "vider tous les caches" !

Séverin

Moyenne des évaluations Utile (1)