La version 0.5.4 commence à fournir un mécanisme d’archivage stable et résilient. Maintenant j’en arrive à me poser des questions sur les actions classiques sur les objets en fonction du contexte d’archivage. En particulier, étant donné que l’archivage prend en compte la notion de parenté et propage ses actions sur les enfants, les actions standard de création, changement de statut, déplacement doivent être étudiées.
Le changement de statut :
C’est le cas le plus simple, le plugin Archivage de contenus interdit le changement en rendant non éditable le formulaire d’institution.
La création d’un objet :
Si l’objet n’a pas de parent, comme un auteur par exemple, le mécanisme d’archivage n’interfère en rien avec le mécanisme de création de l’objet.
Par contre, si l’objet possède une parenté, comme un article et sa rubrique, doit-on autoriser la création d’un objet dans un objet conteneur archivé et si oui, l’objet créé doit-il hériter de l’archivage de son conteneur ?
Étant donné que l’API objet ne permet pas de désigner l’autorisation de création d’un objet, le plugin n’est pas en mesure de savoir comment interdire le mécanisme de création.
Donc si on l’autorise, faut-il hériter de l’état d’archivage du conteneur ? Si oui, doit-on le conditionner au paramètre modifier_enfant
qui permet de rendre indépendant des branches d’archivage.
Mon avis est que le mieux serait d’interdire la création mais si cela n’est pas possible de ne pas hériter de l’état d’archivage du conteneur. Et vous ?
Le déplacement d’un objet :
Le déplacement ne concerne lui que les objets appartenant à un conteneur et que l’on change de conteneur. A l’instar de la création, il n’y a pas d’autorisation standard surchargeable pour l’interdire.
De fait, il faut étudier les cas de déplacements, à savoir :
- déplacer un objet archivé dans un conteneur non archivé
- déplacer un objet archivé dans un conteneur archivé
- déplacer un objet non archivé dans un conteneur archivé
Mais pour un déplacement il faut prendre en compte que la propagation des enfants implique de conserver la racine initiatrice dans le contexte de chaque enfant. Déplacer un enfant ailleurs que dans la branche formée par la racine doit mener à modifier le contexte d’archivage de l’enfant sinon il réfèrera à une racine qui n’a plus de sens pour lui.
Pour l’instant, le plugin ne fait rien mais ce n’est pas satisfaisant. On pourrait imaginer :
- l’objet déplacé conserve son archivage et si il réfère à un héritage, celui-ci est supprimé
- l’objet déplacé conserve son archivage et suivant le paramètre
modifier_enfants
intègre la branche archivée du conteneur destination ou pas - l’objet déplacé, suivant le paramètre
modifier_enfants
devient une archive héritant du conteneur destination ou demeure non archivé.
Tout cela n’est pas simple et c’est pourquoi vos avis sont plus que les bienvenus.
Merci d’avance.