X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=banana%2Fmisc.inc.php;h=7520adfa13265401cb3bf14f738efb7d7e75fb74;hb=73ab762c360a7348f3630d12b18b95ec8345d457;hp=410ec7e68577f7c61f496da721e7e74cdb76e5bd;hpb=f5eb6c66d0e4e7878cd4b388bdfbb191ab709d70;p=banana.git diff --git a/banana/misc.inc.php b/banana/misc.inc.php index 410ec7e..7520adf 100644 --- a/banana/misc.inc.php +++ b/banana/misc.inc.php @@ -14,7 +14,7 @@ function _b_($str) { return utf8_decode(dgettext('banana', utf8_encode($str))); } function to_entities($str) { - require_once 'banana/utf8.php'; + require_once dirname(__FILE__).'/utf8.php'; return utf8entities(htmlentities($str, ENT_NOQUOTES, 'UTF-8')); } @@ -35,14 +35,14 @@ function textFormat_translate($format) * Taken from php.net */ - /** +/** * @return string * @param string * @desc Strip forbidden tags and delegate tag-source check to removeEvilAttributes() */ function removeEvilTags($source) { - $allowedTags = '
'; + $allowedTags = '
'; $source = strip_tags($source, $allowedTags); return preg_replace('/<(.*?)>/ie', "'<'.removeEvilAttributes('\\1').'>'", $source); } @@ -59,6 +59,55 @@ function removeEvilAttributes($tagSource) return stripslashes(preg_replace("/$stripAttrib/i", '', $tagSource)); } +/** Convert html to plain text + */ +function htmlToPlainText($res) +{ + $res = trim(html_entity_decode(strip_tags($res, '
'))); + $res = preg_replace("@?(br|p)[^>]*>@i", "\n", $res); + if (!is_utf8($res)) { + $res = utf8_encode($res); + } + return $res; +} + +/******************************************************************************** + * RICHTEXT STUFF + */ + +/** Convert richtext to html + */ +function richtextToHtml($source) +{ + $tags = Array('bold' => 'b', + 'italic' => 'i', + 'smaller' => 'small', + 'bigger' => 'big', + 'underline' => 'u', + 'subscript' => 'sub', + 'superscript' => 'sup', + 'excerpt' => 'blockquote', + 'paragraph' => 'p', + 'nl' => 'br' + ); + + // clean unsupported tags + $protectedTags = '
<'.join('><', array_keys($tags)).'>'; + $source = strip_tags($source, $protectedTags); + + // convert richtext tags to html + foreach (array_keys($tags) as $tag) { + $source = preg_replace('@(?)'.$tag.'([^>]*>)@i', '\1'.$tags[$tag].'\2', $source); + } + + // some special cases + $source = preg_replace('@ @i', ' @i', '', $source); + $source = preg_replace('@
--
', $source); + $source = preg_replace('@@i', '<', $source); + $source = preg_replace('@ ]*>((?:[^<]|<(?!/comment>))*) @i', '', $source); + return removeEvilAttributes($source); +} + /******************************************************************************** * HEADER STUFF */ @@ -224,7 +273,7 @@ function displayshortcuts($first = -1) { } else { $res .= "[" ._b_('RĂ©pondre')."] "; - if ($banana->post->checkcancel()) { + if ($banana->post && $banana->post->checkcancel()) { $res .= "[" ._b_('Annuler ce message')."] "; } @@ -258,7 +307,10 @@ function wrap($text, $_prefix="") function formatbody($_text, $format='plain') { if ($format == 'html') { - $res = '
'.removeEvilTags(html_entity_decode(to_entities($_text))).'
'; + $res = '
'.removeEvilTags($_text).'
'; + } else if ($format == 'richtext') { + $res = '
'.richtextToHtml($_text).'
'; + $format = 'html'; } else { $res = "\n\n" . to_entities(wrap($_text, ""))."\n\n"; }