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.4
diff -u -p -r1.4 og_user_roles.pages.inc
--- og_user_roles.pages.inc	14 Aug 2009 12:00:30 -0000	1.4
+++ og_user_roles.pages.inc	6 Dec 2009 19:22:12 -0000
@@ -18,7 +18,7 @@ function og_user_roles_admin_settings() 
   }
 
   // Get list of roles, not counting authenticated and anonymous user.
-  $all_roles = user_roles();
+  $all_roles = array_map('check_plain', user_roles());
   foreach ($all_roles as $rid => $role) {
     if ($rid > DRUPAL_AUTHENTICATED_RID) {
       $roles[$rid] = $role;
@@ -97,7 +97,8 @@ function og_user_roles_page_form($form_s
   $form['#node'] = $node;
   // Used for theming.
   $form['#id'] = 'og-user-roles';
-  $form['#roles'] = $roles;
+  $form['#assignable_roles'] = $roles;
+  $all_roles = array_map('check_plain', user_roles());
 
   // Unset role titles.
   foreach ($roles as $rid => $name) {
@@ -109,12 +110,23 @@ function og_user_roles_page_form($form_s
     $form['user_roles'][$account->uid]['user'] = array(
       '#value' => theme('username', $account),
     );
+    $account_roles = og_user_roles_get_roles_by_group($node->nid, $account->uid);
     $form['user_roles'][$account->uid]['roles'] = array(
       '#type' => 'checkboxes',
-      '#default_value' => og_user_roles_get_roles_by_group($node->nid, $account->uid),
+      '#default_value' => $account_roles,
       '#options' => $roles,
       '#parents' => array('user_roles', $account->uid),
     );
+    // Add default roles that do not appear in the form.
+    $default_roles = array();
+    foreach ($account_roles as $rid) {
+      if (!isset($roles[$rid])) {
+        $default_roles[$rid] = $all_roles[$rid];
+      }
+    }
+    $form['user_roles'][$account->uid]['default_roles'] = array(
+      '#value' => implode(', ', $default_roles),
+    );
   }
   $form['submit'] = array('#type' => 'submit', '#value' => t('Save'));
 
@@ -128,11 +140,13 @@ 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);
-
-    $new_roles = array_filter($new_roles);
-    foreach ($new_roles as $rid => $checked) {
-      og_user_roles_role_add($gid, $uid, $rid);
+    foreach ($form['#assignable_roles'] as $rid => $name) {
+      if (empty($new_roles[$rid])) {
+        og_user_roles_role_delete($gid, $uid, $rid);
+      }
+      else {
+        og_user_roles_role_add($gid, $uid, $rid);
+      }
     }
   }
 
@@ -143,12 +157,13 @@ function og_user_roles_page_form_submit(
  * Render the group user roles assignment form like user permissions table.
  */
 function theme_og_user_roles_page_form($form) {
-  $header = array_merge(array(''), $form['#roles']);
+  $header = array_merge(array('', t('Default roles')), $form['#assignable_roles']);
 
   $rows = array();
   foreach (element_children($form['user_roles']) as $item) {
     $row = array();
     $row[] = drupal_render($form['user_roles'][$item]['user']);
+    $row[] = drupal_render($form['user_roles'][$item]['default_roles']);
     foreach (element_children($form['user_roles'][$item]['roles']) as $role) {
       $row[] = drupal_render($form['user_roles'][$item]['roles'][$role]);
     }
Index: tests/og_user_roles.test
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/og_user_roles/tests/og_user_roles.test,v
retrieving revision 1.6
diff -u -p -r1.6 og_user_roles.test
--- tests/og_user_roles.test	6 Dec 2009 18:58:26 -0000	1.6
+++ tests/og_user_roles.test	6 Dec 2009 19:09:34 -0000
@@ -322,6 +322,14 @@ class OgUserRolesGroupAdminTestCase exte
     $this->assertNoText('OGUR privilege escalation');
     $this->drupalGet("node/$this->gid1");
     $this->assertText('OGUR privilege escalation');
+
+    // Unassign an additional role from group admin.
+    $this->drupalLogin($this->admin_user);
+    $edit = array(
+      "user_roles[{$this->group_admin->uid}][$this->member_role]" => FALSE,
+    );
+    $this->drupalPost("og/users/$this->gid1/roles", $edit, t('Save'));
+    $this->assertFieldByName("user_roles[{$this->group_admin->uid}][$this->member_role]", FALSE);
   }
 }
 
