From 148681d1b0d230272f7a40d074b36f27e1012132 Mon Sep 17 00:00:00 2001 From: "Edward Z. Yang" Date: Fri, 29 Jun 2007 00:28:07 +0000 Subject: [PATCH] Tidy up Phorum extension. Add svn:ignore, add img to the default list of allowed tags (for smileys), improve naming convention, move loading code out of main namespace, and add reset. Probably the last thing to do before this is feature complete is to have a WYSIWYG flag that turns on escaping for edit posts. git-svn-id: http://htmlpurifier.org/svnroot/htmlpurifier/trunk@1270 48356398-32a2-884e-a903-53898d9a118a --- plugins/phorum/config.default.php | 2 +- plugins/phorum/htmlpurifier.php | 107 ++++++++++++++++-------------- plugins/phorum/info.txt | 2 +- plugins/phorum/settings.php | 8 ++- 4 files changed, 66 insertions(+), 53 deletions(-) diff --git a/plugins/phorum/config.default.php b/plugins/phorum/config.default.php index ec0bbaa9..952291f7 100644 --- a/plugins/phorum/config.default.php +++ b/plugins/phorum/config.default.php @@ -9,7 +9,7 @@ $config->set('HTML', 'Allowed', // common semantic markup 'del,ins,strong,em,'. // commmon presentational markup - 's,strike,sub,sup,u,br,tt,div[class],'. // div because bbcode [quote] uses it + 's,strike,sub,sup,u,br,tt,div[class],img[src|alt|title|class],'. // div because bbcode [quote] uses it, img for smileys // uncommon semantic markup 'abbr[title],acronym[title],caption,code,dfn,cite,kbd,var,'. // lists diff --git a/plugins/phorum/htmlpurifier.php b/plugins/phorum/htmlpurifier.php index 34cbddca..af4aa84d 100644 --- a/plugins/phorum/htmlpurifier.php +++ b/plugins/phorum/htmlpurifier.php @@ -18,39 +18,10 @@ if(!defined('PHORUM')) exit; -// load library -require_once (dirname(__FILE__).'/htmlpurifier/HTMLPurifier.auto.php'); - -$config_exists = file_exists(dirname(__FILE__) . '/config.php'); -if ($config_exists || !isset($PHORUM['mod_htmlpurifier']['config'])) { - $config = HTMLPurifier_Config::createDefault(); - include(dirname(__FILE__) . '/config.default.php'); - if ($config_exists) { - include(dirname(__FILE__) . '/config.php'); - } -} else { - // used cached version that was constructed from web interface - $config = HTMLPurifier_Config::create($PHORUM['mod_htmlpurifier']['config']); -} -HTMLPurifier::getInstance($config); - -// increment revision.txt if you want to invalidate the cache -$GLOBALS['PHORUM']['mod_htmlpurifier']['body_cache_serial'] = $config->getSerial(); - -// load migration -if (file_exists(dirname(__FILE__) . '/migrate.php')) { - include(dirname(__FILE__) . '/migrate.php'); -} else { - echo 'Error: No migration path specified for HTML Purifier, please check - modes/htmlpurifier/migrate.bbcode.php for instructions on - how to migrate from your previous markup language.'; - exit; -} - /** * Purifies a data array */ -function phorum_htmlpurifier($data) +function phorum_htmlpurifier_format($data) { $PHORUM = $GLOBALS["PHORUM"]; @@ -58,7 +29,13 @@ function phorum_htmlpurifier($data) $cache_serial = $PHORUM['mod_htmlpurifier']['body_cache_serial']; foreach($data as $message_id => $message){ - if(isset($message['body'])){ + if(isset($message['body'])) { + if (isset($message['meta']['htmlpurifier_light'])) { + // format hook was called outside of Phorum's normal + // functions, do the abridged purification + $data[$message_id]['body'] = $purifier->purify($message['body']); + continue; + } if ( isset($message['meta']['body_cache']) && @@ -120,8 +97,11 @@ function phorum_htmlpurifier($data) */ function phorum_htmlpurifier_posting($message) { $PHORUM = $GLOBALS["PHORUM"]; - $purifier =& HTMLPurifier::getInstance(); - $message['meta']['body_cache'] = $purifier->purify($message['body']); + $fake_data = array($message); + // this is a temporary attribute + $fake_data[0]['meta']['htmlpurifier_light'] = true; // only purify, please + list($changed_message) = phorum_hook('format', $fake_data); + $message['meta']['body_cache'] = $changed_message['body']; $message['meta']['body_cache_serial'] = $PHORUM['mod_htmlpurifier']['body_cache_serial']; return $message; } @@ -137,29 +117,56 @@ function phorum_htmlpurifier_quote($array) { } /** - * Ensure that our format hook is processed last + * Ensure that our format hook is processed last. Also, loads the library. * @credits */ function phorum_htmlpurifier_common() { - global $PHORUM; - if (! isset($PHORUM['hooks']['format']['mods'])) return; + require_once (dirname(__FILE__).'/htmlpurifier/HTMLPurifier.auto.php'); - $hp_idx = null; - $last_idx = null; - foreach ($PHORUM['hooks']['format']['mods'] as $idx => $mod) { - if ($mod == 'htmlpurifier') $hp_idx = $idx; - $last_idx = $idx; + $config_exists = file_exists(dirname(__FILE__) . '/config.php'); + if ($config_exists || !isset($PHORUM['mod_htmlpurifier']['config'])) { + $config = HTMLPurifier_Config::createDefault(); + include(dirname(__FILE__) . '/config.default.php'); + if ($config_exists) { + include(dirname(__FILE__) . '/config.php'); + } + } else { + // used cached version that was constructed from web interface + $config = HTMLPurifier_Config::create($PHORUM['mod_htmlpurifier']['config']); + } + HTMLPurifier::getInstance($config); + + // increment revision.txt if you want to invalidate the cache + $GLOBALS['PHORUM']['mod_htmlpurifier']['body_cache_serial'] = $config->getSerial(); + + // load migration + if (file_exists(dirname(__FILE__) . '/migrate.php')) { + include(dirname(__FILE__) . '/migrate.php'); + } else { + echo 'Error: No migration path specified for HTML Purifier, please check + modes/htmlpurifier/migrate.bbcode.php for instructions on + how to migrate from your previous markup language.'; + exit; } - if ($hp_idx !== null && $hp_idx != $last_idx) { - - $hp_mod = array_splice($PHORUM['hooks']['format']['mods'], $hp_idx, 1); - $PHORUM['hooks']['format']['mods'][] = $hp_mod; - - $hp_func = array_splice($PHORUM['hooks']['format']['funcs'], $hp_idx, 1); - $PHORUM['hooks']['format']['funcs'][] = $hp_func; - - } + // see if our hooks need to be bubbled to the end + phorum_htmlpurifier_bubble_hook('format'); + +} + +function phorum_htmlpurifier_bubble_hook($hook) { + global $PHORUM; + $our_idx = null; + $last_idx = null; + if (!isset($PHORUM['hooks'][$hook]['mods'])) return; + foreach ($PHORUM['hooks'][$hook]['mods'] as $idx => $mod) { + if ($mod == 'htmlpurifier') $our_idx = $idx; + $last_idx = $idx; + } + list($mod) = array_splice($PHORUM['hooks'][$hook]['mods'], $our_idx, 1); + $PHORUM['hooks'][$hook]['mods'][] = $mod; + list($func) = array_splice($PHORUM['hooks'][$hook]['funcs'], $our_idx, 1); + $PHORUM['hooks'][$hook]['funcs'][] = $func; } diff --git a/plugins/phorum/info.txt b/plugins/phorum/info.txt index 7a6d995a..c59a6133 100644 --- a/plugins/phorum/info.txt +++ b/plugins/phorum/info.txt @@ -1,4 +1,4 @@ -hook: format|phorum_htmlpurifier +hook: format|phorum_htmlpurifier_format hook: quote|phorum_htmlpurifier_quote hook: posting_custom_action|phorum_htmlpurifier_posting hook: common|phorum_htmlpurifier_common diff --git a/plugins/phorum/settings.php b/plugins/phorum/settings.php index 93ab956b..e0eb379f 100644 --- a/plugins/phorum/settings.php +++ b/plugins/phorum/settings.php @@ -32,6 +32,10 @@ $directives = array( 'Output.TidyFormat', ); +if (isset($_POST['reset'])) { + unset($PHORUM['mod_htmlpurifier']['config']); +} + // instantiate $config object $config_exists = file_exists(dirname(__FILE__) . '/config.php'); if ($config_exists || !isset($PHORUM['mod_htmlpurifier']['config'])) { @@ -51,7 +55,7 @@ if(!empty($_POST)){ echo "Cannot update settings, mods/htmlpurifier/config.php already exists. To change settings, edit that file. To use the web form, delete that file.
"; } else { - $config->mergeArrayFromForm($_POST, 'config', $directives); + if (!isset($_POST['reset'])) $config->mergeArrayFromForm($_POST, 'config', $directives); $PHORUM['mod_htmlpurifier']['config'] = $config->getAll(); if(!phorum_db_update_settings(array("mod_htmlpurifier"=>$PHORUM["mod_htmlpurifier"]))){ $error="Database error while updating settings."; @@ -114,6 +118,8 @@ if ($config_exists) { $frm->addMessage($htmlpurifier_form->render($config, $directives, false)); $frm->addMessage($warning); + + $frm->addrow('Reset to defaults:', $frm->checkbox("reset", "1", "", false)); // hack to include extra styling echo '