function subpermissions_admin_permissions in Permissions subset 7
Callback to provide the subpermissions form
This is pretty much a straight copy from the user.admin.inc file, but with the addition of the check against our own config settings.
1 string reference to 'subpermissions_admin_permissions'
- subpermissions_menu in ./
subpermissions.module - Implementation of hook_menu
File
- ./
subpermissions.admin.inc, line 9
Code
function subpermissions_admin_permissions($form, $form_state) {
// Retrieve role names for columns.
$role_names = user_roles();
// Fetch permissions for all roles or the one selected role.
$role_permissions = user_role_permissions($role_names);
// Store $role_names for use when saving the data.
$form['role_names'] = array(
'#type' => 'value',
'#value' => $role_names,
);
// Render role/permission overview:
$options = array();
$module_info = system_get_info('module');
$hide_descriptions = system_admin_compact_mode();
// Get a list of all the modules implementing a hook_permission() and sort by
// display name.
$modules = array();
foreach (module_implements('permission') as $module) {
$modules[$module] = $module_info[$module]['name'];
}
asort($modules);
// Get our permissions
$subset = variable_get('subpermissions_config', array());
if (count($subset)) {
foreach ($modules as $module => $display_name) {
if ($permissions = module_invoke($module, 'permission')) {
$form['permission'][] = array(
'#markup' => $module_info[$module]['name'],
'#id' => $module,
);
$set_a_permission = FALSE;
foreach ($permissions as $perm => $perm_item) {
if (isset($subset[$perm]) && $subset[$perm]) {
// Fill in default values for the permission.
$perm_item += array(
'description' => '',
'restrict access' => FALSE,
);
if ($perm_item['restrict access']) {
continue;
}
$set_a_permission = TRUE;
$options[$perm] = '';
$form['permission'][$perm] = array(
'#type' => 'item',
'#markup' => $perm_item['title'],
'#description' => theme('user_permission_description', array(
'permission_item' => $perm_item,
'hide' => $hide_descriptions,
)),
);
foreach ($role_names as $rid => $name) {
// Builds arrays for checked boxes for each role
if (isset($role_permissions[$rid][$perm])) {
$status[$rid][] = $perm;
}
}
}
}
if (!$set_a_permission) {
// There are no alterable permissions for this module, we should unset
// the markup
array_pop($form['permission']);
}
}
}
// Have to build checkboxes here after checkbox arrays are built
foreach ($role_names as $rid => $name) {
$form['checkboxes'][$rid] = array(
'#type' => 'checkboxes',
'#options' => $options,
'#default_value' => isset($status[$rid]) ? $status[$rid] : array(),
);
$form['role_names'][$rid] = array(
'#markup' => check_plain($name),
'#tree' => TRUE,
);
}
$form['actions'] = array(
'#type' => 'actions',
);
$form['actions']['submit'] = array(
'#type' => 'submit',
'#value' => t('Save permissions'),
);
$form['#attached']['js'][] = drupal_get_path('module', 'user') . '/user.permissions.js';
$form['#theme'] = array(
'user_admin_permissions',
);
$form['#submit'] = array(
'user_admin_permissions_submit',
);
}
else {
drupal_set_message(t('There are currently no permissions available for you to set.'));
}
return $form;
}