summaryrefslogtreecommitdiff
path: root/modules/user/user.admin.inc
diff options
context:
space:
mode:
Diffstat (limited to 'modules/user/user.admin.inc')
-rw-r--r--modules/user/user.admin.inc198
1 files changed, 128 insertions, 70 deletions
diff --git a/modules/user/user.admin.inc b/modules/user/user.admin.inc
index fcf626c7e..2d6e7df60 100644
--- a/modules/user/user.admin.inc
+++ b/modules/user/user.admin.inc
@@ -801,57 +801,141 @@ function theme_user_permission_description($variables) {
}
/**
- * Menu callback: administer roles.
- *
- * @param $role
- * A user role object, as returned from user_role_load(). This represents the
- * role which will be edited. If not set, a new role will be added instead.
+ * Form to re-order roles or add a new one.
*
* @ingroup forms
- * @see user_role_load()
- * @see user_admin_role_validate()
- * @see user_admin_role_submit()
- * @see theme_user_admin_new_role()
+ * @see theme_user_admin_roles()
*/
-function user_admin_role($form, &$form_state, $role = NULL) {
- if (!empty($role)) {
- // Display the edit role form.
- $form['name'] = array(
- '#type' => 'textfield',
- '#title' => t('Role name'),
- '#default_value' => $role->name,
- '#size' => 30,
- '#required' => TRUE,
- '#maxlength' => 64,
- '#description' => t('The name for this role. Example: "moderator", "editorial board", "site architect".'),
- );
- $form['rid'] = array(
- '#type' => 'value',
- '#value' => $role->rid,
- );
- $form['actions'] = array('#type' => 'container', '#attributes' => array('class' => array('form-actions')));
- $form['actions']['submit'] = array(
- '#type' => 'submit',
- '#value' => t('Save role'),
- );
- $form['actions']['delete'] = array(
- '#type' => 'submit',
- '#value' => t('Delete role'),
+function user_admin_roles($form, $form_state) {
+ $roles = user_roles();
+
+ $form['roles'] = array(
+ '#tree' => TRUE,
+ );
+ $order = 0;
+ foreach ($roles as $rid => $name) {
+ $form['roles'][$rid]['#role'] = (object) array(
+ 'rid' => $rid,
+ 'name' => $name,
+ 'weight' => $order,
);
- }
- else {
- $form['name'] = array(
+ $form['roles'][$rid]['#weight'] = $order;
+ $form['roles'][$rid]['weight'] = array(
'#type' => 'textfield',
- '#size' => 32,
- '#maxlength' => 64,
- );
- $form['submit'] = array(
- '#type' => 'submit',
- '#value' => t('Add role'),
+ '#size' => 4,
+ '#default_value' => $order,
+ '#attributes' => array('class' => array('role-weight')),
);
- $form['#submit'][] = 'user_admin_role_submit';
- $form['#validate'][] = 'user_admin_role_validate';
+ $order++;
+ }
+
+ $form['name'] = array(
+ '#type' => 'textfield',
+ '#size' => 32,
+ '#maxlength' => 64,
+ );
+ $form['add'] = array(
+ '#type' => 'submit',
+ '#value' => t('Add role'),
+ '#validate' => array('user_admin_role_validate'),
+ '#submit' => array('user_admin_role_submit'),
+ );
+ $form['submit'] = array(
+ '#type' => 'submit',
+ '#value' => t('Save order'),
+ '#submit' => array('user_admin_roles_order_submit'),
+ );
+
+ return $form;
+}
+
+/**
+ * Form submit function. Update the role weights.
+ */
+function user_admin_roles_order_submit($form, &$form_state) {
+ foreach ($form_state['values']['roles'] as $rid => $role_values) {
+ $role = $form['roles'][$rid]['#role'];
+ $role->weight = $role_values['weight'];
+ user_role_save($role);
+ }
+}
+
+/**
+ * Theme the role order and new role form.
+ *
+ * @ingroup themeable
+ */
+function theme_user_admin_roles($variables) {
+ $form = $variables['form'];
+
+ $header = array(t('Name'), t('Weight'), array('data' => t('Operations'), 'colspan' => 2));
+ foreach (element_children($form['roles']) as $rid) {
+ $name = $form['roles'][$rid]['#role']->name;
+ $row = array();
+ if (in_array($rid, array(DRUPAL_ANONYMOUS_RID, DRUPAL_AUTHENTICATED_RID))) {
+ $row[] = t('@name <em>(locked)</em>', array('@name' => $name));
+ $row[] = drupal_render($form['roles'][$rid]['weight']);
+ $row[] = '';
+ $row[] = l(t('edit permissions'), 'admin/people/permissions/' . $rid);
+ }
+ else {
+ $row[] = check_plain($name);
+ $row[] = drupal_render($form['roles'][$rid]['weight']);
+ $row[] = l(t('edit role'), 'admin/people/permissions/roles/edit/' . $rid);
+ $row[] = l(t('edit permissions'), 'admin/people/permissions/' . $rid);
+ }
+ $rows[] = array('data' => $row, 'class' => array('draggable'));
}
+ $rows[] = array(array('data' => drupal_render($form['name']) . drupal_render($form['add']), 'colspan' => 4, 'class' => 'edit-name'));
+
+ drupal_add_tabledrag('user-roles', 'order', 'sibling', 'role-weight');
+
+ $output = theme('table', array('header' => $header, 'rows' => $rows, 'attributes' => array('id' => 'user-roles')));
+ $output .= drupal_render_children($form);
+
+ return $output;
+}
+
+/**
+ * Form to configure a single role.
+ *
+ * @ingroup forms
+ * @see user_admin_role_validate()
+ * @see user_admin_role_submit()
+ */
+function user_admin_role($form, $form_state, $role) {
+ if ($role->rid == DRUPAL_ANONYMOUS_RID || $role->rid == DRUPAL_AUTHENTICATED_RID) {
+ drupal_goto('admin/people/permissions/roles');
+ }
+
+ // Display the edit role form.
+ $form['name'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Role name'),
+ '#default_value' => $role->name,
+ '#size' => 30,
+ '#required' => TRUE,
+ '#maxlength' => 64,
+ '#description' => t('The name for this role. Example: "moderator", "editorial board", "site architect".'),
+ );
+ $form['rid'] = array(
+ '#type' => 'value',
+ '#value' => $role->rid,
+ );
+ $form['weight'] = array(
+ '#type' => 'value',
+ '#value' => $role->weight,
+ );
+ $form['actions'] = array('#type' => 'container', '#attributes' => array('class' => array('form-actions')));
+ $form['actions']['submit'] = array(
+ '#type' => 'submit',
+ '#value' => t('Save role'),
+ );
+ $form['actions']['delete'] = array(
+ '#type' => 'submit',
+ '#value' => t('Delete role'),
+ );
+
return $form;
}
@@ -896,32 +980,6 @@ function user_admin_role_submit($form, &$form_state) {
}
/**
- * Theme the new-role form.
- *
- * @ingroup themeable
- */
-function theme_user_admin_new_role($variables) {
- $form = $variables['form'];
-
- $header = array(t('Name'), array('data' => t('Operations'), 'colspan' => 2));
- foreach (user_roles() as $rid => $name) {
- $edit_permissions = l(t('edit permissions'), 'admin/people/permissions/' . $rid);
- if (in_array($rid, array(DRUPAL_ANONYMOUS_RID, DRUPAL_AUTHENTICATED_RID))) {
- $rows[] = array(t('!name %locked', array('!name' => $name, '%locked' => t('(locked)'))), '', $edit_permissions);
- }
- else {
- $rows[] = array($name, l(t('edit role'), 'admin/people/permissions/roles/edit/' . $rid), $edit_permissions);
- }
- }
- $rows[] = array(array('data' => drupal_render($form['name']) . drupal_render($form['submit']), 'colspan' => 3, 'class' => 'edit-name'));
-
- $output = drupal_render_children($form);
- $output .= theme('table', array('header' => $header, 'rows' => $rows));
-
- return $output;
-}
-
-/**
* Theme user administration filter selector.
*
* @ingroup themeable