cedric.morin@yterium.com a écrit :
je ne suis absolument pas d'accord avec ça
SPIP implémente des méthode génériques pour passer de type a table et table_sql
Absolument, voila pkoi j'ai mis en rem la fonction originale, sachant qu'il fallait revenir dessus.
Le problème est que table_objet_sql() appelle table_objet() et table_objet()
Dans la mesure ou le tableau des objets supprimables possède un champ 'table' que l'on peut renseigner, je ne vois vraiment pas l'intérêt de demander à SPIP de retrouver cette table à partir d'un objet $type qu'il ne fait que deviner de toute façon.
La correspondance entre les tables et les objets est totalement bordélique et relève plus d'un raccourci historique que d'une logique implaquable : SPIP passe son temps à gérer les cas particuliers, et je vois bien dans son code que les choses ne sont pas naturelles : voir les "# hum" et les "# hum hum" !
Pourquoi taper sur les plugins alors ?
En l'occurence, ton patch repare ton spip_jeux mais casse spip_syndic que tu est obligé de contourner autrement.
Pas du tout. Puisque je l'ai contourné, rien n'est cassé.
Effectivement j'ai renseigné la table dédiée à cet effet :
$param['sites']['table'] = 'syndic';
c'est ta table qui devrait s'appeller spip_jeus/id_jeu selon la terminologie de SPIP
ah bah bien sûr, c'est du joli !! no comment...
Mais si ca ne te convient pas, propose un patch sur table_objet($type)
OK.
Voila les 3 solutions que je propose pour base/connect_sql.php :
- soit créer une fonction table_spip_sql() qui serait chargée d'ajouter le préfixe 'spip_' à une table connue, que la Corbeille utiliserait à la place de table_objet_sql() :
function table_spip_sql($table) {
return 'spip_' . $table;
}
// http://doc.spip.org/@table_objet_sql
function table_objet_sql($type) {
global $table_des_tables;
$nom = table_objet($type);
include_spip('public/interfaces');
if (isset($table_des_tables[$nom])) {
$t = $table_des_tables[$nom];
$nom = table_spip_sql($t);
}
return $nom ;
}
- soit (facile !) rendre globale la static $surnoms de la fonction table_objet($type) afin de pouvoir la compléter avec de nouveaux objets si besoin est : 'jeu' => 'jeux'
- soit (mais c'est plus lourd...) lui ajouter un paramètre $table dont le code serait à changer comme cela :
function table_objet($type, $table=NULL) {
static $surnoms = array(
(ici tous les surnoms SPIP...)
);
return isset($surnoms[$type])
? $surnoms[$type]
: ( isset($table)
? preg_replace(',ss$,', 's', $type."s")
: $table );
}
Ce paramètre supplémentaire doit être traité par toutes les fonctions appelant table_objet(), et notamment table_objet_sql() dont la Corbeille a besoin.
A toi de choisir, à moins que tu aies d'autres idées...
Pat.