? vanishing-roles-632304-2.patch
Index: og_user_roles.pages.inc
===================================================================
RCS file: /cvs/drupal/contributions/modules/og_user_roles/og_user_roles.pages.inc,v
retrieving revision 1.4
diff -u -p -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	13 Nov 2009 21:13:26 -0000
@@ -98,6 +98,7 @@ function og_user_roles_page_form($form_s
   // Used for theming.
   $form['#id'] = 'og-user-roles';
   $form['#roles'] = $roles;
+  $all_roles = user_roles(TRUE);
 
   // Unset role titles.
   foreach ($roles as $rid => $name) {
@@ -109,12 +110,24 @@ 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),
     );
+    $auto_role_names = array();
+    // Find automatic roles that don't appear in the form.
+    foreach ($account_roles as $rid) {
+      if (!isset($roles[$rid])) {
+        $auto_role_names[] = check_plain($all_roles[$rid]);
+      }
+    }
+    $form['user_roles'][$account->uid]['automatic_roles'] = array(
+      '#type' => 'markup',
+      '#value' => implode(', ', $auto_role_names),
+    );
   }
   $form['submit'] = array('#type' => 'submit', '#value' => t('Save'));
 
@@ -128,11 +141,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['#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 +158,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('', '<em>'. t('Default role assignments') .'</em>'), $form['#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]['automatic_roles']);
     foreach (element_children($form['user_roles'][$item]['roles']) as $role) {
       $row[] = drupal_render($form['user_roles'][$item]['roles'][$role]);
     }
