You are here

function _uc_addresses_db_add_address in Ubercart Addresses 5

Same name and namespace in other branches
  1. 5.2 uc_addresses.module \_uc_addresses_db_add_address()
  2. 6 uc_addresses.module \_uc_addresses_db_add_address()

Add a new address to the database table. If the address is already in the database (for this user), it is not added.

Parameters

$address The address to add (as an object).:

The id of the new address or FALSE if there was an error.:

3 calls to _uc_addresses_db_add_address()
uc_addresses_get_address_form_submit in ./uc_addresses.module
Handle the form submit. If $view is 'edit' run update database function, if 'new' or 'add', run insert database function.
uc_addresses_order in ./uc_addresses.module
Use hook_order to add an address or two to the user's address list. For the moment, we save all addresses. I'd like to add an option to let the user select which addresses get saved.
uc_addresses_user in ./uc_addresses.module
Implementation of hook_user().

File

./uc_addresses.module, line 1175

Code

function _uc_addresses_db_add_address($address, $silent = FALSE) {
  global $user;

  // If this is an anonymous user, save the address for later
  if ($address->uid == 0 && isset($address->first_name)) {
    $saved_addresses = NULL;
    if (isset($_SESSION['uc_addresses_saved_addresses'])) {
      $saved_addresses = $_SESSION['uc_addresses_saved_addresses'];
    }
    if (!is_array($saved_addresses)) {
      $saved_addresses = array();
    }
    $saved_addresses[] = drupal_clone($address);
    $_SESSION['uc_addresses_saved_addresses'] = $saved_addresses;
    return;
  }

  // If we have a logged in user but no address information, then some
  // module created a user without going through the normal
  // registration procedure. Let's see if we have any address
  // information saved for this user
  if ($address->uid != 0 && !isset($address->first_name)) {
    if (isset($_SESSION['uc_addresses_saved_addresses'])) {
      $saved_addresses = $_SESSION['uc_addresses_saved_addresses'];
      if (is_array($saved_addresses)) {
        foreach ($saved_addresses as $addr) {
          $addr->uid = $address->uid;
          $status = _uc_addresses_db_add_address($addr, true);
          if ($status === FALSE) {
            return FALSE;
          }
        }
      }
      $_SESSION['uc_addresses_saved_addresses'] = null;
      unset($_SESSION['uc_addresses_saved_addresses']);
    }

    // Let this user get created without an address
    return TRUE;
  }

  // Final special case: no logged in user and no address information!
  if ($address->uid == 0) {
    return TRUE;
  }

  // From this point on, we have both a user and an address to add
  // We need to work with systems where this module is added when
  // users are already present. Find out how many addresses this user has
  $result = db_query("SELECT COUNT(*) FROM {uc_addresses} WHERE uid = %d", $address->uid);
  $num_addresses = 0;
  if (db_num_rows($result) == 1) {
    $a = db_fetch_array($result);
    $num_addresses = $a['COUNT(*)'];
  }

  // If this is the first address the user has ever added, make it the
  // default address
  if ($num_addresses < 1) {
    $address->is_default = 1;
  }
  if ($num_addresses > 0) {

    // Check for problems
    $result = _uc_addresses_db_check_address($address, 'add', $silent);
    if (!$result) {
      return FALSE;
    }
  }
  else {
    _uc_addresses_db_normalize_address($address);
  }

  // Add the address
  $aid = db_next_id('{uc_addresses}_aid');
  db_query("INSERT INTO {uc_addresses} (aid, uid, first_name, last_name, " . "phone, company, street1, street2, city, zone, postal_code, country, " . "address_name, " . "created, modified) VALUES (%d, %d, " . "'%s', '%s', '%s', " . "'%s', '%s', '%s', " . "'%s', %d, '%s', %d, " . "'%s', " . "%d, %d)", $aid, $address->uid, $address->first_name, $address->last_name, $address->phone, $address->company, $address->street1, $address->street2, $address->city, $address->zone, $address->postal_code, is_NULL($address->country) || $address->country == 0 ? variable_get('uc_store_country', 840) : $address->country, $address->address_name, time(), time());

  // Update the default address, if necessary
  if ($address->is_default) {
    if ($num_addresses < 1) {
      db_query("INSERT INTO {uc_addresses_defaults} (aid, uid) VALUES (%d, %d)", $aid, $address->uid);
    }
    else {
      db_query("UPDATE {uc_addresses_defaults} SET aid = %d WHERE uid = %d", $aid, $address->uid);
    }
  }
  return $aid;
}