? 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"; +} + ?>