diff --git a/inc-calcul_mysql3.php b/inc-calcul_mysql3.php index 6a598a9430fa645d2ccce923857ce29cdc2a1adb..b689c386eed5f0b197a955df8343ecbd2e2b3656 100644 --- a/inc-calcul_mysql3.php +++ b/inc-calcul_mysql3.php @@ -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(); diff --git a/inc-vrac-squel.php3 b/inc-vrac-squel.php3 index 136c7e5497506828ac5d75ca2f760ee73a3fe6a1..3a29ef31e649ca3c2638c718e8251a5dc86db692 100644 --- a/inc-vrac-squel.php3 +++ b/inc-vrac-squel.php3 @@ -1,111 +1,112 @@ <?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); }