commerce_avatax.address.inc in Drupal Commerce Connector for AvaTax 7.5
File
includes/commerce_avatax.address.inc
View source
<?php
function commerce_avatax_validate_address($address) {
$avatax = commerce_avatax_object();
if (!$avatax) {
watchdog('commerce_avatax', 'Could not connect to AvaTax for address validation.');
return NULL;
}
$parameters = array();
$address_mapping = commerce_avatax_address_fields_mapping();
foreach ($address as $key => $value) {
if (!isset($address_mapping[$key])) {
continue;
}
$parameters[$address_mapping[$key]] = $value;
}
$result = $avatax
->addressesResolve($parameters);
if (empty($result['success'])) {
return array();
}
if (is_array($result['result']) && isset($result['result']['messages'])) {
$message = reset($result['result']['messages']);
if ($message['severity'] === 'Error') {
return array();
}
}
if (!empty($result['result']['validatedAddresses'])) {
return $result['result']['validatedAddresses'];
}
return array();
}
function commerce_avatax_address_compare($original, array $validated_addresses = array()) {
$result = array(
'result' => '',
'msg' => '',
'suggestions' => array(),
);
if (empty($validated_addresses)) {
$result['result'] = 'invalid';
$result['msg'] = '<p>' . t('We could not validate the address entered. Please check that you have entered the correct address.') . '</p>';
$result['msg'] .= '<p>' . t('Entered address is:') . '</p>' . theme('commerce_avatax_address', array(
'address' => $original,
));
return $result;
}
$address_mapping = commerce_avatax_address_fields_mapping(TRUE);
$valid_address = array();
$address_mismatch = FALSE;
$keys_to_compare = drupal_map_assoc(array(
'thoroughfare',
'premise',
'locality',
'administrative_area',
'country',
));
$suggestions = array();
foreach ($validated_addresses as $validated_address) {
foreach ($validated_address as $key => $value) {
if (!isset($address_mapping[$key])) {
continue;
}
$address_component_key = $address_mapping[$key];
$valid_address[$address_component_key] = $value;
if (!isset($keys_to_compare[$address_component_key])) {
continue;
}
if ($valid_address[$address_component_key] != $original[$address_component_key]) {
$address_mismatch = TRUE;
}
}
$post_code_full_validation = variable_get(COMMERCE_AVATAX_VAR_PREFIX . 'address_postal_code', TRUE);
$autocomplete_post_code = variable_get(COMMERCE_AVATAX_VAR_PREFIX . 'autocomplete_postal_code', TRUE);
$validated_postal_code = $valid_address['postal_code'];
$original_postal_code = $original['postal_code'];
if (!$post_code_full_validation || $autocomplete_post_code) {
$validated_postal_code = substr($validated_postal_code, 0, 5);
$original_postal_code = substr($original_postal_code, 0, 5);
}
if (!$address_mismatch) {
$address_mismatch = $validated_postal_code == $original_postal_code;
}
$suggestions[] = $valid_address;
}
if ($address_mismatch) {
$result['result'] = 'needs_correction';
$form = drupal_get_form('commerce_avatax_address_suggestion_form', $original, $suggestions);
$result['msg'] = drupal_render($form);
$result['suggestions'] = $suggestions;
}
else {
$result['result'] = 'valid';
$result['msg'] = '';
$result['suggestions'] = $suggestions;
}
return $result;
}