? .DS_Store ? change_how_user_roles_are_added_and_deleted.patch 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 6 Jul 2009 17:19:13 -0000 @@ -118,6 +118,12 @@ function og_user_roles_page_form($form_s '#options' => $roles, '#parents' => array('user_roles', $account->uid), ); + // save the user's original roles. Compared with the values in $form['user_roles'][$uid]['roles']['new'] + // to determine which roles were added and deleted. Used in the submit handler. + $form['user_roles'][$account->uid]['original_roles'] = array( + '#type' => 'value', + '#value' => og_user_roles_get_roles_by_group($node->nid, $account->uid), + ); } $form['submit'] = array('#type' => 'submit', '#value' => t('Save')); @@ -129,12 +135,27 @@ function og_user_roles_page_form($form_s */ function og_user_roles_page_form_submit($form, &$form_state) { $gid = $form['#node']->nid; + foreach ($form_state['values']['user_roles'] as $uid => $roles) { + $original_roles = ($roles['original_roles']) ? $roles['original_roles'] : array(); + $new_roles = array(); + foreach($roles as $rid => $checked) { + if(is_numeric($rid)) { + $new_roles[$rid] = $checked; + } + } + + //determine which roles to add + $add_roles = array_diff($new_roles, $original_roles); + $add_roles = array_filter($add_roles); - foreach ($form_state['values']['user_roles'] as $uid => $new_roles) { - og_user_roles_role_delete($gid, $uid); + //determine which roles to delete + $delete_roles = array_diff($original_roles, $new_roles); - $new_roles = array_filter($new_roles); - foreach ($new_roles as $rid => $checked) { + foreach ($delete_roles as $rid => $checked) { + og_user_roles_role_delete($gid, $uid, $rid); + } + + foreach ($add_roles as $rid => $checked) { og_user_roles_role_add($gid, $uid, $rid); } }