inc-arg-squel.php3 inc-bcl-squel.php3 inc-calcul-squel.php3 inc-calcul_mysql3.php inc-champ-squel.php3 inc-form-squel.php3 inc-index-squel.php3 inc-reqsql-squel.php3 inc-vrac-squel.php3 1.15 1.2 1.235 1.8 1.20 1.8 1.6 1.1 1.11 1.16 1.3 1.236

Update of /home/spip-cvs/spip
In directory alan:/tmp/cvs-serv6929

Modified Files:
  inc-arg-squel.php3 inc-bcl-squel.php3 inc-calcul-squel.php3
  inc-calcul_mysql3.php inc-champ-squel.php3 inc-form-squel.php3
  inc-index-squel.php3 inc-reqsql-squel.php3 inc-vrac-squel.php3
Log Message:
nettoayges divers + bug #EXPOSER dans fichiers inclus + API de redéfinition des balises

Index: inc-champ-squel.php3

RCS file: /home/spip-cvs/spip/inc-champ-squel.php3,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -d -r1.20 -r1.21
--- inc-champ-squel.php3 22 Jul 2004 13:38:08 -0000 1.20
+++ inc-champ-squel.php3 25 Jul 2004 06:55:45 -0000 1.21
@@ -5,10 +5,10 @@
if (defined("_INC_CHAMP_SQUEL")) return;
define("_INC_CHAMP_SQUEL", "1");

-global $exceptions_des_tables, $table_des_tables,
- $champs_traitement, $champs_pretraitement, $champs_posttraitement,
- $tables_relations, $table_primary, $table_date
-;
+global $exceptions_des_tables, $table_des_tables;
+global $champs_traitement, $champs_pretraitement, $champs_posttraitement;
+global $tables_relations, $table_primary, $table_date;
+

//
// Construire un tableau des tables de relations
@@ -128,65 +128,63 @@

$table_des_tables = array(
- 'articles' => 'articles',
- 'auteurs' => 'auteurs',
- 'breves' => 'breves',
- 'forums' => 'forum',
- 'signatures' => 'signatures',
- 'documents' => 'documents',
- 'types_documents' => 'types_documents',
- 'mots' => 'mots',
- 'groupes_mots' => 'groupes_mots',
- 'rubriques' => 'rubriques',
- 'syndication' => 'syndic',
- 'syndic_articles' => 'articles',
- 'hierarchie' => 'rubriques'
- );
+ 'articles' => 'articles',
+ 'auteurs' => 'auteurs',
+ 'breves' => 'breves',
+ 'forums' => 'forum',
+ 'signatures' => 'signatures',
+ 'documents' => 'documents',
+ 'types_documents' => 'types_documents',
+ 'mots' => 'mots',
+ 'groupes_mots' => 'groupes_mots',
+ 'rubriques' => 'rubriques',
+ 'syndication' => 'syndic',
+ 'syndic_articles' => 'articles',
+ 'hierarchie' => 'rubriques'
+);

$exceptions_des_tables = array(
- 'breves' => array(
- "id_secteur" => "id_rubrique",
- "date" => "date_heure",
- 'nom_site' => 'lien_titre',
- 'url_site' => 'lien_url'
- ),
- 'forums' => array(
- "date" => "date_heure",
- 'nom' => 'auteur',
- 'email' => 'email_auteur'
- ),
- 'signatures' => array(
- "date" => "date_time",
- 'nom' => 'nom_email',
- 'email' => 'ad_email'
- ),
- 'documents' => array(
- 'type_document' => array('types_documents',
- 'titre'),
- 'extension_document' => array('types_documents',
- 'extension')
- ),
- 'syndic_articles' => array(
- 'url_article' => 'url',
- 'lesauteurs' => 'lesauteurs',
- 'url_site' => array('syndic', 'url_site'),
- 'nom_site' => array('syndic', 'nom_site')
- )
- );
+ 'breves' => array(
+ 'id_secteur' => 'id_rubrique',
+ 'date' => 'date_heure',
+ 'nom_site' => 'lien_titre',
+ 'url_site' => 'lien_url'
+ ),
+ 'forums' => array(
+ 'date' => 'date_heure',
+ 'nom' => 'auteur',
+ 'email' => 'email_auteur'
+ ),
+ 'signatures' => array(
+ 'date' => 'date_time',
+ 'nom' => 'nom_email',
+ 'email' => 'ad_email'
+ ),
+ 'documents' => array(
+ 'type_document' => array('types_documents', 'titre'),
+ 'extension_document' => array('types_documents', 'extension')
+ ),
+ 'syndic_articles' => array(
+ 'url_article' => 'url',
+ 'lesauteurs' => 'lesauteurs',
+ 'url_site' => array('syndic', 'url_site'),
+ 'nom_site' => array('syndic', 'nom_site')
+ )
+);

$table_date = array (
- 'articles' => "date",
- 'auteurs' => "date",
- 'breves' => "date_heure",
- 'forums' => "date_heure",
- 'signatures' => "date_time",
- 'documents' => "date",
- 'types_documents' => "date",
- 'groupes_mots' => "date",
- 'mots' => "date",
- 'rubriques' => "date",
- 'syndication' => "date",
- 'syndic_articles' => "date"
+ 'articles' => 'date',
+ 'auteurs' => 'date',
+ 'breves' => 'date_heure',
+ 'forums' => 'date_heure',
+ 'signatures' => 'date_time',
+ 'documents' => 'date',
+ 'types_documents' => 'date',
+ 'groupes_mots' => 'date',
+ 'mots' => 'date',
+ 'rubriques' => 'date',
+ 'syndication' => 'date',
+ 'syndic_articles' => 'date'
);

?>

Index: inc-index-squel.php3

RCS file: /home/spip-cvs/spip/inc-index-squel.php3,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- inc-index-squel.php3 22 Jul 2004 13:35:40 -0000 1.6
+++ inc-index-squel.php3 25 Jul 2004 06:55:45 -0000 1.7
@@ -1,148 +1,160 @@
<?php

// index_pile retourne la position dans la pile du champ SQL $nom_champ
-// en prenant la boucle la plus proche du sommet de pile (indique' par $idb).
-// Si on ne trouve rien, on conside`re que c~a doit provenir du contexte
-// (par l'URL ou l'include) qui a e'te' recopie' dans Pile[0]
-// (un essai d'affinage a de'bouche' sur un bug vicieux)
-// Si c~a re'ference un champ SQL, on le me'morise dans la structure $boucles
+// en prenant la boucle la plus proche du sommet de pile (indique par $idb).
+// Si on ne trouve rien, on considere que ca doit provenir du contexte
+// (par l'URL ou l'include) qui a ete recopie dans Pile[0]
+// (un essai d'affinage a debouche sur un bug vicieux)
+// Si ca reference un champ SQL, on le memorise dans la structure $boucles
// afin de construire un requete SQL minimale (plutot qu'un brutal 'SELECT *')

include_ecrire('inc_serialbase.php3');

-function index_pile($idb, $nom_champ, &$boucles)
-{
- global $exceptions_des_tables, $table_des_tables, $tables_principales;
+function index_pile($idb, $nom_champ, &$boucles) {
+ global $exceptions_des_tables, $table_des_tables, $tables_principales;

- $i = 0;
- if ($c=strpos($nom_champ, ':'))
- {
- $idbs = substr($nom_champ, 0, $c);
- $nom_champ = substr($nom_champ, $c+1);
- while (($idb != $idbs) && $idb)
- {$i++; $idb = $boucles[$idb]->id_parent;
-# spip_log("Cherche en amont: $nom_champ '$idbs' '$idb' '$c'");
- }
- }
+ // Recherche d'un champ dans un etage superieur
+ $i = 0;
+ if ($c=strpos($nom_champ, ':')) {
+ $idbs = substr($nom_champ, 0, $c);
+ $nom_champ = substr($nom_champ, $c+1);
+ while (($idb != $idbs) && $idb) {
+ $i++;
+ $idb = $boucles[$idb]->id_parent;
+ }
+ }

- $c = strtolower($nom_champ);
- # attention a` la boucle nomme'e 0 ....
- while ($idb!== '') {
-# spip_log("Cherche: $nom_champ '$idb' '$c'");
- $r = $boucles[$idb]->type_requete;
- // indirection (pour les rares cas ou` le nom de la table est /= du type)
- $t = $table_des_tables[$r];
- if (!$t) $t = $r; // pour les tables non Spip
- // $t est le nom PHP de cette table
-# spip_log("'$idb' '$r' '$c' '$nom_champ'");
- $desc = $tables_principales[$t];
- if (!$desc)
- {
- include_local("inc-debug-squel.php3");
- erreur_squelette(_L("Table SQL absente de \$tables_principales dans inc_serialbase"), $r, "'$idb'");
- }
- $excep = $exceptions_des_tables[$r][$c];
- if ($excep)
- {
- if (!is_array($excep))
-# entite' SPIP alias d'un champ SQL
- { $e = $excep;}
- else
-# entite' SPIP alias d'un champ dans une autre table SQL
- { $t = $excep[0]; $e = $excep[1]; }
- }
- else
- {
- $e = $desc['field'][$c];
-# $e est le type SQL de l'entre'e (on s'en sert comme boole'en uniquement)
-# entite' SPIP homonyme au champ SQL
- if ($e) $e = $c;
- }
-# spip_log(" Dans $idb ($t $e): $desc");
- if ($e)
- {
- $boucles[$idb]->select[] = $t . "." . $e;
- return ('$Pile[$SP' .
- ($i ? "-$i" : "") . '][' .
- $e .
- "]");
- }
- $idb = $boucles[$idb]->id_parent;
- $i++;
- }
-# spip_log("Pas vu $nom_champ dans les " . count($boucles) . " boucles");
- # espe'rons qu'il y sera
- return('$Pile[0]['.$nom_champ.']');
+ $c = strtolower($nom_champ);
+ // attention a la boucle nommee 0 ....
+ while ($idb!== '') {
+ #spip_log("Cherche: $nom_champ '$idb' '$c'");
+ $r = $boucles[$idb]->type_requete;
+ // indirection (pour les rares cas ou le nom de la table est /= du type)
+ $t = $table_des_tables[$r];
+ if (!$t)
+ $t = $r; // pour les tables non Spip
+ // $t est le nom PHP de cette table
+ #spip_log("'$idb' '$r' '$c' '$nom_champ'");
+ $desc = $tables_principales[$t];
+ if (!$desc) {
+ include_local("inc-debug-squel.php3");
+ erreur_squelette(_L("Table SQL absente de \$tables_principales dans inc_serialbase"), $r, "'$idb'");
+ }
+ $excep = $exceptions_des_tables[$r][$c];
+ if ($excep) {
+ // entite SPIP alias d'un champ SQL
+ if (!is_array($excep)) {
+ $e = $excep;
+ }
+ // entite SPIP alias d'un champ dans une autre table SQL
+ else {
+ $t = $excep[0];
+ $e = $excep[1];
+ }
+ }
+ else {
+ // $e est le type SQL de l'entree (ici utile comme booleen)
+ // entite SPIP homonyme au champ SQL
+ $e = $desc['field'][$c];
+ if ($e)
+ $e = $c;
+ }
+ #spip_log("Dans $idb ($t $e): $desc");
+ if ($e) {
+ $boucles[$idb]->select[] = $t . "." . $e;
+ return '$Pile[$SP' . ($i ? "-$i" : "") . '][' . $e . ']';
+ }
+ $idb = $boucles[$idb]->id_parent;
+ $i++;
+ }
+
+ #spip_log("Pas vu $nom_champ dans les " . count($boucles) . " boucles");
+ // esperons qu'il y sera
+ return('$Pile[0]['.$nom_champ.']');
}

# calculer_champ genere le code PHP correspondant a la balise Spip $nom_champ
-# Retourne un tableau dont le premier e'le'ment est une EXPRESSION php
-# et le deuxie`me une suite d'INSTRUCTIONS a` exe'cuter AVANT de calculer
+# Retourne un tableau dont le premier element est une EXPRESSION php
+# et le deuxieme une suite d'INSTRUCTIONS a executer AVANT de calculer
# l'expression (typiquement: un include ou une affectation d'auxiliaires)
-# Ce tableau est e'galement retourne' par la fonction applique_filtres
+# Ce tableau est egalement retourne par la fonction applique_filtres
# qui s'occupe de construire l'application
-# s'il existe une fonction nomme'e "calculer_champ_" suivi du nom du champ,
-# on lui passe la main et elle est cense' retourner le tableau ci-dessus
-# (Essayer de renvoyer une suite vide, c~a diminue les allocations a` l'exec)
+# s'il existe une fonction nommee "calculer_champ_" suivi du nom du champ,
+# on lui passe la main et elle est cense retourner le tableau ci-dessus
+# (Essayer de renvoyer une suite vide, ca diminue les allocations a l'exec)

-function calculer_champ($fonctions, $nom_champ, $id_boucle, &$boucles, $id_mere)
-{
-# regarder s'il existe une fonction spe'cifique a` ce nom
- $f = 'calculer_champ_' . $nom_champ;
- if (function_exists($f))
- return $f($fonctions, $nom_champ, $id_boucle, $boucles, $id_mere);
- else
- {
- # on regarde ensuite s'il y a un champ SQL homonyme,
- $code = index_pile($id_boucle, $nom_champ, $boucles);
- if (($code) && ($code != '$Pile[0]['.$nom_champ.']'))
- return applique_filtres($fonctions, $code, $id_boucle, $boucles, $id_mere);
- else
- {
-# si index_pile a ramene' le choix par de'faut,
-# c~a doit plutot e^tre un champ SPIP non SQL, ou ni l'un ni l'autre
- return calculer_champ_divers($fonctions, $nom_champ, $id_boucle, $boucles, $id_mere);
- }
- }
-}

-// ge'ne`re l'application d'une liste de filtres
+function calculer_champ($fonctions, $nom_champ, $id_boucle, &$boucles, $id_mere) {
+ // Preparer les parametres
+ $params = new ParamChamp;
+ $params->fonctions = $fonctions;
+ $params->nom_champ = $nom_champ;
+ $params->id_boucle = $id_boucle;
+ $params->boucles = $boucles;
+ $params->id_mere = $id_mere;

-function applique_filtres ($fonctions, $code, $id_boucle, $boucles, $id_mere)
-{
- $milieu = '';
- if ($fonctions) {
- while (list(, $fonc) = each($fonctions)) {
- if ($fonc) {
- $arglist = '';
- if (ereg('([^\{\}]*)\{(.+)\}$', $fonc, $regs)) {
- $fonc = $regs[1];
- $args = $regs[2];
- while (ereg('([^,]+),?(.*)$', $args, $regs)) {
- $args = $regs[2];
- $arg = trim($regs[1]);
- if ($arg)
- {
- if ($arg[0] =='#')
- {
- list($arg,$m) = calculer_champ(array(),substr($arg,1),$id_boucle, $boucles, $id_mere);
- $milieu .= $m;
- }
- else {if ($arg[0] =='$')
- $arg = '$Pile[0][\'' . substr($arg,1) . "']";}
- $arglist .= ','.$arg;
- }
- }
- }
- if (function_exists($fonc))
- $code = "$fonc($code$arglist)";
- else
- $code = "'"._T('erreur_filtre', array('filtre' => $fonc))."'";
+ // regarder s'il existe une fonction perso pour #NOM
+ $f = 'perso_' . $nom_champ;
+ if (function_exists($f))
+ return $f($params);
+
+ // regarder s'il existe une fonction new style pour #NOM
+ $f = 'calculer_balise_' . $nom_champ;
+ if (function_exists($f))
+ return $f($params);
+
+ // regarder s'il existe une fonction old style pour #NOM
+ $f = 'calculer_champ_' . $nom_champ;
+ if (function_exists($f))
+ return $f($fonctions, $nom_champ, $id_boucle, $boucles, $id_mere);
+
+ // on regarde ensuite s'il y a un champ SQL homonyme,
+ $code = index_pile($id_boucle, $nom_champ, $boucles);
+ if (($code) && ($code != '$Pile[0]['.$nom_champ.']'))
+ return applique_filtres($fonctions, $code, $id_boucle, $boucles, $id_mere);
+
+ // si index_pile a ramene le choix par defaut,
+ // ca doit plutot etre un champ SPIP non SQL,
+ // ou ni l'un ni l'autre
+ return calculer_champ_divers($fonctions, $nom_champ, $id_boucle, $boucles, $id_mere);
+}
+
+
+// Genere l'application d'une liste de filtres
+function applique_filtres ($fonctions, $code, $id_boucle, $boucles, $id_mere) {
+ $milieu = '';
+ if ($fonctions) {
+ while (list(, $fonc) = each($fonctions)) {
+ if ($fonc) {
+ $arglist = '';
+ if (ereg('([^\{\}]*)\{(.+)\}$', $fonc, $regs)) {
+ $fonc = $regs[1];
+ $args = $regs[2];
+ while (ereg('([^,]+),?(.*)$', $args, $regs)) {
+ $args = $regs[2];
+ $arg = trim($regs[1]);
+ if ($arg) {
+ if ($arg[0] =='#') {
+ list($arg,$m) = calculer_champ(array(),substr($arg,1),$id_boucle, $boucles, $id_mere);
+ $milieu .= $m;
+ }
+ else {
+ if ($arg[0] =='$')
+ $arg = '$Pile[0][\'' . substr($arg,1) . "']";
+ }
+ $arglist .= ','.$arg;
+ }
+ }
+ }
+ if (function_exists($fonc))
+ $code = "$fonc($code$arglist)";
+ else
+ $code = "'"._T('erreur_filtre', array('filtre' => $fonc))."'";
+ }
+ }
   }
- }
- }
- return array($code,$milieu);
+ return array($code,$milieu);
}

?>

Index: inc-reqsql-squel.php3

RCS file: /home/spip-cvs/spip/inc-reqsql-squel.php3,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- inc-reqsql-squel.php3 16 Jul 2004 07:20:01 -0000 1.1
+++ inc-reqsql-squel.php3 25 Jul 2004 06:55:45 -0000 1.2
@@ -105,7 +105,7 @@
     $boucle->where[] = "$id_table.id_syndic=syndic.id_syndic";
     $boucle->where[] = "$id_table.statut='publie'";
     $boucle->where[] = "syndic.statut='publie'";
- $boucle->select[]='syndic.nom_site AS nom_site'; # de'rogation zarbi
+ $boucle->select[]='syndic.nom_site AS nom_site'; # derogation zarbi
     $boucle->select[]='syndic.url_site AS url_site'; # idem
     break;

@@ -114,26 +114,26 @@
     $id_field = '*'; // utile a` TOTAL_BOUCLE seulement
   } // fin du switch

-# si pas de champ c'est un de'compte on prend la primary pour avoir qqch
-# (le marteau-pilon * est trop couteux, et le COUNT incompatible avec le cas
-# ge'ne'ral)
- return ('spip_abstract_select(array("'.
- ((!$boucle->select) ? $id_field :
- join('", "', array_unique($boucle->select))) .
- '"),
+ // En absence de champ c'est un decompte : on prend la primary pour
+ // avoir qqch (le marteau-pilon * est trop couteux, et le COUNT
+ // incompatible avec le cas general)
+ return 'spip_abstract_select(array("'.
+ ((!$boucle->select) ? $id_field :
+ join('", "', array_unique($boucle->select))) .
+ '"), # SELECT
     array("' .
- join('","', array_unique($boucle->from)) .
- '"),
+ join('","', array_unique($boucle->from)) .
+ '"), # FROM
     array(' .
- (!$boucle->where ? '' : ( '"' . join('","', $boucle->where) . '"')) .
- "),
- $boucle->group,
- $boucle->order,
- \"$boucle->limit\",
- '$boucle->sous_requete',
- $boucle->compte_requete,
- '$id_table',
- '$boucle->id_boucle')") ;
+ (!$boucle->where ? '' : ( '"' . join('","', $boucle->where) . '"')) .
+ "), # WHERE
+ '".addslashes($boucle->group)."', # GROUP
+ '".addslashes($boucle->order)."', # ORDER
+ '".$boucle->limit."', # LIMIT
+ '".$boucle->sous_requete."', # sous
+ ".$boucle->compte_requete.", # compte
+ '".$id_table."', # table
+ '".$boucle->id_boucle."'); # boucle";
}

?>

Index: inc-calcul_mysql3.php

RCS file: /home/spip-cvs/spip/inc-calcul_mysql3.php,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- inc-calcul_mysql3.php 24 Jul 2004 21:18:11 -0000 1.8
+++ inc-calcul_mysql3.php 25 Jul 2004 06:55:45 -0000 1.9
@@ -134,7 +134,9 @@
function calcul_exposer ($pile, $reference) {
   static $hierarchie;

- if (!$hierarchie) {
+ $md5 = md5(serialize($reference));
+
+ if (!$hierarchie[$md5]) {
     if ($id = $reference['id_article'])
       $base = 'articles';
     else if ($id = $reference['id_breve'])
@@ -147,41 +149,41 @@
       $base = 'rubriques';

     if (!$base)
- $hierarchie = '-';
+ $hierarchie[$md5] = '-';
     else {
       if ($base != 'rubriques') {
- $hierarchie[$base][$id] = true;
+ $hierarchie[$md5][$base][$id] = true;
         $id_element = 'id_'.ereg_replace('s$', '', $base);
         $s = spip_fetch_array(spip_query(
         "SELECT id_rubrique FROM spip_$base WHERE $id_element=$id"));
         $id = $s['id_rubrique'];
       }

- $hierarchie['rubriques'][$id] = true;
+ $hierarchie[$md5]['rubriques'][$id] = true;

       while (true) {
         $s = spip_fetch_array(spip_query(
         "SELECT id_parent FROM spip_rubriques WHERE id_rubrique=$id"));
         if ($id = $s['id_parent'])
- $hierarchie['rubriques'][$id] = true;
+ $hierarchie[$md5]['rubriques'][$id] = true;
         else
           break;
       }
     }
   }

- if ($hierarchie == '-')
+ if ($hierarchie[$md5] == '-')
     return false;
   else if ($id = $pile['id_article'])
- return $hierarchie['articles'][$id];
+ return $hierarchie[$md5]['articles'][$id];
   else if ($id = $pile['id_breve'])
- return $hierarchie['breves'][$id];
+ return $hierarchie[$md5]['breves'][$id];
   else if ($id = $pile['id_syndic'])
- return $hierarchie['syndic'][$id];
+ return $hierarchie[$md5]['syndic'][$id];
   else if ($id = $pile['id_rubrique'])
- return $hierarchie['rubriques'][$id];
+ return $hierarchie[$md5]['rubriques'][$id];
   else if ($id = $pile['id_secteur'])
- return $hierarchie['rubriques'][$id];
+ return $hierarchie[$md5]['rubriques'][$id];

}

Index: inc-bcl-squel.php3

RCS file: /home/spip-cvs/spip/inc-bcl-squel.php3,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- inc-bcl-squel.php3 18 Jul 2004 17:34:08 -0000 1.2
+++ inc-bcl-squel.php3 25 Jul 2004 06:55:45 -0000 1.3
@@ -20,9 +20,9 @@
   var $from;
   var $where;
   var $limit;
- var $group = "''";
- var $order = "''";
- var $date = "date" ;
+ var $group = '';
+ var $order = '';
+ var $date = 'date' ;
   var $hash = false ;
   var $lien = false;
   var $sous_requete = false;
@@ -49,4 +49,21 @@
   var $cond_avant, $cond_apres; // tableaux d'objets
   var $fonctions;
}
+
+//
+// Structure de donnees pour parler aux fonctions calcul_champ_TOTO
+//
+class ParamChamp {
+ var $fonctions;
+ var $nom_champ;
+ var $id_boucle;
+ var $boucles;
+ var $id_mere;
+ var $code;
+
+ function retour() {
+ return applique_filtres($this->fonctions, $this->code, $this->id_boucle, $this->boucles, $this->id_mere);
+ }
+}
+
?>

Index: inc-arg-squel.php3

RCS file: /home/spip-cvs/spip/inc-arg-squel.php3,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -d -r1.15 -r1.16
--- inc-arg-squel.php3 24 Jul 2004 22:24:26 -0000 1.15
+++ inc-arg-squel.php3 25 Jul 2004 06:55:45 -0000 1.16
@@ -65,8 +65,8 @@

       // Classement par ordre inverse
       else if ($param == 'inverse') {
- if ($boucle->order != "''") {
- $boucle->order .= ". ' DESC'";
+ if ($boucle->order) {
+ $boucle->order .= ' DESC';
         } else {
           include_local("inc-debug-squel.php3");
           erreur_squelette(_L("Inversion d'un ordre inexistant"), $param, $idb);
@@ -292,30 +292,31 @@
         if ($tri == 'hasard') { // par hasard
           $boucle->select[] = "MOD($id_field * UNIX_TIMESTAMP(),
           32767) & UNIX_TIMESTAMP() AS alea";
- $boucle->order = "'alea'";
+ $boucle->order = 'alea';
         }
         else if ($tri == 'titre_mot') { // par titre_mot
- $boucle->order= "'mots.titre'";
+ $boucle->order= 'mots.titre';
         }
         else if ($tri == 'type_mot'){ // par type_mot
- $boucle->order= "'mots.type'";
+ $boucle->order= 'mots.type';
         }
         else if ($tri == 'points'){ // par points
- $boucle->order= "'points'";
+ $boucle->order= 'points';
         }
         else if (ereg("^num[[:space:]]+([^,]*)(,.*)?",$tri, $match2)) {
           // par num champ
           $boucle->select[] = "0+$id_table.".$match2[1]." AS num";
- $boucle->order = "'num".$match2[2]."'";
+ $boucle->order = "num".$match2[2];
         }
         else if (ereg("^[a-z0-9]+$", $tri)) { // par champ
- if ($tri == 'date') $tri = $table_date[$type];
- $boucle->order = "'$id_table.$tri'";
+ if ($tri == 'date')
+ $tri = $table_date[$type];
+ $boucle->order = "$id_table.$tri";
         }
         else {
           // tris par critere bizarre
           // (formule composee, virgules, etc).
- $boucle->order = "'".addslashes($tri)."'";
+ $boucle->order = $tri;
         }
       }
     }

Index: inc-vrac-squel.php3

RCS file: /home/spip-cvs/spip/inc-vrac-squel.php3,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- inc-vrac-squel.php3 24 Jul 2004 21:18:11 -0000 1.11
+++ inc-vrac-squel.php3 25 Jul 2004 06:55:45 -0000 1.12
@@ -12,14 +12,6 @@

   // Introduction (d'un article, d'une breve ou d'un message de forum)

- case 'INTRODUCTION':
- $code = 'calcul_introduction(\'' .
- $boucles[$id_boucle]->type_requete . "',\n" .
- index_pile($id_boucle, "texte", $boucles) . ",\n" .
- index_pile($id_boucle, "chapo", $boucles) . ",\n" .
- index_pile($id_boucle, "descriptif", $boucles) . ")\n";
- break;
-
   case 'NOM_SITE_SPIP':
     $code = "lire_meta('nom_site')";
     break;
@@ -189,7 +181,7 @@
     }

     // Faut-il exposer ?
- $code = "(calcul_exposer(\$Pile[\$SP], \$Pile[0]) ? '$on': '$off')";
+ $code = '(calcul_exposer($Pile[$SP], $Pile[0]) ? \'$on\': \'$off\')';

     break;

@@ -292,4 +284,18 @@
}

+//
+// Fonctions OK
+//
+
+function calculer_balise_INTRODUCTION($params) {
+ $params->code = 'calcul_introduction(\'' .
+ $params->boucles[$params->id_boucle]->type_requete . "',\n" .
+ index_pile($params->id_boucle, "texte", $params->boucles) . ",\n" .
+ index_pile($params->id_boucle, "chapo", $params->boucles) . ",\n" .
+ index_pile($params->id_boucle, "descriptif", $params->boucles) . ")\n";
+
+ return $params->retour();
+}
+
?>

Index: inc-calcul-squel.php3

RCS file: /home/spip-cvs/spip/inc-calcul-squel.php3,v
retrieving revision 1.235
retrieving revision 1.236
diff -u -d -r1.235 -r1.236
--- inc-calcul-squel.php3 23 Jul 2004 22:45:00 -0000 1.235
+++ inc-calcul-squel.php3 25 Jul 2004 06:55:45 -0000 1.236
@@ -155,7 +155,7 @@
   }

   return ($texte . '
- $result = ' . calculer_requete($boucle) . ';
+ $result = ' . calculer_requete($boucle) . '
   $t0 = "";
   $SP++;' .
      (($flag_parties) ?

Index: inc-form-squel.php3

RCS file: /home/spip-cvs/spip/inc-form-squel.php3,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- inc-form-squel.php3 23 Jul 2004 06:06:55 -0000 1.8
+++ inc-form-squel.php3 25 Jul 2004 06:55:45 -0000 1.9
@@ -1,202 +1,192 @@
<?php

-# traduction des champs "formulaire" et "parametres
+//
+// Traduction des champs "formulaire" et "parametres"
+//

-# Boutons d'administration:
-# comme c'est soumis a` une condition dynamique (adminitrateur ?)
-# on produit un appel a` une fonction Javascript
-# a chaque utilisation du squelette, on produira la de'finition ad hoc

-function calculer_champ_FORMULAIRE_ADMIN($fonctions, $nom_champ, $id_boucle, &$boucles, $id_mere)
-{
-# Quand Fil sera convaincu:
-# return array("envoi_script('if (window.admin != null) admin()')",'');
- return array("'<!-- @@formulaire_admin@@45609871@@ -->'",'');
-}
-
-function calculer_champ_FORMULAIRE_RECHERCHE($fonctions, $nom_champ, $id_boucle, &$boucles, $id_mere)
-{
- if ($fonctions) {
- list(, $lien) = each($fonctions); // le premier est un url
- while (list(, $filtre) = each($fonctions)) {
- $filtres[] = $filtre; // les suivants sont des filtres
- }
- $fonctions = $filtres;
- }
- if (!$lien) $lien = 'recherche.php3';
- $code = "((lire_meta('activer_moteur') != 'oui') ? '' : calcul_form_rech('$lien'))";
-
- return applique_filtres($fonctions, $code, $id_boucle, $boucles, $id_mere);
+// Formulaire de recherche
+function calculer_champ_FORMULAIRE_RECHERCHE($fonctions, $nom_champ, $id_boucle, &$boucles, $id_mere) {
+ if ($fonctions) {
+ list(, $lien) = each($fonctions); // le premier est un url
+ while (list(, $filtre) = each($fonctions))
+ $filtres[] = $filtre; // les suivants sont des filtres
+ $fonctions = $filtres;
+ }
+ if (!$lien) $lien = 'recherche.php3';
+ $code = "((lire_meta('activer_moteur') != 'oui') ? '' : calcul_form_rech('$lien'))";
+ return applique_filtres($fonctions, $code, $id_boucle, $boucles, $id_mere);
}

// Formulaire d'inscription comme redacteur (dans inc-formulaires.php3)
-
-function calculer_champ_FORMULAIRE_INSCRIPTION($fonctions, $nom_champ, $id_boucle, &$boucles, $id_mere)
-{
- $milieu = '
+function calculer_champ_FORMULAIRE_INSCRIPTION($fonctions, $nom_champ, $id_boucle, &$boucles, $id_mere) {
+ $milieu = '
     $spip_lang = $GLOBALS["spip_lang"];';
- $code = '((lire_meta("accepter_inscriptions") != "oui") ? "" :
- ("<"."?php include(\'inc-formulaires.php3\'); lang_select(\"$spip_lang\"); formulaire_inscription(\"redac\"); lang_dselect(); ?".">"))';
- list($c,$m) = applique_filtres($fonctions, $code, $id_boucle, $boucles, $id_mere);
- return array($c,$milieu . $m);
+ $code = '((lire_meta("accepter_inscriptions") != "oui") ? "" :
+ ("<"."?php include(\'inc-formulaires.php3\'); lang_select(\"$spip_lang\"); formulaire_inscription(\"redac\"); lang_dselect(); ?".">"))';
+ list($c,$m) = applique_filtres($fonctions, $code, $id_boucle, $boucles, $id_mere);
+ return array($c,$milieu . $m);
}

-function calculer_champ_FORMULAIRE_ECRIRE_AUTEUR($fonctions, $nom_champ, $id_boucle, &$boucles, $id_mere)
-{
- $milieu = '
+// Formulaire ecrire auteur
+function calculer_champ_FORMULAIRE_ECRIRE_AUTEUR($fonctions, $nom_champ, $id_boucle, &$boucles, $id_mere) {
+ $milieu = '
     $spip_lang = $GLOBALS["spip_lang"];
     $mailauteur = ' .
- index_pile($id_boucle, 'email', $boucles) . ';
+ index_pile($id_boucle, 'email', $boucles) . ';
     $nomauteur = ' .
- index_pile($id_boucle, 'id_auteur', $boucles) . ';';
- $code = '(!email_valide($mailauteur) ? "" :
- ("<'.'?php include(\'inc-formulaires.php3\'); lang_select(\"$spip_lang\"); formulaire_ecrire_auteur(\"$nomauteur\", trim(\"$mailauteur\")); lang_dselect();
- ?'.'>"))';
- list($c,$m) = applique_filtres($fonctions, $code, $id_boucle, $boucles, $id_mere);
- return array($c,$milieu . $m);
+ index_pile($id_boucle, 'id_auteur', $boucles) . ';';
+ $code = '(!email_valide($mailauteur) ? "" :
+ ("<'.'?php include(\'inc-formulaires.php3\');
+ lang_select(\"$spip_lang\");
+ formulaire_ecrire_auteur(\"$nomauteur\", trim(\"$mailauteur\"));
+ lang_dselect(); ?'.'>"))';
+ list($c,$m) = applique_filtres($fonctions, $code, $id_boucle, $boucles, $id_mere);
+ return array($c,$milieu . $m);
}

-function calculer_champ_FORMULAIRE_SIGNATURE($fonctions, $nom_champ, $id_boucle, &$boucles, $id_mere)
-{
- $milieu = '
+// Formulaire signature de petition
+function calculer_champ_FORMULAIRE_SIGNATURE($fonctions, $nom_champ, $id_boucle, &$boucles, $id_mere) {
+ $milieu = '
     $spip_lang = $GLOBALS["spip_lang"];
- $lacible = ' . index_pile($id_boucle, 'id_article', $boucles) . ";";
- $code = '(!query_petitions($lacible) ? "" :
- ("<"."?php include(\'inc-formulaires.php3\'); lang_select(\"$spip_lang\"); formulaire_signature($lacible); lang_dselect();
- ?".">"))';
- list($c,$m) = applique_filtres($fonctions, $code, $id_boucle, $boucles, $id_mere);
- return array($c,$milieu . $m);
+ $lacible = ' . index_pile($id_boucle, 'id_article', $boucles) . ";";
+ $code = '(!query_petitions($lacible) ? "" :
+ ("<"."?php include(\'inc-formulaires.php3\');
+ lang_select(\"$spip_lang\"); formulaire_signature($lacible);
+ lang_dselect(); ?".">"))';
+ list($c,$m) = applique_filtres($fonctions, $code, $id_boucle, $boucles, $id_mere);
+ return array($c,$milieu . $m);
}

- //
- // Formulaire de referencement d'un site
- //
-function calculer_champ_FORMULAIRE_SITE($fonctions, $nom_champ, $id_boucle, &$boucles, $id_mere)
-{
- $milieu = '
+// Formulaire d'inscription de site dans l'annuaire
+function calculer_champ_FORMULAIRE_SITE($fonctions, $nom_champ, $id_boucle, &$boucles, $id_mere) {
+ $milieu = '
     $spip_lang = $GLOBALS["spip_lang"];
     $lacible = ' .
- index_pile($id_boucle, 'id_rubrique', $boucles) . ';';
- $code = '(lire_meta("proposer_sites") != "2") ? "" :
- ("<"."?php include(\'inc-formulaires.php3\'); lang_select(\"$spip_lang\"); formulaire_site($lacible); lang_dselect();
- ?".">")';
- list($c,$m) = applique_filtres($fonctions, $code, $id_boucle, $boucles, $id_mere);
- return array($c,$milieu . $m);
+ index_pile($id_boucle, 'id_rubrique', $boucles) . ';';
+ $code = '(lire_meta("proposer_sites") != "2") ? "" :
+ ("<"."?php include(\'inc-formulaires.php3\');
+ lang_select(\"$spip_lang\"); formulaire_site($lacible);
+ lang_dselect(); ?".">")';
+ list($c,$m) = applique_filtres($fonctions, $code, $id_boucle, $boucles, $id_mere);
+ return array($c,$milieu . $m);
}

// Formulaire de reponse a un forum
+function calculer_champ_FORMULAIRE_FORUM($fonctions, $nom_champ, $id_boucle, &$boucles, $id_mere) {
+ $type = $boucles[$id_boucle]->type_requete;
+ $milieu ='';
+ switch ($type) {
+ case 'breves':
+ $code = "boutons_de_forum('', '', ''," .
+ index_pile($id_boucle, 'id_breve', $boucles) .
+ ", '', " .
+ index_pile($id_boucle, 'titre', $boucles) .
+ ", '$type', substr(lire_meta('forums_publics'),0,3)), \$Cache)";
+ break;

-function calculer_champ_FORMULAIRE_FORUM($fonctions, $nom_champ, $id_boucle, &$boucles, $id_mere)
-{
- $type = $boucles[$id_boucle]->type_requete;
- $milieu ='';
- switch ($type) {
- case 'breves':
- $code = "
- boutons_de_forum('', '', ''," .
- index_pile($id_boucle, 'id_breve', $boucles) .
- ", '', " .
- index_pile($id_boucle, 'titre', $boucles) .
- ", '$type', substr(lire_meta('forums_publics'),0,3)), \$Cache)";
- break;
-
- case 'rubriques':
- $code = '
- boutons_de_forum(' .
- index_pile($id_boucle, 'id_rubrique', $boucles) .
- ", '', '', '', ''," .
- index_pile($id_boucle, 'titre', $boucles) .
- ", '$type', substr(lire_meta('forums_publics'),0,3)), \$Cache)";
- break;
-
- case 'syndication':
- $code = "
- boutons_de_forum('', '', '','', " .
- index_pile($id_boucle, 'id_rubrique', $boucles) .
- ", " .
- index_pile($id_boucle, 'nom_site', $boucles) .
- ", '$type', substr(lire_meta('forums_publics'),0,3)), \$Cache)";
- break;
-
- case 'articles':
- $code = "
- boutons_de_forum('', '', " .
- index_pile($id_boucle, 'id_article', $boucles) .
- ", '','', " .
- index_pile($id_boucle, 'nom_site', $boucles) .
- "'$type', " .
- index_pile($id_boucle, 'accepter_forum', $boucles) .
- ', $Cache)';
- break;
+ case 'rubriques':
+ $code = 'boutons_de_forum(' .
+ index_pile($id_boucle, 'id_rubrique', $boucles) .
+ ", '', '', '', ''," .
+ index_pile($id_boucle, 'titre', $boucles) .
+ ", '$type', substr(lire_meta('forums_publics'),0,3)), \$Cache)";
+ break;
+
+ case 'syndication':
+ $code = "boutons_de_forum('', '', '','', " .
+ index_pile($id_boucle, 'id_rubrique', $boucles) . ", " .
+ index_pile($id_boucle, 'nom_site', $boucles) .
+ ", '$type', substr(lire_meta('forums_publics'),0,3)), \$Cache)";
+ break;
     
- case 'forums':
- default:
- $code = "
- boutons_de_forum(" .
- index_pile($id_boucle, 'id_rubrique', $boucles) . ', ' .
- index_pile($id_boucle, 'id_forum', $boucles) . ', ' .
- index_pile($id_boucle, 'id_article', $boucles) . ', ' .
- index_pile($id_boucle, 'id_breve', $boucles) . ', ' .
- index_pile($id_boucle, 'id_syndic', $boucles) . ', ' .
- index_pile($id_boucle, 'titre', $boucles) .
- ", '$type', '', \$Cache)";
- break;
- }
- list($c,$m) = applique_filtres($fonctions, $code, $id_boucle, $boucles, $id_mere);
- return array($c,$milieu . $m);
+ case 'articles':
+ $code = "boutons_de_forum('', '', " .
+ index_pile($id_boucle, 'id_article', $boucles) .
+ ", '','', " .
+ index_pile($id_boucle, 'nom_site', $boucles) .
+ "'$type', " .
+ index_pile($id_boucle, 'accepter_forum', $boucles) .
+ ', $Cache)';
+ break;
+
+ case 'forums':
+ default:
+ $code = "boutons_de_forum(" .
+ index_pile($id_boucle, 'id_rubrique', $boucles) . ', ' .
+ index_pile($id_boucle, 'id_forum', $boucles) . ', ' .
+ index_pile($id_boucle, 'id_article', $boucles) . ', ' .
+ index_pile($id_boucle, 'id_breve', $boucles) . ', ' .
+ index_pile($id_boucle, 'id_syndic', $boucles) . ', ' .
+ index_pile($id_boucle, 'titre', $boucles) .
+ ", '$type', '', \$Cache)";
+ break;
+ }
+ list($c,$m) = applique_filtres($fonctions, $code, $id_boucle, $boucles, $id_mere);
+ return array($c,$milieu . $m);
}

-function calculer_champ_PARAMETRES_FORUM($fonctions, $nom_champ, $id_boucle, &$boucles, $id_mere)
-{
- $milieu = '
- $forums_publics = ((' .
- index_pile($id_boucle, "accepter_forum", $boucles) . ' == ""
- AND lire_meta("forums_publics") != "non")
- OR (' .
- index_pile($id_boucle, "accepter_forum", $boucles) . ' != ""
- AND ' .
- index_pile($id_boucle, "accepter_forum", $boucles) . ' != "non"));
- if ($forums_publics) {
- if (!($lien = $GLOBALS["HTTP_GET_VARS"]["retour"])) {
- $lien = $GLOBALS["REQUEST_URI"];
- $lien = ereg_replace("&recalcul=oui","",substr($lien, strrpos($lien, "/") + 1)); }
- $lien = rawurlencode($lien); ';
- switch ($boucles[$id_boucle]->type_requete) {
- case 'articles':
- $c = '"id_article=".' .
- index_pile($id_boucle, id_article, $boucles);
- break;
- case 'breves':
- $c = '"id_breve=".' .
- index_pile($id_boucle, id_breve, $boucles);
- break;
- case 'rubriques':
- $c = '"id_rubrique=".' .
- index_pile($id_boucle, id_rubrique, $boucles);
- break;
- case 'syndication':
- $c = '"id_syndic=".' .
- index_pile($id_boucle, id_syndic, $boucles);
- break;
- case 'forums':
- default:
- $liste_champs = array ("id_article","id_breve","id_rubrique","id_syndic","id_forum");
- $c="";$s="";
- while (list(,$champ) = each ($liste_champs)) {
- $x = index_pile($id_boucle, $champ, $boucles);
- $c .= (($c) ? ".\n" : "") .
- "((!$x) ? '' : ('$s$champ='.$x))";
- $s="&";}
- break;
- }
- $milieu .= "}\n";
- $code = "(!\$forums_publics) ? '' :
- ($c .\n" . '"&cache=".rawurlencode($Cache[cache]) .' . "\n\"&retour=\$lien\")";
-
- list($c,$m) = applique_filtres($fonctions, $code, $id_boucle, $boucles, $id_mere);
- return array($c,$milieu . $m);
+// Parametres de reponse a un forum
+function calculer_champ_PARAMETRES_FORUM($fonctions, $nom_champ, $id_boucle, &$boucles, $id_mere) {
+ $milieu = '$forums_publics = ((' .
+ index_pile($id_boucle, "accepter_forum", $boucles) . ' == ""
+ AND lire_meta("forums_publics") != "non")
+ OR (' . index_pile($id_boucle, "accepter_forum", $boucles) .
+ ' != "" AND ' .
+ index_pile($id_boucle, "accepter_forum", $boucles) . ' != "non"));
+ if ($forums_publics) {
+ if (!($lien = $GLOBALS["HTTP_GET_VARS"]["retour"])) {
+ $lien = $GLOBALS["REQUEST_URI"];
+ $lien = ereg_replace("&recalcul=oui","",
+ substr($lien, strrpos($lien, "/") + 1));
+ }
+ $lien = rawurlencode($lien); ';
+
+ switch ($boucles[$id_boucle]->type_requete) {
+ case 'articles':
+ $c = '"id_article=".' . index_pile($id_boucle, id_article, $boucles);
+ break;
+ case 'breves':
+ $c = '"id_breve=".' . index_pile($id_boucle, id_breve, $boucles);
+ break;
+ case 'rubriques':
+ $c = '"id_rubrique=".' . index_pile($id_boucle, id_rubrique, $boucles);
+ break;
+ case 'syndication':
+ $c = '"id_syndic=".' . index_pile($id_boucle, id_syndic, $boucles);
+ break;
+ case 'forums':
+ default:
+ $liste_champs = array ("id_article","id_breve","id_rubrique","id_syndic","id_forum");
+ $c="";$s="";
+ foreach ($liste_champs as $champ) {
+ $x = index_pile($id_boucle, $champ, $boucles);
+ $c .= (($c) ? ".\n" : "") . "((!$x) ? '' : ('$s$champ='.$x))";
+ $s="&";
+ }
+ break;
+ }
+ $milieu .= "}\n";
+ $code = "(!\$forums_publics) ? '' :
+ ($c .\n" . '"&cache=".rawurlencode($Cache[cache]) .' .
+ "\n\"&retour=\$lien\")";
+
+ list($c,$m) = applique_filtres($fonctions, $code, $id_boucle, $boucles, $id_mere);
+ return array($c,$milieu . $m);
+}
+
+/*
+# Boutons d'administration:
+# comme c'est soumis a` une condition dynamique (adminitrateur ?)
+# on produit un appel a` une fonction Javascript
+# a chaque utilisation du squelette, on produira la de'finition ad hoc
+*/
+function calculer_champ_FORMULAIRE_ADMIN($fonctions, $nom_champ, $id_boucle, &$boucles, $id_mere) {
+# Quand Fil sera convaincu:
+# return array("envoi_script('if (window.admin != null) admin()')",'');
+ return array("'<!-- @@formulaire_admin@@45609871@@ -->'",'');
}

?>