Index: invite.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/invite/Attic/invite.module,v
retrieving revision 1.10.2.43
diff -u -r1.10.2.43 invite.module
--- invite.module	8 Jun 2007 16:27:03 -0000	1.10.2.43
+++ invite.module	8 Jun 2007 19:24:02 -0000
@@ -841,40 +841,47 @@
 }
 
 /**
- * Escalates an invited user's role(s), based on the role of the inviter.
+ * Escalates an invited user's role(s), based on the role(s) of the inviter.
  *
  * @param $invitee
  *   A user object.
  */
 function _invite_role_escalate($invitee) {
-  // Try to load the inviting user and add target role(s) based on configured
-  // mapping
+  // Default target role
+  $roles = array('default');
+
+  // Add roles of inviter
   $inviter_uid = db_result(db_query("SELECT uid FROM {invite} WHERE mid = %d", $invitee->uid));
-  if ($inviter = user_load(array('uid' => $inviter_uid))) {
-    $targets = array();
-    foreach ($inviter->roles as $role) {
-      $role_no_space = str_replace(' ', '_', $role);
-      if (($target = variable_get('invite_target_role_'. $role_no_space, DRUPAL_AUTHENTICATED_RID)) != DRUPAL_AUTHENTICATED_RID) {
-        $targets[$target] = $target;
-      }
-    }
+  if ($inviter_uid && $inviter = user_load(array('uid' => $inviter_uid))) {
+    $roles = array_merge($roles, $inviter->roles);
   }
 
-  // Add default target role
-  if (($target_default = variable_get('invite_target_role_default', DRUPAL_AUTHENTICATED_RID)) != DRUPAL_AUTHENTICATED_RID) {
-    $targets[$target_default] = $target_default;
+  // Map to configured target roles
+  $targets = array();
+  foreach ($roles as $role) {
+    $role_no_space = str_replace(' ', '_', $role);
+    $target = variable_get('invite_target_role_'. $role_no_space, DRUPAL_AUTHENTICATED_RID);
+    if ($target != DRUPAL_AUTHENTICATED_RID) {
+      $targets[$target] = $target;
+    }
   }
 
-  // Set new role(s)
+  // Notify other modules of changed user
+  $edit = array('roles' => $targets);
+  user_module_invoke('update', $edit, $invitee);
+
+  // Save new user role(s)
   foreach ($targets as $target) {
-    db_lock_table('users_roles');
     db_query("DELETE FROM {users_roles} WHERE uid = %d AND rid = %d", $invitee->uid, $target);
     db_query("INSERT INTO {users_roles} (uid, rid) VALUES (%d, %d)", $invitee->uid, $target);
-    db_unlock_tables();
   }
   
   // Notify other modules of role escalation
-  $args = array('invitee' => $invitee, 'inviter' => $inviter, 'roles' => $targets);
+  $args = array(
+    'invitee' => $invitee,
+    'inviter' => $inviter,
+    'roles' => $targets
+  );
   module_invoke_all('invite', 'escalate', $args);
 }
 

