diff --git a/ecrire/articles_versions.php3 b/ecrire/articles_versions.php3 index 511f3e805ac96c5007194836f85d343c553234b1..dae7ec3db41a32dca7964ee7a06b9b4df5ea6c83 100644 --- a/ecrire/articles_versions.php3 +++ b/ecrire/articles_versions.php3 @@ -254,17 +254,17 @@ if ($id_version) { else { echo "<div $dir_lang><b>"; $revision_nbsp = ($options == "avancees"); // a regler pour relecture des nbsp dans les articles - echo justifier(propre($chapo)); + echo justifier(propre_diff($chapo)); echo "</b></div>\n\n"; echo "<div $dir_lang>"; - echo justifier(propre($texte)); + echo justifier(propre_diff($texte)); echo "</div>"; if ($ps) { echo debut_cadre_enfonce(); echo "<div $dir_lang><font size='2' face='Verdana,Arial,Sans,sans-serif'>"; - echo justifier("<b>"._T('info_ps')."</b> ".propre($ps)); + echo justifier("<b>"._T('info_ps')."</b> ".propre_diff($ps)); echo "</font></div>"; echo fin_cadre_enfonce(); } diff --git a/ecrire/inc_suivi_revisions.php b/ecrire/inc_suivi_revisions.php index 8d9975db450825897d631882a6ad641b0553561b..6b4d882905c44b45474dcfe5f1f73674beaaf5bd 100644 --- a/ecrire/inc_suivi_revisions.php +++ b/ecrire/inc_suivi_revisions.php @@ -92,7 +92,7 @@ function afficher_suivi_versions ($debut = 0, $id_secteur = 0, $uniq_auteur = fa WHERE id_auteur = $id_auteur"; $result_auteur = spip_query($query_auteur); if ($row_auteur = spip_fetch_array($result_auteur)) { - $nom = propre($row_auteur["nom"]); + $nom = typo($row_auteur["nom"]); if (strlen($nom) > 0) $nom = "($nom)"; } @@ -102,7 +102,7 @@ function afficher_suivi_versions ($debut = 0, $id_secteur = 0, $uniq_auteur = fa echo "<div class='tr_liste' style='padding: 5px; border-top: 1px solid #aaaaaa;'>"; echo "<span class='arial2'>"; - if (!$court) echo bouton_block_invisible("$id_version-$id_article-$id_auteur"); + if (!$court) echo bouton_block_visible("$id_version-$id_article-$id_auteur"); echo "<img src='" . _DIR_IMG_PACK . "$logo_statut' border='0'> "; echo "<a class='$statut' style='font-weight: bold;' href='articles_versions.php3?id_article=$id_article'>$titre</a>"; echo "</span>"; @@ -163,12 +163,16 @@ function afficher_suivi_versions ($debut = 0, $id_secteur = 0, $uniq_auteur = fa } } - echo debut_block_invisible("$id_version-$id_article-$id_auteur"); + echo debut_block_visible("$id_version-$id_article-$id_auteur"); if (is_array($textes)) foreach ($textes as $var => $t) { if (strlen($t) > 0) { echo "<blockquote class='serif1'>"; - echo propre($t); + echo propre_diff($t); + if ($GLOBALS['les_notes']) { + echo '<p>'.$GLOBALS['les_notes']; + $GLOBALS['les_notes'] = ''; + } echo "</blockquote>"; } } diff --git a/ecrire/lab_revisions.php b/ecrire/lab_revisions.php index fb69d82576817865fd564c11814682f487413380..cc0cdf71dd1b10860d3bb4657d1f8d2dbd0b57eb 100644 --- a/ecrire/lab_revisions.php +++ b/ecrire/lab_revisions.php @@ -459,4 +459,47 @@ function ajouter_version($id_article, $champs, $titre_version = "") { return $id_version_new; } +// les textes "diff" ne peuvent pas passer dans propre directement, +// car ils contiennent des <span> et <div> parfois mal places +function propre_diff($texte) { + + $span_diff = array(); + if (preg_match_all(',</?(span|div) (class|rem)="diff-[^>]+>,', $texte, $regs, PREG_SET_ORDER)) { + foreach ($regs as $c => $reg) + $texte = str_replace($reg[0], '@@@SPIP_DIFF'.$c.'@@@', $texte); + } + + // [ ...<span diff> -> lien ] + // < tag <span diff> > + $texte = preg_replace(',<([^>]*@@@SPIP_DIFF[0-9]+@@@),', + '<\1', $texte); + # attention ici astuce seulement deux @@ finals car on doit eviter + # deux patterns a suivre, afin de pouvoir prendre [ mais eviter [[ + $texte = preg_replace(',(^|[^[])[[]([^[\]]*@@@SPIP_DIFF[0-9]+@@),', + '\1[\2', $texte); + + $texte = propre($texte); + + // un blockquote mal ferme peut gener l'affichage, et title plante safari + $texte = preg_replace(',<(/?(blockquote|title)[^>]*)>,i', '<\1>', $texte); + + // Dans les <cadre> c'est un peu plus complique + if (preg_match_all(',<textarea (.*)</textarea>,Uims', $texte, $area, PREG_SET_ORDER)) { + foreach ($area as $reg) { + $remplace = preg_replace(',@@@SPIP_DIFF[0-9]+@@@,', '**', $reg[0]); + if ($remplace <> $reg[0]) + $texte = str_replace($reg[0], $remplace, $texte); + } + } + + // replacer les valeurs des <span> et <div> diff- + if (is_array($regs)) + foreach ($regs as $c => $reg) { + $texte = str_replace('@@@SPIP_DIFF'.$c.'@@@', $reg[0], $texte); + $GLOBALS['les_notes'] = str_replace('@@@SPIP_DIFF'.$c.'@@@', $reg[0], $GLOBALS['les_notes']); + } + + return $texte; +} + ?>