You are here

function filter_perms_user_admin_perm_submit in Filter Permissions 6

Submit handler which overrides user_admin_perm_submit().

1 string reference to 'filter_perms_user_admin_perm_submit'
filter_perms_form_alter in ./filter_perms.module
Implementation of hook_form_alter().

File

./filter_perms.module, line 196
This module adds a role and module filter to the user permissions page. Best used when you have an unruly amount of roles or permissions on your site and want to more efficiently manage them without loading a gigantic grid of checkboxes.

Code

function filter_perms_user_admin_perm_submit($form, &$form_state) {

  // Save permissions:
  $result = db_query('SELECT * FROM {role}');
  while ($role = db_fetch_object($result)) {
    if (isset($form_state['values'][$role->rid])) {
      $permissions = array();
      $indexed_perms = array();
      $current_perms = db_result(db_query("SELECT perm FROM {permission} WHERE rid = %d", $role->rid));
      if (drupal_strlen($current_perms)) {
        $permissions = explode(', ', $current_perms);
      }
      foreach ($permissions as $permission) {
        $indexed_perms[$permission] = $permission;
      }
      $permissions = $indexed_perms;
      foreach ($form_state['values'][$role->rid] as $perm_key => $role_perms) {
        if (isset($permissions[$perm_key])) {
          if ($role_perms == 0) {
            unset($permissions[$perm_key]);
          }
        }
      }
      $permissions = array_merge($permissions, array_filter($form_state['values'][$role->rid]));
      db_query('DELETE FROM {permission} WHERE rid = %d', $role->rid);
      if (count($permissions)) {
        db_query("INSERT INTO {permission} (rid, perm) VALUES (%d, '%s')", $role->rid, implode(', ', array_values($permissions)));
      }
    }
  }
  drupal_set_message(t('The changes have been saved.'));

  // Clear the cached pages
  cache_clear_all();
}