diff --git a/article-dist.html b/article-dist.html index 87c71cffd6a88f4bfd15ca76f5760798d73e72b4..af9c7549c18f98232429bcd94deb9da1dd24a1f2 100644 --- a/article-dist.html +++ b/article-dist.html @@ -197,6 +197,7 @@ [<div class="ps">(#PS)</div>] [<div class="notes">(#NOTES)</div>] + <BOUCLE_documents_joints(DOCUMENTS) {id_article} {mode=document} {doublons} {"<br>"}> [(#LOGO_DOCUMENT|#URL_DOCUMENT)][<br>(#TITRE)][ - (#DESCRIPTIF)] </BOUCLE_documents_joints> @@ -270,7 +271,7 @@ [(#DATE|affdate)][, <:par_auteur:> <A HREF="mailto:#EMAIL">(#NOM)</A>] </div> <div class="forum-item"> - #TEXTE + [(#TEXTE*|traiter_raccourcis)] [<div class="forum-titre"><a href="(#URL_SITE)" class="spip_out">#NOM_SITE</a></div>] [<div class="forum-repondre-message"><a href="forum.php3?(#PARAMETRES_FORUM)"><:repondre_message:></a></div>] </div> diff --git a/ecrire/articles.php3 b/ecrire/articles.php3 index bdb008508ecff7fc64365e09459c19bba0cc4dc0..dffa056fabe2f147f15cd77a0b7fd2feb3f9d9e8 100644 --- a/ecrire/articles.php3 +++ b/ecrire/articles.php3 @@ -206,7 +206,7 @@ if ($titre && !$ajout_forum && $flag_editable) { // recoller les champs du extra if ($champs_extra) { include_ecrire("inc_extra.php3"); - $add_extra = ", extra = '".addslashes(extra_recup_saisie("article", $id_secteur))."'"; + $add_extra = ", extra = '".addslashes(extra_recup_saisie("articles", $id_secteur))."'"; } else $add_extra = ''; @@ -1493,7 +1493,7 @@ else { if ($champs_extra AND $extra) { include_ecrire("inc_extra.php3"); - extra_affichage($extra, "article"); + extra_affichage($extra, "articles"); } } diff --git a/ecrire/articles_edit.php3 b/ecrire/articles_edit.php3 index e228947e35706dff0d2338bb9b16dd3f5b754ca6..4eee4828ba73d56df3167a7e1a425e6834a7e263 100644 --- a/ecrire/articles_edit.php3 +++ b/ecrire/articles_edit.php3 @@ -455,7 +455,7 @@ echo "<P><HR><P>"; if ($champs_extra) { include_ecrire("inc_extra.php3"); - extra_saisie($extra, 'article', $id_secteur); + extra_saisie($extra, 'articles', $id_secteur); } if ($date) diff --git a/ecrire/auteur_infos.php3 b/ecrire/auteur_infos.php3 index 07254a66c2ad5b493e76f9bc78cb9417ba94fd48..9d6455992813a80ad30ec5399db351be229eae3b 100644 --- a/ecrire/auteur_infos.php3 +++ b/ecrire/auteur_infos.php3 @@ -156,7 +156,7 @@ if ($statut) { // si on poste un nom, c'est qu'on modifie une fiche auteur // recoller les champs du extra if ($champs_extra) { include_ecrire("inc_extra.php3"); - $extra = extra_recup_saisie("auteur"); + $extra = extra_recup_saisie("auteurs"); $add_extra = ", extra = '".addslashes($extra)."'"; } else $add_extra = ''; @@ -282,7 +282,7 @@ echo "</TEXTAREA>\n"; if ($champs_extra) { include_ecrire("inc_extra.php3"); - extra_saisie($auteur['extra'], 'auteur', $auteur['statut']); + extra_saisie($auteur['extra'], 'auteurs', $auteur['statut']); } fin_cadre_relief(); diff --git a/ecrire/auteurs_edit.php3 b/ecrire/auteurs_edit.php3 index 25fdcd3f9d41d04edd2347a24ff1f499b0417a95..733f1cfefd965a8245412dc9a36970ff7174a3c0 100644 --- a/ecrire/auteurs_edit.php3 +++ b/ecrire/auteurs_edit.php3 @@ -128,7 +128,7 @@ if (strlen($email) > 2 OR strlen($bio) > 0 OR strlen($nom_site_auteur) > 0 OR ($ if ($champs_extra AND $extra) { include_ecrire("inc_extra.php3"); - extra_affichage($extra, "auteur"); + extra_affichage($extra, "auteurs"); } echo "</FONT>"; diff --git a/ecrire/breves_edit.php3 b/ecrire/breves_edit.php3 index b8486ae88f8b095e086a84a0ccf92943bdb90aea..e661105017b4e98f851bfeaea22dc8bb7359c3cb 100644 --- a/ecrire/breves_edit.php3 +++ b/ecrire/breves_edit.php3 @@ -175,7 +175,7 @@ if ($connect_statut=="0minirezo" OR $statut=="prop" OR $new == "oui") { if ($champs_extra) { include_ecrire("inc_extra.php3"); - extra_saisie($extra, 'breve', $id_secteur); + extra_saisie($extra, 'breves', $id_secteur); } if ($connect_statut=="0minirezo" AND acces_rubrique($id_rubrique)) { diff --git a/ecrire/breves_voir.php3 b/ecrire/breves_voir.php3 index a349db13fd3a2543e02ebe71323b0cf294576d2e..eae0fe06e080ee8afd1189ea5aaf5838eb33c45f 100644 --- a/ecrire/breves_voir.php3 +++ b/ecrire/breves_voir.php3 @@ -83,7 +83,7 @@ if ($titre AND $modifier_breve) { // recoller les champs du extra if ($champs_extra) { include_ecrire("inc_extra.php3"); - $add_extra = ", extra = '".addslashes(extra_recup_saisie("breve"))."'"; + $add_extra = ", extra = '".addslashes(extra_recup_saisie("breves"))."'"; } else $add_extra = ''; @@ -343,7 +343,7 @@ if ($les_notes) { // afficher les extra if ($champs_extra AND $extra) { include_ecrire("inc_extra.php3"); - extra_affichage($extra, "breve"); + extra_affichage($extra, "breves"); } if ($connect_statut=="0minirezo" AND acces_rubrique($id_rubrique) AND ($statut=="prop" OR $statut=="prepa")){ diff --git a/ecrire/inc_extra.php3 b/ecrire/inc_extra.php3 index 1c381f44fe5db812ef940d036bb17a47e654cb9c..0ac1d848a1cddb227660a6bc7e7c8e7b0418a422 100644 --- a/ecrire/inc_extra.php3 +++ b/ecrire/inc_extra.php3 @@ -16,13 +16,13 @@ // $GLOBALS['champs_extra'] = Array ( - 'auteur' => Array ( + 'auteurs' => Array ( "sexe" => "ligne|brut", "age" => "ligne|propre|Âge du capitaine", "biblio" => "bloc|propre|Bibliographie" ), - 'article' => Array ( + 'articles' => Array ( "isbn" => "ligne|typo|ISBN" ) ); @@ -37,14 +37,14 @@ $GLOBALS['champs_extra'] = Array ( // - pour les mots-cles en fonction du groupe de mots $GLOBALS['champs_extra_proposes'] = Array ( - 'auteur' => Array ( + 'auteurs' => Array ( // tous : par defaut 'tous' => 'age|sexe', // une biblio pour les admin (statut='0minirezo') '0minirezo' => 'age|sexe|biblio' ), - 'article' => Array ( + 'articles' => Array ( // tous : par defaut 'tous' => '', // 1 : id_secteur=1; @@ -62,7 +62,7 @@ if (defined("_ECRIRE_INC_EXTRA")) return; define("_ECRIRE_INC_EXTRA", "1"); // a partir de la liste des champs, generer la liste des input -function extra_saisie($extra, $type='article', $ensemble='') { +function extra_saisie($extra, $type, $ensemble='') { $extra = unserialize($extra); // quels sont les extras de ce type d'objet @@ -131,7 +131,7 @@ function extra_saisie($extra, $type='article', $ensemble='') { } // recupere les valeurs postees pour reconstituer l'extra -function extra_recup_saisie($type='article') { +function extra_recup_saisie($type) { $champs = $GLOBALS['champs_extra'][$type]; if (is_array($champs)) { $extra = Array(); @@ -142,6 +142,20 @@ function extra_recup_saisie($type='article') { return ''; } +// Retourne la liste des filtres a appliquer pour un champ extra particulier +function extra_filtres($type, $nom_champ) { + $champ = $GLOBALS['champs_extra'][$type][$nom_champ]; + if (!$champ) return array();; + list(, $filtre, ) = explode("|", $champ); + if ($filtre && $filtre != 'brut' && function_exists($filtre)) + return array($filtre); + return array(); +} + +function extra_champ_valide($type, $nom_champ) { + return isset($GLOBALS['champs_extra'][$type][$nom_champ]); +} + // a partir de la liste des champs, generer l'affichage function extra_affichage($extra, $type) { $extra = unserialize ($extra); diff --git a/ecrire/inc_filtres.php3 b/ecrire/inc_filtres.php3 index a058632e5245d1e375ad076b37473426a51e16a7..945cac9e1496aab5d175502713f45598156ad15d 100644 --- a/ecrire/inc_filtres.php3 +++ b/ecrire/inc_filtres.php3 @@ -72,10 +72,35 @@ function liens_ouvrants ($texte) { // Corrige les caracteres degoutants utilises par les Windozeries function corriger_caracteres($texte) { - if (lire_meta('charset') != 'iso-8859-1') - return $texte; - // 145,146,180 = simple quote ; 147,148 = double quote ; 150,151 = tiret long - return strtr($texte, chr(146).chr(180).chr(150).chr(151), "'".'"--'); + static $trans; + if (!$trans) { + // 145,146,180 = simple quote ; 147,148 = double quote ; 150,151 = tiret long + $this->trans['iso-8859-1'] = array( + chr(146) => "'", + chr(180) => "'", + chr(147) => '"', + chr(148) => '"', + chr(150) => '-', + chr(151) => '-', + chr(133) => '...' + ); + $this->trans['utf-8'] = array( + chr(194).chr(146) => "'", + chr(194).chr(180) => "'", + chr(194).chr(147) => '"', + chr(194).chr(148) => '"', + chr(194).chr(150) => '-', + chr(194).chr(151) => '-', + chr(194).chr(133) => '...' + ); + } + $charset = lire_meta('charset'); + if (!$trans[$charset]) return $texte; + if ($GLOBALS['flag_strtr2']) return strtr($texte, $trans[$charset]); + reset($trans[$charset]); + while (list($from, $to) = each($trans[$charset])) + $texte = str_replace($from, $to, $texte); + return $texte; } // Transformer les sauts de paragraphe en simples passages a la ligne @@ -414,7 +439,7 @@ function d_apostrophe($texte) { function aligner($letexte,$justif) { $letexte = eregi_replace("<p([^>]*)", "<p\\1 align='$justif'", trim($letexte)); - if($letexte<>"" AND !ereg("^[[:space:]]*<p", $letexte)) { + if ($letexte AND !ereg("^[[:space:]]*<p", $letexte)) { $letexte = "<p class='spip' align='$justif'>" . $letexte . "</p>"; } return $letexte; @@ -440,9 +465,9 @@ function centrer($letexte) { // Recuperation de donnees dans le champ extra // Ce filtre n'a de sens qu'avec la balise #EXTRA // -function extra ($letexte,$champ) { +function extra($letexte, $champ) { $champs = unserialize($letexte); - return interdire_scripts($champs[$champ]); + return $champs[$champ]; } ?> diff --git a/ecrire/inc_texte.php3 b/ecrire/inc_texte.php3 index b19ffec42121b47df5261d0980ae3226dde66aff..b7a14901addf2cbd13e080e31470ad8246f8bd85 100644 --- a/ecrire/inc_texte.php3 +++ b/ecrire/inc_texte.php3 @@ -390,12 +390,8 @@ function typo($letexte) { else $letexte = typo_en($letexte); + $letexte = corriger_caracteres($letexte); $letexte = str_replace("'", "’", $letexte); - - // "pas encore mur!" - // $letexte = ereg_replace('"([^" &;]([^"]*[^" &;])?)"', "“\\1”", $letexte); - - //$letexte = corriger_caracteres($letexte); $letexte = echappe_retour($letexte, $les_echap, "SOURCETYPO"); return $letexte; diff --git a/ecrire/lang/public_fr.php3 b/ecrire/lang/public_fr.php3 index 14ad0473a5d23bb8248f971b93c64289b537d67d..36f02b4016d033f99b4afb2303e9aeac065dc2a2 100644 --- a/ecrire/lang/public_fr.php3 +++ b/ecrire/lang/public_fr.php3 @@ -87,7 +87,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // R -'repondre_article' => 'Répondre à cet article', +'repondre_article' => 'Répondre à cet article', 'repondre_breve' => 'Répondre à cette brève', 'repondre_message' => 'Répondre à ce message', 'resultats_recherche' => 'Résultats de la recherche', diff --git a/ecrire/mots_edit.php3 b/ecrire/mots_edit.php3 index 2dee0a50cb7a0776a0b0668344f7f6f93cb2ad34..8d43e388ee15cf0fa07f37f6653db16dd40f5d8d 100644 --- a/ecrire/mots_edit.php3 +++ b/ecrire/mots_edit.php3 @@ -46,7 +46,7 @@ if ($connect_statut == '0minirezo') { // recoller les champs du extra if ($champs_extra) { include_ecrire("inc_extra.php3"); - $add_extra = ", extra = '".addslashes(extra_recup_saisie("mot"))."'"; + $add_extra = ", extra = '".addslashes(extra_recup_saisie("mots"))."'"; } else $add_extra = ''; @@ -269,7 +269,7 @@ if ($connect_statut =="0minirezo"){ if ($champs_extra) { include_ecrire("inc_extra.php3"); - extra_saisie($extra, 'mot', $id_groupe); + extra_saisie($extra, 'mots', $id_groupe); } echo "<DIV align='right'><INPUT TYPE='submit' NAME='Valider' VALUE='"._T('bouton_valider')."' CLASS='fondo'>"; diff --git a/ecrire/naviguer.php3 b/ecrire/naviguer.php3 index 88ef7200b39c15d30871f665489dff6c2d6c102f..c14c146f40665d8c991bbefc1fd39730ec058ae8 100644 --- a/ecrire/naviguer.php3 +++ b/ecrire/naviguer.php3 @@ -159,7 +159,7 @@ if ($titre) { if ($champs_extra) { include_ecrire("inc_extra.php3"); - $add_extra = ", extra = '".addslashes(extra_recup_saisie("rubrique"))."'"; + $add_extra = ", extra = '".addslashes(extra_recup_saisie("rubriques"))."'"; } else $add_extra = ''; @@ -378,7 +378,7 @@ echo "</table>\n"; if ($champs_extra AND $extra) { include_ecrire("inc_extra.php3"); - extra_affichage($extra, "rubrique"); + extra_affichage($extra, "rubriques"); } diff --git a/ecrire/rubriques_edit.php3 b/ecrire/rubriques_edit.php3 index e6551508fdd586e27bea3068b804ec5fbe70d3ff..836cfe7a49138ba595ca27effe854d99155e8eee 100644 --- a/ecrire/rubriques_edit.php3 +++ b/ecrire/rubriques_edit.php3 @@ -204,7 +204,7 @@ echo "</TEXTAREA>\n"; if ($champs_extra) { include_ecrire("inc_extra.php3"); - extra_saisie($extra, 'rubrique', $id_secteur); + extra_saisie($extra, 'rubriques', $id_secteur); } echo "<P align='right'><INPUT TYPE='submit' NAME='Valider' VALUE='"._T('bouton_valider')."' CLASS='fondo'>"; diff --git a/inc-calcul-squel.php3 b/inc-calcul-squel.php3 index c7506502a1d3784df1fecd3d1a43f2337a91052f..8a9859afd18bf7e3e8d714a3818bee254e970ce0 100644 --- a/inc-calcul-squel.php3 +++ b/inc-calcul-squel.php3 @@ -709,18 +709,17 @@ function parser_champs_etendus($texte) { $champ->fonctions[] = $f; } } + if ($fonctions) { + $fonctions = explode('|', ereg_replace("^\|", "", $fonctions)); + reset($fonctions); + while (list(, $f) = each($fonctions)) $champ->fonctions[] = $f; + } if ($champs_posttraitement[$nom_champ]) { reset($champs_posttraitement[$nom_champ]); while (list(, $f) = each($champs_posttraitement[$nom_champ])) { $champ->fonctions[] = $f; } } - - if ($fonctions) { - $fonctions = explode('|', ereg_replace("^\|", "", $fonctions)); - reset($fonctions); - while (list(, $f) = each($fonctions)) $champ->fonctions[] = $f; - } $champs_count++; $champ->id_champ = $champs_count; $champs[$champs_count] = $champ; @@ -1033,8 +1032,7 @@ function calculer_champ($id_champ, $id_boucle, $nom_var) // // Liste des auteurs d'un article // - - + case 'LESAUTEURS': $milieu = ' if ($i = $contexte["id_article"]) { @@ -1182,24 +1180,24 @@ function calculer_champ($id_champ, $id_boucle, $nom_var) break; case 'EXTRA': - // cas particulier : on ne peut pas appliquer interdire_scripts directement - // sur la balise, sinon on casse le unserialize(). Donc on ne l'applique qu'en - // absence de filtres (et aussi dans le filtre extra{"xxx"}) - if (!$fonctions) { - $fonctions[] = 'interdire_scripts'; - } /* else { - // gerer la notation [(#EXTRA{toto})] - $filtres = Array(); - reset ($fonctions); - while (list(,$filtre) = each($fonctions)) { - if (ereg("^{(.*)\}$", trim($filtre), $regs)) - $filtres[] = 'extra{"'.$regs[1].'"}'; - else - $filtres[] = $filtre; - } - $fonctions = $filtres; - } */ $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; // @@ -1355,35 +1353,34 @@ function calculer_champ($id_champ, $id_boucle, $nom_var) $milieu = ' $spip_lang = $GLOBALS["spip_lang"]; $'.$nom_var.' = "<"."?php include_local(\'inc-forum.php3\'); lang_select(\'$spip_lang\'); "; - switch ($pile_boucles[$id_instance]->type_requete) { + $'.$nom_var.' .= "'; + switch ($boucles[$id_boucle]->type_requete) { + default: case "articles": - $'.$nom_var.' .= "echo retour_forum(0, 0, $contexte[id_article], 0, 0); "; + $milieu .= 'echo retour_forum(0, 0, $contexte[id_article], 0, 0); '; break; case "breves": - $'.$nom_var.' .= "echo retour_forum(0, 0, 0, $contexte[id_breve], 0); "; + $milieu .= 'echo retour_forum(0, 0, 0, $contexte[id_breve], 0); '; break; case "forums": - $'.$nom_var.' = "<"."?php include_local(\'inc-forum.php3\'); - echo retour_forum(0, $contexte[id_forum], 0, 0, 0); ?".">"; + $milieu .= 'echo retour_forum(0, $contexte[id_forum], 0, 0, 0); '; break; case "rubriques": - $'.$nom_var.' = "<"."?php include_local(\'inc-forum.php3\'); - echo retour_forum($contexte[id_rubrique], 0, 0, 0, 0); ?".">"; + $milieu .= 'echo retour_forum($contexte[id_rubrique], 0, 0, 0, 0); '; break; case "syndication": - $'.$nom_var.' = "<"."?php include_local(\'inc-forum.php3\'); - echo retour_forum(0, 0, 0, 0, $contexte[id_syndic]); ?".">"; + $milieu .= 'echo retour_forum(0, 0, 0, 0, $contexte[id_syndic]); '; break; default: - $'.$nom_var.' .= "echo retour_forum(\'$contexte[id_rubrique]\', \'$contexte[id_forum]\', \'$contexte[id_article]\', \'$contexte[id_breve]\', \'$contexte[id_syndic]\'); "; + $milieu .= 'echo retour_forum(\'$contexte[id_rubrique]\', \'$contexte[id_forum]\', \'$contexte[id_article]\', \'$contexte[id_breve]\', \'$contexte[id_syndic]\'); '; break; } - $'.$nom_var.' .= "lang_dselect(); ?".">"; + $milieu .= '"; $'.$nom_var.' .= "lang_dselect(); ?".">"; '; break; diff --git a/inc-calcul.php3 b/inc-calcul.php3 index 501eb67c8010c8bbceb863003fcc5af2ef61e6f6..c819582a9c157d1984893aa845f6ed09e7e30596 100644 --- a/inc-calcul.php3 +++ b/inc-calcul.php3 @@ -335,9 +335,10 @@ function executer_squelette($squelette, $contexte) { $use_cache = false; if (file_exists($squelette_cache)) { $t = filemtime($squelette_cache); - if ((filemtime("$squelette.html") < $t) - AND (filemtime("inc-calcul-squel.php3") < $t) - AND (!file_exists("mes_fonctions.php3") OR (filemtime("mes_fonctions.php3") < $t))) { + if (filemtime("$squelette.html") < $t + AND filemtime("inc-calcul-squel.php3") < $t + AND (!file_exists("mes_fonctions.php3") OR filemtime("mes_fonctions.php3") < $t) + AND (!file_exists("ecrire/mes_options.php3") OR filemtime("ecrire/mes_options.php3") < $t)) { $use_cache = true; } } diff --git a/inc-champ-squel.php3 b/inc-champ-squel.php3 index 4e2297f479960419542ce650d6cc433b0478adeb..4c21dcfd0c4987b9ac2e0752069912a109d4a95d 100755 --- a/inc-champ-squel.php3 +++ b/inc-champ-squel.php3 @@ -118,6 +118,11 @@ function init_champs_squel() { $champs_pretraitement[$val][] = 'trim'; $champs_posttraitement[$val][] = 'interdire_scripts'; } + $c = array('EXTRA'); + reset($c); + while (list(, $val) = each($c)) { + $champs_posttraitement[$val][] = 'interdire_scripts'; + } // Textes courts : ajouter le traitement typographique $c = array('NOM_SITE_SPIP', 'SURTITRE', 'TITRE', 'SOUSTITRE', 'NOM_SITE', 'LIEN_TITRE', 'NOM');