UserPermissionsForm::buildForm

public UserPermissionsForm::buildForm(array $form, FormStateInterface $form_state)

Form constructor.

Parameters

array $form: An associative array containing the structure of the form.

\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.

Return value

array The form structure.

Overrides FormInterface::buildForm

File

core/modules/user/src/Form/UserPermissionsForm.php, line 85

Class

UserPermissionsForm
Provides the user permissions administration form.

Namespace

Drupal\user\Form

Code

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:
  $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.') : '',
      );
      $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'];
      }
      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;
}
doc_Drupal
2016-10-29 09:52:55
Comments
Leave a Comment

Please login to continue.