You are here

function uc_addresses_uc_addresses_select_addresses in Ubercart Addresses 7

Same name and namespace in other branches
  1. 6.2 uc_addresses.uc_addresses_fields.inc \uc_addresses_uc_addresses_select_addresses()

Implements hook_uc_addresses_select_addresses().

@todo Add setting to say if addresses may come from previous orders or not.

Parameters

int $uid: The user ID to select addresses for.

string $context: The context in which the addresses are used:

  • checkout_form
  • order_form

string $type: The type of address to select addresses for (shipping or billing).

Return value

array An array of UcAddressesAddress objects. Or an array of address arrays.

File

./uc_addresses.uc_addresses_fields.inc, line 334
In this file fields and field handlers for Ubercart Addresses are registered.

Code

function uc_addresses_uc_addresses_select_addresses($uid, $context, $type) {
  $addresses =& drupal_static(__FUNCTION__, array());
  if (!isset($addresses[$type])) {
    $addresses[$type] = array();
  }
  if (count($addresses[$type]) > 0) {
    return $addresses[$type];
  }

  // Address book selecting.
  $uc_addresses = UcAddressesAddressBook::get($uid)
    ->getAddresses();
  if (count($uc_addresses) > 0) {
    foreach ($uc_addresses as $address) {
      if ($address
        ->isNew()) {

        // Skip unsaved addresses.
        continue;
      }
      if (!UcAddressesPermissions::canViewAddress(user_load($address
        ->getUserId()), $address)) {

        // Skip addresses that the currently logged in user may not view.
        continue;
      }
      $addresses[$type][] = $address;
    }
  }

  // If there no addresses in the address book, try to select addresses from
  // previous orders.
  if (count($addresses[$type]) < 1) {
    $addresses[$type] = uc_addresses_get_addresses($uid, $type);
    if (is_array($addresses[$type]) && count($addresses[$type]) > 0) {
      foreach ($addresses[$type] as $index => $address) {

        // Set source module manually this time.
        $addresses[$type][$index]['module'] = 'uc_order';
      }
    }
    else {
      $addresses[$type] = array();
    }
  }
  return $addresses[$type];
}