Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
66.67% |
2 / 3 |
CRAP | |
81.48% |
22 / 27 |
Field | |
0.00% |
0 / 1 |
|
75.00% |
3 / 4 |
5.16 | |
81.48% |
22 / 27 |
query | |
100.00% |
1 / 1 |
1 | |
100.00% |
6 / 6 |
|||
fields | |
100.00% |
1 / 1 |
1 | |
100.00% |
0 / 0 |
|||
prepareRow | |
0.00% |
0 / 1 |
2.07 | |
73.68% |
14 / 19 |
|||
getIds | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\field\Plugin\migrate\source\d6\Field. | |
*/ | |
namespace Drupal\field\Plugin\migrate\source\d6; | |
use Drupal\migrate\Row; | |
use Drupal\migrate_drupal\Plugin\migrate\source\DrupalSqlBase; | |
/** | |
* Drupal 6 field source from database. | |
* | |
* @MigrateSource( | |
* id = "d6_field", | |
* source_provider = "content" | |
* ) | |
*/ | |
class Field extends DrupalSqlBase { | |
/** | |
* {@inheritdoc} | |
*/ | |
public function query() { | |
$query = $this->select('content_node_field', 'cnf') | |
->fields('cnf', array( | |
'field_name', | |
'type', | |
'global_settings', | |
'required', | |
'multiple', | |
'db_storage', | |
'module', | |
'db_columns', | |
'active', | |
'locked', | |
)) | |
->distinct(); | |
// Only import fields which are actually being used. | |
$query->innerJoin('content_node_field_instance', 'cnfi', 'cnfi.field_name = cnf.field_name'); | |
return $query; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function fields() { | |
return array( | |
'field_name' => $this->t('Field name'), | |
'type' => $this->t('Type (text, integer, ....)'), | |
'widget_type' => $this->t('An instance-specific widget type'), | |
'global_settings' => $this->t('Global settings. Shared with every field instance.'), | |
'required' => $this->t('Required'), | |
'multiple' => $this->t('Multiple'), | |
'db_storage' => $this->t('DB storage'), | |
'module' => $this->t('Module'), | |
'db_columns' => $this->t('DB Columns'), | |
'active' => $this->t('Active'), | |
'locked' => $this->t('Locked'), | |
); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function prepareRow(Row $row) { | |
// The instance widget_type helps determine what D8 field type we'll use. | |
// Identify the distinct widget_types being used in D6. | |
$widget_types = $this->select('content_node_field_instance', 'cnfi') | |
->fields('cnfi', ['widget_type']) | |
->condition('field_name', $row->getSourceProperty('field_name')) | |
->distinct() | |
->orderBy('widget_type') | |
->execute() | |
->fetchCol(); | |
// Arbitrarily use the first widget_type - if there are multiples, let the | |
// migrator know. | |
$row->setSourceProperty('widget_type', $widget_types[0]); | |
if (count($widget_types) > 1) { | |
$this->migration->getIdMap()->saveMessage( | |
['field_name' => $row->getSourceProperty('field_name')], | |
$this->t('Widget types @types are used in Drupal 6 field instances: widget type @selected_type applied to the Drupal 8 base field', [ | |
'@types' => implode(', ', $widget_types), | |
'@selected_type' => $widget_types[0], | |
]) | |
); | |
} | |
// Unserialize data. | |
$global_settings = unserialize($row->getSourceProperty('global_settings')); | |
$db_columns = unserialize($row->getSourceProperty('db_columns')); | |
$row->setSourceProperty('global_settings', $global_settings); | |
$row->setSourceProperty('db_columns', $db_columns); | |
return parent::prepareRow($row); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getIds() { | |
$ids['field_name'] = array( | |
'type' => 'string', | |
'alias' => 'cnf', | |
); | |
return $ids; | |
} | |
} |