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

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

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

Bonjour,

Quelqu'un saurait m'indiquer à quel endroit (tables Moodle) sont stockées les informations liées aux restrictions de disponibilités des activités ?

En effet, j'envisage de modifier par lot un ensemble de dates de début et fin de disponibilités d'un ensemble d'activités.

Merci d'avance,
Séverin

PS : si en bonus vous avez déjà une requête qui permet d'aller modifier par lot les dates d'une série de modules d'activité, je ne suis pas contre clin d’œil

Moyenne des évaluations  -
En réponse à Séverin Terrier

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

par Luiggi Sansonetti,
Avatar Développeurs de plugins Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Titulaires du Moodle Course Creator Certificate Avatar Traducteurs

bonsoir

aucune idée ;p

mais un plugin tiers permet de modifier en lot des dates...

https://docs.moodle.org/2x/fr/Dates

à voir si ça convient même le temps de ;p

edit :

ha ben non (voir l'avant dernier commentaire de Tim)

https://moodle.org/plugins/view.php?plugin=report_editdates

En réponse à Luiggi Sansonetti

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 Luiggi,

Merci pour ta réponse.

Tu as quand même réussi dans le même message à inclure le "j'en sais rien", le "peut-être", et le "finalement non" clin d’œil

Effectivement, ce plugin ne gère pas (actuellement en tout cas) les disponibilités conditionnelles. Et de toute façon, il permet de modifier toutes les dates d'un cours, ce qui n'est pas du tout ce que je recherche.

Je souhaite modifier les dates (déjà définie) d'un lot d'activités (Questionnaire) disséminées dans de nombreux cours, à la fois concernant la date liée au questionnaire (dans mdl_questionnaire) et dans les restrictions de disponibilités (dont je cherche l'emplacement).

Je prévois une requête SQL directe dans la base, mais il faut que je sache quel élément cibler...

Séverin

PS : en fait, ces Questionnaires sont disséminés dans les cours, pour l'évaluation des enseignements

En réponse à Séverin Terrier

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

par Luiggi Sansonetti,
Avatar Développeurs de plugins Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Titulaires du Moodle Course Creator Certificate Avatar Traducteurs

Merci pour ta réponse.

de rien

Tu as quand même réussi dans le même message à inclure le "j'en sais rien", le "peut-être", et le "finalement non" 

j'aime la rhétorique depuis mon Armorique grand sourire

Et de toute façon, il permet de modifier toutes les dates d'un cours, ce qui n'est pas du tout ce que je recherche.

ben oui mais si tu précises pas aussi pfff Non

je suis sûr que tu trouveras

En réponse à Luiggi Sansonetti

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

Effectivement, j'avais oublié de préciser cela dans mon message initial.

Mais ma question principale était tout de même "à quel endroit (tables Moodle) sont stockées les informations liées aux restrictions de disponibilités des activités ?" clin d’œil

J'espère bien trouver, oui !

En réponse à Séverin Terrier

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

par Bruno Malaval,
Avatar Moodleurs particulièrement utiles

ce ne serait pas dans :

mdl_course_modules => availability ?

(un exemple dans ma base : {"op":"&","showc":[true],"c":[{"type":"date","d":">=","t":1434118800}]} )

Visiblement, c'est une expression qui recense TOUTES les contraintes de disponibilité, groupe, date, etc ...

Il va falloir sortir une belle expression régulière pour modifier uniquement les dates de disponibilité ....  cool

Moyenne des évaluations Utile (4)
En réponse à Bruno Malaval

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

Merci Bruno, c'est effectivement bien dans ce champ là sourire

Bon, reste à espérer que mes éléments soient tous similaires, pour que je puisse effectuer un changement par lot relativement facilement.

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,

Pour donner quelques informations à ce propos (éléments détaillés de restriction de disponibilité), j'ai lancé quelques requêtes pour en savoir plus.

Ce qui m'intéresse est l'activité Questionnaire (id=23 dans notre table des modules d'activité mdl_modules).

Du coup, pour avoir la liste de ces activités, avec leur cours, et les codages de restriction, j'ai lancé :

SELECT id, course, instance, availability FROM mdl_course_modules WHERE module=23;

Puis pour connaitre le nombre d'occurrences de chaque restriction, j'ai lancé ceci :

SELECT DISTINCT availability, COUNT(1) FROM mdl_course_modules WHERE module=23 GROUP BY availability;

Je m'aperçois que j'ai principalement des résultats de restriction de cette forme :
{"op":"&","c":[{"type":"date","d":">=","t":1425974400},{"type":"date","d":"<","t":1429479000}],"showc":[true,false]}
ou celle-ci (seules les dates changent) :
{"op":"&","c":[{"type":"date","d":">=","t":1415692800},{"type":"date","d":"<","t":1417991400}],"showc":[true,false]}

La conversion des dates donne :

  • 1425974400 =10/03/2015 à 8h00 UTC (soit 9h00 en France)
  • 1429479000 = 19/04/2015 à 21h30 UTC (soit 23h30 en France, c'est l'heure d'été à cette période)
  • 1415692800 = 11/11/2014 à 8h00 UTC (soit 9h00 en France)
  • 1417991400 = 07/12/2014 à 22h30 UTC (soit 23h30 en France)

Et si je veux connaitre les noms des activités, je lance par exemple cette requête :

SELECT cm.id, cm.course, cm.instance, q.name
FROM mdl_course_modules AS cm, mdl_questionnaire AS q
WHERE cm.module=23
AND q.id=cm.instance
AND cm.availability='{"op":"&","c":[{"type":"date","d":">=","t":1425974400},{"type":"date","d":"<","t":1429479000}],"showc":[true,false]}';

Sachant identifier les dates et les titres de mes activités Questionnaire, et les éléments étant tous similaires, je peux donc envisager des modifications assez facilement sourire

Séverin

Moyenne des évaluations Utile (2)
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, 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