fix: Corriger et optimiser la suppression de liens ayant des rangs
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 |