paragraphs-8.x-1.11/src/Feeds/Target/Paragraphs.php
src/Feeds/Target/Paragraphs.php
<?php namespace Drupal\paragraphs\Feeds\Target; use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Session\AccountInterface; use Drupal\feeds\Feeds\Target\Text; use Drupal\feeds\Plugin\Type\Target\ConfigurableTargetInterface; use Symfony\Component\DependencyInjection\ContainerInterface; /** * Feeds target plugin for Paragraphs fields. * * @FeedsTarget( * id = "paragraphs", * field_types = {"entity_reference_revisions"}, * ) */ class Paragraphs extends Text implements ConfigurableTargetInterface { /** * The paragraph storage. * * @var \Drupal\Core\Entity\EntityStorageInterface */ protected $paragraphStorage; /** * The paragraphs type storage. * * @var \Drupal\Core\Entity\EntityStorageInterface */ protected $paragraphsTypeStorage; /** * The field config storage. * * @var \Drupal\Core\Entity\EntityStorageInterface */ protected $fieldConfigStorage; /** * Constructs the target plugin. */ public function __construct(array $configuration, $plugin_id, array $plugin_definition, EntityTypeManagerInterface $entity_type_manager, AccountInterface $current_user) { parent::__construct($configuration, $plugin_id, $plugin_definition, $current_user); $this->paragraphStorage = $entity_type_manager->getStorage('paragraph'); $this->paragraphsTypeStorage = $entity_type_manager->getStorage('paragraphs_type'); $this->fieldConfigStorage = $entity_type_manager->getStorage('field_config'); } /** * {@inheritdoc} */ public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { return new static( $configuration, $plugin_id, $plugin_definition, $container->get('entity_type.manager'), $container->get('current_user'), ); } /** * {@inheritdoc} */ public function defaultConfiguration() { return parent::defaultConfiguration() + [ 'paragraphs_type' => NULL, 'paragraph_field' => NULL, ]; } /** * {@inheritdoc} */ public function buildConfigurationForm(array $form, FormStateInterface $form_state) { $form['paragraphs_type'] = [ '#type' => 'select', '#title' => $this->t('Paragraphs type'), '#required' => TRUE, '#options' => array_map(function(EntityInterface $paragraphs_type) { return $paragraphs_type->label(); }, $this->paragraphsTypeStorage->loadMultiple()), '#default_value' => $this->configuration['paragraphs_type'], ]; // Load and filter field configs to create options. /** @var \Drupal\field\FieldConfigInterface[] $field_configs */ $field_configs = $this->fieldConfigStorage->loadByProperties([ 'entity_type' => 'paragraph', 'bundle' => $this->configuration['paragraphs_type'], ]); $field_options = []; foreach ($field_configs as $field_config) { if (in_array($field_config->getType(), ['text', 'text_long', 'text_with_summary'])) { $field_options[$field_config->getName()] = $field_config->label(); } } $form['paragraph_field'] = [ '#type' => 'select', '#title' => $this->t('Paragraph field'), '#description' => $this->t('<strong>Note:</strong> Field options do not appear until a type has been chosen and saved.'), '#options' => $field_options, ]; $form = parent::buildConfigurationForm($form, $form_state); return $form; } /** * {@inheritdoc} */ public function getSummary() { $summary = parent::getSummary(); $paragraphs_type_id = $this->configuration['paragraphs_type']; $paragraph_field_name = $this->configuration['paragraph_field']; if ($paragraphs_type_id && $paragraphs_type = $this->paragraphsTypeStorage->load($paragraphs_type_id)) { if ($paragraph_field_name && $paragraph_field = $this->fieldConfigStorage->load('paragraph.' . $paragraphs_type_id . '.' . $paragraph_field_name)) { $summary[] = $this->t('Using the %field field on a %type paragraph.', [ '%field' => $paragraph_field->label(), '%type' => $paragraphs_type->label(), ]); } } else { $summary[] = $this->t('Not yet configured.'); } return $summary; } /** * {@inheritdoc} */ protected function prepareValue($delta, array &$values) { parent::prepareValue($delta, $values); $paragraph = $this->paragraphStorage->create([ 'type' => $this->configuration['paragraphs_type'], $this->configuration['paragraph_field'] => $values, ]); $values = ['entity' => $paragraph]; } }