texte = $texte;
return $result;
}
$result = new Boucle;
$debut = substr($texte, 0, $p);
$milieu = substr($texte, $p);
if (!ereg("^( '._T('erreur_boucle_syntaxe2', array('milieu' => $milieu));
install_fin_html();
exit;
}
$commande = $match[1];
$id_boucle = $match[2];
$suite_commande = $match[3];
//
// Decomposer les structures conditionnelles
//
$s = "";
$p = strpos($debut, $s);
if ($p || (substr($debut, 0, strlen($s)) == $s)) {
$cond_avant = substr($debut, $p + strlen($s));
$debut = substr($debut, 0, $p);
}
$milieu = substr($milieu, strlen($commande));
$s = "
'._T('erreur_boucle_fermant', array('id'=>$id_boucle));
install_fin_html();
exit;
}
$fin = substr($milieu, $p + strlen($s));
$milieu = substr($milieu, 0, $p);
$s = "";
$p = strpos($fin, $s);
if ($p || (substr($fin, 0, strlen($s)) == $s)) {
$cond_fin = substr($fin, 0, $p);
$fin = substr($fin, $p + strlen($s));
}
$s = "/B$id_boucle>";
$p = strpos($fin, $s);
if ($p || (substr($fin, 0, strlen($s)) == $s)) {
$cond_altern = substr($fin, 0, $p);
$fin = substr($fin, $p + strlen($s));
}
$id_boucle = ereg_replace("-","_",$id_boucle);
//
// Parser la commande de la boucle
//
if (ereg('\(([^)]*)\)', $suite_commande, $regs)) {
$_type = $regs[1];
$s = "($_type)";
$p = strpos($suite_commande, $s);
// Exploser les parametres
$params = substr($suite_commande, $p + strlen($s));
if (ereg('^[[:space:]]*\{(.*)\}[[:space:]]*$', $params, $match)) $params = $match[1];
$params = split('\}[[:space:]]*\{', $params);
$type = strtolower($_type);
//
// Type boucle (recursion)
//
if ($type == 'sites') $type = 'syndication';
if (substr($type, 0, 6) == 'boucle') {
$requete = substr($_type, 6);
$type = 'boucle';
}
else {
//
// Initialisation separee par type
//
switch($type) {
case 'articles':
$table = "articles";
$req_from[] = "spip_articles AS $table";
$id_objet = "id_article";
break;
case 'auteurs':
$table = "auteurs";
$req_from[] = "spip_auteurs AS $table";
$id_objet = "id_auteur";
break;
case 'breves':
$table = "breves";
$req_from[] = "spip_breves AS $table";
$id_objet = "id_breve";
$col_date = "date_heure";
break;
case 'forums':
$table = "forums";
$req_from[] = "spip_forum AS $table";
$id_objet = "id_forum";
$col_date = "date_heure";
break;
case 'signatures':
$table = "signatures";
$req_from[] = "spip_signatures AS $table";
$id_objet = "id_signature";
$col_date = "date_time";
break;
case 'documents':
$table = "documents";
$req_select[] = "$table.*";
$req_select[] = "types_d.titre AS type_document";
$req_select[] = "types_d.extension AS extension_document";
$req_from[] = "spip_documents AS $table";
$req_from[] = "spip_types_documents AS types_d";
$req_where[] = "$table.id_type = types_d.id_type";
$id_objet = "id_document";
break;
case 'types_documents':
$table = "types_documents";
$req_from[] = "spip_types_documents AS $table";
$id_objet = "id_type";
break;
case 'groupes_mots':
$table = "groupes_mots";
$req_from[] = "spip_groupes_mots AS $table";
$id_objet = "id_groupe";
break;
case 'mots':
$table = "mots";
$req_from[] = "spip_mots AS $table";
$id_objet = "id_mot";
break;
case 'rubriques':
$table = "rubriques";
$req_from[] = "spip_rubriques AS $table";
$id_objet = "id_rubrique";
break;
case 'syndication':
$table = "syndic";
$req_from[] = "spip_syndic AS $table";
$req_where[] = "$table.statut='publie'";
$id_objet = "id_syndic";
break;
case 'syndic_articles':
$table = "articles";
$req_from[] = "spip_syndic_articles AS $table";
$req_from[] = "spip_syndic AS source";
$req_where[] = "$table.id_syndic=source.id_syndic";
$req_where[] = "$table.statut='publie'";
$req_where[] = "source.statut='publie'";
$id_objet = "id_syndic_article";
break;
}
if ($table) {
if ($type == 'articles') {
$s = "$table.id_article,$table.id_rubrique,$table.id_secteur,".
"$table.surtitre,$table.titre,$table.soustitre,$table.date,$table.date_redac,$table.date_modif,".
"$table.visites,$table.popularite,$table.statut,$table.accepter_forum,$table.lang,$table.id_trad";
if (ereg('\#(TEXTE|INTRODUCTION)', $milieu))
$s .= ",$table.texte";
if (ereg('\#(CHAPO|INTRODUCTION)', $milieu))
$s .= ",$table.chapo";
if (ereg('\#(DESCRIPTIF|INTRODUCTION)', $milieu))
$s .= ",$table.descriptif";
if (ereg('\#(PS)', $milieu))
$s .= ",$table.ps";
if (ereg('\#(EXTRA)', $milieu))
$s .= ",$table.extra";
if (ereg("\#(NOM_SITE|URL_SITE)", $milieu))
$s .= ",$table.nom_site,$table.url_site";
$req_select[] = $s;
}
else $req_select[] = "$table.*";
}
if (!$col_date) $col_date = "date";
//
// Parametres : premiere passe
//
unset($params2);
if ($params) {
reset($params);
while (list(, $param) = each($params)) {
$param = trim($param);
if ($param == 'exclus') {
$req_where[] = "$table.$id_objet!=\$$id_objet";
}
else if ($param == 'tout' OR $param == 'tous') {
$tout = true;
}
else if ($param == 'plat') {
$plat = true;
}
else if ($param == 'unique' OR $param == 'doublons') {
$doublons = 'oui';
$req_where[] = "$table.$id_objet NOT IN (\$id_doublons[$type])";
}
else if (ereg('^(!)? *lang_select(=(oui|non))?$', $param, $match)) {
if (!$lang_select = $match[3]) $lang_select = 'oui';
if ($match[1]) $lang_select = ($lang_select=='oui')?'non':'oui';
}
else if (ereg('^ *"([^"]*)" *$', $param, $match)) {
$separateur = ereg_replace("'","\'",$match[1]);
}
else if (ereg('^([0-9]+),([0-9]*)', $param, $match)) {
$req_limit = $match[1].','.$match[2];
}
else if (ereg('^debut([-_a-zA-Z0-9]+),([0-9]*)$', $param, $match)) {
$debut_lim = "debut".$match[1];
$req_limit = '".intval($GLOBALS[\'HTTP_GET_VARS\'][\''.$debut_lim.'\']).",'.$match[2];
}
else if (ereg('^([0-9]+)/([0-9]+)$', $param, $match)) {
$partie = $match[1];
$total_parties = $match[2];
}
else if ($param == 'recherche') {
if ($type == 'syndication') $req_from[] = "spip_index_syndic AS rec";
else if ($type == 'forums') $req_from[] = "spip_index_forum AS rec";
else $req_from[] = "spip_index_$type AS rec";
$req_select[] = "SUM(rec.points + 100*(rec.hash IN (\$hash_recherche_strict))) AS points";
$req_where[] = "rec.$id_objet=$table.$id_objet";
$req_group = " GROUP BY $table.$id_objet";
$req_where[] = "rec.hash IN (\$hash_recherche)";
}
else $params2[] = $param;
}
}
$params = $params2;
//
// Parametres : deuxieme passe
//
if ($params) {
reset($params);
while (list(, $param) = each($params)) {
// Classement par ordre inverse
if ($param == 'inverse') {
if ($req_order) $req_order .= ' DESC';
}
// Gerer les traductions
else if ($param == 'traduction') {
$req_where[] = "$table.id_trad > 0 AND $table.id_trad = \$id_trad";
}
else if ($param == 'origine_traduction') {
$req_where[] = "$table.id_trad = $table.id_article";
}
// Special rubriques
else if ($param == 'meme_parent') {
$req_where[] = "$table.id_parent=\$id_parent";
if ($type == 'forums') {
$req_where[] = "$table.id_parent > 0";
$plat = true;
}
}
else if ($param == 'racine') {
$req_where[] = "$table.id_parent=0";
}
else if (ereg("^branche *(\??)", $param, $regs)) {
if (!$regs[1])
$req_where[] = "$table.id_rubrique IN (\".calcul_branche(\$id_rubrique).\")";
else
$req_where[] = "('\$id_rubrique'='' OR $table.id_rubrique IN (\".calcul_branche(\$id_rubrique).\"))";
}
// Restriction de valeurs (implicite ou explicite)
else if (ereg('^([a-zA-Z_]+) *(\??) *((!?)(<=?|>=?|==?|\?) *"?([^<>=!"?]*))?"?$', $param, $match)) {
// Variable comparee
$col = $match[1];
$col_table = $table;
// Valeur de comparaison
if ($match[3])
$val = $match[6];
else {
$val = $match[1];
// Si id_parent, comparer l'id_parent avec l'id_objet de la boucle superieure
if ($val == 'id_parent')
$val = $id_objet;
// Si id_enfant, comparer l'id_objet avec l'id_parent de la boucle superieure
else if ($val == 'id_enfant')
$val = 'id_parent';
$val = '$'.$val;
}
// operateur optionnel {lang?}
$ou_rien = ($match[2]) ? "'$val'='' OR " : '';
// Traitement general des relations externes
if ($s = $tables_relations[$type][$col]) {
$col_table = "rel_$type";
$req_from[] = "$s AS $col_table";
$req_where[] = "$table.$id_objet=$col_table.$id_objet";
$req_group = " GROUP BY $table.$id_objet";
$flag_lien = true;
}
// Cas particulier pour les raccourcis 'type_mot' et 'titre_mot'
else if ($type != 'mots' AND ($col == 'type_mot' OR $col == 'titre_mot' OR $col == 'id_groupe')) {
if ($type == 'forums')
$col_lien = "spip_mots_forum";
else if ($type == 'syndication')
$col_lien = "spip_mots_syndic";
else
$col_lien = 'spip_mots_'.$type;
$req_from[] = "$col_lien AS lien_mot";
$req_from[] = 'spip_mots AS mots';
$req_where[] = "$table.$id_objet=lien_mot.$id_objet";
$req_where[] = "lien_mot.id_mot=mots.id_mot";
$req_group = " GROUP BY $table.$id_objet";
$col_table = 'mots';
$flag_lien = true;
if ($col == 'type_mot')
$col = 'type';
else if ($col == 'titre_mot')
$col = 'titre';
else if ($col == 'id_groupe')
$col = 'id_groupe';
}
// Cas particulier : selection des documents selon l'extension
if ($type == 'documents' AND $col == 'extension') {
$col_table = 'types_d';
}
// HACK : selection des documents selon mode 'image' (a creer en dur dans la base)
else if ($type == 'documents' AND $col == 'mode' AND $val == 'image') {
$val = 'vignette';
}
// Cas particulier : lier les articles syndiques au site correspondant
else if ($type == 'syndic_articles' AND !ereg("^(id_syndic_article|titre|url|date|descriptif|lesauteurs)$",$col))
$col_table = 'source';
// Cas particulier : id_enfant => utiliser la colonne id_objet
if ($col == 'id_enfant')
$col = $id_objet;
// Cas particulier : id_secteur = id_rubrique pour certaines tables
else if (($type == 'breves' OR $type == 'forums') AND $col == 'id_secteur')
$col = 'id_rubrique';
// Cas particulier : expressions de date
if (ereg("^(date|mois|annee|age|age_relatif|jour_relatif|mois_relatif|annee_relatif)(_redac)?$", $col, $regs)) {
$col = $regs[1];
if ($regs[2]) {
$date_orig = "$table.date_redac";
$date_compare = 'date_redac';
}
else {
$date_orig = "$table.$col_date";
$date_compare = 'date';
}
if ($col == 'date') {
$col = $date_orig;
$col_table = '';
}
else if ($col == 'mois') {
$col = "MONTH($date_orig)";
$col_table = '';
}
else if ($col == 'annee') {
$col = "YEAR($date_orig)";
$col_table = '';
}
else if ($col == 'age') {
$col = "(LEAST((UNIX_TIMESTAMP(now())-UNIX_TIMESTAMP($date_orig))/86400, TO_DAYS(now())-TO_DAYS($date_orig), DAYOFMONTH(now())-DAYOFMONTH($date_orig)+30.4368*(MONTH(now())-MONTH($date_orig))+365.2422*(YEAR(now())-YEAR($date_orig))))";
$col_table = '';
}
else if ($col == 'age_relatif') {
$col = "LEAST((UNIX_TIMESTAMP('\$$date_compare')-UNIX_TIMESTAMP($date_orig))/86400, TO_DAYS('\$$date_compare')-TO_DAYS($date_orig), DAYOFMONTH('\$$date_compare')-DAYOFMONTH($date_orig)+30.4368*(MONTH('\$$date_compare')-MONTH($date_orig))+365.2422*(YEAR('\$$date_compare')-YEAR($date_orig)))";
$col_table = '';
}
else if ($col == 'jour_relatif') {
$col = "LEAST(TO_DAYS('\$$date_compare')-TO_DAYS($date_orig), DAYOFMONTH('\$$date_compare')-DAYOFMONTH($date_orig)+30.4368*(MONTH('\$$date_compare')-MONTH($date_orig))+365.2422*(YEAR('\$$date_compare')-YEAR($date_orig)))";
$col_table = '';
}
else if ($col == 'mois_relatif') {
$col = "(MONTH('\$$date_compare')-MONTH($date_orig)+12*(YEAR('\$$date_compare')-YEAR($date_orig)))";
$col_table = '';
}
else if ($col == 'annee_relatif') {
$col = "YEAR('\$$date_compare')-YEAR($date_orig)";
$col_table = '';
}
}
if ($type == 'forums' AND ($col == 'id_parent' OR $col == 'id_forum'))
$plat = true;
// Operateur de comparaison
if ($match[5]) {
$op = $match[5];
if ($op == '==') $op = ' REGEXP ';
}
else {
$op = '=';
}
if ($col_table) $col_table .= '.';
$where = "($ou_rien$col_table$col$op'".addslashes($val)."')";
if ($match[4] == '!') $where = "NOT ($where)";
$req_where[] = $where;
}
// Selection du classement
else if (ereg('^par[[:space:]]+([^}]*)$', $param, $match)) {
$tri = trim($match[1]);
if ($tri == 'hasard') { // par hasard
$req_select[] = "MOD($table.$id_objet * UNIX_TIMESTAMP(), 32767) & UNIX_TIMESTAMP() AS alea";
$req_order = " ORDER BY alea";
}
else if ($tri == 'titre_mot'){ // par titre_mot
$req_order= " ORDER BY mots.titre";
}
else if ($tri == 'type_mot'){ // par type_mot
$req_order= " ORDER BY mots.type";
}
else if ($tri == 'points'){ // par points
$req_order= " ORDER BY points";
}
else if (ereg("^num[[:space:]]+([^,]*)(,.*)?",$tri, $match2)) { // par num champ
$req_select[] = "0+$table.".$match2[1]." AS num";
$req_order = " ORDER BY num".$match2[2];
}
else if (ereg("^[a-z0-9]+$", $tri)) { // par champ
$col = $tri;
if ($col == 'date') $col = $col_date;
$req_order = " ORDER BY $table.$col";
}
else { // tris bizarres, par formule composee, virgules, etc.
$req_order = " ORDER BY ".$tri;
}
}
}
}
//
// Post-traitement separe par type
//
switch($type) {
case 'articles':
$post_dates = lire_meta("post_dates");
if ($post_dates == 'non') $req_where[] = "$table.date '._T('erreur_boucle_double', array('id'=>$id));
install_fin_html();
exit;
}
}
}
return $result;
}
function parser($texte) {
global $racine;
// Parser le texte et retourner le tableau racine
$racine = parser_texte($texte, '');
}
//////////////////////////////////////////////////////////////////////////////
//
// Calcul des squelettes
//
//////////////////////////////////////////////////////////////////////////////
//
// appliquer les filtres a un champ
//
function applique_filtres ($fonctions, $code) {
if ($fonctions) {
while (list(, $fonc) = each($fonctions)) {
if ($fonc) {
$arglist = '';
if (ereg('([^\{\}]*)\{(.+)\}$', $fonc, $regs)) {
$fonc = $regs[1];
if (trim($regs[2]))
$arglist = ','.$regs[2];
}
if (function_exists($fonc))
$code = "$fonc($code$arglist)";
else
$code = "'"._T('erreur_filtre', array('filtre' => $fonc))."'";
}
}
}
return $code;
}
//
// Generer le code PHP correspondant a un champ SPIP
//
function calculer_champ($id_champ, $id_boucle, $nom_var)
{
global $les_notes;
global $boucles;
global $champs;
global $flag_ob;
global $flag_pcre;
$idb = $id_boucle;
//
// Calculer $id_row en prenant la boucle la plus proche
// (i.e. la plus profonde) qui autorise le champ demande
//
$offset_boucle = 0;
while (strlen($idb)) {
// $rows_articles, etc. : tables pregenerees contenant les correspondances
// (nom du champ -> numero de colonne mysql) en fonction du type de requete
$id_row = $GLOBALS['rows_'.$boucles[$idb]->type_requete][$champs[$id_champ]->nom_champ];
if ($id_row) break;
$idb = $boucles[$idb]->id_parent;
$offset_boucle++;
}
//
// Si cas general (le plus simple), generation
// du code php effectuant le calcul du champ
//
if ($id_row) {
$fonctions = $champs[$id_champ]->fonctions;
if ($offset_boucle) $code = "\$pile_boucles[\$id_instance-$offset_boucle]->row[$id_row]";
else $code = "\$row[$id_row]";
$code = applique_filtres ($fonctions, $code);
return " \$$nom_var = $code;\n";
}
//
// Ici traitement des cas particuliers
//
/* $milieu = ''; // pour debugger les squelettes
$milieu = " \$$nom_var = '$milieu';\n";*/
$fonctions = $champs[$id_champ]->fonctions;
switch($nom_champ = $champs[$id_champ]->nom_champ) {
//
// Les logos (rubriques, articles...)
//
case 'LOGO_ARTICLE':
case 'LOGO_ARTICLE_NORMAL':
case 'LOGO_ARTICLE_RUBRIQUE':
case 'LOGO_ARTICLE_SURVOL':
case 'LOGO_AUTEUR':
case 'LOGO_AUTEUR_NORMAL':
case 'LOGO_AUTEUR_SURVOL':
case 'LOGO_SITE':
case 'LOGO_BREVE':
case 'LOGO_BREVE_RUBRIQUE':
case 'LOGO_MOT':
case 'LOGO_RUBRIQUE':
case 'LOGO_RUBRIQUE_NORMAL':
case 'LOGO_RUBRIQUE_SURVOL':
case 'LOGO_DOCUMENT':
$milieu = '';
ereg("^LOGO_(([a-zA-Z]+).*)$", $nom_champ, $regs);
$type_logo = $regs[1];
$type_objet = strtolower($regs[2]);
$filtres = '';
if ($fonctions) {
while (list(, $nom) = each($fonctions)) {
if (ereg('^(left|right|center|top|bottom)$', $nom))
$align = $nom;
else if ($nom == 'lien') {
$flag_lien_auto = 'oui';
$flag_stop = true;
}
else if ($nom == 'fichier') {
$flag_fichier = 'oui';
$flag_stop = true;
}
else if ($nom == '') // double || signifie "on passe aux filtres"
$flag_stop = true;
else if (!$flag_stop) {
$lien = $nom;
$flag_stop = true;
}
else // apres un URL ou || ou |fichier ce sont des filtres (sauf left...lien...fichier)
$filtres[] = $nom;
}
// recuperer les filtres s'il y en a
$fonctions = $filtres;
}
if ($flag_lien_auto && !$lien) {
$milieu .= "
\$lien = generer_url_$type_objet(\$contexte['id_$type_objet']);
";
}
else {
$milieu .= '
$lien = transformer_lien_logo($contexte, \''.addslashes($lien).'\');
';
}
if ($type_logo == 'RUBRIQUE') {
$milieu .= '
list($logon, $logoff) = IMG_image(image_rubrique($contexte["id_rubrique"]));
';
}
else if ($type_logo == 'RUBRIQUE_NORMAL') {
$milieu .= '
list($logon,) = IMG_image(image_rubrique($contexte["id_rubrique"]));
$logoff = "";
';
}
else if ($type_logo == 'RUBRIQUE_SURVOL') {
$milieu .= '
list(,$logon) = IMG_image(image_rubrique($contexte["id_rubrique"]));
$logoff = "";
';
}
else if ($type_logo == 'DOCUMENT'){
$milieu .= '
$logon = integre_image($contexte["id_document"],"","fichier_vignette");
$logoff = "";
';
}
else if ($type_logo == 'AUTEUR') {
$milieu .= '
list($logon, $logoff) = IMG_image(image_auteur($contexte["id_auteur"]));
';
}
else if ($type_logo == 'AUTEUR_NORMAL') {
$milieu .= '
list($logon,) = IMG_image(image_auteur($contexte["id_auteur"]));
$logoff = "";
';
}
else if ($type_logo == 'AUTEUR_SURVOL') {
$milieu .= '
list(,$logon) = IMG_image(image_auteur($contexte["id_auteur"]));
$logoff = "";
';
}
else if ($type_logo == 'BREVE') {
$milieu .= '
list($logon, $logoff) = IMG_image(image_breve($contexte["id_breve"]));
';
}
else if ($type_logo == 'BREVE_RUBRIQUE') {
$milieu .= '
list($logon, $logoff) = IMG_image(image_breve($contexte["id_breve"]));
if (!$logon)
list($logon, $logoff) = IMG_image(image_rubrique($contexte["id_rubrique"]));
';
}
else if ($type_logo == 'SITE') {
$milieu .= '
list($logon, $logoff) = IMG_image(image_site($contexte["id_syndic"]));
';
}
else if ($type_logo == 'MOT') {
$milieu .= '
list($logon, $logoff) = IMG_image(image_mot($contexte["id_mot"]));
';
}
else if ($type_logo == 'ARTICLE') {
$milieu .= '
list($logon, $logoff) = IMG_image(image_article($contexte["id_article"]));
';
}
else if ($type_logo == 'ARTICLE_NORMAL') {
$milieu .= '
list($logon,) = IMG_image(image_article($contexte["id_article"]));
$logoff = "";
';
}
else if ($type_logo == 'ARTICLE_SURVOL') {
$milieu .= '
list(,$logon) = IMG_image(image_article($contexte["id_article"]));
$logoff = "";
';
}
else if ($type_logo == 'ARTICLE_RUBRIQUE') {
$milieu .= '
list($logon, $logoff) = IMG_image(image_article($contexte["id_article"]));
if (!$logon)
list($logon, $logoff) = IMG_image(image_rubrique($contexte["id_rubrique"]));
';
}
if ($flag_fichier)
$milieu .= " \$$nom_var = ereg_replace('^/?IMG/','',\$logon);\n"; // compatibilite ascendante : pas de 'IMG/'
else
$milieu .= " \$$nom_var = affiche_logos(\$logon, \$logoff, \$lien, '".addslashes($align)."');\n";
break;
//
// Liste des auteurs d'un article
//
case 'LESAUTEURS':
$milieu = '
if ($i = $contexte["id_article"]) {
$query_auteurs = "SELECT auteurs.nom, auteurs.email FROM spip_auteurs AS auteurs, spip_auteurs_articles AS lien WHERE lien.id_article=$i AND auteurs.id_auteur=lien.id_auteur";
$result_auteurs = spip_query($query_auteurs);
$auteurs = "";
while($row_auteur = spip_fetch_array($result_auteurs)) {
$nom_auteur = typo($row_auteur["nom"]);
$email_auteur = $row_auteur["email"];
if ($email_auteur) {
$auteurs[] = "$nom_auteur";
}
else {
$auteurs[] = "$nom_auteur";
}
}
if ($auteurs) $'.$nom_var.' = join($auteurs, ", ");
else $'.$nom_var.' = "";
}
';
break;
//
// Introduction (d'un article, d'une breve ou d'un message de forum)
//
case 'INTRODUCTION':
$code = 'calcul_introduction($pile_boucles[$id_instance]->type_requete,
$pile_boucles[$id_instance]->row[\'texte\'],
$pile_boucles[$id_instance]->row[\'chapo\'],
$pile_boucles[$id_instance]->row[\'descriptif\'])';
break;
//
// Divers types de champs
//
case 'URL_SITE_SPIP':
$code = "lire_meta('adresse_site')";
break;
case 'NOM_SITE_SPIP':
$code = "lire_meta('nom_site')";
break;
case 'EMAIL_WEBMASTER':
$code = "lire_meta('email_webmaster')";
break;
case 'CHARSET':
$code = "lire_meta('charset')";
break;
case 'LANG':
$code = "\$GLOBALS['spip_lang']";
break;
case 'LANG_LEFT':
$code = "lang_dir(\$GLOBALS['spip_lang'],'left','right')";
break;
case 'LANG_RIGHT':
$code = "lang_dir(\$GLOBALS['spip_lang'],'right','left')";
break;
case 'LANG_DIR':
$code = "lang_dir(\$GLOBALS['spip_lang'],'ltr','rtl')";
break;
case 'PUCE':
$code = '$GLOBALS["puce"]';
break;
case 'DATE':
// Uniquement hors-boucles, pour la date passee dans l'URL ou le contexte inclusion
$code = "\$contexte['date']";
break;
case 'DATE_NOUVEAUTES':
$milieu = "if (lire_meta('quoi_de_neuf') == 'oui' AND lire_meta('majnouv'))
\$$nom_var = normaliser_date(lire_meta('majnouv'));
else
\$$nom_var = \"'0000-00-00'\";
";
break;
case 'URL_ARTICLE':
$code = "url_var_recherche(generer_url_article(\$contexte['id_article']), \$contexte['activer_url_recherche'])";
break;
case 'URL_RUBRIQUE':
$code = "url_var_recherche(generer_url_rubrique(\$contexte['id_rubrique']), \$contexte['activer_url_recherche'])";
break;
case 'URL_BREVE':
$code = "url_var_recherche(generer_url_breve(\$contexte['id_breve']), \$contexte['activer_url_recherche'])";
break;
case 'URL_FORUM':
$code = "url_var_recherche(generer_url_forum(\$contexte['id_forum']), \$contexte['activer_url_recherche'])";
break;
case 'URL_MOT':
$code = "url_var_recherche(generer_url_mot(\$contexte['id_mot']), \$contexte['activer_url_recherche'])";
break;
case 'URL_AUTEUR':
$code = "url_var_recherche(generer_url_auteur(\$contexte['id_auteur']), \$contexte['activer_url_recherche'])";
break;
case 'URL_DOCUMENT':
$code = "generer_url_document(\$contexte['id_document'])";
break;
case 'NOTES':
$milieu = '$'.$nom_var.' = $GLOBALS["les_notes"];
$GLOBALS["les_notes"] = "";
$GLOBALS["compt_note"] = 0;
$GLOBALS["marqueur_notes"] ++;
';
break;
case 'RECHERCHE':
$code = 'htmlspecialchars($GLOBALS["recherche"])';
break;
case 'COMPTEUR_BOUCLE':
$code = '$pile_boucles[$id_instance]->compteur_boucle';
break;
case 'TOTAL_BOUCLE':
$code = '$pile_boucles[$id_instance_cond]->total_boucle';
break;
case 'POPULARITE':
$code = 'ceil(min(100, 100 * $pile_boucles[$id_instance]->row[\'popularite\'] / max(1 , 0 + lire_meta(\'popularite_max\'))))';
break;
case 'POPULARITE_ABSOLUE':
$code = 'ceil($pile_boucles[$id_instance]->row[\'popularite\'])';
break;
case 'POPULARITE_SITE':
$code = 'ceil(lire_meta(\'popularite_total\'))';
break;
case 'POPULARITE_MAX':
$code = 'ceil(lire_meta(\'popularite_max\'))';
break;
case 'EXTRA':
$code = 'trim($pile_boucles[$id_instance]->row[\'extra\'])';
if ($fonctions) {
// Gerer la notation [(#EXTRA|isbn)]
include_ecrire("inc_extra.php3");
reset($fonctions);
list($key, $champ_extra) = each($fonctions);
$type_extra = $boucles[$id_boucle]->type_requete;
if (extra_champ_valide($type_extra, $champ_extra)) {
unset($fonctions[$key]);
$code = "extra($code, '".addslashes($champ_extra)."')";
}
// Appliquer les filtres definis par le webmestre
$filtres = extra_filtres($type_extra, $champ_extra);
if ($filtres) {
reset($filtres);
while (list(, $f) = each($filtres)) $code = "$f($code)";
}
}
break;
case 'EXPOSER':
$on = 'on';
$off='';
if ($fonctions) {
// Gerer la notation [(#EXPOSER|on,off)]
reset($fonctions);
list(, $onoff) = each($fonctions);
ereg("([^,]*)(,(.*))?", $onoff, $regs);
$on = addslashes($regs[1]);
$off = addslashes($regs[3]);
// autres filtres
$filtres=Array();
while (list(, $nom) = each($fonctions)) {
$filtres[] = $nom;
}
$fonctions = $filtres;
}
$id_on_off = $GLOBALS['tables_doublons'][$boucles[$id_boucle]->type_requete];
if ($id_on_off)
$code = "(\$GLOBALS[contexte_inclus]['$id_on_off'] == \$contexte['$id_on_off']) ? '$on' : '$off'";
else
$code = "'$off'";
break;
//
// Inserer directement un document dans le squelette
//
case 'EMBED_DOCUMENT':
if ($fonctions) $fonctions = join($fonctions, "|");
$milieu = "
include_ecrire('inc_documents.php3');
\$$nom_var = embed_document(\$contexte['id_document'], '$fonctions', false) ;
";
$fonctions = "";
break;
//
// Formulaire de recherche sur le site
//
case 'FORMULAIRE_RECHERCHE':
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';
$milieu = "
if (lire_meta('activer_moteur') != 'oui') {
\$$nom_var = '';
}
else {
\$rech = _T('info_rechercher');
\$$nom_var = \"