select('content_node_field', 'cnf') ->fields('cnf', [ '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 [ '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'] = [ 'type' => 'string', 'alias' => 'cnf', ]; return $ids; } }