Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 6 |
CRAP | |
0.00% |
0 / 111 |
| UserPermissionsForm | |
0.00% |
0 / 1 |
|
0.00% |
0 / 6 |
306 | |
0.00% |
0 / 111 |
| __construct | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 4 |
|||
| create | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 6 |
|||
| getFormId | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| getRoles | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| buildForm | |
0.00% |
0 / 1 |
132 | |
0.00% |
0 / 92 |
|||
| submitForm | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 5 |
|||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\user\Form\UserPermissionsForm. | |
| */ | |
| namespace Drupal\user\Form; | |
| use Drupal\Core\Extension\ModuleHandlerInterface; | |
| use Drupal\Core\Form\FormBase; | |
| use Drupal\Core\Form\FormStateInterface; | |
| use Drupal\user\PermissionHandlerInterface; | |
| use Drupal\user\RoleStorageInterface; | |
| use Symfony\Component\DependencyInjection\ContainerInterface; | |
| /** | |
| * Provides the user permissions administration form. | |
| */ | |
| class UserPermissionsForm extends FormBase { | |
| /** | |
| * The permission handler. | |
| * | |
| * @var \Drupal\user\PermissionHandlerInterface | |
| */ | |
| protected $permissionHandler; | |
| /** | |
| * The role storage. | |
| * | |
| * @var \Drupal\user\RoleStorageInterface | |
| */ | |
| protected $roleStorage; | |
| /** | |
| * The module handler. | |
| * | |
| * @var \Drupal\Core\Extension\ModuleHandlerInterface | |
| */ | |
| protected $moduleHandler; | |
| /** | |
| * Constructs a new UserPermissionsForm. | |
| * | |
| * @param \Drupal\user\PermissionHandlerInterface $permission_handler | |
| * The permission handler. | |
| * @param \Drupal\user\RoleStorageInterface $role_storage | |
| * The role storage. | |
| * @param \Drupal\Core\Extension\ModuleHandlerInterface | |
| * The module handler. | |
| */ | |
| public function __construct(PermissionHandlerInterface $permission_handler, RoleStorageInterface $role_storage, ModuleHandlerInterface $module_handler) { | |
| $this->permissionHandler = $permission_handler; | |
| $this->roleStorage = $role_storage; | |
| $this->moduleHandler = $module_handler; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public static function create(ContainerInterface $container) { | |
| return new static( | |
| $container->get('user.permissions'), | |
| $container->get('entity.manager')->getStorage('user_role'), | |
| $container->get('module_handler') | |
| ); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getFormId() { | |
| return 'user_admin_permissions'; | |
| } | |
| /** | |
| * Gets the roles to display in this form. | |
| * | |
| * @return \Drupal\user\RoleInterface[] | |
| * An array of role objects. | |
| */ | |
| protected function getRoles() { | |
| return $this->roleStorage->loadMultiple(); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function buildForm(array $form, FormStateInterface $form_state) { | |
| $role_names = array(); | |
| $role_permissions = array(); | |
| $admin_roles = array(); | |
| foreach ($this->getRoles() as $role_name => $role) { | |
| // Retrieve role names for columns. | |
| $role_names[$role_name] = $role->label(); | |
| // Fetch permissions for the roles. | |
| $role_permissions[$role_name] = $role->getPermissions(); | |
| $admin_roles[$role_name] = $role->isAdmin(); | |
| } | |
| // Store $role_names for use when saving the data. | |
| $form['role_names'] = array( | |
| '#type' => 'value', | |
| '#value' => $role_names, | |
| ); | |
| // Render role/permission overview: | |
| $options = array(); | |
| $hide_descriptions = system_admin_compact_mode(); | |
| $form['system_compact_link'] = array( | |
| '#id' => FALSE, | |
| '#type' => 'system_compact_link', | |
| ); | |
| $form['permissions'] = array( | |
| '#type' => 'table', | |
| '#header' => array($this->t('Permission')), | |
| '#id' => 'permissions', | |
| '#attributes' => ['class' => ['permissions', 'js-permissions']], | |
| '#sticky' => TRUE, | |
| ); | |
| foreach ($role_names as $name) { | |
| $form['permissions']['#header'][] = array( | |
| 'data' => $name, | |
| 'class' => array('checkbox'), | |
| ); | |
| } | |
| $permissions = $this->permissionHandler->getPermissions(); | |
| $permissions_by_provider = array(); | |
| foreach ($permissions as $permission_name => $permission) { | |
| $permissions_by_provider[$permission['provider']][$permission_name] = $permission; | |
| } | |
| foreach ($permissions_by_provider as $provider => $permissions) { | |
| // Module name. | |
| $form['permissions'][$provider] = array(array( | |
| '#wrapper_attributes' => array( | |
| 'colspan' => count($role_names) + 1, | |
| 'class' => array('module'), | |
| 'id' => 'module-' . $provider, | |
| ), | |
| '#markup' => $this->moduleHandler->getName($provider), | |
| )); | |
| foreach ($permissions as $perm => $perm_item) { | |
| // Fill in default values for the permission. | |
| $perm_item += array( | |
| 'description' => '', | |
| 'restrict access' => FALSE, | |
| 'warning' => !empty($perm_item['restrict access']) ? $this->t('Warning: Give to trusted roles only; this permission has security implications.') : '', | |
| ); | |
| $options[$perm] = $perm_item['title']; | |
| $form['permissions'][$perm]['description'] = array( | |
| '#type' => 'inline_template', | |
| '#template' => '<div class="permission"><span class="title">{{ title }}</span>{% if description or warning %}<div class="description">{% if warning %}<em class="permission-warning">{{ warning }}</em> {% endif %}{{ description }}</div>{% endif %}</div>', | |
| '#context' => array( | |
| 'title' => $perm_item['title'], | |
| ), | |
| ); | |
| // Show the permission description. | |
| if (!$hide_descriptions) { | |
| $form['permissions'][$perm]['description']['#context']['description'] = $perm_item['description']; | |
| $form['permissions'][$perm]['description']['#context']['warning'] = $perm_item['warning']; | |
| } | |
| $options[$perm] = ''; | |
| foreach ($role_names as $rid => $name) { | |
| $form['permissions'][$perm][$rid] = array( | |
| '#title' => $name . ': ' . $perm_item['title'], | |
| '#title_display' => 'invisible', | |
| '#wrapper_attributes' => array( | |
| 'class' => array('checkbox'), | |
| ), | |
| '#type' => 'checkbox', | |
| '#default_value' => in_array($perm, $role_permissions[$rid]) ? 1 : 0, | |
| '#attributes' => array('class' => array('rid-' . $rid, 'js-rid-' . $rid)), | |
| '#parents' => array($rid, $perm), | |
| ); | |
| // Show a column of disabled but checked checkboxes. | |
| if ($admin_roles[$rid]) { | |
| $form['permissions'][$perm][$rid]['#disabled'] = TRUE; | |
| $form['permissions'][$perm][$rid]['#default_value'] = TRUE; | |
| } | |
| } | |
| } | |
| } | |
| $form['actions'] = array('#type' => 'actions'); | |
| $form['actions']['submit'] = array( | |
| '#type' => 'submit', | |
| '#value' => $this->t('Save permissions'), | |
| '#button_type' => 'primary', | |
| ); | |
| $form['#attached']['library'][] = 'user/drupal.user.permissions'; | |
| return $form; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| function submitForm(array &$form, FormStateInterface $form_state) { | |
| foreach ($form_state->getValue('role_names') as $role_name => $name) { | |
| user_role_change_permissions($role_name, (array) $form_state->getValue($role_name)); | |
| } | |
| drupal_set_message($this->t('The changes have been saved.')); | |
| } | |
| } |