/** * {@inheritdoc} */ protected function mapToStorageRecord(EntityInterface $entity) { $record = parent::mapToStorageRecord($entity); $class = $this->fieldTypeManager->getPluginClass($record['field_type']); $record['settings'] = $class::fieldSettingsToConfigData($record['settings']); return $record; }
/** * Populates as much of the stub row as possible. * * @param \Drupal\migrate\Row $row * The row of data. */ protected function processStubRow(Row $row) { $bundle_key = $this->getKey('bundle'); if ($bundle_key && empty($row->getDestinationProperty($bundle_key))) { if (empty($this->bundles)) { throw new MigrateException('Stubbing failed, no bundles available for entity type: ' . $this->storage->getEntityTypeId()); } $row->setDestinationProperty($bundle_key, reset($this->bundles)); } // Populate any required fields not already populated. $fields = $this->entityManager->getFieldDefinitions($this->storage->getEntityTypeId(), $bundle_key); foreach ($fields as $field_name => $field_definition) { if ($field_definition->isRequired() && is_null($row->getDestinationProperty($field_name))) { // Use the configured default value for this specific field, if any. if ($default_value = $field_definition->getDefaultValueLiteral()) { $values[] = $default_value; } else { // Otherwise, ask the field type to generate a sample value. $field_type = $field_definition->getType(); /** @var \Drupal\Core\Field\FieldItemInterface $field_type_class */ $field_type_class = $this->fieldTypeManager->getPluginClass($field_definition->getType()); $values = $field_type_class::generateSampleValue($field_definition); if (is_null($values)) { // Handle failure to generate a sample value. throw new MigrateException('Stubbing failed, unable to generate value for field ' . $field_name); } } $row->setDestinationProperty($field_name, $values); } } }