user_admin_role

Versions
4.6 – 7
user_admin_role()

Menu callback: administer roles.

Code

modules/user.module, line 1569

<?php
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);
}
?>
Login or register to post comments
 
 

All source code and documentation on this site is released under the terms of the GNU General Public License, version 2 and later. Drupal is a registered trademark of Dries Buytaert.