Index: cck_address.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/cck_address/cck_address.module,v
retrieving revision 1.16
diff -u -r1.16 cck_address.module
--- cck_address.module	14 Dec 2007 20:12:13 -0000	1.16
+++ cck_address.module	23 Jun 2008 00:24:48 -0000
@@ -666,19 +666,84 @@
       return array(
       'view' => CONTENT_CALLBACK_CUSTOM,
       );
+ 
+    case 'arguments':
+      return array(
+        //Country
+        'address: '. $field['field_name'] .'_country' => array(
+          'name' => t('Address Country') .': '. t($field['widget']['label']) .' ('. $field['field_name'] .')',
+          'handler' => 'cck_address_views_argument_handler',
+        ),
+        //State
+        'address: '. $field['field_name'] .'_state' => array(
+          'name' => t('Address State') .': '. t($field['widget']['label']) .' ('. $field['field_name'] .')',
+          'handler' => 'cck_address_views_argument_handler',
+        ),
+      );
 
-    //case 'tables':
-    //  $tables = content_views_field_tables($field);
-      // whatever additions / modifications needed on the default definitions
-    //  return $tables;
-
-   // case 'arguments':
-    //  $arguments = content_views_field_arguments($field);
-      // whatever additions / modifications needed on the default definitions
-      //return $arguments;*/
   }
 } //function cck_address_field_settings()
 
+
+
+function cck_address_views_argument_handler($op, &$query, $argtype, $arg = '') {
+  
+  if ($op == 'filter') {
+    $field_name = substr($argtype['type'], 9);
+  }
+  else {
+    $field_name = substr($argtype, 9);
+  }
+  
+  $tmp = explode("_", $field_name);
+  $cck_field_name = $tmp[0]."_".$tmp[1];
+  
+  $field = content_fields($cck_field_name);
+  $db_info = content_database_info($field);
+  $main_column = reset($db_info['columns']);
+
+  // The table name used here is the Views alias for the table, not the actual
+  // table name.
+  $table = 'node_data_'. $field['field_name'];
+  
+  switch ($op) {
+    case 'summary':
+      $query->ensure_table($table);
+      $query->add_field($main_column['column'], $table);
+      return array('field' => $table .'.'. $main_column['column']);
+      break;
+
+    case 'sort':
+      break;
+
+    case 'filter':
+      $query->ensure_table($table);
+      $column_placeholder = "'%s'";
+      
+      $query->add_where($table .'.'. $field_name.' = '. $column_placeholder, $arg);
+      break;
+
+    case 'link':
+      $item = array();
+      foreach ($db_info['columns'] as $column => $attributes) {
+        $view_column_name = $attributes['column'];
+        $item[$column] = $query->$view_column_name;
+      }
+
+      return l(content_format($field, $item, 'plain'), $arg .'/'. $query->$main_column['column'], array(), NULL, NULL, FALSE, TRUE);
+
+    case 'title':
+      $item = array(key($db_info['columns']) => $query);
+
+      return content_format($field, $item, 'plain');
+  }
+
+}
+
+
+
+
+
 /**
  * Implementation of hook_field().
  *

