? logintoboggan_support_queries.patch
Index: logintoboggan.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/logintoboggan/logintoboggan.module,v
retrieving revision 1.7.2.60
diff -u -p -r1.7.2.60 logintoboggan.module
--- logintoboggan.module	17 Dec 2006 19:11:26 -0000	1.7.2.60
+++ logintoboggan.module	24 Jan 2007 17:34:19 -0000
@@ -275,15 +275,18 @@ function logintoboggan_user_register_sub
 
   //log the user in if they created the account and immediate login is enabled.
   if(variable_get('reg_passwd_set', 0)) {
-    return logintoboggan_process_login($account, $redirect);
+    $user = logintoboggan_process_login($account);
+    if (!empty($redirect['path']) && $user->uid) {
+      $redirect = array('user/'. $user->uid, null, null);
+    }
+    elseif (!empty($redirect['path'])) {
+      //always return a string: consistency++
+      $redirect = array(null, null, null);
+    }
   }
 
   //redirect to the appropriate page.
-  if ($redirect != '') {
-    return $redirect;
-  } else {
-    return;
-  }
+  return $redirect;
 }
 
 /**
@@ -799,8 +802,16 @@ function logintoboggan_validate_email($u
             drupal_goto('');
           }
           else {
-            drupal_goto(logintoboggan_process_login($account, $redirect));
-          }     
+            $user = logintoboggan_process_login($account);
+            if (!isset($redirect) && $user->uid) {
+              $redirect = array('user/'. $user->uid, null, null);
+            }
+            elseif (!isset($redirect)) {
+              //always return an array: consistency++
+              $redirect = array(null, null, null);
+            }
+            drupal_goto($redirect[0], $redirect[1], $redirect[2]);
+          }
           break;
         // Admin validation.
         case 'admin':
@@ -834,9 +845,10 @@ function logintoboggan_validate_email($u
  * Actually log the user on
  *
  * @param object $account
+ * @return object $user;
  */
 
-function logintoboggan_process_login($account, $redirect = ''){
+function logintoboggan_process_login($account){
   global $user;
   $user = $account;
 
@@ -851,11 +863,7 @@ function logintoboggan_process_login($ac
   $edit = array();
   user_module_invoke('login', $edit, $user);
 
-  if ($redirect != '') {
-    return $redirect;
-  }
-
-  return 'user/'. $user->uid;
+  return $user;
 }
 
 function logintoboggan_eml_validate_url($account){
@@ -926,6 +934,9 @@ function _logintoboggan_protocol() {
 function _logintoboggan_process_redirect($redirect, $account) {
   $variables = array('%uid' => $account->uid);
   $redirect = strtr($redirect, $variables);
+
+  list($path, $leftover) = explode('?', $redirect);
+  list($query, $fragment) = explode('#', $leftover);
   
-  return $redirect;
+  return array($path, $query, $fragment);
 }  
