You are here

public static function EntitySelector::preRenderSelect in Opigno Learning path 3.x

Prepares a select render element.

Overrides Select::preRenderSelect

File

modules/opigno_user_selection/src/Element/EntitySelector.php, line 80

Class

EntitySelector
Provides a form element for entity selection.

Namespace

Drupal\opigno_user_selection\Element

Code

public static function preRenderSelect($element) {
  $element = parent::preRenderSelect($element);
  $element['#attached']['library'] = [
    'opigno_user_selection/userselect',
  ];
  $element['#attributes']['data-user-load'] = TRUE;
  if (empty($element['#entity_selector_route_name'])) {
    $element['#entity_selector_route_name'] = 'user_selection_list';
  }
  $url = Url::fromRoute($element['#entity_selector_route_name'], [])
    ->toString(TRUE);

  /** @var \Drupal\Core\Access\AccessManagerInterface $access_manager */
  $access_manager = \Drupal::service('access_manager');
  $access = $access_manager
    ->checkNamedRoute($element['#entity_selector_route_name'], [], \Drupal::currentUser(), TRUE);
  if ($access) {
    $metadata = BubbleableMetadata::createFromRenderArray($element);
    if ($access
      ->isAllowed()) {
      $element['#attributes']['class'][] = 'form-autocomplete';
      $metadata
        ->addAttachments([
        'library' => [
          'opigno_user_selection/userselect',
        ],
      ]);

      // Provide a data attribute for the JavaScript behavior to bind to.
      $element['#attributes']['autocomplete-path'] = $url
        ->getGeneratedUrl();
      $metadata = $metadata
        ->merge($url);
    }
    $metadata
      ->merge(BubbleableMetadata::createFromObject($access))
      ->applyTo($element);
  }
  if (isset($element['#data_type'])) {
    $element['#attributes']['type'] = $element['#data_type'];
  }
  return $element;
}