You are here

function user_multiple_role_edit in Drupal 7

Same name and namespace in other branches
  1. 5 modules/user/user.module \user_multiple_role_edit()
  2. 6 modules/user/user.module \user_multiple_role_edit()

Callback function for admin mass adding/deleting a user role.

1 string reference to 'user_multiple_role_edit'
user_user_operations in modules/user/user.module
Implements hook_user_operations().

File

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

Code

function user_multiple_role_edit($accounts, $operation, $rid) {

  // The role name is not necessary as user_save() will reload the user
  // object, but some modules' hook_user() may look at this first.
  $role_name = db_query('SELECT name FROM {role} WHERE rid = :rid', array(
    ':rid' => $rid,
  ))
    ->fetchField();
  switch ($operation) {
    case 'add_role':
      $accounts = user_load_multiple($accounts);
      foreach ($accounts as $account) {

        // Skip adding the role to the user if they already have it.
        if ($account !== FALSE && !isset($account->roles[$rid])) {
          $roles = $account->roles + array(
            $rid => $role_name,
          );

          // For efficiency manually save the original account before applying
          // any changes.
          $account->original = clone $account;
          user_save($account, array(
            'roles' => $roles,
          ));
        }
      }
      break;
    case 'remove_role':
      $accounts = user_load_multiple($accounts);
      foreach ($accounts as $account) {

        // Skip removing the role from the user if they already don't have it.
        if ($account !== FALSE && isset($account->roles[$rid])) {
          $roles = array_diff($account->roles, array(
            $rid => $role_name,
          ));

          // For efficiency manually save the original account before applying
          // any changes.
          $account->original = clone $account;
          user_save($account, array(
            'roles' => $roles,
          ));
        }
      }
      break;
  }
}