You are here

protected function FieldManager::createFormDisplay in Scheduled Updates 8

Create a form display for a newly clone field.

This function attempts to use same setting settings as the source field.

Parameters

\Drupal\scheduled_updates\ScheduledUpdateTypeInterface $scheduled_update_type:

$field_name:

$field_config_id:

$entity_type:

$definition: Source field definition

$new_field_name:

1 call to FieldManager::createFormDisplay()
FieldManager::cloneField in src/FieldManager.php
[@inheritdoc}

File

src/FieldManager.php, line 311
Contains \Drupal\scheduled_updates\FieldManager.

Class

FieldManager
Field Manager for handling fields for Scheduled Updates.

Namespace

Drupal\scheduled_updates

Code

protected function createFormDisplay(ScheduledUpdateTypeInterface $scheduled_update_type, $field_config_id, FieldStorageDefinitionInterface $definition, $new_field_name) {
  $destination_bundle = $scheduled_update_type
    ->id();
  $field_name = $definition
    ->getName();
  $entity_type = $scheduled_update_type
    ->getUpdateEntityType();

  /** @var EntityFormDisplay $destination_form_display */
  $destination_form_display = EntityFormDisplay::load("scheduled_update.{$destination_bundle}.default");
  if (empty($destination_form_display)) {
    $destination_form_display = EntityFormDisplay::create([
      'targetEntityType' => 'scheduled_update',
      'bundle' => $destination_bundle,
      'mode' => 'default',
      'status' => TRUE,
    ]);
  }
  $display_options = [];
  if ($field_config_id) {
    $parts = explode('.', $field_config_id);
    $source_bundle = $parts[1];

    /** @var EntityFormDisplay $source_form_display */
    $source_form_display = EntityFormDisplay::load("{$entity_type}.{$source_bundle}.default");
    $display_options = $source_form_display
      ->getComponent($field_name);
  }
  else {
    if ($definition instanceof BaseFieldDefinition) {
      $display_options = $definition
        ->getDisplayOptions('form');
      if (empty($display_options)) {
        if ($definition
          ->getType()) {

          // Provide default display for base boolean fields that don't have their own form display
          $display_options = [
            'type' => 'boolean_checkbox',
            'settings' => [
              'display_label' => TRUE,
            ],
          ];
        }
      }
    }
  }
  if (empty($display_options)) {
    $display_options = [];
  }
  if ($destination_form_display) {
    $destination_form_display
      ->setComponent($new_field_name, $display_options);
    $destination_form_display
      ->save();
  }
  else {

    // Alert user if display options could not be created.
    // @todo Create default display options even none on source.
    \Drupal::messenger()
      ->addWarning($this
      ->t('Form display options could not be created for @field they will have to be created manually.', [
      '@field' => $field_name,
    ]));
  }
}