Restreindre la disponibilité : quelles tables (pour modification par lot) ?

Re: Restreindre la disponibilité : quelles tables (pour modification par lot) ?

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

Bonjour,

Voila, j'ai pu modifier les dates de restriction de disponibilité des différentes activités Questionnaires liées à l'évaluation des enseignements (environ 500 cours/questionnaires).

J'ai utilisé pour cela des requêtes de la forme suivante :

UPDATE mdl_course_modules AS cm, mdl_questionnaire AS q
SET cm.availability='{"op":"&","c":[{"type":"date","d":">=","t":1459234800},{"type":"date","d":"<","t":1460928600}],"showc":[true,false]}' WHERE cm.module=23
AND q.name LIKE 'Questionnaire évaluation des enseignements% pair%'
AND q.id=cm.instance
  AND cm.availability='{"op":"&","c":[{"type":"date","d":">=","t":1425974400},{"type":"date","d":"<","t":1429479000}],"showc":[true,false]}';

Et j'ai également modifié les dates "internes" des questionnaires en adéquation :

UPDATE mdl_questionnaire
SET opendate=1459234800, closedate=1460928600
WHERE id IN (SELECT instance
FROM mdl_course_modules
WHERE availability='{"op":"&","c":[{"type":"date","d":">=","t":1459234800},{"type":"date","d":"<","t":1460928600}],"showc":[true,false]}');

il me restera à gérer l'exportation de toutes ces données, sous forme exploitable facilement.

Séverin

PS : voila, j'ai mon bloc-note pour l'année prochaine clin d’œil

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

Re: Restreindre la disponibilité : quelles tables (pour modification par lot) ?

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

Bonjour,

Voila, je le savais que ma documentation (partagée) en ligne me resservirait langue tirée clin d’œil

Mais du coup, cette année, j'ai légèrement modifié le mode de fonctionnement. En effet, il était compliqué de s'appuyer sur les restrictions de dates comme critère pour modifier celles-ci, notamment parce qu'avec la réinitialisation des cours (au fil du temps), il y avait un trop grand nombre de restrictions différentes.

Du coup, je suis parti sur autre chose, en me basant sur les titres du questionnaire et de l'espace de cours. Il faut donc s'assurer que les cours sont bien rangés dans les bonnes catégories, et possèdent des titres adéquates. Les questionnaires (d'évaluation des enseignements) doivent également porter la bonne mention de semestre notamment.

J'ai donc lancé plusieurs requêtes de vérification et de correction, dont voici quelques exemples.


Liste des questionnaires de "M1" ayant dans leur titre "Licence" (suite à mauvaise mise en place). Cette liste permettra une comparaison visuelle :

SELECT c.id, c.fullname, cm.id, cm.instance, q.name
       , REPLACE(q.name, 'Licence', 'Master 1') AS Nom
FROM
      mdl_course         AS c
     ,mdl_course_modules AS cm
     ,mdl_questionnaire  AS q
WHERE cm.module          = 23
  AND q.id               = cm.instance
  AND cm.course          = c.id
  AND c.visible          = 1
  AND q.name             LIKE 'Questionnaire évaluation des enseignements%'
  AND c.fullname         LIKE '[% M1 %'
  AND cm.availability    LIKE '%date%'
ORDER BY c.fullname;


Et requête de correction de ces questionnaires :

UPDATE
      mdl_course         AS c
     ,mdl_course_modules AS cm
     ,mdl_questionnaire  AS q
SET   q.name             = REPLACE(q.name, 'Licence', 'Master 1')
WHERE cm.module          = 23
  AND q.id               = cm.instance
  AND cm.course          = c.id
  AND c.visible          = 1
  AND q.name             LIKE 'Questionnaire évaluation des enseignements%'
  AND c.fullname         LIKE '[% M1 %'
  AND cm.availability    LIKE '%date%'
;



Liste des questionnaires de semestre 1 ("S1") ayant dans leur titre " pair" (suite à mauvaise mise en place). Cette liste permettra une comparaison visuelle :

SELECT c.id, c.fullname, cm.id, cm.instance, q.name
       , REPLACE(q.name, ' pair', ' impair') AS Nom
FROM
      mdl_course         AS c
     ,mdl_course_modules AS cm
     ,mdl_questionnaire  AS q
WHERE cm.module          = 23
  AND q.id               = cm.instance
  AND cm.course          = c.id
  AND c.visible          = 1
  AND q.name             LIKE 'Questionnaire évaluation des enseignements%'
  AND c.fullname         LIKE '[% S1]%'
  AND cm.availability    LIKE '%date%'
ORDER BY c.fullname;


Et requête de correction de ces questionnaires :

UPDATE
      mdl_course         AS c
     ,mdl_course_modules AS cm
     ,mdl_questionnaire  AS q
SET   q.name             = REPLACE(q.name, ' pair', ' impair')
WHERE cm.module          = 23
  AND q.id               = cm.instance
  AND cm.course          = c.id
  AND c.visible          = 1
  AND q.name             LIKE 'Questionnaire évaluation des enseignements%'
  AND c.fullname         LIKE '[% S1]%'
  AND cm.availability    LIKE '%date%'
;



En regardant cela, je me suis aperçu que certains cours comportaient des doubles espaces dans leurs titres. Cette liste permettra une comparaison visuelle :

SELECT c.id, c.fullname, REPLACE(c.fullname, '  ', ' ') AS Nom
FROM   mdl_course AS c
WHERE  c.fullname LIKE '%  %';


J'ai donc corrigé cela :

UPDATE mdl_course AS c
SET    c.fullname = REPLACE(c.fullname, '  ', ' ')
WHERE  c.fullname LIKE '%  %';


Reste maintenant à passer aux choses sérieuses, à propos des questionnaires en eux-même.

Liste des questionnaires concernés pour le droit (commençant par "[D") :

SELECT c.id, c.fullname, cm.id, cm.instance, q.name, cm.availability
FROM
      mdl_course         AS c
     ,mdl_course_modules AS cm
     ,mdl_questionnaire  AS q
WHERE cm.module          = 23
  AND q.id               = cm.instance
  AND cm.course          = c.id
  AND c.visible          = 1
  AND c.fullname         LIKE '[D%'
  AND q.name             LIKE 'Questionnaire évaluation des enseignements% impair%'
  AND cm.availability    LIKE '%date%'
ORDER BY c.fullname;


Et mise à jour des dates, à la fois en "restriction de disponibilité" et directement au sein des questionnaires (en une seule requête, mieux que l'année dernière) :

UPDATE
      mdl_course         AS c
     ,mdl_course_modules AS cm
     ,mdl_questionnaire  AS q
SET  
      cm.availability    = '{"op":"&","showc":[true,false],"c":[{"type":"date","d":">=","t":1479801600},{"type":"date","d":"<","t":1481495400}]}'
     ,q.opendate         = 1479801600
     ,q.closedate        = 1481495400
WHERE cm.module          = 23
  AND q.id               = cm.instance
  AND cm.course          = c.id
  AND c.visible          = 1
  AND c.fullname         LIKE '[D%'
  AND q.name             LIKE 'Questionnaire évaluation des enseignements% impair%'
  AND cm.availability    LIKE '%date%'
;

Les lecteurs attentifs remarqueront que j'ai retouché la présentation de mes requêtes, afin d'en améliorer la lisibilité.
En espérant que cela puisse servir à d'autres, ou donner des idées/inspirations. Au pire, ça me resservira l'année prochaine clin d’œil

Séverin

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

Re: Restreindre la disponibilité : quelles tables (pour modification par lot) ?

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

Re-bonjour,

Ayant découvert récemment que l'on peut, en SQL, définir des commentaires (qui commencent par "-- ") et des variables internes (qui commencent par @), j'ai encore amélioré la requête de modification afin de pouvoir spécifier directement les dates dedans, de façon claire. Et j'ai aussi couplé avec la table des modules, pour que le ciblage des activités "Questionnaire" soit automatique (et plus à définir "en dur").

Du coup, cela donne ceci :

-- Définition des dates d'ouverture / fermeture à utiliser
SET @DEBUT               = UNIX_TIMESTAMP ('2016-11-22 09:00:00');

SET @FIN                 = UNIX_TIMESTAMP ('2016-12-11 23:30:00');
UPDATE                   -- Liste des tables à utiliser
      mdl_course         AS c
     ,mdl_course_modules AS cm
     ,mdl_questionnaire  AS q
    ,mdl_modules        AS m
SET                      -- Les champs à mettre à jour

      cm.availability    = CONCAT('{"op":"&","showc":[true,false],"c":[{"type":"date","d":">=","t":',
                                                  
@DEBUT, '},{"type":"date","d":"<","t":', @FIN, '}]}')
     ,q.opendate         = @DEBUT
     ,q.closedate        = @FIN
WHERE m.name             = 'questionnaire'
  AND cm.module          = m.id
  AND q.id               = cm.instance
  AND cm.course          = c.id
  AND c.visible          = 1
  AND c.fullname         LIKE '[D%'
  AND q.name             LIKE 'Questionnaire évaluation des enseignements% impair%'
  AND cm.availability    LIKE '%date%'
;

Séverin

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

Re: Restreindre la disponibilité : quelles tables (pour modification par lot) ?

par Patrick Lemaire,
Avatar Développeurs de plugins Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Comme c'est boooooo yeux grands ouverts

Et en plus, ça m'inspire plein de belles requêtes... Oui

Merci Séverin !
Patrick

En réponse à Patrick Lemaire

Re: Restreindre la disponibilité : quelles tables (pour modification par lot) ? - Présentation requêtes SQL

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

Pour la présentation, j'avais "découvert" ça sur la documentation ou la discussion sur les requêtes SQL personnalisées, notamment par Darko Miletić, par exemple ici.

Et pour les commentaires et les variables, c'est en faisant diverses recherches à propos de requêtes SQL récemment. J'ai d'ailleurs découvert plusieurs autres trucs que je ne connaissais pas ; il faudrait peut-être que j'en fasse un sujet de discussion un de ces jours (pour un "bloc-note" utile à l'avenir), avant d'avoir tout oublié.

Alors, certes, ça prend quelques lignes de plus, un peu de temps en plus (pour faire la mise en forme initiale), mais en terme de lisibilité, c'est le jour et la nuit !

Et le choix de mettre des virgules en début limite le risque, quand tu modifies ta requête pour ajouter / retirer un élément à ramener, d'oublier de mettre/enlever une virgule, qui entrainerait une erreur d'exécution, qu'on met parfois du temps à repérer...

Si ça peut t'inspirer, tant mieux sourire

Séverin

En réponse à Séverin Terrier

Re: Restreindre la disponibilité : quelles tables (pour modification par lot) ?

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

Bonjour,

On m'a demandé de fermer ces questionnaires d'évaluation (enlever les dates d'ouverture/fermeture, les restrictions d'accès, et "fermer aux étudiants"), et de modifier leur description.

Pour cela, j'ai utilisé la requête suivante :

UPDATE                   -- Liste des tables à utiliser
      mdl_course         AS c
     ,mdl_course_modules AS cm
     ,mdl_questionnaire  AS q
    ,mdl_modules        AS m
SET                      -- Les champs à mettre à jour

      cm.availability    = NULL
     ,cm.visible = 0
,cm.visibleold = 0
,q.opendate         = 0
     ,q.closedate        = 0
,q.intro = "<p>Questionnaire d'évaluation fermé. Vous pouvez l'ouvrir manuellement.</p>"
WHERE m.name             = 'questionnaire'
  AND cm.module          = m.id
  AND q.id               = cm.instance
  AND cm.course          = c.id
  AND q.name             LIKE 'Questionnaire évaluation des enseignements%pair%'
  AND cm.availability    LIKE '%date%'
;

Pour que les changements soient visibles directement dans l'interface, il faut penser à vider les caches.

Séverin