? radioactivity-joins.patch
? radioactivity-module-247212-10.patch
? radioactivity-module-251656-3.patch
? radioactivity-module-251656-7.patch
Index: radioactivity.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/radioactivity/radioactivity.module,v
retrieving revision 1.8
diff -u -p -r1.8 radioactivity.module
--- radioactivity.module	28 Apr 2008 06:55:30 -0000	1.8
+++ radioactivity.module	2 May 2008 10:55:59 -0000
@@ -539,27 +539,82 @@ function radioactivity_views_tables() {
   $tables=array();
 
   foreach (_radioactivity_get_decay_profiles() as $dpid => $decay_profile) {
-    $tables['radioactivity_'.$dpid]=
+    $tables['radioactivity_'.$dpid.'_f']=
+      array('name' => 'radioactivity',
+            'join' => array('type' => 'left',
+                            'left' => array('table' => 'node',
+                                            'field' => 'nid'),
+                            'right' => array('field' => 'nid'),
+                            'extra' => array('decay_profile' => $dpid)),
+            'fields' => array('energy_f' => array('name' => t('Radioactivity: Node energy (@e)',
+                                                              array('@e'=>$decay_profile["label"])),
+                                                  'help' => t('The amount of radioactive energy remaining in node'),
+                                                  'field' => 'energy',
+                                                  'sort_handler' => 'radioactivity_field_sort_handler_energy',
+                                                  'sortable' => TRUE)));
+
+    $tables['radioactivity_'.$dpid.'_c']=
       array('name' => 'radioactivity',
             'join' => array('type' => 'inner',
                             'left' => array('table' => 'node',
                                             'field' => 'nid'),
                             'right' => array('field' => 'nid'),
                             'extra' => array('decay_profile' => $dpid)),
-            'fields' => array('energy' => array('name' => t('Radioactivity: Node energy (@e)',
-                                                            array('@e'=>$decay_profile["label"])),
-                                                'help' => t('The amount of radioactive energy remaining in node'),
-                                                'sortable' => TRUE)),
-            'sorts' => array('energy' => array('name' => t('Radioactivity: Node energy (@e)',
-                                                           array('@e'=>$decay_profile["label"])),
-                                               'help' => t('Sort by node radioactive energy'))),
             'filters' => array('energy' => array('name' => t('Radioactivity: Node energy (@e)',
                                                              array('@e'=>$decay_profile["label"])),
                                                  'help' => t('Filter by node energy'),
-                                                 'operator' => 'views_handler_operator_gtlt',
-                                                 'option' => 'string')));
+                                                 'operator' => 'views_handler_operator_gtlt')));
+
+    $tables['radioactivity_'.$dpid.'_s']=
+      array('name' => 'radioactivity',
+            'join' => array('type' => 'inner',
+                            'left' => array('table' => 'node',
+                                            'field' => 'nid'),
+                            'right' => array('field' => 'nid'),
+                            'extra' => array('decay_profile' => $dpid)),
+            'sorts' => array('energy' => array('name' => t('Radioactivity: Node energy (@e)',
+                                                           array('@e'=>$decay_profile["label"])),
+                                               'help' => t('Sort by node radioactive energy'),
+                                               'field' => 'energy',
+                                               'handler' => 'radioactivity_handler_sort_energy',
+                                               'option' => array('#type' => 'select',
+                                                                 '#options' => array('radioactive' => t('Radioactive only'),
+                                                                                     'all' => t('All'))),
+                                               'extra' => array('decay_profile' => $dpid))));
   }
   return $tables;
 }
 
+function radioactivity_field_sort_handler_energy($fielddata, $fieldinfo) {
+  return 'COALESCE('.$fielddata['tablename'].'.energy, 0)';
+}
+
+function radioactivity_handler_sort_energy($op, &$query, $sortinfo, $sort) {
+  $field = $sortinfo['field'];
+  $order = $sort['sortorder'];
+  $extra = $sortinfo['extra'];
+  $table = $sortinfo['table'];
+
+  switch($sort['options']) {
+    case 'all':
+      $join = 'left';
+      break;
+
+    case 'radioactive':
+    default:
+      $join = 'inner';
+      break;
+  }
+
+  $query->add_table($table, TRUE, 1,
+                    array('type' => $join,
+                          'left' => array('table' => 'node',
+                                          'field' => 'nid'),
+                          'right' => array('field' => 'nid'),
+                          'extra' => $extra));
+
+  $query->add_field($field, $table, NULL);
+  $query->orderby[] = "$table.$field IS NOT NULL $order, $table.$field $order";
+}
+
 ?>
