You are here

public static function ContentTypeCloneHelper::copyFieldDisplay in Content Type Clone 8

1 call to ContentTypeCloneHelper::copyFieldDisplay()
CloneContentType::cloneContentTypeField in src/Form/CloneContentType.php
Clones a content type field.

File

src/Helpers/ContentTypeCloneHelper.php, line 45

Class

ContentTypeCloneHelper
Class ContentTypeCloneHelper.

Namespace

Drupal\content_type_clone\Helpers

Code

public static function copyFieldDisplay($display, $mode, $data) {

  // Prepare the storage string
  $storage = 'entity_' . $display . '_display';

  //Get the source field name.
  $sourceFieldName = $data['field']
    ->getName();

  //Get the source form display
  $sourceDisplay = \Drupal::entityTypeManager()
    ->getStorage($storage)
    ->load('node.' . $data['values']['source_machine_name'] . '.' . $mode)
    ->toArray();

  //Prepare the target form display
  $targetDisplay = ContentTypeCloneHelper::replaceInArray($data['values']['source_machine_name'], $data['values']['target_machine_name'], $sourceDisplay);
  unset($targetDisplay['uuid']);
  unset($targetDisplay['_core']);

  //Save the target display
  if ($display == 'form') {

    //Save the form display
    $displayConfig = \Drupal::configFactory()
      ->getEditable('core.' . $storage . '.node.' . $data['values']['target_machine_name'] . '.' . $mode)
      ->setData($targetDisplay)
      ->save();
  }
  else {
    if ($display == 'view') {

      //Save the view display
      $entityDisplay = entity_get_display('node', $data['values']['target_machine_name'], $mode);
      if (isset($targetDisplay['content'][$sourceFieldName])) {
        $entityDisplay
          ->setComponent($sourceFieldName, $targetDisplay['content'][$sourceFieldName]);
      }

      //Hide the field if needed
      if (isset($targetDisplay['hidden'][$sourceFieldName]) && (int) $targetDisplay['hidden'][$sourceFieldName] == 1) {
        $entityDisplay
          ->removeComponent($sourceFieldName);
      }

      //Save the display
      $entityDisplay
        ->save();
    }
  }
}