You are here

public function ElasticsearchViewsEntityField::buildOptionsForm in Elasticsearch Connector 8.5

Same name and namespace in other branches
  1. 8.7 modules/elasticsearch_connector_views/src/Plugin/views/field/ElasticsearchViewsEntityField.php \Drupal\elasticsearch_connector_views\Plugin\views\field\ElasticsearchViewsEntityField::buildOptionsForm()
  2. 8.2 modules/elasticsearch_connector_views/src/Plugin/views/field/ElasticsearchViewsEntityField.php \Drupal\elasticsearch_connector_views\Plugin\views\field\ElasticsearchViewsEntityField::buildOptionsForm()
  3. 8.6 modules/elasticsearch_connector_views/src/Plugin/views/field/ElasticsearchViewsEntityField.php \Drupal\elasticsearch_connector_views\Plugin\views\field\ElasticsearchViewsEntityField::buildOptionsForm()

Default options form that provides the label widget that all fields should have.

Overrides EntityField::buildOptionsForm

File

modules/elasticsearch_connector_views/src/Plugin/views/field/ElasticsearchViewsEntityField.php, line 107

Class

ElasticsearchViewsEntityField
Displays entity field data.

Namespace

Drupal\elasticsearch_connector_views\Plugin\views\field

Code

public function buildOptionsForm(&$form, FormStateInterface $form_state) {
  $form['field_rendering'] = array(
    '#type' => 'checkbox',
    '#title' => $this
      ->t('Use entity field rendering'),
    '#description' => $this
      ->t("If checked, Drupal's built-in field rendering mechanism will be used for rendering this field's values, which requires the entity to be loaded. If unchecked, a type-specific, entity-independent rendering mechanism will be used."),
    '#default_value' => $this->options['field_rendering'],
  );

  // Wrap the (immediate) parent options in their own field set, to clean up
  // the UI when (un)checking the above checkbox.
  $form['parent_options'] = array(
    '#type' => 'fieldset',
    '#title' => $this
      ->t('Render settings'),
    '#states' => array(
      'visible' => array(
        ':input[name="options[field_rendering]"]' => array(
          'checked' => TRUE,
        ),
      ),
    ),
  );

  // Include the parent options form and move all fields that were added by
  // our direct parent (\Drupal\views\Plugin\views\field\Field) to the
  // "parent_options" fieldset.
  parent::buildOptionsForm($form, $form_state);
  $parent_keys = array(
    'multiple_field_settings',
    'click_sort_column',
    'type',
    'field_api_classes',
    'settings',
  );
  foreach ($parent_keys as $key) {
    if (!empty($form[$key])) {
      $form[$key]['#fieldset'] = 'parent_options';
    }
  }

  // The Core boolean formatter hard-codes the field name to "field_boolean".
  // This breaks the parent class's call of rewriteStatesSelector() for fixing
  // "#states". We therefore apply that behavior again here.
  if (!empty($form['settings'])) {
    FormHelper::rewriteStatesSelector($form['settings'], "fields[field_boolean][settings_edit_form]", 'options');
  }

  // Get the options form for the fallback handler.
  $fallback_form = array();
  $this->fallbackHandler
    ->buildOptionsForm($fallback_form, $form_state);

  // Remove all fields from FieldPluginBase from the fallback form, but leave
  // those in that were only added by our immediate parent,
  // \Drupal\views\Plugin\views\field\Field. (E.g., the "type" option is
  // especially prone to conflicts here.) The others come from the plugin base
  // classes and will be identical, so it would be confusing to include them
  // twice.
  $parent_keys[] = '#pre_render';
  $remove_from_fallback = array_diff_key($form, array_flip($parent_keys));
  $fallback_form = array_diff_key($fallback_form, $remove_from_fallback);

  // Fix the "#states" selectors in the fallback form, and put an additional
  // "#states" directive on it to only be visible for the corresponding
  // "field_rendering" setting.
  if ($fallback_form) {
    FormHelper::rewriteStatesSelector($fallback_form, '"options[', '"options[fallback_options][');
    $form['fallback_options'] = $fallback_form;
    $form['fallback_options']['#type'] = 'fieldset';
    $form['fallback_options']['#title'] = $this
      ->t('Render settings');
    $form['fallback_options']['#states']['visible'][':input[name="options[field_rendering]"]'] = array(
      'checked' => FALSE,
    );
  }
}