You are here

public static function WebformPermissions::processSelect in Webform 8.5

Same name and namespace in other branches
  1. 6.x src/Element/WebformPermissions.php \Drupal\webform\Element\WebformPermissions::processSelect()

Processes a webform roles (select) element.

Overrides Select::processSelect

File

src/Element/WebformPermissions.php, line 31

Class

WebformPermissions
Provides a webform roles (select) element.

Namespace

Drupal\webform\Element

Code

public static function processSelect(&$element, FormStateInterface $form_state, &$complete_form) {

  /** @var \Drupal\user\PermissionHandlerInterface $permission_handler */
  $permission_handler = \Drupal::service('user.permissions');

  /** @var \Drupal\Core\Extension\ModuleHandlerInterface $module_handler */
  $module_handler = \Drupal::service('module_handler');

  // Get list of permissions as options.
  $options = [];
  $permissions = $permission_handler
    ->getPermissions();
  foreach ($permissions as $perm => $perm_item) {
    $provider = $perm_item['provider'];
    $display_name = $module_handler
      ->getName($provider);
    $options[$display_name][$perm] = strip_tags($perm_item['title']);
  }
  $element['#options'] = $options;
  $element['#select2'] = TRUE;

  // Must convert this element['#type'] to a 'select' to prevent
  // "Illegal choice %choice in %name element" validation error.
  // @see \Drupal\Core\Form\FormValidator::performRequiredValidation
  $element['#type'] = 'select';
  WebformElementHelper::process($element);
  return parent::processSelect($element, $form_state, $complete_form);
}