Index: domain_geolocalization.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/domain_geolocalization/domain_geolocalization.inc,v
retrieving revision 1.1.2.6
diff -u -r1.1.2.6 domain_geolocalization.inc
--- domain_geolocalization.inc	4 Dec 2009 23:07:49 -0000	1.1.2.6
+++ domain_geolocalization.inc	5 Feb 2010 23:27:57 -0000
@@ -13,6 +13,7 @@
  */
 function _domain_geolocalization_update_user(&$edit, &$account) {
   $edit['domain_geolocalization'] = $account->domain_geolocalization = domain_geolocalization_set_user_location($edit['domain_geolocalization']);
+  unset($_SESSION['domain_user_default_location_set']);
 }
 
 /**
@@ -23,11 +24,10 @@
     $field = 'uid';
     $value = $account->uid;
   }
-  elseif (module_exists('domain_session_default') && session_api_available()) {
+  elseif (module_exists('session_api') && session_api_available()) {
     $field = 'sid';
     $value = session_api_get_sid();
   }
-
   if ($field) {
     $result = db_query("SELECT * FROM {domain_geolocalization_location_instance} LEFT JOIN {domain_geolocalization_location} USING (dglid) WHERE " . $field . " = %d", $value);
     $location = db_fetch_array($result);
@@ -35,7 +35,6 @@
     unset($location['domain_id'], $location['uid'], $location['sid']);
     return $location;
   }
-
   return FALSE;
 }
 
@@ -137,7 +136,7 @@
     '#type' => 'submit',
     '#value' => t('Search'),
     '#ahah' => array(
-      'path' => 'search/domain/js/'. $values['node_id'],
+      'path' => 'search/domain/js',
       'wrapper' => 'domain-search-results',
       'method' => 'replace',
       'effect' => 'fade',
@@ -252,9 +251,11 @@
  * through to the user domain switcher.
  */
 function domain_geolocalization_international_domain_selector_form_submit($form, &$form_state) {
+  if (module_exists('domain_user_default')) {
   module_load_include('inc', 'domain_user_default');
   domain_user_default_domain_switcher_form_submit($form, $form_state);
 }
+}
 
 /**
  * Provides and options list for use in a form of all international (Country other than US).
Index: domain_geolocalization.install
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/domain_geolocalization/domain_geolocalization.install,v
retrieving revision 1.1.2.1
diff -u -r1.1.2.1 domain_geolocalization.install
--- domain_geolocalization.install	3 Jul 2008 20:07:28 -0000	1.1.2.1
+++ domain_geolocalization.install	5 Feb 2010 23:27:57 -0000
@@ -163,3 +163,18 @@
 
   return $schema;
 }
+
+/**
+ * Enable storing user data for sites with Domain User Default enabled.
+ */
+function domain_geolocalization_update_6100() {
+  $ret = array();
+  if (module_exists('domain_user_default')) {
+    variable_set('domain_geolocalization_store_user_locative_information', TRUE);
+  }
+  else {
+    drupal_set_message(t('User locative data is no longer stored. If you would
+    like to turn it on please enable it in domain settings.'));
+  }
+  return $ret;
+}
\ No newline at end of file
Index: domain_geolocalization.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/domain_geolocalization/domain_geolocalization.module,v
retrieving revision 1.1.2.16
diff -u -r1.1.2.16 domain_geolocalization.module
--- domain_geolocalization.module	4 Dec 2009 23:07:49 -0000	1.1.2.16
+++ domain_geolocalization.module	5 Feb 2010 23:27:57 -0000
@@ -231,7 +231,6 @@
     // primary domain gmap key
     $domain['gmap_key'] = variable_get('domain_geolocalization_primary_gmap_key', FALSE);
   }
-
   $geo = db_fetch_object(db_query("SELECT * FROM {domain_geolocalization} LEFT JOIN {domain_geolocalization_location_instance} USING (domain_id) LEFT JOIN {domain_geolocalization_location} USING (dglid) WHERE {domain_geolocalization}.domain_id = %d", $domain['domain_id']));
   if ($geo) {
     foreach ($geo as $key => $value) {
@@ -347,6 +346,12 @@
     '#description' => t('If selected, one and only one domain will be defined as a default for a given state. If left unselected, default states will be presented to the user as a proximity ordered list if no domains are found.'),
     '#default_value' => variable_get('domain_geolocalization_use_state_defaults', FALSE),
   );
+  $form['domain_geolocalization']['domain_geolocalization_store_user_locative_information'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Store user locative information in the database and in $user object'),
+    '#description' => t('If selected, user locative information will be stored in the database and available in the $user object.'),
+    '#default_value' => variable_get('domain_geolocalization_store_user_locative_information', TRUE),
+  );
 
   // Display/theme settings
   if (module_exists('domain_user_default')) {
@@ -379,7 +384,7 @@
     return;
   }
 
-  if (module_exists('domain_user_default') && variable_get('domain_geolocalization_store_user_locative_information', TRUE)) {
+  if (module_exists('domain_user_default') || variable_get('domain_geolocalization_store_user_locative_information', TRUE)) {
     // @todo add the above variable to the settings form
     domain_geolocalization_set_user_location($address);
   }
@@ -435,6 +440,8 @@
   // Domain User Default module when picking a domain off a list.
   $record = (object) $address;
   $set = _domain_geolocalization_set_user_location($record);
+  unset($_SESSION['domain_user_default_location_set']);
+  unset($_SESSION['domain_geolocalization_user_domain']);
   if ($set && ($record->radius || $record->latitude || $record->longitude)) {
     // only attempt writes if domain is geolocalized
     if ($user->uid > 0) {
@@ -445,7 +452,7 @@
       }
       $record->uid = $user->uid;
     }
-    elseif (module_exists('domain_session_default') && domain_user_default_is_switchable()) {
+    elseif ((module_exists('domain_session_default') && domain_user_default_is_switchable()) || module_exists('session_api')) {
       $sid = session_api_get_sid();
       // save locative information to the session
       if ($existing = db_fetch_object(db_query("SELECT * FROM {domain_geolocalization_location_instance} LEFT JOIN {domain_geolocalization_location} USING (dglid) WHERE sid = %d", $sid))) {
@@ -482,21 +489,58 @@
  * for Drupal 6. At that point it will either go away or be modified.
  */
 function domain_geolocalization_user($op, &$edit, &$account, $category = NULL) {
+  global $user;
+  // Only attempt to load location data if storing location is required
+  if (variable_get('domain_geolocalization_store_user_locative_information', TRUE)) {
   switch ($op) {
-    case 'insert':
-    case 'update':
-      if ($edit['domain_geolocalization']) {
-        module_load_include('inc', 'domain_geolocalization');
-        _domain_geolocalization_update_user($edit, $account);
-      }
-      break;
     case 'load':
       // load locative information
+        global $_domain;
       module_load_include('inc', 'domain_geolocalization');
       $account->domain_geolocalization = _domain_geolocalization_load_user_location($account);
+        // Only attempt to update user information for current user
+        if ($account->uid == $user->uid) {
+          // Only localize if not on the default domain
+          if ($_domain['domain_id'] > 0) {
+            $force_update = FALSE;
+            // No geolocation data or user domain is not the curret domain
+            if ($account->domain_geolocalization == FALSE ||(isset($_SESSION['domain_geolocalization_user_domain']) && $_SESSION['domain_geolocalization_user_domain'] != $_domain['domain_id'])) {
+              $account->domain_geolocalization = array(
+                'domain_id' => $_domain['domain_id'],
+                'state_default' => '',
+                'latitude' => '',
+                'longitude' => '',
+                'city' => '',
+                'state' => '',
+                'country' => '',
+                'radius' => '',
+                'zipcode' => '',
+              );
+              _domain_geolocalization_map_domain_to_user($account, $_domain);
+              // Switching to a new domain so erase custom zipcode
+              unset($_SESSION['domain_geolocalization_user_zipcode']);
+              $force_update = TRUE;
+            }
+            // If user is using a zip code different from current
+            if (!empty($_SESSION['domain_geolocalization_user_zipcode'])) {
+              $account->domain_geolocalization['zipcode'] = $_SESSION['domain_geolocalization_user_zipcode'];
+              unset($_SESSION['domain_geolocalization_user_zipcode']);
+              $force_update = TRUE;
+            }
+            if ($force_update) {
+              // Make changes to $user object permanent
+              $edit = array(
+                'domain_geolocalization' => $account->domain_geolocalization,
+              );
+              _domain_geolocalization_update_user($edit, $account);
+              $_SESSION['domain_geolocalization_user_domain'] = $_domain['domain_id'];
+            }
+          }
+        }
       break;
   }
 }
+}
 
 /**
  * Remove records from db.
@@ -549,4 +593,4 @@
       $user->domain_geolocalization[$key] = $domain[$key];
     }
   }
-}
+}
\ No newline at end of file
Index: domain_geolocalization.page.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/domain_geolocalization/domain_geolocalization.page.inc,v
retrieving revision 1.1.2.4
diff -u -r1.1.2.4 domain_geolocalization.page.inc
--- domain_geolocalization.page.inc	12 Jun 2009 00:31:01 -0000	1.1.2.4
+++ domain_geolocalization.page.inc	5 Feb 2010 23:27:57 -0000
@@ -16,7 +16,6 @@
     'node_id' => arg(3),
     'proximity' => arg(4),
   );
-
   module_load_include('inc', 'domain_geolocalization');
   $form = drupal_get_form('domain_geolocalization_search_form', $values);
   if ($values['postalcode']) {
@@ -29,7 +28,8 @@
     else {
       $domains = domain_geolocalization_search_results(arg(2), arg(3), arg(4), $address);
 
-      if (module_exists('domain_user_default') && count($domains)) {
+      if (count($domains)) {
+        if (module_exists('domain_user_default')) {
         // see if the domain should be automatically set
         $auto_set = variable_get('domain_user_default_geolocalization_search_result_behavior', DOMAIN_USER_DEFAULT_GEOLOCALIZATION_AUTO_SET_NEVER);
         switch ($auto_set) {
@@ -45,6 +45,21 @@
             default:
         }
       }
+        if (count($domains) == 1 && !module_exists('domain_user_default')) {
+          global $language;
+          // Update user geolocalization data if so requested
+          if (variable_get('domain_geolocalization_store_user_locative_information', TRUE)) {
+            // Entered zip code does not match domain zip
+            if ($values['postalcode'] != $domains[0]['zipcode']) {
+               $_SESSION['domain_geolocalization_user_zipcode'] = $values['postalcode'];
+            }
+            $_SESSION['domain_geolocalization_user_domain'] = $domains[0]['domain_id'];
+          }
+          $path = $values['node_id'] > 0 ? drupal_get_path_alias('node/'. $values['node_id'], $language->language) : '';
+          $redirect = check_url($domains[0]['scheme'] .'://'. $domains[0]['subdomain'] . '/'. $path);
+          drupal_goto($redirect);
+        }
+      }
       $results =  theme('domain_geolocalization_search_results', $domains, $address, $values['proximity'], $values['node_id'], 'miles');
     }
   }
@@ -71,8 +86,8 @@
   }
   else {
     $domains = domain_geolocalization_search_results($postalcode, $proximity, $node_id, $address);
-
-    if (module_exists('domain_user_default') && count($domains)) {
+    if (count($domains)) {
+      if (module_exists('domain_user_default')) {
       // see if the domain should be automatically set
       $auto_set = variable_get('domain_user_default_geolocalization_search_result_behavior', DOMAIN_USER_DEFAULT_GEOLOCALIZATION_AUTO_SET_NEVER);
       switch ($auto_set) {
@@ -90,7 +105,23 @@
       default:
       }
     }
-
+      // Fallback case when Domain User Default is not enabled and there is only one result
+        if (count($domains) == 1 && !module_exists('domain_user_default')) {
+          global $language;
+          // Update user geolocalization data if so requested
+          if (variable_get('domain_geolocalization_store_user_locative_information', TRUE)) {
+            // Entered zip code does not match domain zip
+            if ($values['postalcode'] != $domains[0]['zipcode']) {
+               $_SESSION['domain_geolocalization_user_zipcode'] = $values['postalcode'];
+            }
+            $_SESSION['domain_geolocalization_user_domain'] = $domains[0]['domain_id'];
+          }
+          $path = $values['node_id'] > 0 ? drupal_get_path_alias('node/'. $values['node_id'], $language->language) : '';
+          $redirect = check_url($domains[0]['scheme'] .'://'. $domains[0]['subdomain'] . '/'. $path);
+          $script = '<script type="text/javascript">location.href="' . $redirect . '"</script>';
+          return drupal_json(array('status' => TRUE, 'data' => $script, 'set_domain' => $domain_id));
+        }
+    }
     $results = theme('domain_geolocalization_search_results_js', $domains, $address, $proximity, $node_id, 'miles');
   }
   return drupal_json(array('status' => TRUE, 'data' => $results));

