function uc_store_process_address_field in Ubercart 7.3
Element process hook for address fields.
1 string reference to 'uc_store_process_address_field'
- uc_store_element_info in uc_store/
uc_store.module - Implements hook_element_info().
File
- uc_store/
uc_store.module, line 358 - Contains global Ubercart functions and store administration functionality.
Code
function uc_store_process_address_field($element, $form_state) {
$element['#tree'] = TRUE;
$prefix = $element['#key_prefix'] ? $element['#key_prefix'] . '_' : '';
$weight = uc_store_address_field_weights();
if (isset($form_state['uc_address'])) {
// Use submitted Ajax values.
$value = $form_state['uc_address'];
}
elseif (is_array($element['#value']) || is_object($element['#value'])) {
// Use provided default value.
$value = (array) $element['#value'];
}
else {
$value = array();
}
$countries = db_query("SELECT country_id, country_name FROM {uc_countries} WHERE version > :version", array(
':version' => 0,
))
->fetchAllKeyed();
foreach ($countries as $country_id => $country_name) {
$countries[$country_id] = t($country_name);
}
natcasesort($countries);
// Force the selected country to a valid one, so the zone dropdown matches.
if (isset($value[$prefix . 'country']) && !isset($countries[$value[$prefix . 'country']])) {
$country_keys = array_keys($countries);
$value[$prefix . 'country'] = $country_keys[0];
}
// Iterating on the UcAddress object excludes non-public properties, which
// is exactly what we want to do.
$address = new UcAddress();
foreach ($address as $base_field => $field_value) {
$field = $prefix . $base_field;
if (!isset($value[$field])) {
continue;
}
switch ($base_field) {
case 'country':
$subelement = array(
'#type' => 'select',
'#options' => $countries,
'#ajax' => array(
'callback' => 'uc_store_update_address_field_zones',
'wrapper' => 'uc-store-address-' . str_replace('_', '-', $prefix) . 'zone-wrapper',
'progress' => array(
'type' => 'throbber',
),
),
'#element_validate' => array(
'uc_store_validate_address_field_country',
),
'#key_prefix' => $element['#key_prefix'],
);
break;
case 'zone':
$subelement = array(
'#prefix' => '<div id="uc-store-address-' . str_replace('_', '-', $prefix) . 'zone-wrapper">',
'#suffix' => '</div>',
);
$zones = db_query("SELECT zone_id, zone_name FROM {uc_zones} WHERE zone_country_id = :country", array(
':country' => $value[$prefix . 'country'],
))
->fetchAllKeyed();
if (!empty($zones)) {
natcasesort($zones);
$subelement += array(
'#type' => 'select',
'#options' => $zones,
'#empty_value' => 0,
);
}
else {
$subelement += array(
'#type' => 'hidden',
'#value' => 0,
'#required' => FALSE,
);
}
break;
case 'postal_code':
$subelement = array(
'#type' => 'textfield',
'#size' => 10,
'#maxlength' => 10,
);
break;
case 'phone':
$subelement = array(
'#type' => 'textfield',
'#size' => 16,
'#maxlength' => 32,
);
break;
default:
$subelement = array(
'#type' => 'textfield',
'#size' => 32,
);
}
// Copy JavaScript states from the parent element.
if (isset($element['#states'])) {
$subelement['#states'] = $element['#states'];
}
// Set common values for all address fields.
$label = uc_get_field_name($base_field);
$element[$field] = $subelement + array(
'#title' => $label ? $label : ' ',
'#default_value' => $value[$field],
'#parents' => array_merge(array_slice($element['#parents'], 0, -1), array(
$field,
)),
'#pre_render' => array(
'uc_store_pre_render_address_field',
),
'#access' => $element['#hidden'] ? FALSE : uc_address_field_enabled($base_field),
'#required' => $element['#required'] ? uc_address_field_required($base_field) : FALSE,
'#weight' => isset($weight[$base_field]) ? $weight[$base_field] : 0,
);
}
return $element;
}