diff --git a/ecrire/action/editer_liens.php b/ecrire/action/editer_liens.php index f9ba5148f0f84c211ff2e6882701ef0e2c5a3fce..2125a660fae9789ab7fd8107f2a80ac6e4d76cca 100644 --- a/ecrire/action/editer_liens.php +++ b/ecrire/action/editer_liens.php @@ -834,10 +834,17 @@ function lien_set($objet_source, $primary, $table_lien, $id, $objets, $qualif) { ); $args['id_objet'] = $id_objet; - if (lien_triables($table_lien) and isset($qualif['rang_lien']) and intval($qualif['rang_lien'])) { - // on decale les liens de rang_lien>=la valeur inseree pour faire la place - $w = lien_where($primary, '*', $objet, $id_objet, array('rang_lien>='.intval($qualif['rang_lien']),"$primary!=".intval($id))); - sql_update($table_lien, array('rang_lien'=>'rang_lien+1'), $w); + if (lien_triables($table_lien) and isset($qualif['rang_lien'])) { + if (intval($qualif['rang_lien'])) { + // on decale les liens de rang_lien>=la valeur inseree pour faire la place + $w = lien_where($primary, '*', $objet, $id_objet, array('rang_lien>='.intval($qualif['rang_lien']),"$primary!=".intval($id))); + sql_update($table_lien, array('rang_lien'=>'rang_lien+1'), $w); + } + // tous les liens de même rôle recoivent le rang indiqué aussi + if (roles_colonne($objet_source, $objet)) { + $w = lien_where($primary, $id, $objet, $id_objet); + sql_updateq($table_lien, array('rang_lien' => intval($qualif['rang_lien'])), $w); + } $reordonner = true; } diff --git a/prive/formulaires/editer_liens.php b/prive/formulaires/editer_liens.php index 334e8be838f2da2d6d1facc05e206e6b3182b422..1b114f6add7a1806d2e2a11a5c6ae1478838d939 100644 --- a/prive/formulaires/editer_liens.php +++ b/prive/formulaires/editer_liens.php @@ -184,7 +184,7 @@ function formulaires_editer_liens_charger_dist($a, $b, $c, $options = array()) { * ordonner_lien doit être de la forme, et sert pour trier les liens * ordonner_lien[objet1-id1-objet2-id2] = nouveau_rang * - * desordonner_liens n'a pas de forme precise, il doit simplement estre non nul/non vide + * desordonner_liens n'a pas de forme précise, il doit simplement être non nul/non vide * * @param string $a * @param string|int $b @@ -278,7 +278,7 @@ function formulaires_editer_liens_traiter_dist($a, $b, $c, $options = array()) { foreach ($supprimer as $k => $v) { if ($lien = lien_verifier_action($k, $v)) { $lien = explode('-', $lien); - list($objet_source, $ids, $objet_lie, $idl, $role) = $lien; + list($objet_source, $ids, $objet_lie, $idl, $role) = array_pad($lien, 5, null); // appliquer une condition sur le rôle si défini ('*' pour tous les roles) $cond = (!is_null($role) ? array('role' => $role) : array()); if ($objet_lien == $objet_source) { @@ -407,7 +407,7 @@ function lien_verifier_action($k, $v) { function lien_retrouver_qualif($objet_lien, $lien) { // un role est défini dans la liaison $defs = explode('-', $lien); - list($objet1, , $objet2, , $role) = $defs; + list($objet1, , $objet2, , $role) = array_pad($defs, 5, null); if ($objet_lien == $objet1) { $colonne_role = roles_colonne($objet1, $objet2); } else {