function farm_role_form_user_admin_permissions_alter in farmOS 2.x
Implements hook_form_BASE_FORM_ID_alter().
File
- modules/
core/ role/ farm_role.module, line 25 - Hooks implemented by the Farm Role module.
Code
function farm_role_form_user_admin_permissions_alter(&$form, FormStateInterface $form_state, $form_id) {
// Attach managed role CSS.
$form['#attached']['library'][] = 'farm_role/managed_role';
// Save the role names.
$role_names = array_keys($form['role_names']['#value']);
// Get the managed role permissions service.
/** @var \Drupal\farm_role\ManagedRolePermissionsManagerInterface $managed_role_manager */
$managed_role_manager = \Drupal::service('plugin.manager.managed_role_permissions');
// Save a list of managed role IDs keyed by their index in the form.
$managed_roles = $managed_role_manager
->getMangedRoles();
$managed_roles_indices = [];
foreach ($managed_roles as $role) {
$index = array_search($role
->id(), $role_names);
$managed_roles_indices[$index] = $role
->id();
}
// Append '(managed)' to managed role labels in the table header.
foreach ($managed_roles_indices as $index => $role) {
// Offset by 1 for the first table column.
$offset = $index + 1;
// Build new label.
$label = $form['permissions']['#header'][$offset]['data'];
$new = $label . ' (' . t('managed') . ')';
// Set new label.
$form['permissions']['#header'][$offset]['data'] = $new;
}
// Get a list of permissions.
$permissions = \Drupal::service('user.permissions')
->getPermissions();
$permission_names = array_keys($permissions);
// Iterate over each permission in the form.
foreach ($form['permissions'] as $name => $permission) {
// Only check permission arrays, skip high level form and wrapper elements.
if (in_array($name, $permission_names)) {
// Iterate over each role under the permission.
foreach (array_keys($permission) as $rid) {
// Disable the checkbox for all managed roles.
if (in_array($rid, $managed_roles_indices)) {
$form['permissions'][$name][$rid]['#disabled'] = TRUE;
// If the permission is enabled on the role, add CSS class.
if ($managed_role_manager
->isPermissionInRole($name, $managed_roles[$rid])) {
$form['permissions'][$name][$rid]['#attributes']['class'][] = 'managed';
}
}
}
}
}
}