Index: modules/node/node.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/node/node.admin.inc,v
retrieving revision 1.20
diff -u -r1.20 node.admin.inc
--- modules/node/node.admin.inc	6 Feb 2008 19:38:27 -0000	1.20
+++ modules/node/node.admin.inc	8 Feb 2008 22:15:05 -0000
@@ -449,7 +449,7 @@
   $form = node_filter_form();
 
   $form['#theme'] = 'node_filter_form';
-  $form['admin']  = node_admin_nodes();
+  $form['admin'] = node_admin_nodes();
 
   return $form;
 }
@@ -458,15 +458,33 @@
  * Form builder: Builds the node administration overview.
  */
 function node_admin_nodes() {
+  // Enable language column if translation module is enabled
+  // or if we have any node with language.
+  $multilanguage = (module_exists('translation') || db_result(db_query("SELECT COUNT(*) FROM {node} WHERE language != ''")));
+
+  // Build the sortable table header.
+  $header = array();
+  $header[] = theme('table_select_header_cell');
+  $header[] = array('data' => t('Title'), 'field' => 'n.title');
+  $header[] = array('data' => t('Type'), 'field' => 'n.type');
+  $header[] = array('data' => t('Author'), 'field' => 'u.name');
+  $header[] = array('data' => t('Status'), 'field' => 'n.status');
+  if ($multilanguage) {
+    $header[] = array('data' => t('Language'), 'field' => 'n.language');
+  }
+  $header[] = array('data' => t('Operations'));
+
+  $form['header'] = array(
+  	'#type' => 'value',
+  	'#value' => $header
+  );
 
+  // Build the query and load the nodes we want to display.
   $filter = node_build_filter_query();
+  $sort = tablesort_sql($header, '', 'n.changed DESC');
+  $result = pager_query(db_rewrite_sql('SELECT n.*, u.name FROM {node} n '. $filter['join'] .' INNER JOIN {users} u ON n.uid = u.uid '. $filter['where'] . $sort), 50, 0, NULL, $filter['args']);
 
-  $result = pager_query(db_rewrite_sql('SELECT n.*, u.name FROM {node} n '. $filter['join'] .' INNER JOIN {users} u ON n.uid = u.uid '. $filter['where'] .' ORDER BY n.changed DESC'), 50, 0, NULL, $filter['args']);
-
-  // Enable language column if locale is enabled or if we have any node with language
-  $count = db_result(db_query("SELECT COUNT(*) FROM {node} n WHERE language != ''"));
-  $multilanguage = (module_exists('locale') || $count);
-
+  // Build the 'Update options' form.
   $form['options'] = array(
     '#type' => 'fieldset',
     '#title' => t('Update options'),
@@ -503,7 +521,10 @@
     }
     $form['operations'][$node->nid] = array('#value' => l(t('edit'), 'node/'. $node->nid .'/edit', array('query' => $destination)));
   }
-  $form['nodes'] = array('#type' => 'checkboxes', '#options' => $nodes);
+  $form['nodes'] = array(
+    '#type' => 'checkboxes',
+    '#options' => $nodes
+  );
   $form['pager'] = array('#value' => theme('pager', NULL, 50, 0));
   $form['#theme'] = 'node_admin_nodes';
   return $form;
@@ -558,19 +579,14 @@
  * @ingroup themeable
  */
 function theme_node_admin_nodes($form) {
-  // If there are rows in this form, then $form['title'] contains a list of
-  // the title form elements.
-  $has_posts = isset($form['title']) && is_array($form['title']);
-  $select_header = $has_posts ? theme('table_select_header_cell') : '';
-  $header = array($select_header, t('Title'), t('Type'), t('Author'), t('Status'));
-  if (isset($form['language'])) {
-    $header[] = t('Language');
-  }
-  $header[] = t('Operations');
   $output = '';
-
   $output .= drupal_render($form['options']);
+
+  $header = $form['header']['#value'];
+
+  $has_posts = isset($form['title']) && is_array($form['title']);
   if ($has_posts) {
+    $rows = array();
     foreach (element_children($form['title']) as $key) {
       $row = array();
       $row[] = drupal_render($form['nodes'][$key]);
@@ -584,13 +600,15 @@
       $row[] = drupal_render($form['operations'][$key]);
       $rows[] = $row;
     }
-
   }
   else {
-    $rows[] = array(array('data' => t('No posts available.'), 'colspan' => '6'));
+    $rows[] = array(
+      array('data' => t('No posts available.'), 'colspan' => count($header)),
+    );
   }
 
   $output .= theme('table', $header, $rows);
+
   if ($form['pager']['#value']) {
     $output .= drupal_render($form['pager']);
   }
