diff --git a/addressfield.info b/addressfield.info index 445603f..af5d068 100644 --- a/addressfield.info +++ b/addressfield.info @@ -6,5 +6,6 @@ package = Fields dependencies[] = ctools files[] = addressfield.migrate.inc +files[] = views/addressfield_views_handler_field_administrative_area.inc files[] = views/addressfield_views_handler_field_country.inc files[] = views/addressfield_views_handler_filter_country.inc diff --git a/views/addressfield.views.inc b/views/addressfield.views.inc index 9be1637..f059da3 100644 --- a/views/addressfield.views.inc +++ b/views/addressfield.views.inc @@ -26,7 +26,7 @@ function addressfield_field_views_data($field) { // Only expose these components as Views field handlers. $implemented = array( 'country' => 'addressfield_views_handler_field_country', - 'administrative_area' => 'views_handler_field', + 'administrative_area' => 'addressfield_views_handler_field_administrative_area', 'sub_administrative_area' => 'views_handler_field', 'dependent_locality' => 'views_handler_field', 'locality' => 'views_handler_field', diff --git a/views/addressfield_views_handler_field_administrative_area.inc b/views/addressfield_views_handler_field_administrative_area.inc new file mode 100644 index 0000000..5e4fbc5 --- /dev/null +++ b/views/addressfield_views_handler_field_administrative_area.inc @@ -0,0 +1,48 @@ +country_alias = $this->query->add_field($this->table_alias, 'field_address_country'); + } + + function option_definition() { + $options = parent::option_definition(); + $options['display_name'] = array('default' => TRUE); + return $options; + } + + function options_form(&$form, &$form_state) { + parent::options_form($form, $form_state); + + $form['display_name'] = array( + '#type' => 'checkbox', + '#title' => t('Display the name of administrative area instead of the code.'), + '#default_value' => $this->options['display_name'], + ); + } + + function get_value($values, $field = NULL) { + $value = parent::get_value($values, $field); + + // If we have a value for the field, look for the administrative area name in the + // Address Field options list array if specified. + if (!empty($value) && !empty($this->options['display_name'])) { + module_load_include('inc', 'addressfield', 'addressfield.administrative_areas'); + $country = $values->{$this->country_alias}; + $areas = addressfield_get_administrative_areas($country); + + if (!empty($areas[$value])) { + $value = $areas[$value]; + } + } + + return $value; + } +}