From 6c6798511f57e270501699e66654b94e43819679 Mon Sep 17 00:00:00 2001
From: Cerdic <cedric@yterium.com>
Date: Fri, 16 Apr 2021 10:50:15 +0200
Subject: [PATCH] =?UTF-8?q?Le=20retour=20de=20la=20fonction=20objet=5Ftrou?=
 =?UTF-8?q?ver=5Fparents()=20inclue=20la=20description=20compl=C3=A8te=20d?=
 =?UTF-8?q?u=20lien=20quand=20le=20parent=20est=20trouv=C3=A9=20via=20une?=
 =?UTF-8?q?=20table=20de=20xxxx=5Fliens?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ecrire/base/objets.php | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

diff --git a/ecrire/base/objets.php b/ecrire/base/objets.php
index 3d5c9c11d6..b22188c8b7 100644
--- a/ecrire/base/objets.php
+++ b/ecrire/base/objets.php
@@ -1263,10 +1263,10 @@ function objet_test_si_publie($objet, $id_objet, $serveur = '') {
 
 
 /**
- * Cherche le contenu parent d'un contenu précis
- *
- * Permet également de gérer un parent trouvé dans une table de lien, comme :
+ * Cherche les contenus parent d'un contenu précis.
+ * Cette version permet de gérer un/des parents trouvés dans une table de lien
  *
+ * comme :
  * ```
  * $tables['spip_auteurs']['parent']  = array(
  *     'type' => 'organisation',
@@ -1278,6 +1278,11 @@ function objet_test_si_publie($objet, $id_objet, $serveur = '') {
  * );
  * ```
  *
+ * La fonction retourne un tableau de parents, chacun de la forme
+ * ['objet' => '...', 'id_objet' => X, 'table' => '...', 'champ' => '...']
+ * Si la table utilisée pour trouver le parent est une table de liens (finissant par _liens),
+ * le tableau contient en plus en entrée 'lien' qui contient les informations complètes du lien (rang, role...)
+ *
  * @api
  * @param string $objet
  *     Type de l'objet dont on cherche les parent
@@ -1361,10 +1366,11 @@ function objet_trouver_parents($objet, $id_objet, $parent_direct_seulement = fal
 			}
 
 			// On lance la requête de récupération du parent
+			$is_table_lien = (strpos($table, '_liens') !== false and substr($table, -6) === '_liens');
 			if (
 				!$condition_objet_invalide
 				and $where
-				and ($lignes = sql_allfetsel($select, $table, $where))
+				and ($lignes = sql_allfetsel( $is_table_lien ? '*' : $select, $table, $where))
 			) {
 				foreach ($lignes as $ligne) {
 					// Si le type est fixe
@@ -1385,6 +1391,9 @@ function objet_trouver_parents($objet, $id_objet, $parent_direct_seulement = fal
 							'table'    => $table,
 						);
 					}
+					if ($is_table_lien) {
+						$parent['lien'] = $ligne;
+					}
 					$parents[] = $parent;
 				}
 			}
-- 
GitLab