Index: modules/filter.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/filter.module,v
retrieving revision 1.64
diff -u -F^f -r1.64 filter.module
--- modules/filter.module	1 Jun 2005 03:21:44 -0000	1.64
+++ modules/filter.module	28 Jul 2005 13:45:33 -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 filter 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 = '<h2>'. t('Permissions and settings') . '</h2>' . form($group);
-
-  // Form to add a new format.
-  $group = t("<p>To add a new input format, type its name here. After it has been added, you can configure its options.</p>");
-  $form = form_textfield(t('Name'), 'name', '', 40, 255);
-  $form .= form_submit(t('Add input format'));
-  $group .= form($form);
-  $output .= '<h2>'. t('Add new input format') .'</h2>'. $group;
+  $group .= form_submit(t('Save default format'));
+  $output = form($group);
 
   return $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('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);
+    print theme('page', 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');
 }
 
 /**
@@ -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']);
-  }
-
-  $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 .= '<h2>'. t('Filters') .'</h2>'. 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 filter format. Used on the add filter and edit filter pages.
+ */
+function filter_admin_format_form($format) {
+  $default = ($format->format == variable_get('filter_default_format', 1));
+
+  //Render a textfield for the name.
+  $form = form_textfield(t('Name'), 'name', $format->name, 60, 127, t('Give the name of this filter format'), NULL, TRUE);
+  
+  //Render the checkboxes for the roles.
+  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'));
+  
+  //Render the checkboxes for the 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, name, roles) VALUES (%d, '%s', '%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);
+  }
 }
 
 /**
