You are here

function role_delegation_form_user_admin_role_submit in Role Delegation 6

Same name and namespace in other branches
  1. 7 role_delegation.module \role_delegation_form_user_admin_role_submit()

Submit function for the user_admin_role form: When a role is renamed or deleted, rename or delete the permission to assign that role.

1 string reference to 'role_delegation_form_user_admin_role_submit'
role_delegation_form_user_admin_role_alter in ./role_delegation.module
Implementation of hook_form_FORM_ID_alter() for user_admin_role().

File

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

Code

function role_delegation_form_user_admin_role_submit($form, $form_state) {
  $op = $form_state['values']['op'];
  if ($op != t('Save role') && $op != t('Delete role')) {
    return;
  }
  $oldrole = $form['name']['#default_value'];
  $newrole = $form_state['values']['name'];
  if ($op == t('Save role') && $oldrole == $newrole) {
    return;
  }

  // Role is being renamed or deleted.
  // Loop through permission lists for all roles, renaming or deleting the
  // 'assign' permission for this role.
  $oldperm = _role_delegation_make_perm($oldrole);
  $result = db_query('SELECT * FROM {permission}');
  while ($row = db_fetch_object($result)) {
    $perms = explode(', ', $row->perm);
    for ($i = 0; $i < count($perms); ++$i) {
      if ($perms[$i] == $oldperm) {
        switch ($op) {
          case t('Save role'):
            $perms[$i] = _role_delegation_make_perm($newrole);
            break;
          case t('Delete role'):
            unset($perms[$i]);
            break;
        }
        if (count($perms)) {
          db_query("UPDATE {permission} SET perm = '%s' WHERE pid = %d", implode(', ', $perms), $row->pid);
        }
        else {
          db_query("DELETE FROM {permission} WHERE pid = %d", $row->pid);
        }
        break;
      }
    }
  }
}