Skip to content

fix: Corriger et optimiser la suppression de liens ayant des rangs

marcimat a demandé de fusionner fix_lien_delete_avec_rang_lien vers master

Lorsqu’on supprime un lien, par exemple un document depuis action_supprimer_document_dist, on appelle la fonction

objet_dissocier(['document' => $id_document], '*', ['role' => '*']);

Si la table de lien dispose d’une colonne rang_lien, un recalcul des rangs est effectué. Cependant ce recalcul s’applique pour tous les objets liés (à tort), pas seulement ceux concernés spécifiquement par la suppression.

On corrige ce point, ce qui accélère grandement le processus de recalcul du rang pour ces cas là, en plus de corriger un mauvais calcul de rang.


Plus de détails

Supprimer un document faisait que tout spip_documents_liens voyait sa colonne rang_lien recalculée de 1 à n, n étant le nombre d’entrées dans la table spip_documents_liens. Ce n’est pas du tout ce qui devait advenir !

Si tu as pour spip_documents_liens

id_doc objet id_objet rang_lien
1 article 1 1
2 article 1 2
3 article 1 3
4 article 2 1
5 article 2 2
6 article 2 3

Le résultat de la suppression du document 2 doit donner qqc comme :

id_doc objet id_objet rang_lien
1 article 1 1
3 article 1 2
4 article 2 1
5 article 2 2
6 article 2 3

Pas

id_doc objet id_objet rang_lien
1 article 1 1
3 article 1 2
4 article 2 3
5 article 2 4
6 article 2 5

Rapports de requête de fusion