Valider e2d0e144 rédigé par marcimat@rezo.net's avatar marcimat@rezo.net
Parcourir les fichiers

Suite de la gestion des rangs dans l’api d’édition de liens.

Lorsqu’on définit un rang, sa valeur est attribuée pour tous les roles de ce lien, pas uniquement pour le role en cours de qualification.
C’est un choix d’implémentation, mais il est cohérent avec les interfaces que l’on a d’ajout de roles sur les liens.

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

 
parent 2209ccea
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+11 −4
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -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'])) {
			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;
			}

+3 −3
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -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 {