You are here

public function ExtraFieldFormManager::entityFormAlter in Extra Field 8.2

Appends the renderable data from ExtraFieldForm plugins to hook_form_alter.

Parameters

array $form: The entity form array.

\Drupal\Core\Form\FormStateInterface $form_state: The form state object.

Overrides ExtraFieldFormManagerInterface::entityFormAlter

File

src/Plugin/ExtraFieldFormManager.php, line 103

Class

ExtraFieldFormManager
Manages Extra Field form plugins.

Namespace

Drupal\extra_field\Plugin

Code

public function entityFormAlter(array &$form, FormStateInterface $formState) {
  $formObject = $formState
    ->getFormObject();
  if (!$formObject instanceof ContentEntityFormInterface || $formObject instanceof ConfirmFormInterface) {
    return;
  }
  $display = $formObject
    ->getFormDisplay($formState);
  if (!$display) {
    return;
  }
  $entityType = $display
    ->getTargetEntityTypeId();
  $entityBundleKey = $this
    ->entityBundleKey($entityType, $display
    ->get('bundle'));
  foreach ($this
    ->getDefinitions() as $pluginId => $definition) {
    if (!$this
      ->matchEntityBundleKey($definition['bundles'], $entityBundleKey)) {
      continue;
    }
    $factory = $this
      ->getFactory();
    if (empty($display
      ->getComponent($this
      ->fieldName($pluginId)))) {
      continue;
    }

    /** @var ExtraFieldFormInterface $plugin */
    $plugin = $factory
      ->createInstance($pluginId);
    $fieldName = $this
      ->fieldName($pluginId);
    $plugin
      ->setEntity($formObject
      ->getEntity());
    $plugin
      ->setEntityFormDisplay($display);
    $plugin
      ->setFormMode($display
      ->get('mode'));
    $form[$fieldName] = $plugin
      ->formElement($form, $formState);
  }
}