ContentTypeCloneHelper.php in Content Type Clone 8
File
src/Helpers/ContentTypeCloneHelper.php
View source
<?php
namespace Drupal\content_type_clone\Helpers;
use Drupal\node\Entity\NodeType;
use Drupal\node\Entity\Node;
use Drupal\field\Entity\FieldConfig;
use Drupal\field\Entity\FieldStorageConfig;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Drupal\Core\Field\BaseFieldDefinition;
class ContentTypeCloneHelper {
public static function replaceInArray($find, $replace, $arr) {
$newArray = array();
foreach ($arr as $key => $value) {
if (is_array($value)) {
$newArray[$key] = self::replaceInArray($find, $replace, $value);
}
else {
$newArray[$key] = str_replace($find, $replace, $value);
}
}
return $newArray;
}
public static function copyFieldDisplay($display, $mode, $data) {
$storage = 'entity_' . $display . '_display';
$sourceFieldName = $data['field']
->getName();
$sourceDisplay = \Drupal::entityTypeManager()
->getStorage($storage)
->load('node.' . $data['values']['source_machine_name'] . '.' . $mode)
->toArray();
$targetDisplay = ContentTypeCloneHelper::replaceInArray($data['values']['source_machine_name'], $data['values']['target_machine_name'], $sourceDisplay);
unset($targetDisplay['uuid']);
unset($targetDisplay['_core']);
if ($display == 'form') {
$displayConfig = \Drupal::configFactory()
->getEditable('core.' . $storage . '.node.' . $data['values']['target_machine_name'] . '.' . $mode)
->setData($targetDisplay)
->save();
}
else {
if ($display == 'view') {
$entityDisplay = entity_get_display('node', $data['values']['target_machine_name'], $mode);
if (isset($targetDisplay['content'][$sourceFieldName])) {
$entityDisplay
->setComponent($sourceFieldName, $targetDisplay['content'][$sourceFieldName]);
}
if (isset($targetDisplay['hidden'][$sourceFieldName]) && (int) $targetDisplay['hidden'][$sourceFieldName] == 1) {
$entityDisplay
->removeComponent($sourceFieldName);
}
$entityDisplay
->save();
}
}
}
}