? 20091113-8nkfj1ns2agp8ptkefc61m1spa.png ? vanishing-roles-632304-2.patch ? vanishing-roles-632304-5.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 -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 14 Nov 2009 02:33:42 -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 = 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), ); + $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[] = $all_roles[$rid]; + } + } + $form['user_roles'][$account->uid]['automatic_roles'] = array( + '#value' => implode(', ', $auto_role_names), + ); } $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['#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['#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]); }