Index: /Users/andrew/Documents/workspace/pinchin/sites/default/modules/cck_address/cck_address.module
===================================================================
--- /Users/andrew/Documents/workspace/pinchin/sites/default/modules/cck_address/cck_address.module  (revision 147)
+++ /Users/andrew/Documents/workspace/pinchin/sites/default/modules/cck_address/cck_address.module  (working copy)
@@ -20,6 +20,12 @@
  */
 
 /**
+ * Include the Views hack for multiple fields.
+ */
+
+require_once('views_cck_address.inc');
+
+/**
  * Implementation of hook_menu
  *
  * Required for Activeselect's AJAX capabilities.
Index: /Users/andrew/Documents/workspace/pinchin/sites/default/modules/cck_address/views_cck_address.inc
===================================================================
--- /Users/andrew/Documents/workspace/pinchin/sites/default/modules/cck_address/views_cck_address.inc (revision 0)
+++ /Users/andrew/Documents/workspace/pinchin/sites/default/modules/cck_address/views_cck_address.inc (revision 0)
@@ -0,0 +1,225 @@
+<?php
+// $Id: views_cck_address.inc $
+
+define('CCK_ADDRESS_TABLE', 'content_field_address');
+
+/**
+* This include file implements views functionality on behalf of cck_address.module
+*/
+
+function cck_address_views_tables() {
+  $tables['cck_address_states'] = array(
+    'name' => 'cck_address_states',
+    'provider' => 'internal',
+    'join' => array(
+      'type' => 'inner',
+      'left' => array(
+        'table' => CCK_ADDRESS_TABLE,
+        'field' => 'field_address_state',
+      ),
+      'right' => array(
+        'field' => 'state_abbrv',
+      ),
+    ),
+  );
+  $tables[CCK_ADDRESS_TABLE] = array(
+    'name' => CCK_ADDRESS_TABLE,
+    'provider' => 'internal', // won't show up in external list.
+    'join' => array(
+      'type' => 'inner',
+      'left' => array(
+        'table' => 'node',
+        'field' => 'vid'
+      ),
+      'right' => array(
+        'field' => 'vid'
+      ),
+    ),
+    'fields' => array(
+      'field_address_street1' => array(
+        'name' => t('CCK Address: Street 1'),
+        'handler' => 'views_handler_field_value',
+        'sortable' => true,
+        'help' => t('This will display Street 1 of this CCK Address field.'),
+      ),
+      'field_address_street2' => array(
+        'name' => t('CCK Address: Street 2'),
+        'handler' => 'views_handler_field_value',
+        'sortable' => true,
+        'help' => t('Display Street 2 of the CCK Address field.'),
+      ),
+      'field_address_apt' => array(
+        'name' => t('CCK Address: Apt #'),
+        'handler' => 'views_handler_field_value',
+        'sortable' => true,
+        'help' => t('Display Apt # of the CCK Address field.'),
+      ),
+      'field_address_city' => array(
+        'name' => t('CCK Address: City'),
+        'handler' => 'views_handler_field_value',
+        'sortable' => true,
+        'help' => t('Display City of the CCK Address field.'),
+      ),
+      'field_address_state' => array(
+        'name' => t('CCK Address: State Abbreviation'),
+        'handler' => 'views_handler_field_value',
+        'sortable' => true,
+        'help' => t('Display State Abbreviation of the CCK Address field.'),
+      ),
+      'field_address_zip' => array(
+        'name' => t('CCK Address: Zip Code'),
+        'handler' => 'views_handler_field_value',
+        'sortable' => true,
+        'help' => t('Display Zip of the CCK Address field.'),
+      ),
+      'field_address_country' => array(
+        'name' => t('CCK Address: Country'),
+        'handler' => 'views_handler_field_value',
+        'sortable' => true,
+        'help' => t('Display Country of the CCK Address field.'),
+      ),
+      'field_address_other' => array(
+        'name' => t('CCK Address: Other'),
+        'handler' => 'views_handler_field_value',
+        'sortable' => true,
+        'help' => t('Display Other of the CCK Address field.'),
+      ),
+    ),
+    'sorts' => array(
+      'field_address_city' => array(
+        'name' => t('CCK Address: City'),
+        'help' => t('This allows you to sort by city.'),
+      ),
+      'field_address_state' => array(
+        'name' => t('CCK Address: State'),
+        'help' => t('Sort by state.'),
+      ),
+      'field_address_zip' => array(
+        'name' => t('CCK Address: Zip'),
+        'help' => t('This allows you to sort by zip.'),
+      ),
+    ),
+    'filters' => array(
+      'field_address_city' => array(
+        'name' => t('CCK Address: City'),
+        'operator' => 'views_handler_operator_like',
+        'handler' => 'views_handler_filter_like',
+        'help' => t('Filter by CCK Address: City field.'),
+      ),
+      'field_address_state' => array(
+        'name' => t('CCK Address: State'),
+        'operator' => 'views_handler_operator_like',
+        'handler' => 'views_handler_filter_like',
+        'help' => t('Filter by CCK Address: State field.'),
+      ),
+      'field_address_zip' => array(
+        'name' => t('CCK Address: Zip'),
+        'operator' => 'views_handler_operator_like',
+        'handler' => 'views_handler_filter_like',
+        'help' => t('Filter by CCK Address: Zip field.'),
+      ),
+    )
+  );
+
+  return $tables;
+}
+
+/**
+ * implementation of hook_views_arguments()
+ */
+
+function cck_address_views_arguments() {
+  $arguments['field_address_city'] = array(
+    'name' => t('CCK Address: City'),
+    'help' => t('Filter by CCK Address: City field.'),
+    'handler' => 'cck_address_handler_arg_city',
+  );
+  
+  $arguments['field_address_state_abbrv'] = array(
+    'name' => t('CCK Address: State Abbreviation'),
+    'help' => t('Filter by CCK Address: State field abbreviation.'),
+    'handler' => 'cck_address_handler_arg_state_abbrv',
+  );
+  
+  $arguments['field_address_state'] = array(
+    'name' => t('CCK Address: State'),
+    'help' => t('Filter by CCK Address: State field.'),
+    'handler' => 'cck_address_handler_arg_state',
+  );
+  
+  return $arguments;
+}
+
+function cck_address_handler_arg_city($op, &$query, $argtype, $arg = '') {
+  switch($op) {
+    case 'summary':
+      $query->ensure_table(CCK_ADDRESS_TABLE, true);
+      $query->add_field('field_address_city', CCK_ADDRESS_TABLE);
+      $query->add_where(CCK_ADDRESS_TABLE . '.field_address_city IS NOT NULL');
+      $fieldinfo['field'] = CCK_ADDRESS_TABLE . ".field_address_city";
+      return $fieldinfo;
+      break;
+    case 'sort':
+      $query->add_orderby(CCK_ADDRESS_TABLE, 'field_address_city', $argtype);
+      break;
+    case 'filter':
+      $city = $arg;
+      $query->ensure_table(CCK_ADDRESS_TABLE, true);
+      $query->add_where(CCK_ADDRESS_TABLE . ".field_address_city = '%s'", $city);
+      break;
+    case 'link':
+      return l($query->title, "$arg/" . intval($query->qid));
+    case 'title':
+      return check_plain($query);
+  }
+}
+
+function cck_address_handler_arg_state_abbrv($op, &$query, $argtype, $arg = '') {
+  switch($op) {
+    case 'summary':
+      $query->ensure_table(CCK_ADDRESS_TABLE, true);
+      $query->add_field('field_address_state', CCK_ADDRESS_TABLE);
+      $query->add_where(CCK_ADDRESS_TABLE . '.field_address_state IS NOT NULL');
+      $fieldinfo['field'] = CCK_ADDRESS_TABLE . ".field_address_state";
+      return $fieldinfo;
+      break;
+    case 'sort':
+      $query->add_orderby(CCK_ADDRESS_TABLE, 'field_address_state', $argtype);
+      break;
+    case 'filter':
+      $state = $arg;
+      $query->ensure_table(CCK_ADDRESS_TABLE, true);
+      $query->add_where(CCK_ADDRESS_TABLE . ".field_address_state = '%s'", $state);
+      break;
+    case 'link':
+      return l($query->title, "$arg/" . intval($query->qid));
+    case 'title':
+      return check_plain($query);
+  }
+}
+
+function cck_address_handler_arg_state($op, &$query, $argtype, $arg = '') {
+  switch($op) {
+    case 'summary':
+      $query->ensure_table(CCK_ADDRESS_TABLE, true);
+      $query->add_field('field_address_state', CCK_ADDRESS_TABLE);
+      $query->add_where(CCK_ADDRESS_TABLE . '.field_address_state IS NOT NULL');
+      $fieldinfo['field'] = CCK_ADDRESS_TABLE . ".field_address_state";
+      return $fieldinfo;
+      break;
+    case 'sort':
+      $query->add_orderby(CCK_ADDRESS_TABLE, 'field_address_state', $argtype);
+      break;
+    case 'filter':
+      $state = $arg;
+      $query->ensure_table(CCK_ADDRESS_TABLE, true);
+      $query->ensure_table('cck_address_states', true);
+      //$query->add_where(CCK_ADDRESS_TABLE . ".field_address_state = cck_address_states.state_abbrv");
+      $query->add_where("cck_address_states.state_name = '%s'", $state);
+      break;
+    case 'link':
+      return l($query->title, "$arg/" . intval($query->qid));
+    case 'title':
+      return check_plain($query);
+  }
+}
\ No newline at end of file
