Index: uc_addresses.module =================================================================== RCS file: /cvs/drupal/contributions/modules/uc_addresses/uc_addresses.module,v retrieving revision 1.31 diff -u -r1.31 uc_addresses.module --- uc_addresses.module 14 Dec 2009 17:47:23 -0000 1.31 +++ uc_addresses.module 16 Dec 2009 21:54:13 -0000 @@ -277,6 +277,8 @@ function uc_addresses_form_uc_cart_checkout_form_alter(&$form, &$form_state) { global $user; + drupal_add_js(drupal_get_path('module', 'uc_addresses') .'/uc_addresses.js'); + // This is a good place to clear any addresses we might have // leftover from a previous checkout @@ -284,6 +286,8 @@ $_SESSION['uc_addresses_saved_addresses'] = null; unset($_SESSION['uc_addresses_saved_addresses']); } + unset($_SESSION['delivery_address_save']); + unset($_SESSION['billing_address_save']); // Create the list of addresses the user can select from // Each address is just line a full address, but on one line @@ -462,7 +466,6 @@ } } if ($js_zone) { - drupal_add_js(drupal_get_path('module', 'uc_addresses') .'/uc_addresses.js'); drupal_add_js(array('uc_address_default' => array('country' => $default_address->country, 'zone' => $default_address->zone)), 'setting'); } } @@ -476,24 +479,58 @@ unset($form['panes']['billing']['billing_address_select']); } - // Add the "Save address" checkbox - // TODO: (Tony) I can add these, but don't know how to find out if - // the checkbox was checked. For now, all order addresses are - // automatically saved. - -// $form['panes']['billing']['billing_address_save_address'] = array( -// '#title' => t('Save this address'), -// '#type' => 'checkbox', -// '#default_value' => 1, -// '#weight' => 10 -// ); -// $form['panes']['delivery']['delivery_address_save_address'] = array( -// '#title' => t('Save this address'), -// '#type' => 'checkbox', -// '#default_value' => 1, -// '#weight' => 10 -// ); + $temp_save = array( + '#title' => t('Save this address'), + '#type' => 'select', + '#options' => array( + 'no' => t("Don't Save"), + 'new' => t('As new'), + 'edit' => t('Edit'), + ), + '#weight' => 10 + ); + $temp_name = array( + '#title' => t('Save as'), + '#type' => 'textfield', + '#weight' => 11, + '#description' => t('Enter a name for this address (e.g. Home or Work)'), + '#maxlength' => 32, + '#size' => 32, + ); + + $form['panes']['delivery']['delivery_address_save_delivery'] = $temp_save; + $form['panes']['delivery']['delivery_address_name'] = $temp_name; + $form['panes']['billing']['billing_address_save_billing'] = $temp_save; + $form['panes']['billing']['billing_address_name'] = $temp_name; + $form['#validate'][] = 'uc_addresses_cart_checkout_validate'; + +} +function uc_addresses_cart_checkout_validate($form, &$form_state) { + $delivery = $form_state['values']['panes']['delivery']; + $billing = $form_state['values']['panes']['billing']; + if ($delivery['delivery_address_save_delivery'] != 'no') { + if ($delivery['delivery_address_save_delivery'] == 'edit') { + $old_address = json_decode($delivery['delivery_address_select']); + $_SESSION['delivery_address_save']['aid'] = $old_address->aid; + $_SESSION['delivery_address_save']['is_default'] = $old_address->is_default; + } + $_SESSION['delivery_address_save']['name'] = $delivery['delivery_address_name']; + } + else { + unset($_SESSION['delivery_address_save']); + } + if ($billing['billing_address_save_billing'] != 'no') { + if ($billing['billing_address_save_billing'] == 'edit') { + $old_address = json_decode($billing['billing_address_select']); + $_SESSION['billing_address_save']['aid'] = $old_address->aid; + $_SESSION['billing_address_save']['is_default'] = $old_address->is_default; + } + $_SESSION['billing_address_save']['name'] = $delivery['billing_address_name']; + } + else { + unset($_SESSION['billing_address_save']); + } } function _uc_addresses_address_fields_empty($fields, $type) @@ -553,36 +590,58 @@ // Add the billing address first. If the user has no addresses, // this is the one that will become the default address - $address->address_name = ''; - $address->uid = $order->uid; - $address->first_name = $order->billing_first_name; - $address->last_name = $order->billing_last_name; - $address->company = $order->billing_company; - $address->street1 = $order->billing_street1; - $address->street2 = $order->billing_street2; - $address->city = $order->billing_city; - $address->zone = $order->billing_zone; - $address->postal_code = $order->billing_postal_code; - $address->country = $order->billing_country; - $address->phone = $order->billing_phone; - $address->is_default = 0; - _uc_addresses_db_add_address($address, TRUE); + if ($_SESSION['billing_address_save']) { + $sess = $_SESSION['billing_address_save']; + $address->address_name = $sess['name']; + $address->uid = $order->uid; + $address->first_name = $order->billing_first_name; + $address->last_name = $order->billing_last_name; + $address->company = $order->billing_company; + $address->street1 = $order->billing_street1; + $address->street2 = $order->billing_street2; + $address->city = $order->billing_city; + $address->zone = $order->billing_zone; + $address->postal_code = $order->billing_postal_code; + $address->country = $order->billing_country; + $address->phone = $order->billing_phone; + if (isset($sess['aid'])) { + $address->aid = $sess['aid']; + $address->is_default = $sess['is_default']; + _uc_addresses_db_update_address($address); + } + else { + $address->is_default = 0; + _uc_addresses_db_add_address($address, TRUE); + } + unset($_SESSION['billing_address_save']); + } if (uc_order_is_shippable($order)) { - $address->address_name = ''; - $address->uid = $order->uid; - $address->first_name = $order->delivery_first_name; - $address->last_name = $order->delivery_last_name; - $address->company = $order->delivery_company; - $address->street1 = $order->delivery_street1; - $address->street2 = $order->delivery_street2; - $address->city = $order->delivery_city; - $address->zone = $order->delivery_zone; - $address->postal_code = $order->delivery_postal_code; - $address->country = $order->delivery_country; - $address->phone = $order->delivery_phone; - $address->is_default = 0; - _uc_addresses_db_add_address($address, TRUE); + if ($_SESSION['delivery_address_save']) { + $sess = $_SESSION['delivery_address_save']; + $address->address_name = $sess['name']; + $address->uid = $order->uid; + $address->first_name = $order->delivery_first_name; + $address->last_name = $order->delivery_last_name; + $address->company = $order->delivery_company; + $address->street1 = $order->delivery_street1; + $address->street2 = $order->delivery_street2; + $address->city = $order->delivery_city; + $address->zone = $order->delivery_zone; + $address->postal_code = $order->delivery_postal_code; + $address->country = $order->delivery_country; + $address->phone = $order->delivery_phone; + if (isset($sess['aid'])) { + $address->aid = $sess['aid']; + $address->is_default = $sess['is_default']; + _uc_addresses_db_update_address($address); + } + else { + $address->is_default = 0; + _uc_addresses_db_add_address($address, TRUE); + } + unset($_SESSION['delivery_address_save']); + } } } Index: uc_addresses.js =================================================================== RCS file: /cvs/drupal/contributions/modules/uc_addresses/uc_addresses.js,v retrieving revision 1.4 diff -u -r1.4 uc_addresses.js --- uc_addresses.js 14 Dec 2009 17:47:23 -0000 1.4 +++ uc_addresses.js 16 Dec 2009 21:54:12 -0000 @@ -12,4 +12,39 @@ } ); } + $('input[id$=address-name]').parents('tr').hide(); + $('select[id$=delivery-address-save-delivery]').change( + function() { + if ($(this).val() != 'no') { + $('input[id$=delivery-address-name]').parents('tr').show(); + if ($(this).val() == 'edit') { + eval('var address = ' + $('select[id$=delivery-address-select]').val() + ';'); + $('input[id$=delivery-address-name]').val(address.address_name); + } + else { + $('input[id$=delivery-address-name]').val(''); + } + } + else { + $('input[id$=delivery-address-name]').parents('tr').hide(); + } + } + ); + $('select[id$=billing-address-save-billing]').change( + function() { + if ($(this).val() != 'no') { + $('input[id$=billing-address-name]').parents('tr').show(); + if ($(this).val() == 'edit') { + eval('var address = ' + $('select[id$=billing-address-select]').val() + ';'); + $('input[id$=billing-address-name]').val(address.address_name); + } + else { + $('input[id$=billing-address-name]').val(''); + } + } + else { + $('input[id$=billing-address-name]').parents('tr').hide(); + } + } + ); } Index: uc_addresses_address_pane.inc =================================================================== RCS file: /cvs/drupal/contributions/modules/uc_addresses/uc_addresses_address_pane.inc,v retrieving revision 1.17 diff -u -r1.17 uc_addresses_address_pane.inc --- uc_addresses_address_pane.inc 20 Apr 2009 20:54:43 -0000 1.17 +++ uc_addresses_address_pane.inc 16 Dec 2009 21:54:13 -0000 @@ -97,9 +97,6 @@ '#default_value' => $address->is_default, ); } - - drupal_add_js(drupal_get_path('module', 'uc_addresses') .'/uc_addresses.js'); - return array('description' => $description, 'contents' => $form['address'], 'theme' => 'uc_addresses_pane'); case 'edit': @@ -164,8 +161,6 @@ '#disabled' => $address->is_default, ); - drupal_add_js(drupal_get_path('module', 'uc_addresses') .'/uc_addresses.js'); - return array('description' => $description, 'contents' => $form['address'], 'theme' => 'uc_addresses_pane'); case 'process':