Index: modules/filter.module =================================================================== RCS file: /cvs/drupal/drupal/modules/filter.module,v retrieving revision 1.57.2.6 diff -u -F^f -r1.57.2.6 filter.module --- modules/filter.module 29 Jun 2005 19:53:35 -0000 1.57.2.6 +++ modules/filter.module 28 Jul 2005 13:34:26 -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,25 @@ 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 input formats')) { + 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('Name'), t('Default'), array('data' => t('Operations'), 'colspan' => 2)); $rows = array(); foreach ($formats as $id => $format) { $row = array(); $default = ($id == variable_get('filter_default_format', 1)); - $row[] = form_textfield('', "name][$id", $format->name, 16, 255); + $row[] = $format->name; $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[] = l(t('configure'), 'admin/filters/'. $id); $row[] = $default ? '' : l('delete', 'admin/filters/delete/'. $id); @@ -300,15 +297,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', '', 40, 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); print theme('page', $output); } @@ -316,57 +306,26 @@ function filter_admin_overview() { /** * Save input formats on the overview page. */ -function filter_admin_save() { +function filter_admin_save_default() { $edit = $_POST['edit']; variable_set('filter_default_format', $edit['default']); - - foreach ($edit['name'] as $id => $name) { - $name = trim($name); - - if (strlen($name) == 0) { - drupal_set_message(t('You must enter a name for this input format.')); - 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 (strlen($name) == 0) { - drupal_set_message(t('You must enter a name for this input format.')); + if ($_POST['op']) { + $edit = $_POST['edit']; + filter_admin_filters_save($format->format, $edit); + + 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); + print theme('page', filter_admin_format_form($format)); } - - drupal_set_message(t('Added input format %format.', array('%format' => theme('placeholder', $edit['name'])))); - drupal_goto('admin/filters'); } /** @@ -409,37 +368,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']); + $edit = $_POST['edit']; + filter_admin_filters_save($format->format, $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')); - } - - $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 +392,52 @@ function filter_admin_filters() { } /** + * Render a form for a format + */ +function filter_admin_format_form($format) { + $default = ($format->format == variable_get('filter_default_format', 1)); + + //Name + $form = form_textfield(t('Name'), 'name', $format->name, 60, 127, t('Give the name of this filter format'), NULL, TRUE); + + //Roles.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); + } + $form .= form_group(t('Roles'), $group, t('Choose which roles may use this filter format')); + + // 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}")); + print_r($result); + $format = $result->format; + } + db_query("DELETE FROM {filters} WHERE format = %d", $format); foreach ($toggles as $id => $checked) { if ($checked) { @@ -473,13 +451,24 @@ 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.')); + } + else { + // We store the roles as a string for ease of use. + // We use leading and trailing comma's to allow easy substring matching. + $roles = ','; + foreach ($edit['roles'] as $rid => $value) { + if ($value) { + $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); + } } /**