health.php : Question categories should belong to a valid context

health.php : Question categories should belong to a valid context

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

Bonjour à tou(te)s,

Dans le cadre de la mise à jour vers Moodle 2.3 (en passant par Moodle 2.2), j'ai commencé par effectuer quelques vérifications sur mes Moodle 1.9, afin de les assainir un maximum, et limiter les risques de plantage lors de la mise à jour.

En utilisant moodle/admin/health.php (sous 1.9), je suis tombé sur l'erreur "Question categories should belong to a valid context".

Grâce à la requête fournie :

DELETE FROM mdl_question_categories WHERE NOT EXISTS (SELECT * FROM mdl_question q WHERE q.category = mdl_question_categories.id)
AND NOT EXISTS (SELECT * FROM mdl_context con WHERE contextid = con.id);

j'ai pu supprimer les catégories qui étaient vides. Par contre, il me reste 2 catégories comportant des questions, ce qui est plus problématique...

Après analyse des questions concernées (463 et 693 sont les id de mes catégories de question à problème) :

SELECT id, category, name, questiontext, timecreated, timemodified, createdby FROM mdl_question WHERE category IN (463, 693);

Je me suis aperçu qu'elles dataient de 2008 (en regardant les timecreated sur un site tel http://www.unixtimestamp.com/ ), et pouvaient donc être supprimées (n'étant pas utilisées).
Pour cela, il faut modifier le contextid des catégories de question, afin de les rattacher correctement à un cours existant, pour pouvoir y accéder par l'interface, et supprimer les questions, puis les catégories. Pour connaitre le contexte du cours, il faut aller sur "Attribution des rôles" et regarder l'URL clin d’œil

Par contre, reste la question des éléments liés présents dans d'autres tables, et qu'il faudrait idéalement nettoyer. Mais je ne suis pas du tout sur de savoir lesquels exactement, et si c'est gênant que ça reste en BDD.

Dans mes requêtes, afin de trouver les éléments liés, j'avais ceci :

SELECT qqi.id, qqi.quiz, qqi.question FROM mdl_quiz_question_instances qqi JOIN mdl_question q ON qqi.question=q.id WHERE q.category IN (463,693);

Qui n'a rien trouvé, très bien.

SELECT qs.id, qs.attempt, qs.question, qs.answer FROM mdl_question_states qs JOIN mdl_question q ON qs.question=q.id WHERE q.category IN (463,693);

Qui trouve 18 occurrences.

je pense qu'on peut les supprimer, mais est-ce que la requête suivante est correcte pour cela ?

DELETE FROM mdl_question_states WHERE question IN (SELECT q.id FROM mdl_question q WHERE q.category IN (463,693));

Merci d'avance pour vos idées.

PS : j'ai aussi posé la question en anglais (sans réponse définitive et détaillée)

Séverin

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

Re: health.php : Question categories should belong to a valid context

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

Bonjour,

Afin de faire un nettoyage en profondeur, et ne pas laisser de trace dans la BDD interne, il conviendra(it) d'enlever les éléments des différentes tables liées aux questions et aux quiz, c'est à dire (liste non exhaustive) :

mdl_question_sessions, mdl_question_attempts, mdl_question_states, mdl_quiz_attempts

Séverin