Index: modules/filter/filter.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/filter/filter.module,v
retrieving revision 1.304
diff -u -p -r1.304 filter.module
--- modules/filter/filter.module 1 Dec 2009 13:14:42 -0000 1.304
+++ modules/filter/filter.module 2 Dec 2009 13:07:38 -0000
@@ -770,9 +770,11 @@ function _filter_tips($format_id, $long
$filters = filter_list_format($format->format);
$tips[$format->name] = array();
foreach ($filters as $name => $filter) {
- if ($filter->status && isset($filter_info[$name]['tips callback']) && function_exists($filter_info[$name]['tips callback'])) {
+ if (isset($filter_info[$name]['tips callback']) && function_exists($filter_info[$name]['tips callback'])) {
$tip = $filter_info[$name]['tips callback']($filter, $format, $long);
- $tips[$format->name][$name] = array('tip' => $tip, 'id' => $name);
+ if ($tip) {
+ $tips[$format->name][$name] = array('tip' => $tip, 'id' => $name);
+ }
}
}
}
@@ -954,9 +956,29 @@ function _filter_html($text, $filter) {
function _filter_html_tips($filter, $format, $long = FALSE) {
global $base_url;
- if (!($allowed_html = $filter->settings['allowed_html'])) {
- return;
+ if (!$filter->status || !($allowed_html = $filter->settings['allowed_html'])) {
+ // If the text format does not remove or escape any HTML, add a special
+ // filter tip which explains that HTML is allowed. We detect these cases by
+ // defining an invalid HTML tag and running it through the text format.
+ // Since any (reasonable) HTML filter uses a white-list approach when
+ // filtering, we expect this tag to either be removed or escaped if the
+ // text format restricts HTML in any way.
+ // @todo This will fail with filters that add generic attributes, i.e.
+ // ''
+ // or filters that change XHTML to HTML, i.e.
+ // ''
+ // so the proper way to check this would be to use PHP DOM functions.
+ $output = '';
+ $fake_tag = '';
+ if (strpos(check_markup($fake_tag, $format->format), $fake_tag) !== FALSE) {
+ $output = t('All HTML tags are allowed.');
+ }
+ if ($long) {
+ return '' . $output . '
';
+ }
+ return $output;
}
+
$output = t('Allowed HTML tags: @tags', array('@tags' => $allowed_html));
if (!$long) {
return $output;
@@ -1126,6 +1148,9 @@ function _filter_url_trim($text, $length
* Filter tips callback for URL filter.
*/
function _filter_url_tips($filter, $format, $long = FALSE) {
+ if (!$filter->status) {
+ return;
+ }
return t('Web page addresses and e-mail addresses turn into links automatically.');
}
@@ -1199,6 +1224,9 @@ function _filter_autop($text) {
* Filter tips callback for auto-paragraph filter.
*/
function _filter_autop_tips($filter, $format, $long = FALSE) {
+ if (!$filter->status) {
+ return;
+ }
if ($long) {
return t('Lines and paragraphs are automatically recognized. The <br /> line break, <p> paragraph and </p> close paragraph tags are inserted automatically. If paragraphs are not recognized simply add a couple blank lines.');
}
@@ -1218,7 +1246,9 @@ function _filter_html_escape($text) {
* Filter tips callback for HTML escaping filter.
*/
function _filter_html_escape_tips($filter, $format, $long = FALSE) {
- return t('No HTML tags allowed.');
+ if ($filter->status) {
+ return t('No HTML tags allowed.');
+ }
}
/**