You are here

protected function DynamicEntityReferenceItem::targetTypeFieldSettingsForm in Dynamic Entity Reference 8

Same name and namespace in other branches
  1. 8.2 src/Plugin/Field/FieldType/DynamicEntityReferenceItem.php \Drupal\dynamic_entity_reference\Plugin\Field\FieldType\DynamicEntityReferenceItem::targetTypeFieldSettingsForm()

Returns a form for single target type settings.

This is same as \Drupal\Core\Field\Plugin\Field\FieldType\EntityReferenceItem::fieldSettingsForm() but it uses dynamic_entity_reference_selection plugin manager instead of entity_reference_selection plugin manager.

Parameters

array $form: The form where the settings form is being included in.

\Drupal\Core\Form\FormStateInterface $form_state: The form state of the (entire) configuration form.

string $target_type: The target entity type id.

Return value

array The form definition for the field settings.

1 call to DynamicEntityReferenceItem::targetTypeFieldSettingsForm()
DynamicEntityReferenceItem::fieldSettingsForm in src/Plugin/Field/FieldType/DynamicEntityReferenceItem.php
Returns a form for the field-level settings.

File

src/Plugin/Field/FieldType/DynamicEntityReferenceItem.php, line 292

Class

DynamicEntityReferenceItem
Defines the 'dynamic_entity_reference' entity field type.

Namespace

Drupal\dynamic_entity_reference\Plugin\Field\FieldType

Code

protected function targetTypeFieldSettingsForm(array $form, FormStateInterface $form_state, $target_type) {

  /** @var \Drupal\field\FieldConfigInterface $field */
  $field = $form_state
    ->getFormObject()
    ->getEntity();
  $field_settings = $field
    ->getSettings();

  /** @var \Drupal\dynamic_entity_reference\SelectionPluginManager $manager */
  $manager = \Drupal::service('plugin.manager.dynamic_entity_reference_selection');

  // Get all selection plugins for this entity type.
  $selection_plugins = $manager
    ->getSelectionGroups($target_type);
  $handlers_options = [];
  foreach (array_keys($selection_plugins) as $selection_group_id) {

    // We only display base plugins (e.g. 'default', 'views', ...) and not
    // entity type specific plugins (e.g. 'default:node', 'default:user',
    // ...).
    if (array_key_exists($selection_group_id, $selection_plugins[$selection_group_id])) {
      $handlers_options[$selection_group_id] = Html::escape($selection_plugins[$selection_group_id][$selection_group_id]['label']);
    }
    elseif (array_key_exists($selection_group_id . ':' . $target_type, $selection_plugins[$selection_group_id])) {
      $selection_group_plugin = $selection_group_id . ':' . $target_type;
      $handlers_options[$selection_group_plugin] = Html::escape($selection_plugins[$selection_group_id][$selection_group_plugin]['base_plugin_label']);
    }
  }
  $form = [
    '#type' => 'container',
    '#process' => [
      [
        EntityReferenceItem::class,
        'fieldSettingsAjaxProcess',
      ],
    ],
    '#element_validate' => [
      [
        DynamicEntityReferenceItem::class,
        'fieldSettingsFormValidate',
      ],
    ],
  ];
  $form['handler'] = [
    '#type' => 'details',
    '#title' => t('Reference type'),
    '#open' => TRUE,
    '#tree' => TRUE,
    '#process' => [
      [
        EntityReferenceItem::class,
        'formProcessMergeParent',
      ],
    ],
  ];
  $form['handler']['handler'] = [
    '#type' => 'select',
    '#title' => t('Reference method'),
    '#options' => $handlers_options,
    '#default_value' => $field_settings[$target_type]['handler'],
    '#required' => TRUE,
    '#ajax' => TRUE,
    '#limit_validation_errors' => [],
  ];
  $form['handler']['handler_submit'] = [
    '#type' => 'submit',
    '#value' => t('Change handler'),
    '#limit_validation_errors' => [],
    '#attributes' => [
      'class' => [
        'js-hide',
      ],
    ],
    '#submit' => [
      'entity_reference_settings_ajax_submit',
    ],
  ];
  $form['handler']['handler_settings'] = [
    '#type' => 'container',
    '#attributes' => [
      'class' => [
        'entity_reference-settings',
      ],
    ],
  ];
  $handler = $manager
    ->getSelectionHandler($field, NULL, $target_type);
  $form['handler']['handler_settings'] += $handler
    ->buildConfigurationForm([], $form_state);
  return $form;
}