You are here

function _role_delegation_add_roles_to_form in Role Delegation 7

Helper function to create the role options.

2 calls to _role_delegation_add_roles_to_form()
role_delegation_form_alter in ./role_delegation.module
Implements hook_form_alter().
role_delegation_roles_form in ./role_delegation.module
Provides a form for assigning roles to the current user.

File

./role_delegation.module, line 71
This module allows site administrators to grant some roles the authority to change roles assigned to users, without them needing the 'administer access control' permission.

Code

function _role_delegation_add_roles_to_form(&$form, $account) {
  $roles_current = $account->roles;
  $roles_delegate = array();
  $roles = _role_delegation_roles();
  foreach ($roles as $rid => $role) {
    if (user_access('assign all roles') || user_access("assign {$role} role")) {
      $roles_delegate[$rid] = isset($form['account']['roles']['#options'][$rid]) ? $form['account']['roles']['#options'][$rid] : $role;
    }
  }
  if (empty($roles_delegate)) {

    // No role can be assigned.
    return;
  }
  if (!isset($form['account'])) {
    $form['account'] = array(
      '#type' => 'value',
      '#value' => $account,
    );
  }

  // Generate the form items.
  $form['account']['roles_change'] = array(
    '#type' => 'checkboxes',
    '#title' => isset($form['account']['roles']['#title']) ? $form['account']['roles']['#title'] : t('Roles'),
    '#options' => $roles_delegate,
    '#default_value' => array_keys(array_intersect_key($roles_current, $roles_delegate)),
    '#description' => isset($form['account']['roles']['#description']) ? $form['account']['roles']['#description'] : t('Change roles assigned to user.'),
  );
}