You are here

function filter_perms_admin_perm_filter in Filter Permissions 7

Same name and namespace in other branches
  1. 6 filter_perms.module \filter_perms_admin_perm_filter()

Form providing a multiple select for roles and modules for filtering permissions.

1 string reference to 'filter_perms_admin_perm_filter'
filter_perms_admin_perm in ./filter_perms.module
Page callback which appends a filter form to the standard user_admin_permissions form.

File

./filter_perms.module, line 138

Code

function filter_perms_admin_perm_filter() {

  // @todo: Move this handling to a more appropriate place prior to drupal_goto().
  $url_parts = explode('/', request_uri());
  $url_last = $url_parts[count($url_parts) - 1];
  if (is_numeric($url_last)) {

    // Role Ids will come from role page referral.
    $_SESSION['filter_perm_roles'] = array(
      $url_last => $url_last,
    );

    // Show selected role for all modules.
    foreach (module_list(FALSE, FALSE, TRUE) as $module) {
      if (module_invoke($module, 'permission')) {
        $_SESSION['filter_perm_modules'][$module] = $module;
      }
    }
  }
  elseif (strstr($url_last, 'module-')) {

    // module- prefix indicates module page referral.
    $single_module = str_replace('module-', '', $url_last);
    $_SESSION['filter_perm_modules'] = array(
      $single_module => $single_module,
    );

    // Show all roles for selected module.
    $user_roles = user_roles();
    foreach ($user_roles as $user_role_key => $user_role) {
      $_SESSION['filter_perm_roles'][$user_role_key] = $user_role_key;
    }
  }
  if ($url_last != 'permissions' && strpos($url_last, 'permissions?') === FALSE) {
    drupal_goto('admin/people/permissions');
  }
  $form['filters'] = array(
    '#type' => 'fieldset',
    '#title' => t('Permission Filters'),
    '#collapsible' => TRUE,
    '#collapsed' => FALSE,
  );
  $role_options = user_roles();

  // Displays all user roles.
  $form['filters']['roles'] = array(
    '#title' => t('Roles to display'),
    '#type' => 'select',
    '#options' => array(
      '-1' => '--All Roles',
    ) + $role_options,
    '#default_value' => isset($_SESSION['filter_perm_roles']) ? $_SESSION['filter_perm_roles'] : '',
    '#size' => 8,
    '#multiple' => TRUE,
  );
  $module_options = array();

  // TRUE for the 3rd parameter forces name sorting instead of by module weight.
  foreach (module_list(FALSE, FALSE, TRUE) as $module) {
    if (module_invoke($module, 'permission')) {
      $module_options[$module] = $module;
    }
  }

  // Displays all modules which implement hook_permission().
  $form['filters']['modules'] = array(
    '#title' => t('Modules to display'),
    '#type' => 'select',
    '#options' => array(
      '-1' => '--All Modules',
    ) + $module_options,
    '#default_value' => isset($_SESSION['filter_perm_modules']) ? $_SESSION['filter_perm_modules'] : '',
    '#size' => 8,
    '#multiple' => TRUE,
  );
  $form['filters']['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Filter Permissions'),
  );
  return $form;
}