Index: filter.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/filter.module,v
retrieving revision 1.71
diff -U3 -r1.71 filter.module
--- filter.module 25 Aug 2005 21:14:16 -0000 1.71
+++ filter.module 9 Sep 2005 15:17:32 -0000
@@ -205,6 +205,17 @@
'callback' => 'filter_admin_overview',
'access' => user_access('administer filters'));
+ $items[] = array('path' => 'admin/filters/list', 'title' => t('list'),
+ 'callback' => 'filter_admin_overview',
+ 'type' => MENU_DEFAULT_LOCAL_TASK,
+ 'access' => user_access('administer filters'));
+
+ $items[] = array('path' => 'admin/filters/add', 'title' => t('add input format'),
+ 'callback' => 'filter_admin_add',
+ 'type' => MENU_LOCAL_TASK,
+ 'weight' => 1,
+ 'access' => user_access('administer filters'));
+
$items[] = array('path' => 'admin/filters/delete', 'title' => t('delete input format'),
'callback' => 'filter_admin_delete',
'type' => MENU_CALLBACK,
@@ -220,12 +231,13 @@
if (isset($formats[arg(2)])) {
$items[] = array('path' => 'admin/filters/'. arg(2), 'title' => t("'%format' input format", array('%format' => $formats[arg(2)]->name)),
- 'callback' => 'filter_admin_filters',
+ 'callback' => 'filter_admin_format',
+ 'callback arguments' => array('format' => $formats[arg(2)]),
'type' => MENU_CALLBACK,
'access' => user_access('administer filters'));
$items[] = array('path' => 'admin/filters/'. arg(2) .'/list', 'title' => t('list'),
- 'callback' => 'filter_admin_filters',
+ 'callback' => 'filter_admin_format',
'type' => MENU_DEFAULT_LOCAL_TASK,
'weight' => 0,
'access' => user_access('administer filters'));
@@ -259,40 +271,32 @@
* Menu callback; allows administrators to set up input formats.
*/
function filter_admin_overview() {
- // Process form submission
- switch ($_POST['op']) {
- case t('Save input formats'):
- filter_admin_save();
- break;
- case t('Add input format'):
- filter_admin_add();
- break;
+ // Process form submission to set the default format
+ if ($_POST['op'] == t('Save default format')) {
+ filter_admin_save_default();
}
// Overview of all formats.
$formats = filter_formats();
- $roles = user_roles();
$error = false;
- $header = array(t('Name'), t('Default'));
- foreach ($roles as $name) {
- $header[] = $name;
- }
- $header[] = array('data' => t('Operations'), 'colspan' => 2);
+ $header = array(t('Default'), t('Name'), t('Roles'), array('data' => t('Operations'), 'colspan' => 2));
$rows = array();
foreach ($formats as $id => $format) {
+ $roles = array();
+ foreach (user_roles() as $rid => $name) {
+ //prepare a roles array with roles that may access the filter
+ if (strstr($format->roles, ",$rid,")){
+ $roles[] = $name;
+ }
+ }
$row = array();
$default = ($id == variable_get('filter_default_format', 1));
- $row[] = form_textfield('', "name][$id", $format->name, 15, 255);
$row[] = form_radio('', 'default', $id, $default);
-
- foreach ($roles as $rid => $name) {
- $checked = strstr($format->roles, ",$rid,");
- $row[] = form_checkbox('', "roles][$id][$rid", 1, $default || $checked, NULL, $default ? array('disabled' => 'disabled') : NULL);
- }
-
+ $row[] = $format->name;
+ $row[] = $roles ? implode(', ',$roles) : t('No roles may use this format');
$row[] = l(t('configure'), 'admin/filters/'. $id);
$row[] = $default ? '' : l('delete', 'admin/filters/delete/'. $id);
@@ -300,15 +304,8 @@
}
$group = theme('table', $header, $rows);
- $group .= form_submit(t('Save input formats'));
- $output = '
'. t('Permissions and settings') . '
' . form($group);
-
- // Form to add a new format.
- $group = t("To add a new input format, type its name here. After it has been added, you can configure its options.
");
- $form = form_textfield(t('Name'), 'name', '', 30, 255);
- $form .= form_submit(t('Add input format'));
- $group .= form($form);
- $output .= ''. t('Add new input format') .'
'. $group;
+ $group .= form_submit(t('Save default format'));
+ $output = form($group);
return $output;
}
@@ -316,57 +313,26 @@
/**
* Save input formats on the overview page.
*/
-function filter_admin_save() {
+function filter_admin_save_default() {
$edit = $_POST['edit'];
-
+ drupal_set_message(t('Default format saved'));
variable_set('filter_default_format', $edit['default']);
-
- foreach ($edit['name'] as $id => $name) {
- $name = trim($name);
-
- if (strlen($name) == 0) {
- drupal_set_message(t('The input format name must be specified.'));
- drupal_goto('admin/filters');
- }
- else {
- db_query("UPDATE {filter_formats} SET name='%s' WHERE format = %d", $name, $id);
- }
- }
-
- // We store the roles as a string for ease of use.
- // We use leading and trailing comma's to allow easy substring matching.
- foreach ($edit['roles'] as $id => $format) {
- $roles = ',';
- foreach ($format as $rid => $value) {
- if ($value) {
- $roles .= $rid .',';
- }
- }
- db_query("UPDATE {filter_formats} SET roles = '%s' WHERE format = %d", $roles, $id);
- }
-
- drupal_set_message(t('The input format settings have been updated.'));
- drupal_goto('admin/filters');
}
/**
* Add a new input format.
*/
function filter_admin_add() {
- $edit = $_POST['edit'];
-
- $name = trim($edit['name']);
+ if ($_POST['op']) {
+ $edit = $_POST['edit'];
+ filter_admin_filters_save($format->format, $edit);
- if (strlen($name) == 0) {
- drupal_set_message(t('The input format must have a name.'));
+ drupal_set_message(t('Added input format %format.', array('%format' => theme('placeholder', $edit['name']))));
drupal_goto('admin/filters');
}
else {
- db_query("INSERT INTO {filter_formats} (name) VALUES ('%s')", $name);
+ return filter_admin_format_form($format);
}
-
- drupal_set_message(t('Input format %format has been created.', array('%format' => theme('placeholder', $edit['name']))));
- drupal_goto('admin/filters');
}
/**
@@ -386,7 +352,7 @@
cache_clear_all('filter:'. $edit['format'], true);
- drupal_set_message(t('Input format %format has been removed.', array('%format' => theme('placeholder', $edit['name']))));
+ drupal_set_message(t('Deleted input format %format.', array('%format' => theme('placeholder', $edit['name']))));
}
drupal_goto('admin/filters');
}
@@ -409,37 +375,17 @@
/**
* Menu callback; configure the filters for a format.
*/
-function filter_admin_filters() {
- $format = arg(2);
-
+function filter_admin_format($format) {
// Handle saving of weights.
if ($_POST['op']) {
- filter_admin_filters_save($format, $_POST['edit']);
- }
-
- $all = filter_list_all();
- $enabled = filter_list_format($format);
-
- // Table with filters
- $header = array(t('Enabled'), t('Name'), t('Description'));
- $rows = array();
- foreach ($all as $id => $filter) {
- $row = array();
- $row[] = form_checkbox('', $id, 1, isset($enabled[$id]));
- $row[] = $filter->name;
- $row[] = module_invoke($filter->module, 'filter', 'description', $filter->delta);
-
- $rows[] = $row;
- }
- $form = theme('table', $header, $rows);
- if (!$empty) {
- $form .= form_submit(t('Save configuration'));
+ $edit = $_POST['edit'];
+ filter_admin_filters_save($format->format, $edit);
}
- $output .= ''. t('Filters') .'
'. form($form);
+ $output = filter_admin_format_form($format);
// Composition tips (guidelines)
- $tips = _filter_tips($format, false);
+ $tips = _filter_tips($format->format, false);
$extra = l(t('More information about formatting options'), 'filter/tips');
$tiplist = theme('filter_tips', $tips, false, $extra);
if (!$tiplist) {
@@ -453,13 +399,54 @@
}
/**
+ * Renders a form for a format
+ */
+function filter_admin_format_form($format) {
+ $default = ($format->format == variable_get('filter_default_format', 1));
+
+ //Add the name of the object
+ $form = form_textfield(t('Name'), 'name', $format->name, 60, 127, t('Give the name of this filter format'), NULL, TRUE);
+
+ //Add a row of checkboxes for.form group
+ foreach (user_roles() as $rid => $name) {
+ $checked = strstr($format->roles, ",$rid,");
+ $group .= form_checkbox($name, 'roles]['.$rid, 1, ($default || $checked), NULL, $default ? array('disabled' => 'disabled') : NULL);
+ }
+ if ($default) {
+ $help = '
' . t('You are editing the default format. For the default format, all roles must be enabled. Therefore you cannot change them.');
+ $group .= form_hidden('default_format', 1);
+ }
+ $form .= form_group(t('Roles'), $group, t('Choose which roles may use this filter format') . $help);
+
+ // Table with filters
+ $all = filter_list_all();
+ $enabled = filter_list_format($format->format);
+
+ $group = '';
+ foreach ($all as $id => $filter) {
+ $group .= form_checkbox($filter->name, $id, 1, isset($enabled[$id]), module_invoke($filter->module, 'filter', 'description', $filter->delta));
+ }
+
+ $form .= form_group(t('filters'), $group, t('Choose the filters that will be used in this filter format'));
+ $form .= form_submit(t('Save configuration'));
+
+ return form($form);
+}
+
+/**
* Save enabled/disabled status for filters in a format.
*/
function filter_admin_filters_save($format, $toggles) {
$current = filter_list_format($format);
-
+ $edit = $_POST['edit'];
$cache = true;
+ if (!$format) { //add a new filter format.
+ db_query("INSERT INTO {filter_formats} (name) VALUES ('%s')", $name);
+ $result = db_fetch_object(db_query("SELECT MAX(format) AS format FROM {filter_formats}"));
+ $format = $result->format;
+ }
+
db_query("DELETE FROM {filters} WHERE format = %d", $format);
foreach ($toggles as $id => $checked) {
if ($checked) {
@@ -473,13 +460,26 @@
}
}
- // Update the format's 'no cache' flag.
- db_query('UPDATE {filter_formats} SET cache = %d WHERE format = %d', (int)$cache, $format);
-
- cache_clear_all('filter:'. $format, true);
-
- drupal_set_message(t('The input format has been updated.'));
- drupal_goto('admin/filters/'. arg(2) .'/list');
+ $name = trim($edit['name']);
+ if (strlen($name) == 0) {
+ form_set_error('name', t('You must enter a name for this input format.'));
+ drupal_goto('admin/filters/add');
+ }
+ else {
+ // We store the roles as a string for ease of use.
+ // we should always set all roles to true when saving a default role. disabled checkboxes may not always return TRUE.
+ // We use leading and trailing comma's to allow easy substring matching.
+ $roles = ',';
+ foreach ($edit['roles'] as $rid => $value) {
+ if ($value || $edit['default_format']) {
+ $roles .= $rid .',';
+ }
+ }
+ db_query("UPDATE {filter_formats} SET cache = %d, name='%s', roles = '%s' WHERE format = %d", (int)$cache, $name, $roles, $format);
+ drupal_set_message(t('The input format settings have been updated.'));
+ drupal_goto('admin/filters');
+ cache_clear_all('filter:'. $format, true);
+ }
}
/**
@@ -746,8 +746,7 @@
$output .= theme('filter_tips', $tips);
$output .= '';
}
- $group = theme('form_element', NULL, $output, $extra, NULL, _form_get_error($name));
- return form_group_collapsible(t('Input format'), $group, TRUE);
+ return theme('form_element', t('Input format'), $output, $extra, NULL, _form_get_error($name));
}
else {
// Only one format available: use a hidden form item and only show tips.
@@ -925,7 +924,7 @@
*/
function _filter_html_settings($format) {
$group = form_radios(t('Filter HTML tags'), "filter_html_$format", variable_get("filter_html_$format", FILTER_HTML_STRIP), array(FILTER_HTML_STRIP => t('Strip tags'), FILTER_HTML_ESCAPE => t('Escape tags')), t('How to deal with HTML tags in user-contributed content. If set to "Strip tags", dangerous tags are removed (see below). If set to "Escape tags", all HTML is escaped and presented as it was typed.'));
- $group .= form_textfield(t('Allowed HTML tags'), "allowed_html_$format", variable_get("allowed_html_$format", ' -
-
- '), 60, 255, t('If "Strip tags" is selected, optionally specify tags which should not be stripped. Javascript event attributes are always stripped.'));
+ $group .= form_textfield(t('Allowed HTML tags'), "allowed_html_$format", variable_get("allowed_html_$format", '
-
-
- '), 64, 255, t('If "Strip tags" is selected, optionally specify tags which should not be stripped. Javascript event attributes are always stripped.'));
$group .= form_checkbox(t('Display HTML help'), "filter_html_help_$format", 1, variable_get("filter_html_help_$format", 1), t('If enabled, Drupal will display some basic HTML help in the long filter tips.'));
$group .= form_radios(t('HTML style attributes'), "filter_style_$format", variable_get("filter_style_$format", FILTER_STYLE_STRIP), array(FILTER_STYLE_ALLOW => t('Allowed'), FILTER_STYLE_STRIP => t('Removed')), t('If "Strip tags" is selected, you can choose whether "STYLE" attributes are allowed or removed from input.'));
$group .= form_checkbox(t('Spam link deterrent'), "filter_html_nofollow_$format", 1, variable_get("filter_html_nofollow_$format", FALSE), t('If enabled, Drupal will add rel="nofollow" to all links, as a measure to reduce the effectiveness of spam links. Note: this will also prevent valid links from being followed by search engines, therefore it is likely most effective when enabled for anonymous users.'));