From 69e88a54b7462606e407534f20933885b337e6a3 Mon Sep 17 00:00:00 2001
From: Fil <fil@rezo.net>
Date: Sun, 13 Nov 2005 15:50:47 +0000
Subject: [PATCH] Permettre un mode d'URLs "propres-qs", c'est-a-dire qui
 fonctionne a partir de la "query-string", sans .htaccess ; au passage petit
 nettoyage dans ecrire/inc_version.php3

A noter : ce mode d'URLs donne des pages de la forme /?Titre-de-l-article
et /?-Nom-de-la-rubrique
et n'est a utiliser que dans le cas ou les .htaccess sont interdits
---
 .gitattributes           |  1 +
 ecrire/inc_version.php3  | 13 +++++--------
 inc-urls-propres-qs.php3 | 36 ++++++++++++++++++++++++++++++++++++
 inc-urls-propres.php3    | 38 +++++++++++++++++++++++++++++---------
 4 files changed, 71 insertions(+), 17 deletions(-)
 create mode 100644 inc-urls-propres-qs.php3

diff --git a/.gitattributes b/.gitattributes
index 4e33fbf15b..3b1e8dd27c 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -305,6 +305,7 @@ ecrire/safehtml/license.txt -text
 ecrire/safehtml/readme-SPIP.txt -text
 ecrire/safehtml/readme.txt -text
 ecrire/statistiques_repartition.php -text
+/inc-urls-propres-qs.php3 -text
 plugins/ancres/version.php -text
 plugins/podcast_client/podcast_client.php -text
 plugins/podcast_client/version.php -text
diff --git a/ecrire/inc_version.php3 b/ecrire/inc_version.php3
index 62f344f19f..f1128019cf 100644
--- a/ecrire/inc_version.php3
+++ b/ecrire/inc_version.php3
@@ -576,12 +576,6 @@ if (!$REQUEST_URI) {
 		$REQUEST_URI .= '?'.$QUERY_STRING;
 }
 
-if (!$PATH_TRANSLATED) {
-	if ($SCRIPT_FILENAME) $PATH_TRANSLATED = $SCRIPT_FILENAME;
-	else if ($DOCUMENT_ROOT && $SCRIPT_URL) $PATH_TRANSLATED = $DOCUMENT_ROOT.$SCRIPT_URL;
-}
-
-
 // API d'appel a la base de donnees
 function spip_query($query) {
 
@@ -767,8 +761,11 @@ class Link {
 		$url = $this->file;
 		if (!$url) $url = './';
 		$query = '';
-		foreach($this->vars as $name => $value)
-			$query .= '&'.$name.'='.urlencode($value);
+		foreach($this->vars as $name => $value) {
+			$query .= '&'.$name;
+			if (strlen($value))
+				$query .= '='.urlencode($value);
+		}
 
 		foreach ($this->arrays as $name => $table)
 		foreach ($table as $value)
diff --git a/inc-urls-propres-qs.php3 b/inc-urls-propres-qs.php3
new file mode 100644
index 0000000000..931887941f
--- /dev/null
+++ b/inc-urls-propres-qs.php3
@@ -0,0 +1,36 @@
+<?php
+
+
+/***************************************************************************\
+ *  SPIP, Systeme de publication pour l'internet                           *
+ *                                                                         *
+ *  Copyright (c) 2001-2005                                                *
+ *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
+ *                                                                         *
+ *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
+ *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
+\***************************************************************************/
+
+
+/*
+
+Ce jeu d'URLs est une variante de inc-urls-propres, qui ajoute
+le prefixe './?' aux adresses, ce qui permet de l'utiliser en
+mode "Query-String", sans .htaccess ;
+
+	<http://mon-site-spip/?-Rubrique->
+
+Attention : le mode 'propres-qs' est moins fonctionnel que le mode 'propres' ou
+'propres2'. Si vous pouvez utiliser le .htaccess, ces deux derniers modes sont
+preferables au mode 'propres-qs'.
+
+*/
+
+if (!defined('_terminaison_urls_propres'))
+	define ('_terminaison_urls_propres', '');
+
+define ('_debut_urls_propres', './?');
+
+include('inc-urls-propres.php3');
+
+?>
diff --git a/inc-urls-propres.php3 b/inc-urls-propres.php3
index 22b325a61a..c81eb003fa 100644
--- a/inc-urls-propres.php3
+++ b/inc-urls-propres.php3
@@ -28,14 +28,21 @@ Definissez ensuite dans ecrire/mes_options.php3 :
 	type_urls = 'propres';
 SPIP calculera alors ses liens sous la forme "Mon-titre-d-article".
 
-Variante :
+Variante 'propres2' :
 	type_urls = 'propres2';
 ajoutera '.html' aux adresses generees : "Mon-titre-d-article.html"
 
+Variante 'qs' : ce systeme fonctionne en "Query-String", c'est-a-dire
+sans utilisation de .htaccess ; les adresses sont de la forme
+"/?Mon-titre-d-article"
+	type_urls = 'qs';
+
 */
 
 if (!defined('_terminaison_urls_propres'))
 	define ('_terminaison_urls_propres', '');
+if (!defined('_debut_urls_propres'))
+	define ('_debut_urls_propres', '');
 
 function _generer_url_propre($type, $id_objet) {
 	$table = "spip_".table_objet($type);
@@ -130,7 +137,7 @@ function _generer_url_propre($type, $id_objet) {
 function generer_url_article($id_article) {
 	$url = _generer_url_propre('article', $id_article);
 	if ($url)
-		return $url . _terminaison_urls_propres;
+		return _debut_urls_propres . $url . _terminaison_urls_propres;
 	else
 		return "article.php3?id_article=$id_article";
 }
@@ -138,7 +145,7 @@ function generer_url_article($id_article) {
 function generer_url_rubrique($id_rubrique) {
 	$url = _generer_url_propre('rubrique', $id_rubrique);
 	if ($url)
-		return '-'.$url.'-'._terminaison_urls_propres;
+		return _debut_urls_propres . '-'.$url.'-'._terminaison_urls_propres;
 	else
 		return "rubrique.php3?id_rubrique=$id_rubrique";
 }
@@ -146,7 +153,7 @@ function generer_url_rubrique($id_rubrique) {
 function generer_url_breve($id_breve) {
 	$url = _generer_url_propre('breve', $id_breve);
 	if ($url)
-		return '+'.$url.'+'._terminaison_urls_propres;
+		return _debut_urls_propres . '+'.$url.'+'._terminaison_urls_propres;
 	else
 		return "breve.php3?id_breve=$id_breve";
 }
@@ -159,7 +166,7 @@ function generer_url_forum($id_forum, $show_thread=false) {
 function generer_url_mot($id_mot) {
 	$url = _generer_url_propre('mot', $id_mot);
 	if ($url)
-		return '+-'.$url.'-+'._terminaison_urls_propres;
+		return _debut_urls_propres . '+-'.$url.'-+'._terminaison_urls_propres;
 	else
 		return "mot.php3?id_mot=$id_mot";
 }
@@ -167,7 +174,7 @@ function generer_url_mot($id_mot) {
 function generer_url_auteur($id_auteur) {
 	$url = _generer_url_propre('auteur', $id_auteur);
 	if ($url)
-		return '_'.$url.'_'._terminaison_urls_propres;
+		return _debut_urls_propres . '_'.$url.'_'._terminaison_urls_propres;
 	else
 		return "auteur.php3?id_auteur=$id_auteur";
 }
@@ -175,7 +182,7 @@ function generer_url_auteur($id_auteur) {
 function generer_url_site($id_syndic) {
 	$url = _generer_url_propre('site', $id_syndic);
 	if ($url)
-		return '@'.$url.'@'._terminaison_urls_propres;
+		return _debut_urls_propres . '@'.$url.'@'._terminaison_urls_propres;
 	else
 		return "site.php3?id_syndic=$id_syndic";
 }
@@ -190,7 +197,7 @@ function generer_url_document($id_document) {
 	return '';
 }
 
-function recuperer_parametres_url($fond, $url) {
+function recuperer_parametres_url(&$fond, $url) {
 	global $contexte;
 
 	// Migration depuis anciennes URLs ?
@@ -214,12 +221,21 @@ preg_match(',(^|/)((article|breve|rubrique|mot|auteur|site)(\.php3?|[0-9]+\.html
 		return;
 	}
 
+	// Chercher les valeurs d'environnement qui indiquent l'url-propre
 	$url_propre = $GLOBALS['_SERVER']['REDIRECT_url_propre'];
-	if (!$url_propre) $url_propre = $GLOBALS['HTTP_ENV_VARS']['url_propre'];
+	if (!$url_propre)
+		$url_propre = $GLOBALS['HTTP_ENV_VARS']['url_propre'];
 	if (!$url_propre) {
 		$url = substr($url, strrpos($url, '/') + 1);
 		$url_propre = preg_replace(',[?].*,', '', $url);
 	}
+	// Mode Query-String ?
+	$adapter_le_fond = false;
+	if (!$url_propre
+	AND preg_match(',([?])([^=/?&]+)(&.*)?$,', $GLOBALS['REQUEST_URI'], $r)) {
+		$url_propre = $r[2];
+		$adapter_le_fond = true;
+	}
 	if (!$url_propre) return;
 
 	// Compatilibite avec propres2
@@ -261,6 +277,10 @@ preg_match(',(^|/)((article|breve|rubrique|mot|auteur|site)(\.php3?|[0-9]+\.html
 		$contexte[$col_id] = $row[$col_id];
 	}
 
+	// En mode Query-String, on fixe ici le $fond utilise
+	if ($adapter_le_fond)
+		$fond = $type;
+
 	return;
 }
 
-- 
GitLab