'admin/store/settings/uc_addresses',
'title' => t('Addresss Admin Settings'),
'description' => t('Add and update addressses'),
'callback' => 'uc_addresses_admin_settings',
'access' => user_access('administer addresses')
);
}
else {
drupal_add_css(drupal_get_path('module', 'uc_order') .'/uc_order.css');
$items[] = array(
'path' => 'user/'. arg(1) .'/addresses',
'title' => t('My Addresses'),
'description' => t('Manage your addresses'),
'callback' => 'uc_addresses_list_addresses',
'callback arguments' => array(arg(1)),
'access' => user_access('edit and view addresses') || $user->uid == arg(1),
'type' => MENU_CALLBACK,
);
if (arg(2) == 'addresses' && arg(3) == 'new') {
$items[] = array(
'path' => 'user/' . arg(1) . '/addresses/new',
'title' => t('New Address'),
'description' => t('Create a new address.'),
'callback' => 'uc_addresses_new_address',
'callback arguments' => array(arg(1), NULL, 'new'),
'access' => user_access('create addesses') || $user->uid == arg(1),
'type' => MENU_CALLBACK,
);
}
else {
$items[] = array(
'path' => 'user/'. arg(1) .'/addresses/'. arg(3),
'title' => t('My ' . arg(3) . ' Address'),
'description' => t('Manage your '. arg(3) .' address'),
'callback' => 'uc_addresses_view_address',
'callback arguments' => array(arg(1), arg(3), 'view'),
'access' => user_access('edit and view addresses') || $user->uid == arg(1),
'type' => MENU_CALLBACK,
);
}
$items[] = array(
'path' => 'user/'. arg(1) .'/addresses/' . arg(3) . '/review',
'title' => t('Review Address'),
'description' => t('Review an address before final submission.'),
'callback' => 'uc_addresses_address_review',
'callback arguments' => array(arg(1), arg(3)),
'access' => user_access('edit and view addresses') || $user->uid == arg(1),
'type' => MENU_CALLBACK,
);
$items[] = array(
'path' => 'user/'. arg(1) .'/addresses/'. arg(3) .'/edit',
'title' => t('Edit Address'),
'callback' => 'uc_addresses_new_address',
'callback arguments' => array(arg(1), arg(3), 'edit'),
'access' => user_access('edit and view addresses') || $user->uid == arg(1),
'type' => MENU_CALLBACK,
);
$items[] = array(
'path' => 'user/'. arg(1) .'/addresses/'. arg(3) .'/delete',
'title' => t('Delete Address'),
'callback' => 'uc_addresses_delete_address_confirm',
'callback arguments' => array(arg(1), arg(3)),
'access' => user_access('edit and view addresses') || $user->uid == arg(1),
'type' => MENU_CALLBACK,
);
}
return $items;
}
/**
* Implementation of hook_perm().
*/
function uc_addresses_perm(){
return array('administer addresses', 'create addresses', 'edit and view addresses');
}
/**
* Implementation of hook_user().
*/
function uc_addresses_user($op, &$edit, &$account, $category = null){
global $user;
switch ($op){
case 'view':
if (user_access('edit and view addresses') || $user->uid == $account->uid) {
$link = l('here', 'user/'. $account->uid .'/addresses');
$items = array();
$items['addresses'] = array('title' => t('Manage Addresses'),
'value' => 'Click ' . $link . ' to manage your addresses.',
'class' => 'member',
);
return array(t('Addresses') => $items);
}
else {
return NULL;
}
case 'register':
// get the address form
$form = uc_addresses_pane_address('new', $arg1, $arg2);
$form = array($form['contents']); // modify to what we need
$form[0]['#title'] = 'Address'; // rename the fieldset
return $form;
case 'insert':
$address = (object)$edit;
uc_addresses_add_address($address);
return;
case 'delete':
db_query("DELETE FROM {uc_addresses} WHERE uid = %d", $account->uid);
return;
}
}
/**
* Implementation of hook_form_alter().
*
* Here we're going to override the saved address options on the checkout form
*/
function uc_addresses_form_alter($form_id, &$form) {
global $user;
if ($form_id == 'uc_cart_checkout_form') {
$options = array('0' => t('Select one...'));
// grab the addresses saved from previous checkouts
if ($addresses = uc_get_addresses($user->uid, $type)) {
foreach ($addresses as $address) {
$options[drupal_to_js($address)] = $address['street1'];
}
}
// grab the addresses saved at registration or added in the user profile
if ($addresses = uc_addresses_get_address($user->uid, NULL, 0)) {
foreach ($addresses as $address) {
$address = (array)$address;
$options[drupal_to_js($address)] = $address['street1'];
}
}
// inject into form
if ($form['panes']['delivery']['delivery_address_select']) {
$form['panes']['delivery']['delivery_address_select']['#options'] = $options;
$form['panes']['billing']['billing_address_select']['#options'] = $options;
}
else {
$form['panes']['delivery']['delivery_address_select'] = array(
'#type' => 'select',
'#title' => t('Saved addresses'),
'#options' => $options,
'#attributes' => array('onchange' => 'apply_address(\'delivery\', this.value);'),
'#suffix' => uc_store_get_icon('file:address_book', FALSE, 'address-book-icon'),
'#weight' => -10,
);
$form['panes']['billing']['billing_address_select'] = array(
'#type' => 'select',
'#title' => t('Saved addresses'),
'#options' => $options,
'#attributes' => array('onchange' => 'apply_address(\'billing\', this.value);'),
'#suffix' => uc_store_get_icon('file:address_book', FALSE, 'address-book-icon'),
'#weight' => -10,
);
}
}
}
/*******************************************************************************
* Hook Functions (Ubercart)
******************************************************************************/
/**
* Implementation of hook_address_pane().
*/
function uc_addresses_address_pane() {
$panes[] = array(
'id' => 'address',
'callback' => 'uc_addresses_pane_address',
'title' => t('Address'),
'desc' => t("Manage the user's addresses and contact information."),
'class' => 'pos-left',
'weight' => 1,
'show' => array('view', 'new', 'edit'),
);
return $panes;
}
/*******************************************************************************
* Callback Functions, Forms, and Tables
******************************************************************************/
// TODO - Admin Settings - Not sure if this is needed yet
/**
* Display uc_addresses administration settings page.
*/
function uc_addresses_admin_settings() {
$output = 'Admin settings page. Nothing to see here yet...';
return $output;
}
/**
* Implementation of hook_form().
*/
function uc_addresses_admin_settings_form() {
}
/**
* Display page to manage a user's addresses
* Lists all addresses for a user and provide a links to edit them or create a new address
*/
function uc_addresses_list_addresses($uid){
$rows = 0;
$items = array();
$items = uc_addresses_get_address($uid, NULL, $rows);
if (isset($items[0])){ // check for results
$i = 1;
foreach(element_children($items) as $item){
$label = $items[$item]->label;
$panes = _address_pane_list();
foreach ($panes as $pane) {
if (variable_get('uc_addresses_pane_'. $pane['id'] .'_enabled', TRUE)) {
$func = $pane['callback'];
if (function_exists($func)) {
$return = $func('review', $items[$item], NULL);
if (!is_null($return)) {
$data[$pane['title']] = $return;
}
}
}
}
$output .= '
';
$output .= theme('uc_addresses_list_address', $uid, $label, $data);
$output .= '
';
$i++;
}
}
else {
$output .= 'There are no saved addresses.
';
}
$link = l('Add a new address', 'user/'. $uid .'/addresses/new');
$output .= $link;
return $output;
}
/**
* Theme the address list view.
* @param $uid
* The User ID for this address
* @param $label
* The label this address was saved as
* @param $panes
* An associative array for each address pane. The key is the pane's
* title and the value is either the data returned for that pane or an
* array of returned data.
* @return
* A string of HTML for the page contents.
* @ingroup themeable
*/
function theme_uc_addresses_list_address($uid, $label, $panes) {
drupal_add_css(drupal_get_path('module', 'uc_addresses') .'/uc_addresses.css');
$output = '';
foreach ($panes as $title => $data) {
$output .= '| '. $label . ' - '
. l('Edit this address', 'user/'. $uid .'/addresses/' . $label . '/edit')
.' |
';
if (is_array($data)) {
foreach ($data as $row) {
if (is_array($row)) {
if (isset($row['border'])) {
$border = ' class="row-border-'. $row['border'] .'"';
}
else {
$border = '';
}
$output .= '| '. $row['title'] .': | '
. $row['data'] .' |
';
}
else {
$output .= '| '. $row .' |
';
}
}
}
else {
$output .= '| '. $data .' |
';
}
}
$output .= '
';
return $output;
}
/**
* Display a form to add a new address or edit a user's addresses
* @param $uid
* The User ID for this address
* @param $label
* The label this address is saved as. Once saved, label cannot be changed.
* It must be deleted.
* @param $view
* The URL path for which form to display. 'new' or 'edit'
* @return
* An address form
*/
function uc_addresses_new_address($uid, $label, $view){
global $user;
// Check for permissions
// if ((!user_access('create addresses') && $user->uid != arg(1))) {
// drupal_goto('user/'. arg(1));
// }
drupal_add_js(drupal_get_path('module', 'uc_cart') .'/uc_cart.js');
$output = drupal_get_form('uc_addresses_new_address_form', $uid, $label, $view);
return $output;
}
/**
* Form to add a new address or edit a user's addresses
* @return
* An address form
*/
function uc_addresses_new_address_form($uid, $label, $view) {
// Cancel an order when a customer clicks the 'Cancel' button.
if ($_POST['op'] == t('Cancel')) {
drupal_goto('user/'. $uid .'/addresses');
}
if ($_POST['op'] == variable_get('uc_addresses_delete_button', t('Delete Address'))) {
cache_clear_all();
drupal_goto('user/'. $uid .'/addresses/' . $label . '/delete');
}
//TODO *********************************************************************
//TODO Check the referer URI to clear the address details and prevent identity theft.
//TODO I don't know how to do this, please feel free to add
//TODO *********************************************************************
// Get panes to display
$form['panes'] = array('#tree' => TRUE);
$panes = _address_pane_list($view);
foreach ($panes as $pane) {
if (in_array($view, $pane['show']) &&
variable_get('uc_addresses_pane_'. $pane['id'] .'_show_'. $view, TRUE)) {
if ($label != NULL){
$rows = 1;
$address = uc_addresses_get_address($uid, $label, $rows);
$return = $pane['callback']($view, $address, NULL);
}
else {
$return = $pane['callback']($view, NULL, NULL);
}
// Add the pane if any display data is returned from the callback.
if (is_array($return) && (!empty($return['description']) || !empty($return['contents']))) {
// Create the fieldset for the pane.
$form['panes'][$pane['id']] = array(
'#type' => 'fieldset',
'#title' => $pane['title'],
'#description' => !empty($return['description']) ? $return['description'] : NULL,
'#collapsible' => $pane['collapsible'],
'#collapsed' => FALSE,
'#attributes' => array('id' => $pane['id'] .'-pane'),
'#theme' => $return['theme'],
);
// Add the contents of the fieldset if any were returned.
if (!empty($return['contents'])) {
$form['panes'][$pane['id']] = array_merge($form['panes'][$pane['id']], $return['contents']);
}
}
}
}
$form['cancel'] = array('#type' => 'submit', '#submit' => FALSE, '#value' => t('Cancel'));
$form['delete'] = array('#type' => 'submit', '#value' => variable_get('uc_addresses_delete_button', t('Delete Address')));
$form['continue'] = array('#type' => 'submit', '#value' => variable_get('uc_addresses_review_button', t('Review Address')));
$form['#submit'] = array('uc_addresses_new_address_form_submit' => array($uid, $label, $view));
return $form;
}
/**
* Theme the add or edit address form
*/
function theme_uc_addresses_new_address_form($form) {
drupal_add_css(drupal_get_path('module', 'uc_addresses') .'/uc_addresses.css');
$output = '';
foreach (element_children($form['panes']) as $pane_id) {
if (function_exists(($func = _address_pane_data($pane_id, 'callback')))) {
$result = $func('theme', $form['panes'][$pane_id], NULL);
if (!empty($result)) {
$output .= $result;
$form['panes'][$pane_id] = array();
}
else {
$output .= drupal_render($form['panes'][$pane_id]);
}
}
else {
$output .= drupal_render($form['panes'][$pane_id]);
}
}
$output .= '
'. drupal_render($form) .'
';
return $output;
}
/**
* Handle the form submit. If $view is 'edit' run update database function, if 'new' run
* insert database function.
* @return
* Redirect to review form
*/
function uc_addresses_new_address_form_submit($form_id, $form_values, $uid, $label, $view) {
global $user;
$address = new stdClass();
$address->uid = $uid;
$valid = TRUE;
foreach(element_children($form_values['panes']) as $pane_id) {
$func = _address_pane_data($pane_id, 'callback');
$isvalid = $func('process', $address, $form_values['panes'][$pane_id]);
if ($isvalid === FALSE) {
$_SESSION['expanded_panes'][] = $key;
$valid = FALSE;
}
}
if ($view == 'edit'){ // Update database
uc_addresses_update_address($address);
}
elseif ($view == 'new'){ // Insert into datebase
uc_addresses_add_address($address);
}
else {
return 'user/'. $address->uid .'/addresses';
}
if ($valid === FALSE) {
return 'user/'. $address->uid .'/addresses';
}
$_SESSION['do_review'] = TRUE;
return 'user/'. $address->uid .'/addresses/' . $address->label . '/review';
}
/**
* Allow a customer to review their address before finally submitting it.
*/
function uc_addresses_address_review($uid, $label) {
$form = drupal_get_form('uc_addresses_address_review_form', $uid, $label);
$rows = 1;
if ($_SESSION['do_review'] !== TRUE) {
drupal_goto('user/'. $uid .'/addresses/');
}
$_SESSION['do_review'] = FALSE;
unset($_SESSION['do_review']);
$address = uc_addresses_get_address($uid, $label, $rows);
if ($address === FALSE) {
$_SESSION['add_address'] = NULL;
unset($_SESSION['add_address']);
drupal_goto('user/'. $uid .'/addresses/');
}
$help = variable_get('uc_addresses_review_instructions',
t('Please review the details of your address and click !submit if all the information is correct. You may use the Back button to make changes to your address if necessary.',
array('!submit' => variable_get('uc_addresses_submit_button', t('Submit Address')))));
$panes = _address_pane_list();
foreach ($panes as $pane) {
if (variable_get('uc_addresses_pane_'. $pane['id'] .'_enabled', TRUE)) {
$func = $pane['callback'];
if (function_exists($func)) {
$return = $func('review', $address, NULL);
if (!is_null($return)) {
$data[$pane['title']] = $return;
}
}
}
}
$output .= theme('uc_addresses_address_review', $help, $data, $form, $label);
return $output;
}
/**
* Theme the address review page.
*
* @param $help
* A string containing the review address page help message.
* @param $panes
* An associative array for each address pane that has information to add to
* the review page. The key is the pane's title and the value is either the
* data returned for that pane or an array of returned data.
* @param $form
* The HTML version of the form that by default includes the 'Back' and
* 'Submit Address' buttons at the bottom of the review page.
* @return
* A string of HTML for the page contents.
* @ingroup themeable
*/
function theme_uc_addresses_address_review($help, $panes, $form, $label) {
drupal_add_css(drupal_get_path('module', 'uc_addresses') .'/uc_addresses.css');
$output .= ''. $help .'
';
$output .= '';
foreach ($panes as $title => $data) {
$output .= '| '. $label
.' |
';
if (is_array($data)) {
foreach ($data as $row) {
if (is_array($row)) {
if (isset($row['border'])) {
$border = ' class="row-border-'. $row['border'] .'"';
}
else {
$border = '';
}
$output .= '| '. $row['title'] .': | '
. $row['data'] .' |
';
}
else {
$output .= '| '. $row .' |
';
}
}
}
else {
$output .= '| '. $data .' |
';
}
}
$output .= '| '. $form
.' |
';
$output .= '
';
return $output;
}
/**
* Form to review changes to a user's addresses
* @return
* Submit buttons
*/
function uc_addresses_address_review_form($uid, $label) {
if ($_POST['op'] == t('Back')) {
cache_clear_all();
drupal_goto('user/'. $uid .'/addresses/' . $label . '/edit');
}
$form['back'] = array('#type' => 'button', '#value' => t('Back'));
$form['submit'] = array('#type' => 'submit', '#value' => variable_get('uc_addresses_submit_button', t('Submit Address')));
$form['#submit'] = array('uc_addresses_review_form_submit' => array($uid, $label));
return $form;
}
/**
* Handle form submit buttons for address review
* @return
* Redirect to users addresses listing
*/
function uc_addresses_address_review_form_submit($form_id, $form_values, $uid, $label) {
switch ($form_values['op']) {
case variable_get('uc_addresses_submit_button', t('Submit Address')):
$_SESSION['do_complete'] = TRUE;
//TODO - Message does not work.
drupal_set_message(t('!label address has been saved.', array('!label' => $label)));
return 'user/'. $uid .'/addresses';
}
}
/**
* Display the address view screen, constructed via hook_addresses_address_pane().
*/
function uc_addresses_view_address($uid, $label, $view = 'view'){
$rows = 1;
// Get address from database
$address = uc_addresses_get_address($uid, $label, $rows);
// Check for data and permissions
if ($address === FALSE || (!user_access('edit and view addresses') && $address->uid != arg(1))) {
drupal_goto('user/'. arg(1));
}
if ($address === FALSE) {
drupal_set_message(t('Address !label does not exist.', array('!label' => $label)));
drupal_goto('user/'. $uid .'/addresses');
}
// Get panes to display
$panes = _address_pane_list($view);
foreach ($panes as $pane) {
if (in_array($view, $pane['show']) &&
variable_get('uc_addresses_pane_'. $pane['id'] .'_show_'. $view, TRUE)) {
$func = $pane['callback'];
if (function_exists($func) && ($contents = $func($view, $address, NULL)) != NULL) {
$output .= '';
if ($func('show-title', NULL, NULL) !== FALSE) {
$output .= '
'. $pane['title'] .': '
. $func('view-title', $address, NULL) .'
';
}
$output .= $contents .'
';
}
}
}
return $output;
}
/**
* Return a formatted user's address
*/
function uc_addresses_address($items){
$address = uc_address_format(
$items->first_name,
$items->last_name,
$items->company,
$items->street1,
$items->street2,
$items->city,
$items->zone,
$items->postal_code,
$items->country
);
return $address;
}
/**
* Format label string
* Transforms address label into a URL safe form. Strip $bad_char and replace with '-'
*/
function uc_addresses_format_label($label){
// TODO - Is this the best way to create underscores and no bad characters
// TODO - What Characters should be stripped ?
$bad_char = array(" ", "_", "=", "+", "%", "~", "?");
$clean_label = str_replace($bad_char, "-", $label);
return $clean_label;
}
/**
* Totally delete a user's address
*/
function uc_addresses_delete_address_confirm($uid, $label){
$form = drupal_get_form('uc_addresses_delete_address_confirm_form', $uid, $label);
$rows = 1;
$address = uc_addresses_get_address($uid, $label, $rows);
if ($address === FALSE) {
$_SESSION['add_address'] = NULL;
unset($_SESSION['add_address']);
drupal_goto('user/'. $uid .'/addresses/');
}
$help = variable_get('uc_addresses_delete_instructions',
t('Are you are sure you want to Delete this address? Click !delete if all the information is correct. Click the Cancel button to not delete this address.',
array('!delete' => variable_get('uc_addresses_delete_button', t('Delete Address')))));
$panes = _address_pane_list();
foreach ($panes as $pane) {
if (variable_get('uc_addresses_pane_'. $pane['id'] .'_enabled', TRUE)) {
$func = $pane['callback'];
if (function_exists($func)) {
$return = $func('review', $address, NULL);
if (!is_null($return)) {
$data[$pane['title']] = $return;
}
}
}
}
$output = theme('uc_addresses_address_delete_confirm', $help, $data, $form, $label);
return $output;
}
/**
* Theme the address delete page.
*
* @param $help
* A string containing the delete address page help message.
* @param $panes
* An associative array for each address pane that has information to add to
* the delete page. The key is the pane's title and the value is either the
* data returned for that pane or an array of returned data.
* @param $form
* The HTML version of the form that by default includes the 'Back' and
* 'Delete Address' buttons at the bottom of the review page.
* @return
* A string of HTML for the page contents.
* @ingroup themeable
*/
function theme_uc_addresses_address_delete_confirm($help, $panes, $form, $label) {
drupal_add_css(drupal_get_path('module', 'uc_addresses') .'/uc_addresses.css');
$output .= ''. $help .'
';
$output .= '';
foreach ($panes as $title => $data) {
$output .= '| '. $label
.' |
';
if (is_array($data)) {
foreach ($data as $row) {
if (is_array($row)) {
if (isset($row['border'])) {
$border = ' class="row-border-'. $row['border'] .'"';
}
else {
$border = '';
}
$output .= '| '. $row['title'] .': | '
. $row['data'] .' |
';
}
else {
$output .= '| '. $row .' |
';
}
}
}
else {
$output .= '| '. $data .' |
';
}
}
$output .= '| '. $form
.' |
';
$output .= '
';
return $output;
}
/**
* Submit buttons to confirm delete of a user's address
*/
function uc_addresses_delete_address_confirm_form($uid, $label) {
if ($_POST['op'] == t('Cancel')) {
cache_clear_all();
drupal_goto('user/'. $uid .'/addresses/' . $label . '/edit');
}
$form['cancel'] = array('#type' => 'button', '#value' => t('Cancel'));
$form['submit'] = array('#type' => 'submit', '#value' => variable_get('uc_addresses_delete_button', t('Delete Address')));
$form['#submit'] = array('uc_addresses_delete_address_confirm_form_submit' => array($uid, $label));
return $form;
}
/**
* Handle submit buttons to confirm delete of a user's address
* @return
* Redirect to users addresses listing
*/
function uc_addresses_delete_address_confirm_form_submit($form_id, $form_values, $uid, $label) {
switch ($form_values['op']) {
case variable_get('uc_addresses_delete_button', t('Delete Address')):
$_SESSION['do_complete'] = TRUE;
uc_addresses_delete_address($uid, $label);
drupal_set_message(t('!label address has been deleted.', array('!label' => $label)));
return 'user/'. $uid .'/addresses';
}
}
/*******************************************************************************
* Database Functions, add, get, update and delete from uc_addresses table
******************************************************************************/
/**
* Add a new address to the database table
*/
function uc_addresses_add_address($address){
// Check to make sure there is a user logged in
if (is_null($address->uid) || intval($address->uid) == 0) {
return FALSE;
}
db_query("INSERT INTO {uc_addresses} (uid, label, first_name, last_name, "
."phone, company, street1, street2, city, zone, postal_code, country, "
."created, modified) VALUES (%d, '%s', "
."'%s', '%s', '%s', "
."'%s', '%s', '%s', "
."'%s', %d, '%s', %d, "
."%d, %d)", $address->uid, $address->label,
$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),
time(), time());
return TRUE;
}
/**
* Return an array of all label values for a user
*/
function uc_addresses_get_user_labels($uid){
// Check to make sure there is a user logged in
if (is_null($uid) || $uid < 1) {
return FALSE;
}
// Return all label values
$result = db_query("SELECT label FROM {uc_addresses} WHERE uid = %d" , $uid);
// Check to make sure there is data
if (db_num_rows($result) == 0)
return FALSE;
$labels = db_fetch_object($result);
return $labels;
}
/**
* Return an address from the database table
* $rows = 0 will return all rows
*/
function uc_addresses_get_address($uid, $label, $rows){
// Check to make sure there is a user logged in
if (is_null($uid) || $uid < 1) {
return FALSE;
}
// Return a single row
if ($rows > 0 && isset($label)){
$result = db_query("SELECT * FROM {uc_addresses} WHERE uid = %d AND label = '%s'", $uid, $label);
// Check to make sure there is data
if (db_num_rows($result) == 0)
return FALSE;
$address = db_fetch_object($result);
return $address;
}
// Return all rows
if (($rows == 0) && $label === NULL){
$result = db_query("SELECT * FROM {uc_addresses} WHERE uid = %d", $uid);
// Check to make sure there is data
while ($address = db_fetch_object($result)) {
$addresses[] = $address;
}
if (db_num_rows($result) == 0)
return FALSE;
return $addresses;
}
// Return FALSE.
// TODO Could be expanded to return a requested number of rows
// TODO if $label is NULL, but $rows > 0
else{
return FALSE;
}
}
/**
* Update an address in the database table
*/
function uc_addresses_update_address($address){
// Check to make sure there is a user logged in
if (is_null($address->uid) || intval($address->uid) == 0) {
return FALSE;
}
// Check to make sure $address->label is unique
// label is a key column and must be a unique value
$result = db_query("SELECT * FROM {uc_addresses} WHERE uid = %d AND label = '%s'", $address->uid, $address->label);
if (db_num_rows($result) == 0){
return FALSE;
}
db_query("UPDATE {uc_addresses} SET uid = %d, label = '%s', "
."first_name = '%s', last_name = '%s', phone = '%s', "
."company = '%s', street1 = '%s', street2 = '%s', "
."city = '%s', zone = %d, postal_code = '%s', country = %d, "
."modified = %d WHERE uid = %d AND label = '%s'", $address->uid, $address->label,
$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),
time(), $address->uid, $address->label);
return TRUE;
}
/**
* Delete an address from the database table.
*/
function uc_addresses_delete_address($uid, $label) {
// Check to make sure there is a user logged in
if (is_null($uid) || $uid == 0)
return FALSE;
// Check to make sure $address->label exists
$result = db_query("SELECT * FROM {uc_addresses} WHERE uid = %d AND label = '%s'", $uid, $label);
if (db_num_rows($result) == 0)
return FALSE;
db_query("DELETE FROM {uc_addresses} WHERE uid = %d AND label = '%s'", $uid, $label);
return TRUE;
}