You are here

function uc_addresses_form_uc_cart_checkout_form_alter in Ubercart Addresses 6

Same name and namespace in other branches
  1. 7 uc_addresses.module \uc_addresses_form_uc_cart_checkout_form_alter()

Implementation of hook_form_alter().

Here we're going to override the saved address options on the checkout form.

Parameters

$form The form array.:

$form_state A keyed array containing the current state of: the form.

File

./uc_addresses.module, line 358

Code

function uc_addresses_form_uc_cart_checkout_form_alter(&$form, &$form_state) {
  global $user;

  // This is a good place to clear any addresses we might have
  // leftover from a previous checkout
  if (isset($_SESSION['uc_addresses_saved_addresses'])) {
    $_SESSION['uc_addresses_saved_addresses'] = NULL;
    unset($_SESSION['uc_addresses_saved_addresses']);
  }

  // Create the list of addresses the user can select from
  // Each address is just line a full address, but on one line
  $options = NULL;
  if ($addresses = _uc_addresses_db_get_address($user->uid)) {
    $options = array(
      '0' => t('Select one...'),
    );
    foreach ($addresses as $address) {
      if ($address->is_default) {
        $default_address = $address;
      }
      $address = (array) $address;
      if ($address['is_default']) {
        $default = drupal_to_js($address);
      }
      if ($address['address_name']) {
        $options[drupal_to_js($address)] = $address['address_name'];
      }
      else {

        // Not happy about this--if uc_address_format() ever changes
        // it's output, we're hosed
        $options[drupal_to_js($address)] = preg_replace('/<.*?>/', ', ', uc_address_format($address['first_name'], $address['last_name'], $address['company'], $address['street1'], $address['street2'], $address['city'], $address['zone'], $address['postal_code'], $address['country']));
      }
    }
  }
  $address_book_icon = l(uc_store_get_icon('file:address_book', FALSE, 'address-book-icon'), 'user/' . $user->uid . '/addresses', array(
    'html' => TRUE,
  ));

  // If we have some addresses saved (almost always TRUE), revise
  // the delivery/billing address selection
  if ($options) {

    //drupal_add_js(drupal_get_path('module', 'uc_addresses') . '/uc_addresses.js');

    // Might not have any shippable products so make sure the
    // delivery address exists before mucking with it
    $default_country = uc_store_default_country();
    $js_zone = FALSE;
    if ($form['panes']['delivery'] && (uc_cart_is_shippable() || !variable_get('uc_cart_delivery_not_shippable', TRUE))) {
      if (variable_get('uc_pane_delivery_enabled', TRUE)) {
        $form['panes']['delivery']['#description'] = (variable_get('uc_addresses_default_delivery_address', TRUE) ? t('Edit the address below or select an address from the list.') : t('Enter an address below or select an address from the list.')) . ' ' . t('Go to your <a href="@address-book">address book</a> to manage your saved addresses.', array(
          '@address-book' => url('user/' . $user->uid . '/addresses'),
        ));
        $form['panes']['delivery']['delivery_address_select'] = array(
          '#type' => 'select',
          '#title' => t('Saved addresses'),
          '#options' => $options,
          '#attributes' => array(
            'onchange' => 'apply_address(\'delivery\', this.value);',
          ),
          '#suffix' => $address_book_icon,
          '#weight' => -10,
        );

        // Copy the default address to the delivery address fields if
        // the option is enabled and if the fields are empty
        if (variable_get('uc_addresses_default_delivery_address', TRUE) && _uc_addresses_address_fields_empty($form['panes']['delivery'], 'delivery')) {
          $form['panes']['delivery']['delivery_address_select']['#default_value'] = $default;
          if (uc_address_field_enabled('first_name')) {
            $form['panes']['delivery']['delivery_first_name']['#default_value'] = $default_address->first_name;
          }
          if (uc_address_field_enabled('last_name')) {
            $form['panes']['delivery']['delivery_last_name']['#default_value'] = $default_address->last_name;
          }
          if (uc_address_field_enabled('phone')) {
            $form['panes']['delivery']['delivery_phone']['#default_value'] = $default_address->phone;
          }
          if (uc_address_field_enabled('company')) {
            $form['panes']['delivery']['delivery_company']['#default_value'] = $default_address->company;
          }
          if (uc_address_field_enabled('street1')) {
            $form['panes']['delivery']['delivery_street1']['#default_value'] = $default_address->street1;
          }
          if (uc_address_field_enabled('street2')) {
            $form['panes']['delivery']['delivery_street2']['#default_value'] = $default_address->street2;
          }
          if (uc_address_field_enabled('city')) {
            $form['panes']['delivery']['delivery_city']['#default_value'] = $default_address->city;
          }
          if (uc_address_field_enabled('country')) {
            $form['panes']['delivery']['delivery_country']['#default_value'] = $default_address->country;
          }
          if (uc_address_field_enabled('zone')) {
            if ($default_country == $default_address->country) {
              $form['panes']['delivery']['delivery_zone']['#default_value'] = $default_address->zone;
            }
            else {
              $js_zone = TRUE;
            }
          }
          if (uc_address_field_enabled('postal_code')) {
            $form['panes']['delivery']['delivery_postal_code']['#default_value'] = $default_address->postal_code;
          }
        }
      }
    }
    if (variable_get('uc_pane_billing_enabled', TRUE)) {
      $form['panes']['billing']['#description'] = (variable_get('uc_addresses_default_delivery_address', TRUE) ? t('Edit the address below or select an address from the list.') : t('Enter an address below or select an address from the list.')) . ' ' . t('Go to your <a href="@address-book">address book</a> to manage your saved addresses.', array(
        '@address-book' => url('user/' . $user->uid . '/addresses'),
      ));
      $form['panes']['billing']['billing_address_select'] = array(
        '#type' => 'select',
        '#title' => t('Saved addresses'),
        '#options' => $options,
        '#attributes' => array(
          'onchange' => 'apply_address(\'billing\', this.value);',
        ),
        '#suffix' => $address_book_icon,
        '#weight' => -10,
      );

      // Copy the default address to the billing address fields if the
      // option is enabled and if the fields are empty
      if (variable_get('uc_addresses_default_billing_address', TRUE) && _uc_addresses_address_fields_empty($form['panes']['billing'], 'billing')) {
        $form['panes']['billing']['billing_address_select']['#default_value'] = $default;
        if (uc_address_field_enabled('first_name')) {
          $form['panes']['billing']['billing_first_name']['#default_value'] = $default_address->first_name;
        }
        if (uc_address_field_enabled('last_name')) {
          $form['panes']['billing']['billing_last_name']['#default_value'] = $default_address->last_name;
        }
        if (uc_address_field_enabled('phone')) {
          $form['panes']['billing']['billing_phone']['#default_value'] = $default_address->phone;
        }
        if (uc_address_field_enabled('company')) {
          $form['panes']['billing']['billing_company']['#default_value'] = $default_address->company;
        }
        if (uc_address_field_enabled('street1')) {
          $form['panes']['billing']['billing_street1']['#default_value'] = $default_address->street1;
        }
        if (uc_address_field_enabled('street2')) {
          $form['panes']['billing']['billing_street2']['#default_value'] = $default_address->street2;
        }
        if (uc_address_field_enabled('city')) {
          $form['panes']['billing']['billing_city']['#default_value'] = $default_address->city;
        }
        if (uc_address_field_enabled('country')) {
          $form['panes']['billing']['billing_country']['#default_value'] = $default_address->country;
        }
        if (uc_address_field_enabled('zone')) {
          if ($default_country == $default_address->country) {
            $form['panes']['billing']['billing_zone']['#default_value'] = $default_address->zone;
          }
          else {
            $js_zone = TRUE;
          }
        }
        if (uc_address_field_enabled('postal_code')) {
          $form['panes']['billing']['billing_postal_code']['#default_value'] = $default_address->postal_code;
        }
      }
    }
    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');
    }
  }
  else {
    unset($form['panes']['delivery']['delivery_address_select']);
    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
  //       );
}