Index: modules/filter/filter.admin.inc =================================================================== RCS file: /cvs/drupal/drupal/modules/filter/filter.admin.inc,v retrieving revision 1.9 diff -u -p -r1.9 filter.admin.inc --- modules/filter/filter.admin.inc 14 Feb 2008 18:39:18 -0000 1.9 +++ modules/filter/filter.admin.inc 15 Feb 2008 15:14:06 -0000 @@ -19,6 +19,7 @@ function filter_admin_overview() { $formats = filter_formats(); $error = FALSE; + $form = array('#tree' => TRUE); foreach ($formats as $id => $format) { $roles = array(); foreach (user_roles() as $rid => $name) { @@ -29,13 +30,14 @@ function filter_admin_overview() { } $default = ($id == variable_get('filter_default_format', 1)); $options[$id] = ''; - $form[$format->name]['id'] = array('#value' => $id); - $form[$format->name]['roles'] = array('#value' => $default ? t('All roles may use default format') : ($roles ? implode(', ', $roles) : t('No roles may use this format'))); - $form[$format->name]['configure'] = array('#value' => l(t('configure'), 'admin/settings/filters/'. $id)); - $form[$format->name]['delete'] = array('#value' => $default ? '' : l(t('delete'), 'admin/settings/filters/delete/'. $id)); + $form[$id]['name'] = array('#value' => $format->name); + $form[$id]['roles'] = array('#value' => $default ? t('All roles may use default format') : ($roles ? implode(', ', $roles) : t('No roles may use this format'))); + $form[$id]['configure'] = array('#value' => l(t('configure'), 'admin/settings/filters/'. $id)); + $form[$id]['delete'] = array('#value' => $default ? '' : l(t('delete'), 'admin/settings/filters/delete/'. $id)); + $form[$id]['weight'] = array('#type' => 'weight', '#default_value' => $format->weight); } $form['default'] = array('#type' => 'radios', '#options' => $options, '#default_value' => variable_get('filter_default_format', 1)); - $form['submit'] = array('#type' => 'submit', '#value' => t('Set default format')); + $form['submit'] = array('#type' => 'submit', '#value' => t('Save changes')); return $form; } @@ -45,6 +47,13 @@ function filter_admin_overview_submit($f drupal_set_message(t('Default format updated.')); variable_set('filter_default_format', $form_state['values']['default']); } + foreach ($form_state['values'] as $id => $data) { + if (is_array($data) && isset($data['weight'])) { + // Only update if this is a form element with weight. + db_query("UPDATE {filter_formats} SET weight = %d WHERE format = %d", $data['weight'], $id); + } + } + drupal_set_message(t('The input format ordering has been saved.')); } /** @@ -54,22 +63,29 @@ function filter_admin_overview_submit($f */ function theme_filter_admin_overview($form) { $rows = array(); - foreach ($form as $name => $element) { + foreach ($form as $id => $element) { if (isset($element['roles']) && is_array($element['roles'])) { + $element['weight']['#attributes']['class'] = 'input-format-order-weight'; $rows[] = array( - drupal_render($form['default'][$element['id']['#value']]), - check_plain($name), - drupal_render($element['roles']), - drupal_render($element['configure']), - drupal_render($element['delete']) + 'data' => array( + check_plain($element['name']['#value']), + drupal_render($element['roles']), + drupal_render($form['default'][$id]), + drupal_render($element['weight']), + drupal_render($element['configure']), + drupal_render($element['delete']), + ), + 'class' => 'draggable', ); - unset($form[$name]); + unset($form[$id]); } } - $header = array(t('Default'), t('Name'), t('Roles'), array('data' => t('Operations'), 'colspan' => 2)); - $output = theme('table', $header, $rows); + $header = array(t('Name'), t('Roles'), t('Default'), t('Weight'), array('data' => t('Operations'), 'colspan' => 2)); + $output = theme('table', $header, $rows, array('id' => 'input-format-order')); $output .= drupal_render($form); + drupal_add_tabledrag('input-format-order', 'order', 'sibling', 'input-format-order-weight'); + return $output; } Index: modules/filter/filter.install =================================================================== RCS file: /cvs/drupal/drupal/modules/filter/filter.install,v retrieving revision 1.5 diff -u -p -r1.5 filter.install --- modules/filter/filter.install 18 Dec 2007 12:59:21 -0000 1.5 +++ modules/filter/filter.install 15 Feb 2008 15:14:06 -0000 @@ -78,6 +78,13 @@ function filter_schema() { 'size' => 'tiny', 'description' => t('Flag to indicate whether format is cachable. (1 = cachable, 0 = not cachable)'), ), + 'weight' => array( + 'type' => 'int', + 'not null' => TRUE, + 'default' => 0, + 'size' => 'tiny', + 'description' => t('Weight of input format to use when listing.'), + ) ), 'primary key' => array('format'), 'unique keys' => array('name' => array('name')), @@ -89,3 +96,11 @@ function filter_schema() { return $schema; } +/** + * Add a weight column to the filter formats table. + */ +function filter_update_7000() { + $ret = array(); + db_add_field($ret, 'filter_formats', 'weight', array('type' => 'int', 'not null' => TRUE, 'default' => 0, 'size' => 'tiny')); + return $ret; +} Index: modules/filter/filter.module =================================================================== RCS file: /cvs/drupal/drupal/modules/filter/filter.module,v retrieving revision 1.204 diff -u -p -r1.204 filter.module --- modules/filter/filter.module 21 Jan 2008 15:08:24 -0000 1.204 +++ modules/filter/filter.module 15 Feb 2008 15:14:08 -0000 @@ -308,7 +308,7 @@ function filter_formats($index = NULL) { $args[] = variable_get('filter_default_format', 1); } - $result = db_query($query, $args); + $result = db_query($query .' ORDER by weight', $args); while ($format = db_fetch_object($result)) { $formats[$format->format] = $format; }