? hook_og_user_roles.patch Index: og_user_roles.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/og_user_roles/og_user_roles.module,v retrieving revision 1.36 diff -u -p -r1.36 og_user_roles.module --- og_user_roles.module 8 Jun 2009 12:57:47 -0000 1.36 +++ og_user_roles.module 19 Jun 2009 21:38:24 -0000 @@ -422,6 +422,8 @@ function og_user_roles_role_add($gid, $u $granted = db_result(db_query_range("SELECT rid FROM {og_users_roles} WHERE gid = %d AND uid = %d AND rid = %d", $gid, $uid, $rid, 0, 1)); if (!$granted) { db_query("INSERT INTO {og_users_roles} (uid, gid, rid) VALUES (%d, %d, %d)", $uid, $gid, $rid); + + module_invoke_all('og_user_roles', 'role add', $gid, $uid, $rid, $args); } } @@ -442,5 +444,7 @@ function og_user_roles_role_delete($gid, else { db_query("DELETE FROM {og_users_roles} WHERE gid = %d AND uid = %d AND rid = %d", $gid, $uid, $rid); } + + module_invoke_all('og_user_roles', 'role delete', $gid, $uid, $rid, $args); } Index: og_user_roles.pages.inc =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/og_user_roles/og_user_roles.pages.inc,v retrieving revision 1.3 diff -u -p -r1.3 og_user_roles.pages.inc --- og_user_roles.pages.inc 8 Jun 2009 13:00:05 -0000 1.3 +++ og_user_roles.pages.inc 19 Jun 2009 21:38:24 -0000 @@ -131,10 +131,21 @@ function og_user_roles_page_form_submit( $gid = $form['#node']->nid; foreach ($form_state['values']['user_roles'] as $uid => $new_roles) { - og_user_roles_role_delete($gid, $uid); + //get the user's current roles from the db. + $original_roles = og_user_roles_get_roles_by_group($gid, $uid); + + //determine which roles to add + $add_roles = array_diff($new_roles, $original_roles); + $add_roles = array_filter($add_roles); + + //determine which roles to delete + $delete_roles = array_diff($original_roles, $new_roles); + + foreach ($delete_roles as $rid => $checked) { + og_user_roles_role_delete($gid, $uid, $rid); + } - $new_roles = array_filter($new_roles); - foreach ($new_roles as $rid => $checked) { + foreach ($add_roles as $rid => $checked) { og_user_roles_role_add($gid, $uid, $rid); } }