? .project ? sites/all/themes/.DS_Store ? sites/default/.DS_Store ? sites/default/files ? sites/default/settings.php Index: modules/system/admin.css =================================================================== RCS file: /cvs/drupal/drupal/modules/system/admin.css,v retrieving revision 1.20 diff -u -p -r1.20 admin.css --- modules/system/admin.css 14 Jan 2009 12:18:37 -0000 1.20 +++ modules/system/admin.css 8 Jul 2009 17:11:32 -0000 @@ -135,3 +135,14 @@ table.screenshot { html.js .custom-container label { visibility: hidden; } + +/** + * Permissions + */ +div.permission-wrapper { + padding: 0 1em; + margin: 0 0 1em 0; +} +div.permission-wrapper table { + margin: 0; +} Index: modules/user/user.admin.inc =================================================================== RCS file: /cvs/drupal/drupal/modules/user/user.admin.inc,v retrieving revision 1.63 diff -u -p -r1.63 user.admin.inc --- modules/user/user.admin.inc 6 Jul 2009 19:07:21 -0000 1.63 +++ modules/user/user.admin.inc 8 Jul 2009 17:11:34 -0000 @@ -598,43 +598,51 @@ function user_admin_permissions($form_st // Fetch permissions for all roles or the one selected role. $role_permissions = user_role_permissions($role_names); - // Store $role_names for use when saving the data. - $form['role_names'] = array( - '#type' => 'value', - '#value' => $role_names, - ); // Render role/permission overview: - $options = array(); $hide_descriptions = !system_admin_compact_mode(); + $form['permissions'] = array( + '#type' => 'vertical_tabs', + ); foreach (module_implements('permission') as $module) { if ($permissions = module_invoke($module, 'permission')) { + $status = array(); $info = drupal_parse_info_file(drupal_get_path('module', $module) . "/$module.info"); - $form['permission'][] = array( - '#markup' => $info['name'], - '#id' => $module, - ); + $form['permissions'][$module] = array( + '#type' => 'fieldset', + '#title' => $info['name'], + '#collapsible' => TRUE, + '#collapsed' => TRUE, + '#description' => '', + ); foreach ($permissions as $perm => $perm_item) { - $options[$perm] = ''; - $form['permission'][$perm] = array( - '#type' => 'item', + $permission = str_replace(' ', '__', $perm); + $form['permissions'][$module][$permission] = array( + '#tree' => TRUE, + '#theme' => 'user_admin_permissions_fieldset', + '#header' => array(), + ); + $form['permissions'][$module][$permission]['name'] = array( '#markup' => $perm_item['title'], - '#description' => $hide_descriptions ? $perm_item['description'] : NULL, + ); + $form['permissions'][$module][$permission]['description'] = array( + '#markup' => $hide_descriptions ? $perm_item['description'] : NULL, ); foreach ($role_names as $rid => $name) { + $granted = FALSE; // Builds arrays for checked boxes for each role if (isset($role_permissions[$rid][$perm])) { - $status[$rid][] = $perm; + $granted = TRUE; } + $form['permissions'][$module][$permission][$rid] = array( + '#type' => 'checkbox', + '#title' => $name, + '#default_value' => $granted, + ); } } } } - // Have to build checkboxes here after checkbox arrays are built - foreach ($role_names as $rid => $name) { - $form['checkboxes'][$rid] = array('#type' => 'checkboxes', '#options' => $options, '#default_value' => isset($status[$rid]) ? $status[$rid] : array()); - $form['role_names'][$rid] = array('#markup' => $name, '#tree' => TRUE); - } $form['submit'] = array('#type' => 'submit', '#value' => t('Save permissions')); $form['#attached_js'] = array(drupal_get_path('module', 'user') . '/user.permissions.js'); @@ -648,20 +656,24 @@ function user_admin_permissions($form_st * @see user_admin_permissions() */ function user_admin_permissions_submit($form, &$form_state) { - foreach ($form_state['values']['role_names'] as $rid => $name) { - $checked = array_filter($form_state['values'][$rid]); - // Delete existing permissions for the role. This handles "unchecking" checkboxes. - db_delete('role_permission') - ->condition('rid', $rid) - ->execute(); - $query = db_insert('role_permission')->fields(array('rid', 'permission')); - foreach ($checked as $permission) { - $query->values(array( - 'rid' => $rid, - 'permission' => $permission, - )); - } - $query->execute(); + foreach ($form_state['values'] as $perm => $values) { + if (is_array($form_state['values'][$perm])) { + $permission_real_name = str_replace('__', ' ', $perm); + $checked = array_filter($form_state['values'][$perm]); + // Delete existing grants for this permission. This handles "unchecking" checkboxes. + db_delete('role_permission') + ->condition('permission', $permission_real_name) + ->execute(); + // Insert new grants. + $query = db_insert('role_permission')->fields(array('rid', 'permission')); + foreach ($checked as $rid => $value) { + $query->values(array( + 'rid' => $rid, + 'permission' => $permission_real_name, + )); + } + $query->execute(); + } } drupal_set_message(t('The changes have been saved.')); @@ -671,36 +683,39 @@ function user_admin_permissions_submit($ } /** + * Theme callback for the admin permissions form. + * + * @param $form + * An associative array containing the structure of the form. + * @ingroup themeable + */ +function theme_user_admin_permissions_fieldset($form) { + $rows = array(); + $output = ''; + $output .= '' . drupal_render($form['name']) . ''; + $output .= '
'; + return $output; +} + +/** * Theme the administer permissions page. * * @ingroup themeable */ function theme_user_admin_permissions($form) { - $roles = user_roles(); - foreach (element_children($form['permission']) as $key) { - $row = array(); - // Module name - if (is_numeric($key)) { - $row[] = array('data' => drupal_render($form['permission'][$key]), 'class' => 'module', 'id' => 'module-' . $form['permission'][$key]['#id'], 'colspan' => count($form['role_names']['#value']) + 1); - } - else { - // Permission row. - $row[] = array( - 'data' => drupal_render($form['permission'][$key]), - 'class' => 'permission', - ); - foreach (element_children($form['checkboxes']) as $rid) { - $row[] = array('data' => drupal_render($form['checkboxes'][$rid][$key]), 'class' => 'checkbox', 'title' => $roles[$rid] . ' : ' . t($key)); - } - } - $rows[] = $row; - } - $header[] = (t('Permission')); - foreach (element_children($form['role_names']) as $rid) { - $header[] = array('data' => drupal_render($form['role_names'][$rid]), 'class' => 'checkbox'); - } $output = theme('system_compact_link'); - $output .= theme('table', $header, $rows, array('id' => 'permissions')); + $output .= drupal_render($form['permissions']); $output .= drupal_render_children($form); return $output; } Index: modules/user/user.module =================================================================== RCS file: /cvs/drupal/drupal/modules/user/user.module,v retrieving revision 1.1008 diff -u -p -r1.1008 user.module --- modules/user/user.module 5 Jul 2009 18:07:04 -0000 1.1008 +++ modules/user/user.module 8 Jul 2009 17:11:39 -0000 @@ -61,6 +61,10 @@ function user_theme() { 'arguments' => array('form' => NULL), 'file' => 'user.admin.inc', ), + 'user_admin_permissions_fieldset' => array( + 'arguments' => array('form' => NULL), + 'file' => 'user.admin.inc', + ), 'user_admin_new_role' => array( 'arguments' => array('form' => NULL), 'file' => 'user.admin.inc', Index: modules/user/user.test =================================================================== RCS file: /cvs/drupal/drupal/modules/user/user.test,v retrieving revision 1.44 diff -u -p -r1.44 user.test --- modules/user/user.test 1 Jul 2009 12:06:22 -0000 1.44 +++ modules/user/user.test 8 Jul 2009 17:11:41 -0000 @@ -751,7 +751,7 @@ class UserPermissionsTestCase extends Dr // Add a permission. $this->assertFalse(user_access('administer nodes', $account, TRUE), t('User does not have "administer nodes" permission.')); $edit = array(); - $edit[$rid . '[administer nodes]'] = TRUE; + $edit['administer__nodes[' . $rid . ']'] = TRUE; $this->drupalPost('admin/user/permissions', $edit, t('Save permissions')); $this->assertText(t('The changes have been saved.'), t('Successful save message displayed.')); $this->assertTrue(user_access('administer nodes', $account, TRUE), t('User now has "administer nodes" permission.')); @@ -759,7 +759,7 @@ class UserPermissionsTestCase extends Dr // Remove a permission. $this->assertTrue(user_access('access user profiles', $account, TRUE), t('User has "access user profiles" permission.')); $edit = array(); - $edit[$rid . '[access user profiles]'] = FALSE; + $edit['access__user__profiles[' . $rid . ']'] = FALSE; $this->drupalPost('admin/user/permissions', $edit, t('Save permissions')); $this->assertText(t('The changes have been saved.'), t('Successful save message displayed.')); $this->assertFalse(user_access('access user profiles', $account, TRUE), t('User no longer has "access user profiles" permission.'));