You are here

function entity_browser_entity_form_inline_entity_form_reference_form_alter in Entity Browser 8.2

Same name and namespace in other branches
  1. 8 modules/entity_form/entity_browser_entity_form.module \entity_browser_entity_form_inline_entity_form_reference_form_alter()

Implements hook_inline_entity_form_reference_form_alter().

File

modules/entity_form/entity_browser_entity_form.module, line 22
Hook implementations for entity_browser_entity_form.module.

Code

function entity_browser_entity_form_inline_entity_form_reference_form_alter(&$reference_form, FormStateInterface &$form_state) {

  /** @var \Drupal\field\FieldConfigInterface $instance */
  $instance = $form_state
    ->get([
    'inline_entity_form',
    $reference_form['#ief_id'],
    'instance',
  ]);

  /** @var \Drupal\Core\Entity\Display\EntityFormDisplayInterface $form_display */
  $entity_form_id = $instance
    ->getTargetEntityTypeId() . '.' . $instance
    ->getTargetBundle() . '.default';

  // TODO - 'default' might become configurable or something else in the future.
  // See https://www.drupal.org/node/2510274
  $form_display = \Drupal::entityTypeManager()
    ->getStorage('entity_form_display')
    ->load($entity_form_id);
  $widget = $form_display
    ->getRenderer($instance
    ->getName());
  $entity_browser_id = $widget
    ->getThirdPartySetting('entity_browser_entity_form', 'entity_browser_id', '_none');
  if ($entity_browser_id === '_none') {
    return;
  }

  // Fetch the number of currently selected entities, if any.
  $count_existing_selection = count($form_state
    ->get([
    'inline_entity_form',
    $reference_form['#ief_id'],
    'entities',
  ]));
  $cardinality = FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED;
  if ($instance
    ->getFieldStorageDefinition()
    ->get('cardinality') !== $cardinality) {
    $cardinality = $instance
      ->getFieldStorageDefinition()
      ->get('cardinality') - $count_existing_selection;
  }
  $bundles = $reference_form['entity_id']['#selection_settings']['target_bundles'];
  $target_entity_type = $reference_form['entity_id']['#target_type'];
  unset($reference_form['entity_id']);
  $reference_form['entity_browser'] = [
    '#type' => 'entity_browser',
    '#entity_browser' => $entity_browser_id,
    '#cardinality' => $cardinality,
    '#entity_browser_validators' => [
      'entity_type' => [
        'type' => $target_entity_type,
      ],
    ],
    '#widget_context' => [
      'target_bundles' => $bundles,
      'target_entity_type' => $target_entity_type,
      'cardinality' => $cardinality,
    ],
  ];
  $reference_form['#attached']['library'][] = 'entity_browser_entity_form/ief_autocomplete';
  $reference_form['actions']['ief_reference_save']['#ajax']['event'] = 'entities-selected';

  // Add custom validation and submit callbacks as we need to handle
  // multi-value cases.
  $reference_form['#element_validate'][0] = 'entity_browser_entity_form_reference_form_validate';
  $reference_form['#ief_element_submit'][0] = 'entity_browser_entity_form_reference_form_submit';
}