diff --git a/inc-bcl-squel.php3 b/inc-bcl-squel.php3 index e66ef586aba85aedc232f24493cb8f52f31f24c3..034d02822a55ba592925624ede6e2e2a07a13eca 100644 --- a/inc-bcl-squel.php3 +++ b/inc-bcl-squel.php3 @@ -60,7 +60,7 @@ class ParamChamp { var $id_boucle; var $boucles; var $id_mere; - var $entete; // code php a installer avant le calcul + var $type_requete; var $code; // code du calcul var $process; // processeurs standards, exemple 'propre(%s)' var $etoile; // le champ a ete appele avec une etoile (booleen) @@ -71,7 +71,7 @@ class ParamChamp { // Annuler les traitements si le champ est etoile if ($this->etoile) unset($this->process); - list ($code_filtre, $entete_filtre) = applique_filtres( + $code_filtre = applique_filtres( $this->fonctions, $this->code, $this->id_boucle, @@ -80,7 +80,7 @@ class ParamChamp { $this->type, $this->process ); - return array($code_filtre, $this->entete.$entete_filtre); + return $code_filtre; } } diff --git a/inc-calcul-squel.php3 b/inc-calcul-squel.php3 index faf7a1e27a2e7a7f96ce7f603d2d5a5450889359..8261dca43501e6898a4a808e1265a3b99db56f5f 100644 --- a/inc-calcul-squel.php3 +++ b/inc-calcul-squel.php3 @@ -319,7 +319,7 @@ function calculer_liste($tableau, $prefix, $id_boucle, $niv, &$boucles, $id_mere // balise SPIP default: - $rendu[0] = calculer_champ($objet->fonctions, + $rendu[0][0] = calculer_champ($objet->fonctions, $objet->nom_champ, $id_boucle, $boucles, diff --git a/inc-form-squel.php3 b/inc-form-squel.php3 index 6c6cbe1edd711749ac3ffa9d0b2a4d0ce4d44af9..1eaddb45755155880ceb68de649a617b4da68ad4 100644 --- a/inc-form-squel.php3 +++ b/inc-form-squel.php3 @@ -6,122 +6,135 @@ // 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)) +function balise_FORMULAIRE_RECHERCHE_dist($p) { + if ($p->fonctions) { + list(, $lien) = each($p->fonctions); // le premier est un url + while (list(, $filtre) = each($p->fonctions)) $filtres[] = $filtre; // les suivants sont des filtres - $fonctions = $filtres; + $p->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, 'php'); + + $p->code = "((lire_meta('activer_moteur') != 'oui') ? '' : calcul_form_rech('$lien'))"; + + $p->type = 'html'; + return $p; } // Formulaire d'inscription comme redacteur (dans inc-formulaires.php3) -function calculer_champ_FORMULAIRE_INSCRIPTION($fonctions, $nom_champ, $id_boucle, &$boucles, $id_mere) { - $code = '(lire_meta("accepter_inscriptions") != "oui") ? "" : +function balise_FORMULAIRE_INSCRIPTION_dist($p) { + + $p->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, 'php'); - return array($c,$m); + + $p->type = 'php'; + return $p; } -// Formulaire ecrire auteur (OK) -function calculer_champ_FORMULAIRE_ECRIRE_AUTEUR($fonctions, $nom_champ, $id_boucle, &$boucles, $id_mere) { - $_id_auteur = index_pile($id_boucle, 'id_auteur', $boucles); - $_mail_auteur = index_pile($id_boucle, 'email', $boucles); - $code = '!email_valide('.$_mail_auteur.') ? "" : +// Formulaire ecrire auteur +function balise_FORMULAIRE_ECRIRE_AUTEUR_dist($p) { + $_id_auteur = champ_sql('id_auteur', $p); + $_mail_auteur = champ_sql('email', $p); + + $p->code = '!email_valide('.$_mail_auteur.') ? "" : ("<'.'?php include(\'inc-formulaires.php3\'); lang_select(\'$spip_lang\'); formulaire_ecrire_auteur(".'.$_id_auteur.'.", \'".texte_script('.$_mail_auteur.')."\'); lang_dselect(); ?'.'>")'; - list($c,$m) = applique_filtres($fonctions, $code, $id_boucle, $boucles, $id_mere, 'php'); - return array($c,$m); + + $p->type = 'php'; + return $p; } // Formulaire signature de petition -function calculer_champ_FORMULAIRE_SIGNATURE($fonctions, $nom_champ, $id_boucle, &$boucles, $id_mere) { - $_id_article = index_pile($id_boucle, 'id_article', $boucles); - $code = '!($petition = sql_petitions('.$_id_article.')) ? "" : +function balise_FORMULAIRE_SIGNATURE_dist($p) { + $_id_article = champ_sql('id_article', $p); + + $p->code = '!($petition = sql_petitions('.$_id_article.')) ? "" : ("<"."?php include(\'inc-formulaires.php3\'); lang_select(\'$spip_lang\'); echo formulaire_signature(".'.$_id_article.'.", \'".texte_script(serialize($petition))."\'); lang_dselect(); ?".">")'; - list($c,$m) = applique_filtres($fonctions, $code, $id_boucle, $boucles, $id_mere, 'php'); - return array($c,$m); + + $p->type = 'php'; + return $p; } // Formulaire d'inscription de site dans l'annuaire -function calculer_champ_FORMULAIRE_SITE($fonctions, $nom_champ, $id_boucle, &$boucles, $id_mere) { - $code = '(lire_meta("proposer_sites") != 2) ? "": +function balise_FORMULAIRE_SITE_dist($p) { + $_id_rubrique = champ_sql('id_rubrique', $p); + + $p->code = '(lire_meta("proposer_sites") != 2) ? "": "<"."?php include(\'inc-formulaires.php3\'); lang_select(\'".$GLOBALS[\'spip_lang\']."\'); - formulaire_site(".'.index_pile($id_boucle, 'id_rubrique', $boucles).'."); + formulaire_site(".'.$_id_rubrique.'."); lang_dselect(); ?".">"'; - list($c,$m) = applique_filtres($fonctions, $code, $id_boucle, $boucles, $id_mere, 'php'); - return array($c,$m); + + $p->type = 'php'; + return $p; } // 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; +function balise_FORMULAIRE_FORUM_dist($p) { + $type = $p->type_requete; switch ($type) { case 'breves': - $code = "boutons_de_forum('', '', ''," . - index_pile($id_boucle, 'id_breve', $boucles) . + $p->code = "boutons_de_forum('', '', ''," . + champ_sql('id_breve', $p) . ", '', " . - index_pile($id_boucle, 'titre', $boucles) . + champ_sql('titre', $p) . ", '$type', substr(lire_meta('forums_publics'),0,3)), \$Cache)"; break; case 'rubriques': - $code = 'boutons_de_forum(' . - index_pile($id_boucle, 'id_rubrique', $boucles) . + $p->code = 'boutons_de_forum(' . + champ_sql('id_rubrique', $p) . ", '', '', '', ''," . - index_pile($id_boucle, 'titre', $boucles) . + champ_sql('titre', $p) . ", '$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) . + $p->code = "boutons_de_forum('', '', '','', " . + champ_sql('id_rubrique', $p) . ", " . + champ_sql('nom_site', $p) . ", '$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 'articles': + $p->code = "boutons_de_forum('', '', " . + champ_sql('id_article', $p) . + ", '','', " . + champ_sql('nom_site', $p) . + "'$type', " . + champ_sql('accepter_forum', $p) . + ', $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; + case 'forums': + default: + $p->code = "boutons_de_forum(" . + champ_sql('id_rubrique', $p) . ', ' . + champ_sql('id_forum', $p) . ', ' . + champ_sql('id_article', $p) . ', ' . + champ_sql('id_breve', $p) . ', ' . + champ_sql('id_syndic', $p) . ', ' . + champ_sql('titre', $p) . + ", '$type', '', \$Cache)"; + break; } - list($c,$m) = applique_filtres($fonctions, $code, $id_boucle, $boucles, $id_mere, 'php'); - return array($c,$m); + + $p->type = 'php'; + return $p; } // Parametres de reponse a un forum -function calculer_champ_PARAMETRES_FORUM($fonctions, $nom_champ, $id_boucle, &$boucles, $id_mere) { - $_accepter_forum = index_pile($id_boucle, "accepter_forum", $boucles); - $code = ' +function balise_PARAMETRES_FORUM_dist($p) { + $_accepter_forum = champ_sql('accepter_forum', $p); + $p->code = ' // refus des forums ? ('.$_accepter_forum.'=="non" OR (lire_meta("forums_publics") == "non" AND '.$_accepter_forum.'!="oui")) @@ -129,24 +142,24 @@ function calculer_champ_PARAMETRES_FORUM($fonctions, $nom_champ, $id_boucle, &$b '; - switch ($boucles[$id_boucle]->type_requete) { + switch ($p->type_requete) { case 'articles': - $c = '"id_article=".' . index_pile($id_boucle, 'id_article', $boucles); + $c = '"id_article=".' . champ_sql('id_article', $p); break; case 'breves': - $c = '"id_breve=".' . index_pile($id_boucle, 'id_breve', $boucles); + $c = '"id_breve=".' . champ_sql('id_breve', $p); break; case 'rubriques': - $c = '"id_rubrique=".' . index_pile($id_boucle, 'id_rubrique', $boucles); + $c = '"id_rubrique=".' . champ_sql('id_rubrique', $p); break; case 'syndication': - $c = '"id_syndic=".' . index_pile($id_boucle, 'id_syndic', $boucles); + $c = '"id_syndic=".' . champ_sql('id_syndic', $p); break; case 'forums': default: $liste_champs = array ("id_article","id_breve","id_rubrique","id_syndic","id_forum"); foreach ($liste_champs as $champ) { - $x = index_pile($id_boucle, $champ, $boucles); + $x = champ_sql( $champ, $p); $c .= (($c) ? ".\n" : "") . "((!$x) ? '' : ('&$champ='.$x))"; } $c = "substr($c,1)"; @@ -163,21 +176,23 @@ function calculer_champ_PARAMETRES_FORUM($fonctions, $nom_champ, $id_boucle, &$b // invalideur forums (!($Cache[\'id_forum\'][calcul_index_forum(' . // Retournera 4 [$SP] mais force la demande du champ a MySQL - index_pile($id_boucle, 'id_article', $boucles) . ',' . - index_pile($id_boucle, 'id_breve', $boucles) . ',' . - index_pile($id_boucle, 'id_rubrique', $boucles) .',' . - index_pile($id_boucle, 'id_syndic', $boucles) . ")]=1)?'':\n"; - $code .= $invalide."(".$c."))"; - - list($c,$m) = applique_filtres($fonctions, $code, $id_boucle, $boucles, $id_mere); - return array($c,$m); + champ_sql('id_article', $p) . ',' . + champ_sql('id_breve', $p) . ',' . + champ_sql('id_rubrique', $p) .',' . + champ_sql('id_syndic', $p) . ")]=1)?'':\n"; + $p->code .= $invalide."(".$c."))"; + + $p->type = 'html'; + return $p; } /* # Boutons d'administration: */ -function calculer_champ_FORMULAIRE_ADMIN($fonctions, $nom_champ, $id_boucle, &$boucles, $id_mere) { - return array("'<!-- @@formulaire_admin@@45609871@@ -->'",''); +function balise_FORMULAIRE_ADMIN_dist($p) { + $p->code = "'<!-- @@formulaire_admin@@45609871@@ -->'"; + $p->type = "php"; + return $p; } ?> diff --git a/inc-index-squel.php3 b/inc-index-squel.php3 index 7147298a3f8eb06e34ecb5ad80e11ee4072b0052..79b41367ea67a432d8d070ad7344ba2c3605c286 100644 --- a/inc-index-squel.php3 +++ b/inc-index-squel.php3 @@ -79,21 +79,13 @@ function index_pile($idb, $nom_champ, &$boucles) { return('$Pile[0][\''.$nom_champ.'\']'); } -# calculer_champ genere le code PHP correspondant a la balise Spip $nom_champ -# 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 egalement retourne par la fonction applique_filtres -# qui s'occupe de construire l'application -# 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) - // cette fonction sert d'API pour demander le champ '$champ' dans la pile function champ_sql($champ, $p) { return index_pile($p->id_boucle, $champ, $p->boucles); } +# calculer_champ genere le code PHP correspondant a la balise Spip $nom_champ +# Retourne une EXPRESSION php function calculer_champ($fonctions, $nom_champ, $id_boucle, &$boucles, $id_mere, $etoile = false) { // Preparer les parametres $p = new ParamChamp; @@ -104,8 +96,7 @@ function calculer_champ($fonctions, $nom_champ, $id_boucle, &$boucles, $id_mere, $p->id_mere = $id_mere; $p->type = 'html'; $p->process = ''; - - # $p->type_requete = $boucles[$id_boucle]->type_requete; # A AJOUTER + $p->type_requete = $boucles[$id_boucle]->type_requete; // regarder s'il existe une fonction personnalisee balise_NOM() $f = 'balise_' . $nom_champ; @@ -117,15 +108,8 @@ function calculer_champ($fonctions, $nom_champ, $id_boucle, &$boucles, $id_mere, if (function_exists($f) AND $p = $f($p)) return $p->retour(); - # A SUPPRIMER, cf. inc-form-squel.php3 - // regarder s'il existe une fonction old style calculer_champ_NOM() - $f = 'calculer_champ_' . $nom_champ; - if (function_exists($f)) { - return $f($fonctions, $nom_champ, $id_boucle, $boucles, $id_mere); - } - // S'agit-il d'un logo ? Une fonction speciale les traite tous - if (ereg('^LOGO_', $nom_champ) AND $p = calculer_champ_LOGO($p)) + if (ereg('^LOGO_', $nom_champ) AND $p = calcul_balise_logo($p)) return $p->retour(); // On regarde ensuite s'il y a un champ SQL homonyme, @@ -155,7 +139,6 @@ function calculer_champ($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, $type ='html', $process='') { - $milieu = ''; // pretraitements standards switch ($type) { @@ -186,14 +169,11 @@ function applique_filtres ($fonctions, $code, $id_boucle, $boucles, $id_mere, $t $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) . "']"; - } + if ($arg[0] =='#') + $arg = calculer_champ(array(), substr($arg,1), + $id_boucle, $boucles, $id_mere); + else if ($arg[0] =='$') + $arg = '$Pile[0][\'' . substr($arg,1) . "']"; $arglist .= ','.$arg; } } @@ -201,7 +181,9 @@ function applique_filtres ($fonctions, $code, $id_boucle, $boucles, $id_mere, $t if (function_exists($fonc)) $code = "$fonc($code$arglist)"; else - $code = "'"._T('erreur_filtre', array('filtre' => $fonc))."'"; + $code = "'".texte_script( + _T('erreur_filtre', array('filtre' => $fonc)) + )."'"; } } } @@ -210,7 +192,7 @@ function applique_filtres ($fonctions, $code, $id_boucle, $boucles, $id_mere, $t if ($type == 'html') $code = "interdire_scripts($code)"; - return array($code, $milieu); + return $code; } ?> diff --git a/inc-logo-squel.php3 b/inc-logo-squel.php3 index d9b9b462f052ef16851c8509f022960d9304ffc8..a86c239d50416df8297945c33461de3db97a4f7e 100644 --- a/inc-logo-squel.php3 +++ b/inc-logo-squel.php3 @@ -16,7 +16,7 @@ function balise_EXTRA_dist ($p) { if ($p->fonctions) { include_ecrire("inc_extra.php3"); list ($key, $champ_extra) = each($p->fonctions); // le premier filtre - $type_extra = $p->boucles[$p->id_boucle]->type_requete; + $type_extra = $p->type_requete; // ci-dessus est sans doute un peu buggue : si on invoque #EXTRA // depuis un sous-objet sans champ extra d'un objet a champ extra, // on aura le type_extra du sous-objet (!) @@ -93,8 +93,7 @@ function balise_POPULARITE_dist ($p) { # Fonction commune aux logos (rubriques, articles...) - -function calculer_champ_LOGO($p) { +function calcul_balise_logo ($p) { // analyser la balise LOGO_xxx eregi("^LOGO_(([A-Z]+)(_.*)?)", $p->nom_champ, $regs); diff --git a/inc-text-squel.php3 b/inc-text-squel.php3 index e4788841e6d7f9aaf97735db5480695796a8db01..6d99fe2d291ecc8b35622314a22b4ab48b8ebebe 100644 --- a/inc-text-squel.php3 +++ b/inc-text-squel.php3 @@ -66,22 +66,18 @@ function calculer_texte($texte, $id_boucle, &$boucles, $id_mere) { // $chaine = strtolower($match[3]); if (!($module = $match[2])) - // ordre des modules a explorer - $module = 'local/public/spip'; - // il faudrait traiter un $m non vide - list ($c,$m) = applique_filtres(explode('|', - substr($match[4],1)), - "_T('$module:$chaine')", - $id_boucle, - $boucles, - $id_mere); - $code = str_replace($match[0], - "'$ferme_multi.$c.$ouvre_multi'", - $code); + // ordre standard des modules a explorer + $module = 'local/public/spip'; + $c = applique_filtres(explode('|', + substr($match[4],1)), + "_T('$module:$chaine')", + $id_boucle, + $boucles, + $id_mere); + $code = str_replace($match[0], "'$ferme_multi.$c.$ouvre_multi'", $code); } - $code = "$ouvre_multi$code$ferme_multi"; - return ($code); + return $ouvre_multi . $code . $ferme_multi; } ?> diff --git a/inc-vrac-squel.php3 b/inc-vrac-squel.php3 index 19dd78c120020c0b82bce2e957c6e0c49c00e73f..9c265104306d641d2a24a9c8909c2848d810eb45 100644 --- a/inc-vrac-squel.php3 +++ b/inc-vrac-squel.php3 @@ -97,7 +97,7 @@ function balise_URL_SITE_SPIP_dist($p) { function balise_URL_ARTICLE_dist($p) { - $_type = $p->boucles[$p->id_boucle]->type_requete; + $_type = $p->type_requete; // Cas particulier des boucles (SYNDIC_ARTICLES) if ($_type == 'syndic_articles') { @@ -274,7 +274,7 @@ function balise_EXPOSER_dist($p) { $p->fonctions = $filtres; } - $type_boucle = $p->boucles[$p->id_boucle]->type_requete; + $type_boucle = $p->type_requete; $primary_key = $table_primary[$type_boucle]; $p->code = '(calcul_exposer(' @@ -369,7 +369,7 @@ function balise_URL_LOGOUT_dist($p) { } function balise_INTRODUCTION_dist ($p) { - $_type = $p->boucles[$p->id_boucle]->type_requete; + $_type = $p->type_requete; $_texte = champ_sql('texte', $p); $_chapo = champ_sql('chapo', $p); $_descriptif = champ_sql('descriptif', $p);