Bonjour,
J'arrive à comprendre le principe de ces violations, sans savoir pourquoi elles se produisent.
Certainement lorsque des erreurs sont provoquées .. ?
Exemple : je vois bien cela se produire lors d'une erreur lors de la restauration d'un cours, mais pas seulement.
Un exemple concret sur ma plateforme de test :
Au niveau de la protection des données, une demande de suppression de données est générée à la suppression (=désactivation) de chaque compte utilisateur
J'ai la violation suivante :
La clef étrangère dpo sur la table tool_dataprivacy_request subit 5 violations sur un total de 31 rangées.
SELECT * FROM {tool_dataprivacy_request} t1 LEFT JOIN {user} t2 ON t1.dpo = t2.id WHERE t1.dpo IS NOT NULL AND t2.id IS NULL;
Dans le fichier
admin/tool/dataprivacy/classes/db/dbinstall.xml , il est défini pour la table tool_dataprivacy_request :
<KEYS>
<KEY NAME="primary" TYPE="primary" FIELDS="id"/>
<KEY NAME="userid" TYPE="foreign" FIELDS="userid" REFTABLE="user" REFFIELDS="id"/>
<KEY NAME="requestedby" TYPE="foreign" FIELDS="requestedby" REFTABLE="user" REFFIELDS="id"/>
<KEY NAME="dpo" TYPE="foreign" FIELDS="dpo" REFTABLE="user" REFFIELDS="id"/>
<KEY NAME="usermodified" TYPE="foreign" FIELDS="usermodified" REFTABLE="user" REFFIELDS="id"/>
</KEYS>
Le champ "mdl_tool_dataprivacy_request.dpo" est lié au champ "mdl_user.id" par une clé étrangère.
Problème dans ma table mdl_tool_dataprivacy_request : j'ai 5 enregistrements pour lesquels le champ
dpo = 0 (pourquoi ? bah je sais pas ......)
et évidemment pas d'utilisateur avec un id = 0
Maintenant, si je valide la demande de suppression de données, le script s'exécute bien et en refaisant le test j'ai maintenant :
La clef étrangère dpo sur la table tool_dataprivacy_request subit 4 violations sur un total de 30 rangées.
SELECT * FROM {tool_dataprivacy_request} t1 LEFT JOIN {user} t2 ON t1.dpo = t2.id WHERE t1.dpo IS NOT NULL AND t2.id IS NULL;
Je suis passé de 5 à 4 violations.
La demande de suppression a bien été traitée, l'enregistrement a été supprimé de la table et j'ai une violation de moins.
Donc certaines opérations de nettoyage comme la suppression de données, la réinitialisation de cours, .. peuvent déjà permettre de nettoyer un peu la base.
Après, pour obtenir 0 violations, je flaire un travail titanesque d'analyse des données ... 😱
J'ai également pas mal de violations concernant les annotations pdf.
Là, je suppose que le problème vient de la conservation des fichiers convertis, alors que le
devoir n'est plus actif ou le cours réinitialisé.
Il y a un ticket dans le tracker à ce sujet [
MDL-69570]
Je n'ai pas fouillé plus dans les tables à ce sujet, mais je suppose que les violations à ce niveau proviennent de fichiers convertis, qui ne sont plus associés à un devoir existant.
voilà pour ma petite contribution ... à suivre
Bruno