Valider 6d611077 rédigé par cerdic's avatar cerdic
Parcourir les fichiers

puisqu'on a une fonction generique pour determiner si un objet est publie est...

puisqu'on a une fonction generique pour determiner si un objet est publie est une api declarative pour connaitre le nom de l'exec correspondant a la page de visualisation d'un objet, on peut ecrire et utiliser une fonction generique generer_url_ecrire_objet qui remplace les diverses generer_url_ecrire_xxx.
La signature est quasi identique, l'argument 'statut' (incomplet) etant remplacé par l'argument explicite 'public' pour indiquer si on veut une url publique ou privee.
Au passage, on corrige donc le bug de ces fonctions qui generaient des urls publiques en 404 sur les objets publies post-dates...
parent 15d81585
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+16 −79
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -161,83 +161,10 @@ function nettoyer_url_page($url, $contexte=array())
	return array();
}


/**
 * Generer l'url d'un article dans l'espace prive,
 * fonction du statut de l'article
 *
 * @param int $id
 * @param string $args
 * @param string $ancre
 * @param string $statut
 * @param string $connect
 * @return string
 *
 * http://doc.spip.org/@generer_url_ecrire_article
 */
function generer_url_ecrire_article($id, $args='', $ancre='', $statut='', $connect='') {
	$a = "id_article=" . intval($id);
	if (!$statut) {
		$statut = sql_getfetsel('statut', 'spip_articles', $a,'','','','',$connect);
	}
	$h = ($statut == 'publie' OR $connect)
	? generer_url_entite_absolue($id, 'article', $args, $ancre, $connect)
	: (generer_url_ecrire('article', $a . ($args ? "&$args" : ''))
		. ($ancre ? "#$ancre" : ''));
	return $h;
}

/**
 * Generer l'url d'une rubrique dans l'espace prive,
 * fonction du statut de la rubrique
 *
 * @param int $id
 * @param string $args
 * @param string $ancre
 * @param string $statut
 * @param string $connect
 * @return string
 *
 * http://doc.spip.org/@generer_url_ecrire_rubrique
 */
function generer_url_ecrire_rubrique($id, $args='', $ancre='', $statut='', $connect='') {
	$a = "id_rubrique=" . intval($id);
	if (!$statut) {
		$statut = sql_getfetsel('statut', 'spip_rubriques', $a,'','','','',$connect);
	}
	$h = ($statut == 'publie' OR $connect)
	? generer_url_entite_absolue($id, 'rubrique', $args, $ancre, $connect)
	: (generer_url_ecrire('naviguer',$a . ($args ? "&$args" : ''))
		. ($ancre ? "#$ancre" : ''));
	return $h;
}


/**
 * Generer l'url d'un auteur dans l'espace prive,
 * fonction du statut de l'auteur
 *
 * @param int $id
 * @param string $args
 * @param string $ancre
 * @param string $statut
 * @param string $connect
 * @return string
 *
 * http://doc.spip.org/@generer_url_ecrire_auteur
 */
function generer_url_ecrire_auteur($id, $args='', $ancre='', $statut='', $connect='') {
	$a = (intval($id)?"id_auteur=" . intval($id):'');
	$h = (!$statut OR $connect)
	?  generer_url_entite_absolue($id, 'auteur', $args, $ancre, $connect)
	: (generer_url_ecrire('auteur',$a . ($args ? ($a?"&":"").$args : ''))
		. ($ancre ? "#$ancre" : ''));
	return $h;
}

/**
 * Generer l'url d'un document dans l'espace prive,
 * fonction du statut du document
 * Generer l'url d'un objet dans l'espace prive,
 * fonction de son etat publie ou non
 * calcule a partir de la declaration de statut
 *
 * @param int $id
 * @param string $args
@@ -246,11 +173,21 @@ function generer_url_ecrire_auteur($id, $args='', $ancre='', $statut='', $connec
 * @param string $connect
 * @return string
 *
 * http://doc.spip.org/@generer_url_ecrire_document
 */
function generer_url_ecrire_document($id, $args='', $ancre='', $statut='', $connect='') {
	include_spip('inc/documents');
	return generer_url_document_dist($id);
function generer_url_ecrire_objet($objet,$id, $args='', $ancre='', $public=null, $connect=''){
	if (function_exists($f = 'generer_url_ecrire_' . $objet)
		// ou definie par un plugin
	  OR $f = charger_fonction($f,'urls',true))
		return $f($id, $args, $ancre, $public, $connect);
	// si pas de flag public fourni
	// le calculer en fonction de la declaration de statut
	if (is_null($public) AND !$connect)
		$public = objet_test_si_publie($objet, $id, $connect);
	if ($public OR $connect){
		return generer_url_entite_absolue($id, $objet, $args, $ancre, $connect);
	}
	$a = id_table_objet($objet) . "=" . intval($id);
	return generer_url_ecrire(info_objet($objet,'url_voir'), $a . ($args ? "&$args" : '')). ($ancre ? "#$ancre" : '');
}

?>
+1 −5
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -921,11 +921,7 @@ function generer_url_entite($id='', $entite='', $args='', $ancre='', $public=NUL
	if (!$public) {
		if (!$entite) return '';
		include_spip('inc/urls');
		if (function_exists($f = 'generer_url_ecrire_' . $entite)
			// ou definie par un plugin
		  OR $f = charger_fonction($f,'urls',true))
			$res = $f($id, $args, $ancre, ' ');
		else $res = "";
		$res = generer_url_ecrire_objet($entite,$id, $args, $ancre, false);
	} else {
		if (is_string($public) AND !is_numeric($public)) {
			include_spip('base/connect_sql');