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'
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]);
}
}
}
}
}