function EntityContentBase::processStubRow

Same name in other branches
  1. 9 core/modules/migrate/src/Plugin/migrate/destination/EntityContentBase.php \Drupal\migrate\Plugin\migrate\destination\EntityContentBase::processStubRow()
  2. 8.9.x core/modules/migrate/src/Plugin/migrate/destination/EntityContentBase.php \Drupal\migrate\Plugin\migrate\destination\EntityContentBase::processStubRow()
  3. 11.x core/modules/migrate/src/Plugin/migrate/destination/EntityContentBase.php \Drupal\migrate\Plugin\migrate\destination\EntityContentBase::processStubRow()

Overrides Entity::processStubRow

3 calls to EntityContentBase::processStubRow()
EntityComment::processStubRow in core/modules/comment/src/Plugin/migrate/destination/EntityComment.php
EntityContentComplete::getEntity in core/modules/migrate/src/Plugin/migrate/destination/EntityContentComplete.php
Gets the entity.
EntityUser::processStubRow in core/modules/user/src/Plugin/migrate/destination/EntityUser.php
3 methods override EntityContentBase::processStubRow()
EntityComment::processStubRow in core/modules/comment/src/Plugin/migrate/destination/EntityComment.php
EntityFile::processStubRow in core/modules/file/src/Plugin/migrate/destination/EntityFile.php
Populates as much of the stub row as possible.
EntityUser::processStubRow in core/modules/user/src/Plugin/migrate/destination/EntityUser.php

File

core/modules/migrate/src/Plugin/migrate/destination/EntityContentBase.php, line 322

Class

EntityContentBase
Provides destination class for all content entities lacking a specific class.

Namespace

Drupal\migrate\Plugin\migrate\destination

Code

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));
    }
    $bundle = $row->getDestinationProperty($bundle_key) ?? $this->storage
        ->getEntityTypeId();
    // Populate any required fields not already populated.
    $fields = $this->entityFieldManager
        ->getFieldDefinitions($this->storage
        ->getEntityTypeId(), $bundle);
    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 {
                
                /** @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);
        }
    }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.