Skip to content
Extraits de code Groupes Projets
Valider 934ed190 rédigé par Fil's avatar Fil
Parcourir les fichiers

#EXPOSER marche enfin comme annoncé !

il gère toute la hiérarchie de la page appelée
parent 838e4b06
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -131,6 +131,59 @@ function calcul_mysql_in($val, $valeurs, $tobeornotobe)
}
}
function calcul_exposer ($pile, $reference) {
static $hierarchie;
if (!$hierarchie) {
if ($id = $reference['id_article'])
$base = 'articles';
else if ($id = $reference['id_breve'])
$base = 'breves';
else if ($id = $reference['id_syndic'])
$base = 'syndic';
else if ($id = $reference['id_rubrique'])
$base = 'rubriques';
else if ($id = $reference['id_secteur'])
$base = 'rubriques';
if (!$base)
$hierarchie = '-';
else {
if ($base != 'rubriques') {
$hierarchie[$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;
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;
else
break;
}
}
}
if ($hierarchie == '-')
return false;
else if ($id = $pile['id_article'])
return $hierarchie['articles'][$id];
else if ($id = $pile['id_breve'])
return $hierarchie['breves'][$id];
else if ($id = $pile['id_syndic'])
return $hierarchie['syndic'][$id];
else if ($id = $pile['id_rubrique'])
return $hierarchie['rubriques'][$id];
else if ($id = $pile['id_secteur'])
return $hierarchie['rubriques'][$id];
}
function calcul_generation ($generation) {
$lesfils = array();
......
<?php
# Fonction de traduction des champs Spip basiques
# A terme, elle devrait etre remplace'e par autant de fonctions que de 'case'
//
// Fonction de traduction des champs Spip basiques
// A terme, elle devrait etre remplace'e par autant de fonctions que de 'case'
//
function calculer_champ_divers($fonctions, $nom_champ, $id_boucle, &$boucles, $id_mere)
{
global $flag_pcre;
function calculer_champ_divers($fonctions, $nom_champ, $id_boucle, &$boucles, $id_mere) {
global $flag_pcre;
switch($nom_champ) {
switch($nom_champ) {
// Introduction (d'un article, d'une breve ou d'un message de forum)
case 'INTRODUCTION':
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";
$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':
case 'NOM_SITE_SPIP':
$code = "lire_meta('nom_site')";
break;
case 'EMAIL_WEBMASTER':
case 'EMAIL_WEBMASTER':
$code = "lire_meta('email_webmaster')";
break;
case 'CHARSET':
case 'CHARSET':
$code = "lire_meta('charset')";
break;
case 'LANG_LEFT':
case 'LANG_LEFT':
$code = "lang_dir(\$GLOBALS['spip_lang'],'left','right')";
break;
case 'LANG_RIGHT':
case 'LANG_RIGHT':
$code = "lang_dir(\$GLOBALS['spip_lang'],'right','left')";
break;
case 'LANG_DIR':
case 'LANG_DIR':
$code = "lang_dir(\$GLOBALS['spip_lang'],'ltr','rtl')";
break;
case 'PUCE':
case 'PUCE':
$code = "propre('- ')";
break;
case 'DATE_NOUVEAUTES':
case 'DATE_NOUVEAUTES':
$code = "((lire_meta('quoi_de_neuf') == 'oui' AND lire_meta('majnouv')) ? normaliser_date(lire_meta('majnouv')) : \"'0000-00-00'\")";
break;
case 'URL_SITE_SPIP':
case 'URL_SITE_SPIP':
$code = "lire_meta('adresse_site')";
break;
case 'URL_ARTICLE':
case 'URL_ARTICLE':
$code = "generer_url_article(" .
index_pile($id_boucle, 'id_article', $boucles) .
")" ;
if ($boucles[$id_boucle]->hash)
$code = "url_var_recherche(" . $code . ")";
index_pile($id_boucle, 'id_article', $boucles) .
")" ;
if ($boucles[$id_boucle]->hash)
$code = "url_var_recherche(" . $code . ")";
break;
case 'URL_RUBRIQUE':
case 'URL_RUBRIQUE':
$code = "generer_url_rubrique(" .
index_pile($id_boucle, 'id_rubrique', $boucles) .
")" ;
if ($boucles[$id_boucle]->hash)
$code = "url_var_recherche(" . $code . ")";
index_pile($id_boucle, 'id_rubrique', $boucles) .
")" ;
if ($boucles[$id_boucle]->hash)
$code = "url_var_recherche(" . $code . ")";
break;
case 'URL_BREVE':
case 'URL_BREVE':
$code = "generer_url_breve(" .
index_pile($id_boucle, 'id_breve', $boucles) .
")";
if ($boucles[$id_boucle]->hash)
$code = "url_var_recherche(" . $code . ")";
index_pile($id_boucle, 'id_breve', $boucles) .
")";
if ($boucles[$id_boucle]->hash)
$code = "url_var_recherche(" . $code . ")";
break;
case 'URL_MOT':
case 'URL_MOT':
$code = "generer_url_mot(" .
index_pile($id_boucle, 'id_mot', $boucles) .
")";
index_pile($id_boucle, 'id_mot', $boucles) .
")";
$code = "url_var_recherche(" . $code . ")";
break;
case 'URL_FORUM':
case 'URL_FORUM':
$code = "generer_url_forum(" .
index_pile($id_boucle, 'id_forum', $boucles) .")";
index_pile($id_boucle, 'id_forum', $boucles) .")";
break;
case 'URL_DOCUMENT':
case 'URL_DOCUMENT':
$code = "generer_url_document(" .
index_pile($id_boucle, 'id_document', $boucles) . ")";
index_pile($id_boucle, 'id_document', $boucles) . ")";
break;
case 'URL_AUTEUR': # 1.7.2
$code = "generer_url_auteur(" .
index_pile($id_boucle, 'id_forum', $boucles) .")";
if ($boucles[$id_boucle]->hash)
$code = "url_var_recherche(" . $code . ")";
break;
case 'NOTES':
case 'URL_AUTEUR': # 1.7.2
$code = "generer_url_auteur(" .
index_pile($id_boucle, 'id_forum', $boucles) .")";
if ($boucles[$id_boucle]->hash)
$code = "url_var_recherche(" . $code . ")";
break;
case 'NOTES':
$milieu = '$lacible = $GLOBALS["les_notes"];
$GLOBALS["les_notes"] = "";
$GLOBALS["compt_note"] = 0;
......@@ -114,195 +115,180 @@ function calculer_champ_divers($fonctions, $nom_champ, $id_boucle, &$boucles, $i
$code = '$lacible';
break;
case 'RECHERCHE':
case 'RECHERCHE':
$code = 'htmlspecialchars($GLOBALS["recherche"])';
break;
case 'COMPTEUR_BOUCLE':
case 'COMPTEUR_BOUCLE':
$code = '$compteur_boucle';
break;
case 'TOTAL_BOUCLE':
if ($id_mere === '')
{
include_local("inc-debug-squel.php3");
erreur_squelette(_L("Champ #TOTAL_BOUCLE hors boucle"), '', $id_boucle);
}
$code = "\$Numrows['$id_mere']";
$boucles[$id_mere]->numrows = true;
break;
case 'POINTS':
$n = 0;
$b = $id_boucle;
$code = '';
while ($b != '')
{
if ($s = $boucles[$b]->param)
{
foreach($s as $v)
{
if (strpos($v,'recherche') !== false)
{
$code = '$Pile[$SP' . (($n==0) ? "" : "-$n") .
'][points]';
$b = '';
break;
case 'TOTAL_BOUCLE':
if ($id_mere === '') {
include_local("inc-debug-squel.php3");
erreur_squelette(_L("Champ #TOTAL_BOUCLE hors boucle"), '', $id_boucle);
}
$code = "\$Numrows['$id_mere']";
$boucles[$id_mere]->numrows = true;
break;
case 'POINTS':
$n = 0;
$b = $id_boucle;
$code = '';
while ($b != '') {
if ($s = $boucles[$b]->param) {
foreach($s as $v) {
if (strpos($v,'recherche') !== false) {
$code = '$Pile[$SP' . (($n==0) ? "" : "-$n") .
'][points]';
$b = '';
break;
}
}
}
}
$n++;
$b = $boucles[$b]->id_parent;
}
if (!$code) {
include_local("inc-debug-squel.php3");
erreur_squelette(_L("Champ #POINTS hors d'une recherche"), '', $idb);
}
break;
$n++;
$b = $boucles[$b]->id_parent;
}
if (!$code)
{
include_local("inc-debug-squel.php3");
erreur_squelette(_L("Champ #POINTS hors d'une recherche"), '', $idb);
}
case 'POPULARITE_ABSOLUE':
$code = 'ceil(' .
index_pile($id_boucle, "popularite", $boucles) .
')';
break;
case 'POPULARITE_SITE':
$code = 'ceil(lire_meta(\'popularite_total\'))';
break;
case 'POPULARITE_ABSOLUE':
$code = 'ceil(' .
index_pile($id_boucle, "popularite", $boucles) .
')';
break;
case 'POPULARITE_SITE':
$code = 'ceil(lire_meta(\'popularite_total\'))';
break;
case 'POPULARITE_MAX':
$code = 'ceil(lire_meta(\'popularite_max\'))';
break;
case 'EXPOSER':
break;
$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 = $doublons[$boucles[$id_boucle]->type_requete];
if ($id_on_off)
$code = "(\$Pile[0]['$id_on_off'] == \$Pile[\$SP]['$id_on_off']) ?
'$on' : '$off'";
else
$code = "'$off'";
break;
case 'POPULARITE_MAX':
$code = 'ceil(lire_meta(\'popularite_max\'))';
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;
}
// Faut-il exposer ?
$code = "(calcul_exposer(\$Pile[\$SP], \$Pile[0]) ? '$on': '$off')";
break;
//
// Inserer directement un document dans le squelette
//
case 'EMBED_DOCUMENT':
$milieu = "
include_ecrire('inc_documents.php3');";
$milieu = "\ninclude_ecrire('inc_documents.php3');";
$code = "embed_document(" .
index_pile($id_boucle, 'id_document', $boucles) . ", '" .
index_pile($id_boucle, 'id_document', $boucles) . ", '" .
($fonctions) ? join($fonctions, "|") : "" .
"', false)";
$fonctions = "";
break;
// Debut et fin de surlignage auto des mots de la recherche
// on inse`re une balise Span avec une classe sans spec:
// on insere une balise Span avec une classe sans spec:
// c'est transparent s'il n'y a pas de recherche,
// sinon elles seront remplace'es par les fontions de inc_surligne
// sinon elles seront remplacees par les fontions de inc_surligne
// flag_pcre est juste une flag signalant que preg_match est dispo.
case 'DEBUT_SURLIGNE':
$code = ($flag_pcre ? ('\'<span class="spip_surligneconditionnel">\'') : '');
break;
case 'FIN_SURLIGNE':
$code = ($flag_pcre ? ('\'</span class="spip_surligneconditionnel">\'') : '');
break;
case 'MENU_LANG':
$code = '"<"."?php
include_ecrire(\"inc_lang.php3\");
echo menu_langues(\"var_lang\", \$menu_lang);
?".">"';
break;
//
// Formulaire de changement de langue / page de login
case 'MENU_LANG_ECRIRE':
$code = '"<"."?php
include_ecrire(\"inc_lang.php3\");
echo menu_langues(\"var_lang_ecrire\", \$menu_lang);
?".">"';
break;
case 'DEBUT_SURLIGNE':
$code = ($flag_pcre ? ('\'<span class="spip_surligneconditionnel">\'') : '');
break;
case 'FIN_SURLIGNE':
$code = ($flag_pcre ? ('\'</span class="spip_surligneconditionnel">\'') : '');
break;
// Formulaire de changement de langue
case 'MENU_LANG':
$code = '"<"."?php
include_ecrire(\"inc_lang.php3\");
echo menu_langues(\"var_lang\", \$menu_lang);
?".">"';
break;
// Formulaire de changement de langue / page de login
case 'MENU_LANG_ECRIRE':
$code = '"<"."?php
include_ecrire(\"inc_lang.php3\");
echo menu_langues(\"var_lang_ecrire\", \$menu_lang);
?".">"';
break;
//
// Formulaires de login
//
case 'LOGIN_PRIVE':
$code = '"<"."?php include(\'inc-login.php3\'); login(\'\', \'prive\'); ?".">"';
break;
case 'LOGIN_PUBLIC':
$lacible = '\$GLOBALS[\'clean_link\']';
if ($fonctions) {
$filtres = array();
while (list(, $nom) = each($fonctions))
$lacible = "new Link('".$nom."')";
$fonctions = $filtres;
}
$code = '"<"."?php include(\'inc-login.php3\'); login(' . $lacible . ', false); ?".">"';
break;
case 'URL_LOGOUT':
if ($fonctions) {
$url = "&url=".$fonctions[0];
$fonctions = array();
} else {
$url = '&url=\'.urlencode(\$clean_link->getUrl()).\'';
}
$code = '"<"."?php if (\$GLOBALS[\'auteur_session\'][\'login\'])
case 'LOGIN_PRIVE':
$code = '"<"."?php include(\'inc-login.php3\'); login(\'\', \'prive\'); ?".">"';
break;
case 'LOGIN_PUBLIC':
if ($nom = $fonctions[0])
$lacible = "new Link('".$nom."')";
else
$lacible = '\$GLOBALS[\'clean_link\']';
$code = '"<"."?php include(\'inc-login.php3\'); login(' . $lacible . ', false); ?".">"';
$fonctions = array();
break;
case 'URL_LOGOUT':
if ($fonctions) {
$url = "&url=".$fonctions[0];
$fonctions = array();
} else {
$url = '&url=\'.urlencode(\$clean_link->getUrl()).\'';
}
$code = '"<"."?php if (\$GLOBALS[\'auteur_session\'][\'login\'])
{ echo \'spip_cookie.php3?logout_public=\'.\$GLOBALS[\'auteur_session\'][\'login\'].\'' . $url . '\'; } ?".">"';
break;
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' :
// retour imme'diat: filtres de'rogatoires traite's dans la fonction
return calculer_champ_LOGO($fonctions, $nom_champ, $id_boucle, $boucles, $id_mere);
break;
default:
// champ inconnu. Il s'auto-de'note.
$code = "'#$nom_champ'";
break;
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' :
// retour immediat: filtres derogatoires traites dans la fonction
return calculer_champ_LOGO($fonctions, $nom_champ, $id_boucle, $boucles, $id_mere);
break;
default:
// champ inconnu. Il s'autodenote.
$code = "'<blink>#$nom_champ</blink>'";
break;
} // switch
list($c,$m) = applique_filtres($fonctions, $code, $id_boucle, $boucles, $id_mere);
return array($c,$milieu . $m);
list($c,$m) = applique_filtres($fonctions, $code, $id_boucle, $boucles, $id_mere);
return array($c,$milieu . $m);
}
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter