From 7218a96d1c7868eca0c6741f6a8dba8a2a585367 Mon Sep 17 00:00:00 2001
From: Fil <fil@rezo.net>
Date: Mon, 6 Dec 2010 10:37:18 +0000
Subject: [PATCH] avant d'ajouter betement un 's' au type d'objet, on cherche
 d'abord a savoir si la table existe en realite (cf. paolo sur
 http://archives.rezo.net/archives/spip-zone.mbox/7PUHSSUJYU3ZEGEGCC4MM5XCSCBRKO43/
 )

---
 ecrire/base/connect_sql.php | 24 +++++++++++++++---------
 ecrire/inc/modifier.php     |  6 +++---
 2 files changed, 18 insertions(+), 12 deletions(-)

diff --git a/ecrire/base/connect_sql.php b/ecrire/base/connect_sql.php
index 064d66f41e..434355a7cf 100644
--- a/ecrire/base/connect_sql.php
+++ b/ecrire/base/connect_sql.php
@@ -220,8 +220,9 @@ function spip_connect_ldap($serveur='') {
 	return auth_ldap_connect($serveur);
 }
 
-// 1 interface de abstract_sql a demenager dans base/abstract_sql a terme
-
+// Echappement d'une valeur (num, string, array) sous forme de chaine PHP
+// pour un array(1,'a',"a'") renvoie la chaine "'1','a','a\''"
+// Usage sql un peu deprecie, a remplacer par sql_quote()
 // http://doc.spip.org/@_q
 function _q ($a) {
 	return (is_numeric($a)) ? strval($a) :
@@ -231,7 +232,7 @@ function _q ($a) {
 
 // Nommage bizarre des tables d'objets
 // http://doc.spip.org/@table_objet
-function table_objet($type) {
+function table_objet($type,$serveur='') {
 	static $surnoms = null;
 	$type = preg_replace(',^spip_|^id_|s$,', '', $type);
 	if (!$type) return;
@@ -246,15 +247,20 @@ function table_objet($type) {
 				'extension' => 'types_documents' # hum
 			));
 	}
-	return isset($surnoms[$type])
-		? $surnoms[$type]
-		: rtrim($type,'s')."s";
+	if (isset($surnoms[$type]))
+		return $surnoms[$type];
+
+	$trouver_table = charger_fonction('trouver_table', 'base');
+	if ($desc = $trouver_table($type,$serveur))
+		return $desc['table'];
+
+	return rtrim($type,'s')."s"; # cas historique ne devant plus servir
 }
 
 // http://doc.spip.org/@table_objet_sql
-function table_objet_sql($type) {
+function table_objet_sql($type,$serveur='') {
 	global $table_des_tables;
-	$nom = table_objet($type);
+	$nom = table_objet($type, $serveur);
 	include_spip('public/interfaces');
 	if (isset($table_des_tables[$nom])) {
 		$t = $table_des_tables[$nom];
@@ -265,7 +271,7 @@ function table_objet_sql($type) {
 
 // http://doc.spip.org/@id_table_objet
 function id_table_objet($type,$serveur='') {
-	$type = objet_type($type);
+	$type = objet_type($type,$serveur);
 	if ($type == 'type')
 		return 'extension';
 	else {
diff --git a/ecrire/inc/modifier.php b/ecrire/inc/modifier.php
index 76c4142b94..2b9bafc707 100644
--- a/ecrire/inc/modifier.php
+++ b/ecrire/inc/modifier.php
@@ -31,9 +31,9 @@ function modifier_contenu($type, $id, $options, $c=false, $serveur='') {
 
 	include_spip('inc/filtres');
 
-	$table_objet = table_objet($type);
-	$spip_table_objet = table_objet_sql($type);
-	$id_table_objet = id_table_objet($type);
+	$table_objet = table_objet($type,$serveur);
+	$spip_table_objet = table_objet_sql($type,$serveur);
+	$id_table_objet = id_table_objet($type,$serveur);
 	$trouver_table = charger_fonction('trouver_table', 'base');
 	$desc = $trouver_table($spip_table_objet, $serveur);
 
-- 
GitLab