You are here

function entity_browser_enhanced_form_alter in Entity Browser Enhance(d|r) 8

Implements hook_form_alter().

File

./entity_browser_enhanced.module, line 41
Allows to have an enhanced entity browser.

Code

function entity_browser_enhanced_form_alter(&$form, FormStateInterface $form_state, $form_id) {
  if ($form_id === "entity_browser_widgets_config_form") {
    $enhancers_list = \Drupal::service('plugin.manager.entity_browser_enhanced_plugin')
      ->getDefinitions();
    $enhancers = [
      '_none_' => t('- None -'),
    ];
    foreach ($enhancers_list as $enhancer_item) {
      $enhancers[$enhancer_item['id']] = $enhancer_item['label'];
    }
    $entity_browser = $form_state
      ->getFormObject()
      ->getEntity();
    foreach ($entity_browser
      ->getWidgets() as $uuid => $widget) {
      if (!$widget instanceof View) {
        continue;
      }
      $form['widgets']['table'][$uuid]['form']['enhancer'] = [
        '#type' => 'select',
        '#title' => t('Select enhancer'),
        '#default_value' => \Drupal::config('entity_browser_enhanced.widgets.' . $entity_browser
          ->getName())
          ->get($uuid, '_none_'),
        '#options' => $enhancers,
      ];
    }
    $form['#submit'][] = 'entity_browser_enhanced_submit';
  }
  elseif ($form_state
    ->getFormObject() instanceof EntityBrowserForm) {
    $enhancers_list = \Drupal::service('plugin.manager.entity_browser_enhanced_plugin')
      ->getDefinitions();
    $entity_browser = $form_state
      ->getFormObject()
      ->getEntityBrowser();
    foreach ($entity_browser
      ->getWidgets() as $uuid => $widget) {
      $enhancer_id = \Drupal::config('entity_browser_enhanced.widgets.' . $entity_browser
        ->getName())
        ->get($uuid, '_none_');
      foreach ($enhancers_list as $enhancer_item) {
        if ($enhancer_id === $enhancer_item['id']) {

          // Attach Entity Browser Enhanced library.
          $form['#attached']['library'][] = $enhancer_item['libraray'];
          $field_storage = $form_state
            ->getStorage();
          if (!empty($field_storage['entity_browser']['validators']['cardinality']['cardinality'])) {
            $field_cardinality = $field_storage['entity_browser']['validators']['cardinality']['cardinality'];
            $form['#attached']['drupalSettings']['entity_browser_enhanced'][$enhancer_item['id']]['cardinality'] = $field_cardinality;
          }

          // Mark the form with entity-browser-enhanced classes.
          $form['#attributes']['class'][] = 'entity-browser-enhanced';
          $form['#attributes']['class'][] = $enhancer_item['form_extra_class'];
        }
      }
    }
  }
}