content_sync-8.x-2.x-dev/src/Normalizer/ParagraphEntityNormalizer.php

src/Normalizer/ParagraphEntityNormalizer.php
<?php

namespace Drupal\content_sync\Normalizer;

use Drupal\Core\Entity\ContentEntityInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Entity\EntityTypeRepositoryInterface;
use Drupal\Core\Entity\EntityFieldManagerInterface;
use Drupal\Core\Entity\EntityRepositoryInterface;
use Drupal\content_sync\ContentSyncManager;
use Drupal\content_sync\Plugin\SyncNormalizerDecoratorManager;

/**
 * Paragraph entity normalizer class.
 */
class ParagraphEntityNormalizer extends ContentEntityNormalizer {

  /**
   * The interface or class that this Normalizer supports.
   *
   * @var string
   */
  protected $supportedInterfaceOrClass = 'Drupal\paragraphs\Entity\Paragraph';

  /**
   * The entity repository.
   *
   * @var \Drupal\Core\Entity\EntityRepositoryInterface
   */
  protected $entityRepository;

  /**
   * Constructs an EntityNormalizer object.
   *
   * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
   *   The entity type manager.
   * @param \Drupal\Core\Entity\EntityTypeRepositoryInterface $entity_type_repository
   *   The entity type repository.
   * @param \Drupal\Core\Entity\EntityFieldManagerInterface $entity_field_manager
   *   The entity field manager.
   * @param SyncNormalizerDecoratorManager $decorator_manager
   * @param EntityRepositoryInterface $entityRepository
   */
  public function __construct(EntityTypeManagerInterface $entity_type_manager, EntityTypeRepositoryInterface $entity_type_repository, EntityFieldManagerInterface $entity_field_manager, SyncNormalizerDecoratorManager $decorator_manager, EntityRepositoryInterface $entityRepository) {
    parent::__construct($entity_type_manager, $entity_type_repository, $entity_field_manager, $decorator_manager);
    $this->entityRepository = $entityRepository;
  }


  /**
   * {@inheritdoc}
   */
  public function denormalize($data, $class, $format = NULL, array $context = []): mixed {
    if(isset($data['parent_id']['target_uuid']) &&
       isset($data['parent_id']['target_type']) ) {
      $referenced_entity_uuid = $data['parent_id']['target_uuid'];
      $referenced_entity_type = $data['parent_id']['target_type'];
      if ($referenced_entity = $this->entityRepository->loadEntityByUuid($referenced_entity_type, $referenced_entity_uuid)) {
        $data["parent_id"]["value"] = $referenced_entity->id();
        unset($data['parent_id']['target_uuid']);
        unset($data['parent_id']['target_type']);
      }
    }
    $entity = parent::denormalize($data, $class, $format, $context);
    return $entity;
  }

  /**
   * {@inheritdoc}
   */
  public function normalize($object, $format = NULL, array $context = []): array|\ArrayObject|bool|float|int|NULL|string {
    $normalized_data = parent::normalize($object, $format, $context);
    if ($object->getParentEntity()){
      // We are only interested in content entities.
      $entity = $object->getParentEntity();
      $reflection = new \ReflectionClass($entity);
      if ($reflection->implementsInterface(ContentEntityInterface::class)) {
        $target_type = $entity->getEntityTypeId();
        $target_uuid = $entity->uuid();
        $ids = [
          $target_type,
          $entity->bundle(),
          $target_uuid,
        ];
        $dependency = implode(ContentSyncManager::DELIMITER, $ids);
        // Add the target entity UUID and type to the normalized output values.
        $normalized_data['parent_id']['target_type'] = $target_type;
        $normalized_data['parent_id']['target_uuid'] = $target_uuid;
        // Include a dependency
        $normalized_data['_content_sync']['entity_dependencies'][$target_type][] = $dependency;
        // Remove main property - we set target_uuid
        if (!empty($normalized_data['parent_id'][0])) {
          unset($normalized_data['parent_id'][0]);
        }
      }
    }
    // Remove target revision id as we are not syncing revisions.
        if (isset($normalized_data['revision_id'])){
          unset($normalized_data['revision_id']);
          unset($normalized_data['revision_default']);
          unset($normalized_data['isDefaultRevision']);
          unset($normalized_data['revision_translation_affected']);
        }
    return $normalized_data;
  }
}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc