You are here

function commerce_addressbook_saved_addresses_validate in Commerce Addressbook 7

Same name and namespace in other branches
  1. 7.3 commerce_addressbook.checkout_pane.inc \commerce_addressbook_saved_addresses_validate()
  2. 7.2 commerce_addressbook.module \commerce_addressbook_saved_addresses_validate()

Element validate callback: processes input of the address select list.

1 string reference to 'commerce_addressbook_saved_addresses_validate'
commerce_addressbook_field_widget_form in ./commerce_addressbook.module
Implements hook_field_widget_form().

File

./commerce_addressbook.module, line 342
:

Code

function commerce_addressbook_saved_addresses_validate($element, &$form_state, $form) {

  // Only perform the validation update if this address selector was used to
  // trigger it.
  if (in_array('saved_address_profiles', $form_state['triggering_element']['#parents']) && $form_state['triggering_element']['#id'] == $element['#id']) {

    // Extract the field name - @TODO: can this be done better / more generic?
    $field_name = $element['#order_fieldname'];
    $order_wrapper = entity_metadata_wrapper('commerce_order', $form_state['order']);

    // If we detect a change in the element's value, and the customer profile
    // reference isn't already set to the specified value...
    if ($order_wrapper->{$field_name}
      ->raw() != $element['#value']) {

      // Update the order based on the value and rebuild the form.
      if ($element['#value'] == 0) {
        $order_wrapper->{$field_name} = NULL;
      }
      else {
        $order_wrapper->{$field_name} = $element['#value'];
      }
      $order_wrapper
        ->save();
      $form_state['rebuild'] = TRUE;

      // Remove input data pertaining to the customer profile from the form
      // state so the form gets rebuilt with the proper values.
      $parent = $form_state['triggering_element']['#parents'][0];
      unset($form_state['input'][$parent]);

      // Remove addressfield data based on its element_key value.
      $element_key = $form[$parent]['commerce_customer_address'][$form[$parent]['commerce_customer_address']['#language']][0]['element_key']['#value'];
      unset($form_state['addressfield'][$element_key]);
    }
  }
}