diff -urN addresses.orig//addresses_cck/addresses_cck.inc addresses/addresses_cck/addresses_cck.inc --- addresses.orig//addresses_cck/addresses_cck.inc 2011-09-02 18:08:58.000000000 +0200 +++ addresses/addresses_cck/addresses_cck.inc 2011-10-25 19:43:51.000000000 +0200 @@ -21,10 +21,49 @@ * Show the Address using the Single Line view. * @ingroup themable */ -function theme_addresses_cck_formatter_single_line($element) { +function theme_addresses_cck_formatter_singleline($element) { // Include the important .inc file module_load_include('inc', 'addresses'); // Print the address using the one-line only theme return theme('addresses_address_singleline', $element['#item']); } + +/** + * Show City and Address Name in one line. + * @ingroup themable + */ +function theme_addresses_cck_formatter_city_aname($element) { + return $element['#item']['city'] . ': ' . $element['#item']['aname']; +} + +/** + * Show a single field of the address. + * @ingroup themable + */ +function theme_addresses_cck_formatter_field($element) { + module_load_include('inc', 'addresses'); + + switch ($element['#formatter']) { + case 'province_code': + return drupal_strtoupper($element['#item']['province']); + case 'province_name': + $provinces = _addresses_province_get($element['#item']['country']); + return $provinces[$element['#item']['province']]; + case 'country_code2': + return drupal_strtoupper($element['#item']['country']); + case 'country_code3': + $country_code3 = _addresses_country_get_code3(); + return drupal_strtoupper($country_code3[$element['#item']['country']]); + case 'country_name': + $countries = _addresses_country_get(); + return $countries[$element['#item']['country']]; + default: + // NOTE: This only works for plain... I'm not sure how to do the hcard/vcard. + if (strstr($element['#formatter'], '_plain')) { + return $element['#item'][substr($element['#formatter'], 0, -6)]; + } else { + return false; + } + } +} diff -urN addresses.orig//addresses_cck/addresses_cck.module addresses/addresses_cck/addresses_cck.module --- addresses.orig//addresses_cck/addresses_cck.module 2011-09-02 18:08:58.000000000 +0200 +++ addresses/addresses_cck/addresses_cck.module 2011-10-25 19:38:50.000000000 +0200 @@ -47,7 +47,7 @@ } /** - * Implementation of hook_formatter_info(). + * Implementation of hook_field_formatter_info(). * * Its a CCK hook to declare information about a formatter. * @@ -64,27 +64,22 @@ 'multiple values' => CONTENT_HANDLE_CORE, 'field types' => array('addresses_cck'), ); - $formatters = array( - 'default' => array( - 'label' => t('Default'), - 'arguments' => array('element'), - 'multiple values' => CONTENT_HANDLE_CORE, - 'field types' => array('addresses_cck'), - ), - 'single_line' => array( - 'label' => t('Single Line'), - 'arguments' => array('element'), - 'multiple values' => CONTENT_HANDLE_CORE, - 'field types' => array('addresses_cck'), - ), - ); + $formatters = array(); + $formatters['default'] = array( + 'label' => t('Default'), + ) + $default; + $formatters['singleline'] = array( + 'label' => t('Single Line') + ) + $default; + $formatters['city_aname'] = array( + 'label' => t('City and Address name') + ) + $default; $afields = module_invoke_all('addressesfieldapi', 'fields'); foreach ($afields as $ftype => $field) { if (!empty($field['theme'])) { foreach ($field['theme'] as $theme => $description) { - $formatters['addresses_field_'. $theme] = $default; - $formatters['addresses_field_'. $theme]['label'] = $description; + $formatters["{$ftype}_$theme"] = array('label' => $description) + $default; } } } @@ -167,20 +162,35 @@ $cck_default = content_views_field_views_data($field); $data[$table_alias]['table'] = $cck_default[$table_alias]['table']; unset($cck_default[$table_alias]['table']); + $litmus = true; $cck_default = array_shift($cck_default[$table_alias]); + // NOTE: It would be better to determine this in the loop based on the table field properties rather than forcing them to always be strings. + $cck_default['filter']['handler'] = 'views_handler_filter_string'; + $ftypes = module_invoke_all('addressesfieldapi', 'fields'); foreach ($ftypes as $ftype => $field_data) { $field_cck = $cck_default; if (isset($field_data['title'])) { $field_cck['title'] .= ' '. $field_data['title']; } + + // Adding in the field to the filter array $field_cck['filter']['field'] = $field['field_name'] .'_'. $ftype; -// $field_cck['filter']['title'] .= ' '. $field_data['title']; + + // Tweaked to include the short title to distinguish multiple addresses in the same node when picking filters. $field_cck['filter']['title'] = $cck_default['title short'] . ': ' . $field_cck['filter']['title'] . ' '. $field_data['title']; // unset($field_cck['field']['additional fields']); + + // NOTE: This is crude, but accomplishes what we want. + if ($litmus) { + $litmus = false; + } else { + unset($field_cck['field']); + } + $data[$table_alias][$field['field_name'] .'_'. $ftype] = $field_cck; } @@ -223,18 +233,36 @@ * Implementation of hook_theme(). */ function addresses_cck_theme() { - return array( - // Shows address in the default view: Multilines - 'addresses_cck_formatter_default' => array( - 'arguments' => array('element'), - 'file' => 'addresses_cck.inc', - ), - // Shows address in only one line - 'addresses_cck_formatter_single_line' => array( - 'arguments' => array('element'), - 'file' => 'addresses_cck.inc', - ), + // Add the CCS + drupal_add_css(drupal_get_path('module', 'addresses') .'/addresses.css'); + + $default = array( + 'arguments' => array('element'), + 'file' => 'addresses_cck.inc', ); + + $theme = array(); + + // Shows address in the default view: Multilines + $theme['addresses_cck_formatter_default'] = $default; + + // Shows address in only one line + $theme['addresses_cck_formatter_singleline'] = $default; + + // Shows city and aname in one line + $theme['addresses_cck_formatter_city_aname'] = $default; + + // Shows a single field + $afields = module_invoke_all('addressesfieldapi', 'fields'); + foreach ($afields as $ftype => $field) { + if (!empty($field['theme'])) { + foreach (array_keys($field['theme']) as $theme_name) { + $theme["addresses_cck_formatter_{$ftype}_$theme_name"] = array('function' => 'theme_addresses_cck_formatter_field') + $default; + } + } + } + + return $theme; } /** diff -urN addresses.orig//addresses.inc addresses/addresses.inc --- addresses.orig//addresses.inc 2011-09-02 18:08:58.000000000 +0200 +++ addresses/addresses.inc 2011-10-25 19:24:20.000000000 +0200 @@ -740,13 +740,13 @@ * A formatted aname field. */ function theme_addresses_aname($afields, $format = 'plain') { - if (!empty($afields['aname'])) { + if (!empty($afields['aname'])) { switch ($format) { case 'plain': return check_plain($afields['aname']); case 'hcard': - return ''. theme('placeholder', $afields['aname']) .''; + return '