paragraphs-8.x-1.11/src/Plugin/migrate/source/d7/FieldCollectionItem.php
src/Plugin/migrate/source/d7/FieldCollectionItem.php
<?php
namespace Drupal\paragraphs\Plugin\migrate\source\d7;
use Drupal\migrate\Row;
use Drupal\paragraphs\Plugin\migrate\field\FieldCollection;
/**
* Field Collection Item source plugin.
*
* Available configuration keys:
* - field_name: (optional) If supplied, this will only return field collections
* of that particular type.
*
* @MigrateSource(
* id = "d7_field_collection_item",
* source_module = "field_collection",
* )
*/
class FieldCollectionItem extends FieldableEntity {
/**
* Join string for getting current revisions.
*/
const JOIN = 'f.revision_id = fr.revision_id';
/**
* {@inheritdoc}
*/
public function defaultConfiguration() {
return [
'field_name' => '',
] + parent::defaultConfiguration();
}
/**
* {@inheritdoc}
*/
public function query() {
$query = $this->select('field_collection_item', 'f')
->fields('f', [
'item_id',
'field_name',
'archived',
])
->fields('fr', ['revision_id']);
$query->innerJoin('field_collection_item_revision', 'fr', static::JOIN);
// This configuration item may be set by a deriver to restrict the
// bundles retrieved.
if ($this->configuration['field_name']) {
$query->condition('f.field_name', $this->configuration['field_name']);
$query->addField('fc', 'entity_type', 'parent_type');
$query->addField('fc', 'entity_id', 'parent_id');
$query->innerJoin('field_revision_' . $this->configuration['field_name'], 'fc', 'fc.' . $this->configuration['field_name'] . '_value = f.item_id and fc.' . $this->configuration['field_name'] . '_revision_id = f.revision_id');
}
return $query;
}
/**
* {@inheritdoc}
*/
public function prepareRow(Row $row) {
// Remove field_ prefix for new bundle.
$bundle = $row->getSourceProperty('field_name');
$bundle = substr($bundle, FieldCollection::FIELD_COLLECTION_PREFIX_LENGTH);
$row->setSourceProperty('bundle', $bundle);
// Get Field API field values.
$field_names = array_keys($this->getFields('field_collection_item', $row->getSourceProperty('field_name')));
$item_id = $row->getSourceProperty('item_id');
$revision_id = $row->getSourceProperty('revision_id');
foreach ($field_names as $field_name) {
$value = $this->getFieldValues('field_collection_item', $field_name, $item_id, $revision_id);
$row->setSourceProperty($field_name, $value);
}
return parent::prepareRow($row);
}
/**
* {@inheritdoc}
*/
public function fields() {
$fields = [
'item_id' => $this->t('The field_collection_item id'),
'revision_id' => $this->t('The field_collection_item revision id'),
'bundle' => $this->t('The field_collection bundle'),
'field_name' => $this->t('The field_collection field_name'),
'parent_type' => $this->t('The type of the parent entity'),
'parent_id' => $this->t('The identifier of the parent entity'),
];
return $fields;
}
/**
* {@inheritdoc}
*/
public function getIds() {
return [
'item_id' => [
'type' => 'integer',
'alias' => 'f',
],
];
}
}
