[SPIP Zone] [Spip-zone-commit] r24908 - in /_plugins_/_stable_/corbeille: ./ action/ exec/ lang/ prive/listes/

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
Si chaque plugin implémente sa méthode divergente pour pouvoir gérer tel cas particulier, on y perd tout interet, et c'est la cacophonie la plus complete.
En l'occurence, ton patch repare ton spip_jeux mais casse spip_syndic que tu est obligé de contourner autrement.

Il *faut* utiliser la methode générique de SPIP.
et c'est ta table qui devrait s'appeller spip_jeus/id_jeu selon la terminologie de SPIP

Mais si ca ne te convient pas, propose un patch sur table_objet($type) plutot que de perpetuer des mauvaises pratiques chacun dans son coin.

Cédric

Le 4 déc. 08 à 07:24, patfr@ifrance.com a écrit :

-# $statut = $corbeille_param[$type_doc]["statut"];
-# $titre = $corbeille_param[$type_doc]["titre"];
-# $table_liee = $corbeille_param[$type_doc]["tableliee"];
+ $table_sql = 'spip_' . $table; // table_objet_sql($type) buggue car le pluriel de 'jeu' est 'jeux' et non 'jeus'
+ $id_table = isset($params['id'])?$params['id']:id_table_objet($type);

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.

Pat a écrit :

Mais si ca ne te convient pas, propose un patch sur table_objet($type)

OK.

Plus propre et en conformité avec les nouvelles manières de coder de SPIP :

- ajouter un nouveau *pipeline* dans la fonction qui transforme un type en table !!

Si la correspondance type->table est connue dans ce tableau, on l'utilise. Sinon on continue de seulement ajouter un "s".

Et tout le monde est content. Et c'est pérenne. Tout en gardant l'ancien.

--
RastaPopoulos

Le 6 déc. 08 à 09:26, RastaPopoulos a écrit :

Pat a écrit :

Mais si ca ne te convient pas, propose un patch sur table_objet($type)

OK.

Plus propre et en conformité avec les nouvelles manières de coder de SPIP :

- ajouter un nouveau *pipeline* dans la fonction qui transforme un type en table !!

Si la correspondance type->table est connue dans ce tableau, on l'utilise. Sinon on continue de seulement ajouter un "s".

Et tout le monde est content. Et c'est pérenne. Tout en gardant l'ancien.

Tout à fait. C'est commit dans
http://trac.rezo.net/trac/spip/changeset/13393
mais je faisais surtout remarquer, encore une fois, à Pat, qu'il était plus profitable à tous et pas plus compliqué de proposer un patch simple du core pour répondre à un besoin générique plutôt que de recoder dans les plugins une version alternative des méthodes du core sous pretexe qu'elles ne sont pas suffisantes.
Si personne ne les améliore, elles ne seront jamais suffisantes.
Cédric