Same name and namespace in other branches
  1. 4.7.x modules/user.module \user_admin_role()
  2. 5.x modules/user/user.module \user_admin_role()
  3. 6.x modules/user/user.admin.inc \user_admin_role()
  4. 7.x modules/user/user.admin.inc \user_admin_role()

Menu callback: administer roles.

1 string reference to 'user_admin_role'
user_menu in modules/user.module
Implementation of hook_menu().

File

modules/user.module, line 1569
Enables the user registration and login system.

Code

function user_admin_role() {
  $edit = $_POST['edit'];
  $op = $_POST['op'];
  $id = arg(4);
  if ($op == t('Save role')) {
    if ($edit['name']) {
      db_query("UPDATE {role} SET name = '%s' WHERE rid = %d", $edit['name'], $id);
      drupal_set_message(t('The changes have been saved.'));
    }
    else {
      form_set_error('name', t('You must specify a valid role name.'));
    }
  }
  else {
    if ($op == t('Delete role')) {
      db_query('DELETE FROM {role} WHERE rid = %d', $id);
      db_query('DELETE FROM {permission} WHERE rid = %d', $id);

      // Update the users who have this role set:
      $result = db_query('SELECT DISTINCT(ur1.uid) FROM {users_roles} ur1 LEFT JOIN {users_roles} ur2 ON ur2.uid = ur1.uid WHERE ur1.rid = %d AND ur2.rid != ur1.rid', $id);
      $uid = array();
      while ($u = db_fetch_object($result)) {
        $uid[] = $u->uid;
      }
      if ($uid) {
        db_query('DELETE FROM {users_roles} WHERE rid = %d AND uid IN (%s)', $id, implode(', ', $uid));
      }

      // Users with only the deleted role are put back in the authenticated users pool.
      db_query('UPDATE {users_roles} SET rid = %d WHERE rid = %d', _user_authenticated_id(), $id);
      drupal_set_message(t('The role has been deleted.'));
      drupal_goto('admin/access/roles');
    }
    else {
      if ($op == t('Add role')) {
        if ($edit['name']) {
          db_query("INSERT INTO {role} (name) VALUES ('%s')", $edit['name']);
          drupal_set_message(t('The role has been added.'));
          drupal_goto('admin/access/roles');
        }
        else {
          form_set_error('name', t('You must specify a valid role name.'));
        }
      }
      else {
        if ($id) {

          // Display the role form.
          $role = db_fetch_object(db_query('SELECT * FROM {role} WHERE rid = %d', $id));
          $output .= form_textfield(t('Role name'), 'name', $role->name, 32, 64, t('The name for this role. Example: "moderator", "editorial board", "site architect".'));
          $output .= form_submit(t('Save role'));
          $output .= form_submit(t('Delete role'));
          $output = form($output);
        }
      }
    }
  }
  if (!$output) {

    // Render the role overview.
    $result = db_query('SELECT * FROM {role} ORDER BY name');
    $header = array(
      t('Name'),
      t('Operations'),
    );
    while ($role = db_fetch_object($result)) {
      if ($role->name != 'anonymous user' && $role->name != 'authenticated user') {
        $rows[] = array(
          $role->name,
          l(t('edit'), 'admin/access/roles/edit/' . $role->rid),
        );
      }
      else {
        $rows[] = array(
          $role->name,
          '<span class="disabled">' . t('locked') . '</span>',
        );
      }
    }
    $rows[] = array(
      '<input type="text" size="32" maxlength="64" name="edit[name]" />',
      '<input type="submit" name="op" value="' . t('Add role') . '" />',
    );
    $output = theme('table', $header, $rows);
    $output = form($output);
  }
  print theme('page', $output);
}