? Doxyfile ? files ? filter_interface_improvements_2.patch ? upload_inline_2_0.patch ? upload_inline_2_1.patch ? upload_inline_2_2.patch ? database/database.prefixed.mysql ? sites/webschuur.dyndns.org.DPL Index: modules/filter.module =================================================================== RCS file: /cvs/drupal/drupal/modules/filter.module,v retrieving revision 1.71 diff -u -F^f -u -F^f -r1.71 filter.module --- modules/filter.module 25 Aug 2005 21:14:16 -0000 1.71 +++ modules/filter.module 13 Sep 2005 19:05:30 -0000 @@ -205,6 +205,17 @@ function filter_menu($may_cache) { '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 @@ function filter_menu($may_cache) { 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 @@ function filter_perm() { * 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 @@ function filter_admin_overview() { } $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 @@ function filter_admin_overview() { /** * 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 @@ function filter_admin_delete() { 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 @@ function filter_admin_delete() { /** * 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 @@ function filter_admin_filters() { } /** + * 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 @@ function filter_admin_filters_save($form } } - // 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 @@ function filter_form($name = 'format', $ $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_filter($op, $delta = 0, */ 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", '