From 9263d2df0226a118f4add4664d746a266ce5aa78 Mon Sep 17 00:00:00 2001 From: "bitweaver.org" Date: Sun, 19 Jun 2005 04:55:51 +0000 Subject: IMPORT TikiPro CLYDE FINAL --- plugins/format.tikihtml.php | 82 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 plugins/format.tikihtml.php (limited to 'plugins/format.tikihtml.php') diff --git a/plugins/format.tikihtml.php b/plugins/format.tikihtml.php new file mode 100644 index 0000000..e25a079 --- /dev/null +++ b/plugins/format.tikihtml.php @@ -0,0 +1,82 @@ + 'bithtml_save_data', + 'load_function' => 'bithtml_parse_data', + 'verify_function' => 'bithtml_verify_data', + 'description' => 'HTML Syntax Format Parser', + 'edit_label' => 'HTML', + 'edit_field' => ' FORMAT_PLUGIN + ); + +$gLibertySystem->registerPlugin( PLUGIN_GUID_BITHTML, $pluginParams ); + +function bithtml_verify_data( &$pParamHash ) { + $errorMsg = NULL; + $pParamHash['content_store']['data'] = purge_html( $pParamHash['edit'] ); + return $errorMsg; +} + +// This function is a menagerie of the techniques of the comments listed at +// http://www.php.net/manual/en/function.strip-tags.php - spiderr +function purge_html( $pText ) { + global $gBitSystem, $gBitUser; + + // convert all HTML entites to catch people trying to sneak stuff by with things like { etc.. + if( function_exists( 'html_entity_decode' ) ) { + $text = html_entity_decode( $pText ); + } else { + $trans_tbl = get_html_translation_table(HTML_ENTITIES); + $trans_tbl = array_flip($trans_tbl); + $text = strtr($pText, $trans_tbl); + } + + // strip_tags() appears to become nauseated at the site of a declaration + $text = str_replace( 'hasPermission( 'bit_p_edit_html_style' ) ) { + $text = preg_replace( "/]*>.*<\/style>/siU", '', $text ); + } + $text = stripslashes($text); + if( !$gBitUser->hasPermission( 'bit_p_edit_html_style' ) ) { + $text = preg_replace( "/ (style|class)=[\"]?([^\"]*)[\"]?/i", '', $text); + } + + // Strip all evil tags that remain + // this comes out of gBitSystem->getPreference() set in Liberty Admin + $acceptableTags = $gBitSystem->getPreference( 'approved_html_tags', DEFAULT_ACCEPTABLE_TAGS ); + + // Destroy all script code "manually" - strip_tags will leave code inline as plain text + if( !preg_match( '/\/', $acceptableTags ) ) { + $text = preg_replace( "/(\)/si", '', $text ); + } + + $text = strip_tags( $text, $acceptableTags ); + $text = str_replace("