--- apply_for_role/apply_for_role.module	Sat Oct 18 17:31:10 2008
+++ apply_for_role/apply_for_role.module	Thu Nov 13 18:54:24 2008
@@ -489,14 +489,27 @@
  */
 function apply_for_role_approve_apply($user, $rid) {
   $uid = $user->uid;
-  if ($apply = db_fetch_object(db_query("SELECT * FROM {users_roles_apply} WHERE uid = %d AND rid = %d AND approved <> %d", $uid, $rid, APPLY_FOR_ROLE_APPROVED))) {
-    apply_for_role_add_role($uid, $rid);
+  if ($apply = db_fetch_object(db_query("SELECT * FROM {users_roles_apply} WHERE uid = %d AND rid = %d AND approved <> %d", $uid, $rid, APPLY_FOR_ROLE_APPROVED))) {
+    $roles = $user->roles;
+    
+    $result = db_query('SELECT r.rid, r.name FROM {role} r WHERE r.rid = %d', $rid);
+    while ($role = db_fetch_object($result)) {
+      $roles[$role->rid] = $role->name;
+    }
+
+    user_module_invoke('update', $roles, $user, 'account');
+    
+    apply_for_role_add_role($uid, $rid);
     $apply->approve_date = time();
     $apply->approved = APPLY_FOR_ROLE_APPROVED;
     db_query("UPDATE {users_roles_apply} SET approved = %d, approve_date = %d WHERE uid = %d AND rid = %d", $apply->approved, $apply->approve_date, $uid, $rid);
 
-    module_invoke_all('apply_for_role', 'approve', $apply);
-
+    module_invoke_all('apply_for_role', 'approve', $apply);
+    
+    // Refresh user object
+    $user = user_load(array('uid' => $user->uid));
+    user_module_invoke('after_update', $roles, $user, 'account');
+    
     return TRUE;
   }
   return FALSE;
@@ -512,6 +525,15 @@
 function apply_for_role_deny_apply($user, $rid) {
   $uid = $user->uid;
   if ($apply = db_fetch_object(db_query("SELECT * FROM {users_roles_apply} WHERE uid = %d AND rid = %d AND approved <> %d", $uid, $rid, APPLY_FOR_ROLE_DENIED))) {
+    $roles = $user->roles;
+    
+    $result = db_query('SELECT r.rid, r.name FROM {role} r WHERE r.rid = %d', $rid);
+    while ($role = db_fetch_object($result)) {
+      $roles[$role->rid] = $role->name;
+    }
+
+    user_module_invoke('update', $roles, $user, 'account');
+    
     apply_for_role_delete_role($uid, $rid);
     $apply->approve_date = time();
     $apply->approved = APPLY_FOR_ROLE_DENIED;
@@ -519,6 +541,10 @@
 
     module_invoke_all('apply_for_role', 'deny', $apply);
 
+    // Refresh user object
+    $user = user_load(array('uid' => $user->uid));
+    user_module_invoke('after_update', $roles, $user, 'account');
+    
     return TRUE;
   }
   return FALSE;
@@ -535,12 +561,25 @@
 function apply_for_role_remove_apply($user, $rid) {
   $uid = $user->uid;
   if ($apply = db_fetch_object(db_query("SELECT * FROM {users_roles_apply} WHERE uid = %d AND rid = %d", $uid, $rid))) {
+    $roles = $user->roles;
+    
+    $result = db_query('SELECT r.rid, r.name FROM {role} r WHERE r.rid = %d', $rid);
+    while ($role = db_fetch_object($result)) {
+      $roles[$role->rid] = $role->name;
+    }
+
+    user_module_invoke('update', $roles, $user, 'account');
+    
     apply_for_role_delete_role($uid, $rid);
     db_query("DELETE FROM {users_roles_apply} WHERE uid = %d AND rid = %d", $uid, $rid);
 
     $apply->approval = -1;
     module_invoke_all('apply_for_role', 'remove', $apply);
 
+    // Refresh user object
+    $user = user_load(array('uid' => $user->uid));
+    user_module_invoke('after_update', $roles, $user, 'account');
+    
     return TRUE;
   }
   return FALSE;
