You are here

function commerce_addressbook_profile_copy_validate in Commerce Addressbook 7.3

Element validate callback for the profile copy checkbox.

1 string reference to 'commerce_addressbook_profile_copy_validate'
_commerce_addressbook_add_profile_copy_checkbox in ./commerce_addressbook.checkout_pane.inc

File

./commerce_addressbook.checkout_pane.inc, line 378
Based on commerce/modules/customer/commerce_customer.checkout_pane.inc

Code

function commerce_addressbook_profile_copy_validate($element, &$form_state, $form) {
  $triggering_element = end($form_state['triggering_element']['#array_parents']);
  $pane_id = reset($element['#array_parents']);
  $triggered_by_copy = $triggering_element == 'commerce_customer_profile_copy' && $form_state['triggering_element']['#id'] == $element['#id'];
  if ($triggering_element == 'commerce_customer_profile_copy') {
    $form_state['rebuild'] = TRUE;
  }

  // Checkbox: Off - Only invoked for the corresponding trigger element.
  if ($triggered_by_copy && empty($element['#value'])) {
    $form_state['order']->data['profile_copy'][$pane_id]['status'] = FALSE;

    // Make sure we return to the "view" mode if possible.
    $form_state['pane_' . $pane_id] = array();
    unset($form_state['order']->data['profile_copy'][$pane_id]['elements']);
    commerce_order_save($form_state['order']);
  }
  elseif (($triggered_by_copy || isset($form_state['triggering_element']['#button_type'])) && !empty($element['#value'])) {
    $type = substr($pane_id, 17);

    // Removes 'customer_profile_'
    $source_id = 'customer_profile_' . variable_get('commerce_' . $pane_id . '_profile_copy_source', '');
    $info = array(
      'commerce_customer_profile',
      $type,
      $pane_id,
    );
    if (isset($form_state['values'][$source_id]) && !isset($form_state['values'][$source_id]['profile_selection'])) {
      commerce_customer_profile_copy_fields($info, $form_state['input'][$pane_id], $form_state['input'][$source_id], $form_state);
      commerce_customer_profile_copy_fields($info, $form_state['values'][$pane_id], $form_state['values'][$source_id], $form_state);
    }
    else {

      // Use the profile from the source pane, if the source pane is present
      // on the page.
      if (isset($form_state['pane_' . $source_id])) {
        $profile = $form_state['pane_' . $source_id]['profile'];
      }
      else {

        // Retrieve the source profile from the order object if not empty.
        $field_name = variable_get('commerce_' . $source_id . '_field', '');
        if (!empty($form_state['order']->{$field_name})) {
          $order_wrapper = entity_metadata_wrapper('commerce_order', $form_state['order']);
          $profile = $order_wrapper->{$field_name}
            ->value();
        }
      }
      if (!empty($profile)) {
        commerce_customer_profile_copy_fields($info, $form_state['input'][$pane_id], $profile, $form_state);
        commerce_customer_profile_copy_fields($info, $form_state['values'][$pane_id], $profile, $form_state);
      }
    }
    $form_state['order']->data['profile_copy'][$pane_id]['status'] = TRUE;
    commerce_order_save($form_state['order']);

    // Unset any cached addressfield data for this customer profile.
    if (!empty($form_state['addressfield'])) {
      foreach ($form_state['addressfield'] as $key => $value) {
        if (strpos($key, 'commerce_customer_profile|' . $type) === 0) {
          unset($form_state['addressfield'][$key]);
        }
      }
    }
  }
}