Index: content_views.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/cck/content_views.inc,v
retrieving revision 1.2.2.16
diff -u -F^function -r1.2.2.16 content_views.inc
--- content_views.inc	26 Sep 2007 14:15:51 -0000	1.2.2.16
+++ content_views.inc	2 Dec 2007 23:43:50 -0000
@@ -67,8 +67,12 @@ function content_views_field_tables($fie
       'addlfields' => $addlfields,
       'sortable' => isset($main_column['sortable']) ? $main_column['sortable'] : FALSE,
       'query_handler' => 'content_views_field_query_handler',
-      'handler' => array('content_views_field_handler_group' => t('Group multiple values'),
-                         'content_views_field_handler_ungroup' => t('Do not group multiple values')),
+      'handler' => array(
+        'content_views_field_handler_group' => t('Group multiple values'),
+        'content_views_field_handler_ungroup' => t('Do not group multiple values'),
+        'content_views_field_handler_first' => t('Show first value only'),
+        'content_views_field_handler_last' => t('Show last value only'),
+      ),
       'option' => array('#type' => 'select', '#options' => $formatters),
       'content_db_info' => $db_info,
       'content_field' => $field,
@@ -114,13 +118,14 @@ function content_views_field_tables($fie
 }
 
 function content_views_field_query_handler($field, &$fieldinfo, &$query) {
-  if ($field['handler'] == 'content_views_field_handler_group') {
+  if ($field['handler'] == 'content_views_field_handler_group' || $field['handler'] == 'content_views_field_handler_first' || $field['handler'] == 'content_views_field_handler_last') {
     // we manage the addition of fields ourselves
     // if not multiple field, add the columns to the query
     if (!$fieldinfo['content_field']['multiple']) {
       $query->add_field($field['field'], $field['tablename'], $field['queryname']);
-      foreach ($fieldinfo['addlfields'] as $name)
+      foreach ($fieldinfo['addlfields'] as $name) {
         $query->add_field($name, $field['tablename'], "$field[tablename]_$name");
+      }
     }
     // if multiple field, no field gets added (they are retrieved later
     // in content_views_field_handler in order to avoid duplicate results)
@@ -137,7 +142,7 @@ function content_views_field_query_handl
   }
 }
 
-function content_views_field_handler_group($field_info, $field_data, $value, $data) {
+function content_views_field_handler_group($field_info, $field_data, $value, $data, $count = 0, $order = 'ASC') {
   $field = $field_info['content_field'];
   $items = array();
   if ($field['multiple']) {
@@ -150,8 +155,13 @@ function content_views_field_handler_gro
              " FROM {node} node".
              " LEFT JOIN {". $field_info['content_db_info']['table'] ."} node_data_$field[field_name] ON node.vid = node_data_$field[field_name].vid".
              " WHERE node.nid = ". $data->nid .
-             " ORDER BY node_data_$field[field_name].delta";
-    $result = db_query(db_rewrite_sql($query, 'node'));
+             " ORDER BY node_data_$field[field_name].delta $order";
+    if ($count > 0) {
+      $result = db_query_range(db_rewrite_sql($query, 'node'), 0, $count);
+    }
+    else {
+      $result = db_query(db_rewrite_sql($query, 'node'));
+    }
     while ($item = db_fetch_array($result)) {
       $items[] = content_format($field, $item, $field_data['options'], $data);
     }
@@ -172,6 +182,14 @@ function content_views_field_handler_ung
   return content_format($field, $item, $field_data['options'], $data);
 }
 
+function content_views_field_handler_first($field_info, $field_data, $value, $data) {
+  return content_views_field_handler_group($field_info, $field_data, $value, $data, 1, 'ASC');
+}
+
+function content_views_field_handler_last($field_info, $field_data, $value, $data) {
+  return content_views_field_handler_group($field_info, $field_data, $value, $data, 1, 'DESC');
+}
+
 function theme_content_view_multiple_field($items, $field, $data) {
   foreach ($items as $item) {
     $output .= '<div class="field-item">'. $item .'</div>';
