From e2d0e1440dd8fe18b9f3ca376724b50d4dbde34f Mon Sep 17 00:00:00 2001
From: "marcimat@rezo.net" <>
Date: Mon, 11 Mar 2019 20:11:52 +0000
Subject: [PATCH] =?UTF-8?q?Suite=20de=20la=20gestion=20des=20rangs=20dans?=
 =?UTF-8?q?=20l=E2=80=99api=20d=E2=80=99=C3=A9dition=20de=20liens.=20Lorsq?=
 =?UTF-8?q?u=E2=80=99on=20d=C3=A9finit=20un=20rang,=20sa=20valeur=20est=20?=
 =?UTF-8?q?attribu=C3=A9e=20pour=20tous=20les=20roles=20de=20ce=20lien,=20?=
 =?UTF-8?q?pas=20uniquement=20pour=20le=20role=20en=20cours=20de=20qualifi?=
 =?UTF-8?q?cation.=20C=E2=80=99est=20un=20choix=20d=E2=80=99impl=C3=A9ment?=
 =?UTF-8?q?ation,=20mais=20il=20est=20coh=C3=A9rent=20avec=20les=20interfa?=
 =?UTF-8?q?ces=20que=20l=E2=80=99on=20a=20d=E2=80=99ajout=20de=20roles=20s?=
 =?UTF-8?q?ur=20les=20liens.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Permet de faire fonctionner les boutons "Ordonner les auteurs" et "Réinisialiser l’ordre" sur le plugin roles_auteurs (v2).
https://zone.spip.net/trac/spip-zone/changeset/114438
---
 ecrire/action/editer_liens.php     | 15 +++++++++++----
 prive/formulaires/editer_liens.php |  6 +++---
 2 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/ecrire/action/editer_liens.php b/ecrire/action/editer_liens.php
index f9ba5148f0..2125a660fa 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 334e8be838..1b114f6add 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 {
-- 
GitLab