You are here

class FieldItemListProcessor in Content Synchronizer 8

Same name and namespace in other branches
  1. 8.2 src/Plugin/content_synchronizer/type_processor/FieldItemListProcessor.php \Drupal\content_synchronizer\Plugin\content_synchronizer\type_processor\FieldItemListProcessor
  2. 3.x src/Plugin/content_synchronizer/type_processor/FieldItemListProcessor.php \Drupal\content_synchronizer\Plugin\content_synchronizer\type_processor\FieldItemListProcessor

Plugin implementation For the type processor .

Plugin annotation


@TypeProcessor(
  id = "content_synchronzer_field_item_list_type_processor",
  fieldType = "Drupal\Core\Field\FieldItemList"
)

Hierarchy

Expanded class hierarchy of FieldItemListProcessor

File

src/Plugin/content_synchronizer/type_processor/FieldItemListProcessor.php, line 19

Namespace

Drupal\content_synchronizer\Plugin\content_synchronizer\type_processor
View source
class FieldItemListProcessor extends TypeProcessorBase {

  /**
   * {@inheritdoc}
   */
  public function getExportedData(TypedData $propertyData) {
    $data = [];
    foreach ($propertyData as $order => $value) {
      $data[] = $value
        ->getValue();
    }
    $this
      ->exportIncludedImages($data);
    return $data;
  }

  /**
   * Add all the included image in the data.
   *
   * @param $data
   *   The item data.
   */
  protected function exportIncludedImages(&$data) {
    foreach ($data as &$item) {
      foreach ($item as $key => $value) {
        preg_match_all('@src="([^"]+)"@', $value, $match);
        $src = array_pop($match);
        if (!empty($src)) {
          foreach ($src as $image) {
            $this
              ->exportImage($image, $item, $key, $value);
          }
        }
      }
    }
  }

  /**
   * Add the included image in the export.
   *
   * @param string $image
   *   The image src.
   * @param array $data
   *   The item data.
   * @param string $key
   *   The item key.
   * @param mixed $value
   *   The item value.
   */
  protected function exportImage($image, &$data, $key, $value) {
    $fileNameData = explode('/files/', urldecode($image));
    $fileName = end($fileNameData);

    /** @var \Drupal\file\Entity\File $file */
    $file = \Drupal::entityQuery('file')
      ->condition('uri', '%://' . $fileName, 'LIKE')
      ->execute();
    if ($file = File::load(reset($file))) {
      $plugin = $this->pluginManager
        ->getInstanceByEntityType($file
        ->getEntityTypeId());
      if ($fileGid = $plugin
        ->export($file)) {
        $data[$key] = str_replace($file
          ->uuid(), $fileGid, $data[$key]);
        $data['included_images'] = $fileGid;
      }
    }
  }

  /**
   * {@inheritdoc}
   */
  public function initImportedEntity(Entity $entityToImport, $propertyId, array $data) {
    if (array_key_exists($propertyId, $data)) {
      foreach ($data[$propertyId] as $item) {
        if (array_key_exists('included_images', $item)) {
          $this
            ->importIncludedImage($item['included_images'], $item);
        }
      }
      $entityToImport
        ->set($propertyId, $data[$propertyId]);
    }
  }

  /**
   * Import the included files.
   *
   * @param string $fileGID
   *   The file export gid.
   */
  protected function importIncludedImage($fileGID, &$item) {
    if ($entityData = ImportProcessor::getCurrentImportProcessor()
      ->getImport()
      ->getEntityDataFromGid($fileGID)) {

      // import the file.
      $plugin = $this->pluginManager
        ->getInstanceByEntityType($this->referenceManager
        ->getEntityTypeFromGid($fileGID));
      $file = $plugin
        ->import($entityData);

      // set the file uuid in the data value.
      unset($item['included_images']);
      foreach ($item as $key => $value) {
        $item[$key] = str_replace($fileGID, $file
          ->uuid(), $value);
      }
    }
  }

}

Members

Namesort descending Modifiers Type Description Overrides
DependencySerializationTrait::$_entityStorages protected property An array of entity type IDs keyed by the property name of their storages.
DependencySerializationTrait::$_serviceIds protected property An array of service IDs keyed by property name used for serialization.
DependencySerializationTrait::__sleep public function 1
DependencySerializationTrait::__wakeup public function 2
FieldItemListProcessor::exportImage protected function Add the included image in the export.
FieldItemListProcessor::exportIncludedImages protected function Add all the included image in the data.
FieldItemListProcessor::getExportedData public function Get the data to export. Overrides TypeProcessorBase::getExportedData
FieldItemListProcessor::importIncludedImage protected function Import the included files.
FieldItemListProcessor::initImportedEntity public function Init the $propertyId value in the entity to import. Overrides TypeProcessorBase::initImportedEntity
MessengerTrait::$messenger protected property The messenger. 29
MessengerTrait::messenger public function Gets the messenger. 29
MessengerTrait::setMessenger public function Sets the messenger.
PluginBase::$configuration protected property Configuration information passed into the plugin. 1
PluginBase::$pluginDefinition protected property The plugin implementation definition. 1
PluginBase::$pluginId protected property The plugin_id.
PluginBase::DERIVATIVE_SEPARATOR constant A string which is used to separate base plugin IDs from the derivative ID.
PluginBase::getBaseId public function Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface::getBaseId
PluginBase::getDerivativeId public function Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface::getDerivativeId
PluginBase::getPluginDefinition public function Gets the definition of the plugin implementation. Overrides PluginInspectionInterface::getPluginDefinition 3
PluginBase::getPluginId public function Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface::getPluginId
PluginBase::isConfigurable public function Determines if the plugin is configurable.
StringTranslationTrait::$stringTranslation protected property The string translation service. 1
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.
TypeProcessorBase::$pluginManager protected property The entity processor plugin manager.
TypeProcessorBase::$referenceManager protected property The global reference manager service.
TypeProcessorBase::__construct public function Constructs a \Drupal\Component\Plugin\PluginBase object. Overrides PluginBase::__construct 1