Skip to content
Extraits de code Groupes Projets
Valider b59badd9 rédigé par marcimat's avatar marcimat Validation de marcimat
Parcourir les fichiers

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

```php
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.
parent f1983158
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -647,7 +647,7 @@ function lien_rang_where($table_lien, $primary, $id_source, $objet, $id_objet, $
*/
function lien_delete($objet_source, $primary, $table_lien, $id, $objets, $cond = null) {
$retire = [];
$retires = [];
$dels = 0;
$echec = false;
if (is_null($cond)) {
......@@ -704,7 +704,7 @@ function lien_delete($objet_source, $primary, $table_lien, $id, $objets, $cond =
} else {
$echec = true;
}
$retire[] = [
$retires[] = [
'source' => [$objet_source => $l[$primary]],
'lien' => [$l['objet'] => $id_o],
'type' => $l['objet'],
......@@ -725,10 +725,12 @@ function lien_delete($objet_source, $primary, $table_lien, $id, $objets, $cond =
}
// si on a supprime des liens, on reordonne les liens concernes
if ($dels) {
lien_ordonner($objet_source, $primary, $table_lien, $id, $objets);
foreach ($retires as $retire) {
lien_ordonner($objet_source, $primary, $table_lien, $id, [$retire['type'] => [$retire['id']]]);
}
}
pipeline('trig_supprimer_objets_lies', $retire);
pipeline('trig_supprimer_objets_lies', $retires);
return ($echec ? false : $dels);
}
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter