View source
<?php
namespace Drupal\field\Plugin\migrate\source\d7;
use Drupal\migrate\Row;
use Drupal\migrate_drupal\Plugin\migrate\source\DrupalSqlBase;
class Field extends DrupalSqlBase {
public function query() {
$query = $this
->select('field_config', 'fc')
->distinct()
->fields('fc')
->fields('fci', [
'entity_type',
])
->condition('fc.active', 1)
->condition('fc.storage_active', 1)
->condition('fc.deleted', 0)
->condition('fci.deleted', 0);
$query
->join('field_config_instance', 'fci', '[fc].[id] = [fci].[field_id]');
if ($this
->moduleExists('title')) {
$title_fields = [
'title_field',
'name_field',
'description_field',
'subject_field',
];
$query
->condition('fc.field_name', $title_fields, 'NOT IN');
}
return $query;
}
public function fields() {
return [
'id' => $this
->t('The field ID.'),
'field_name' => $this
->t('The field name.'),
'type' => $this
->t('The field type.'),
'module' => $this
->t('The module that implements the field type.'),
'active' => $this
->t('The field status.'),
'storage_type' => $this
->t('The field storage type.'),
'storage_module' => $this
->t('The module that implements the field storage type.'),
'storage_active' => $this
->t('The field storage status.'),
'locked' => $this
->t('Locked'),
'data' => $this
->t('The field data.'),
'cardinality' => $this
->t('Cardinality'),
'translatable' => $this
->t('Translatable'),
'deleted' => $this
->t('Deleted'),
'instances' => $this
->t('The field instances.'),
];
}
public function prepareRow(Row $row, $keep = TRUE) {
foreach (unserialize($row
->getSourceProperty('data')) as $key => $value) {
$row
->setSourceProperty($key, $value);
}
$instances = $this
->select('field_config_instance', 'fci')
->fields('fci')
->condition('field_name', $row
->getSourceProperty('field_name'))
->condition('entity_type', $row
->getSourceProperty('entity_type'))
->execute()
->fetchAll();
$row
->setSourceProperty('instances', $instances);
return parent::prepareRow($row);
}
public function getIds() {
return [
'field_name' => [
'type' => 'string',
'alias' => 'fc',
],
'entity_type' => [
'type' => 'string',
'alias' => 'fci',
],
];
}
}