From 7406ba2593f74d728438145341feb4fdfaac20fb Mon Sep 17 00:00:00 2001
From: Cerdic <cedric@yterium.com>
Date: Fri, 21 Jan 2022 15:24:59 +0100
Subject: [PATCH] Mieux typer la fonction generer_objet_url() : on en profite
 pour separer public et connect en 2 arguments distincts, meme si c'est plus
 long a ecrire (vive les arguments nommes)

---
 ecrire/inc/filtres.php  |  2 +-
 ecrire/inc/lien.php     |  4 ++--
 ecrire/inc/utils.php    | 24 ++++++++++++++----------
 ecrire/public/quete.php |  2 +-
 4 files changed, 18 insertions(+), 14 deletions(-)

diff --git a/ecrire/inc/filtres.php b/ecrire/inc/filtres.php
index a25da17477..3e6e8d31a0 100644
--- a/ecrire/inc/filtres.php
+++ b/ecrire/inc/filtres.php
@@ -4942,7 +4942,7 @@ function generer_objet_lien($id_objet, $objet, $longueur = 80, $connect = null)
 	if (!strlen($titre)) {
 		$titre = _T('info_sans_titre');
 	}
-	$url = generer_objet_url($id_objet, $objet, '', '', $connect);
+	$url = generer_objet_url($id_objet, $objet, '', '', null, '', $connect);
 
 	return "<a href='$url' class='$objet'>" . couper($titre, $longueur) . '</a>';
 }
diff --git a/ecrire/inc/lien.php b/ecrire/inc/lien.php
index cada318cd4..99d33ee426 100644
--- a/ecrire/inc/lien.php
+++ b/ecrire/inc/lien.php
@@ -163,14 +163,14 @@ function traiter_lien_implicite($ref, $texte = '', $pour = 'url', string $connec
 		$url = $f($texte, $id, $type, $args, $ancre, $connect);
 	}
 	if (!$url) {
-		$url = generer_objet_url($id, $type, $args, $ancre, $connect ?: null);
+		$url = generer_objet_url($id, $type, $args, $ancre, null, '', $connect);
 	}
 	if (!$url) {
 		return false;
 	}
 	if (is_array($url)) {
 		[$type, $id] = array_pad($url, 2, null);
-		$url = generer_objet_url($id, $type, $args, $ancre, $connect ?: null);
+		$url = generer_objet_url($id, $type, $args, $ancre, null, '', $connect);
 	}
 	if ($pour === 'url') {
 		return $url;
diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php
index 58073eb28e..28249c8256 100644
--- a/ecrire/inc/utils.php
+++ b/ecrire/inc/utils.php
@@ -1837,17 +1837,19 @@ function charger_fonction_url(string $quoi, string $type = '') {
  *   query_string a placer apres cle=$id&....
  * @param string $ancre
  *   ancre a mettre a la fin de l'URL a produire
- * @param bool|string $public
+ * @param ?bool $public
  *   produire l'URL publique ou privee (par defaut: selon espace)
  *   si string : serveur de base de donnee (nom du connect)
  * @param string $type
  *   fichier dans le repertoire ecrire/urls determinant l'apparence
- * @return string|array
+ * @param string $connect
+ *   fichier dans le repertoire ecrire/urls determinant l'apparence
+ * @return string
  *   url codee ou fonction de decodage
  *   array : derogatoire, la fonction d'url retourne (objet,id_objet) utilises par nettoyer_raccourcis_typo() pour generer un lien titre
  *           (cas des raccourcis personalises [->spip20] : il faut implementer une fonction generer_spip_url et une fonction generer_spip_url_ecrire)
  */
-function generer_objet_url($id = '', $entite = '', $args = '', $ancre = '', $public = null, $type = null) {
+function generer_objet_url(int $id, string $entite, string $args = '', string $ancre = '', ?bool $public = null, string $type = '', string $connect = ''): string {
 	if ($public === null) {
 		$public = !test_espace_prive();
 	}
@@ -1860,7 +1862,7 @@ function generer_objet_url($id = '', $entite = '', $args = '', $ancre = '', $pub
 		if (!function_exists('generer_objet_url_ecrire')) {
 			include_spip('inc/urls');
 		}
-		$res = generer_objet_url_ecrire($entite, $id, $args, $ancre, false);
+		$res = generer_objet_url_ecrire($entite, $id, $args, $ancre, false, $connect);
 	} else {
 		$f = charger_fonction_url('objet', $type ?? '');
 
@@ -1872,21 +1874,20 @@ function generer_objet_url($id = '', $entite = '', $args = '', $ancre = '', $pub
 
 		// mais d'abord il faut tester le cas des urls sur une
 		// base distante
-		if (
-			is_string($public)
+		if ($connect
 			and $g = charger_fonction('connect', 'urls', true)
 		) {
 			$f = $g;
 		}
 
-		$res = $f(intval($id), $entite, $args ?: '', $ancre ?: '', $public);
+		$res = $f(intval($id), $entite, $args ?: '', $ancre ?: '', $connect);
 	}
 	if ($res) {
 		return $res;
 	}
 
 	// On a ete gentil mais la ....
-	spip_log("generer_objet_url: entite $entite ($f) inconnue $type $public");
+	spip_log("generer_objet_url: entite $entite ($f) inconnue $type $public $connect", _LOG_ERREUR);
 
 	return '';
 }
@@ -1896,7 +1897,10 @@ function generer_objet_url($id = '', $entite = '', $args = '', $ancre = '', $pub
  * @see generer_objet_url
  */
 function generer_url_entite($id = '', $entite = '', $args = '', $ancre = '', $public = null, $type = null){
-	return generer_objet_url($id, $entite, $args, $ancre, $public, $type);
+	if ($public and is_string($public)) {
+		return generer_objet_url($id, $entite, $args, $ancre, true, $type ?? '', $public);
+	}
+	return generer_objet_url($id, $entite, $args, $ancre, $public, $type ?? '');
 }
 
 /**
@@ -1977,7 +1981,7 @@ function generer_objet_url_absolue($id = '', $entite = '', $args = '', $ancre =
 	if (!$connect) {
 		$connect = true;
 	}
-	$h = generer_objet_url($id, $entite, $args, $ancre, $connect);
+	$h = generer_objet_url($id, $entite, $args, $ancre, null, '', $connect);
 	if (!preg_match(',^\w+:,', $h)) {
 		include_spip('inc/filtres_mini');
 		$h = url_absolue($h);
diff --git a/ecrire/public/quete.php b/ecrire/public/quete.php
index 4423633ebe..ae54c81c3c 100644
--- a/ecrire/public/quete.php
+++ b/ecrire/public/quete.php
@@ -597,7 +597,7 @@ function vignette_logo_document($row, string $connect = '') {
 		return '';
 	}
 
-	return generer_objet_url($row['id_document'], 'document', '', '', $connect);
+	return generer_objet_url($row['id_document'], 'document', '', '', null, '', $connect);
 }
 
 /**
-- 
GitLab