You are here

protected function EntityContentBase::processStubRow in Zircon Profile 8.0

Same name and namespace in other branches
  1. 8 core/modules/migrate/src/Plugin/migrate/destination/EntityContentBase.php \Drupal\migrate\Plugin\migrate\destination\EntityContentBase::processStubRow()

Do as much population of the stub row as we can.

Parameters

\Drupal\migrate\Row $row: The row of data.

3 calls to EntityContentBase::processStubRow()
EntityComment::processStubRow in core/modules/comment/src/Plugin/migrate/destination/EntityComment.php
Do as much population of the stub row as we can.
EntityFile::processStubRow in core/modules/file/src/Plugin/migrate/destination/EntityFile.php
Do as much population of the stub row as we can.
EntityUser::processStubRow in core/modules/user/src/Plugin/migrate/destination/EntityUser.php
Do as much population of the stub row as we can.
3 methods override EntityContentBase::processStubRow()
EntityComment::processStubRow in core/modules/comment/src/Plugin/migrate/destination/EntityComment.php
Do as much population of the stub row as we can.
EntityFile::processStubRow in core/modules/file/src/Plugin/migrate/destination/EntityFile.php
Do as much population of the stub row as we can.
EntityUser::processStubRow in core/modules/user/src/Plugin/migrate/destination/EntityUser.php
Do as much population of the stub row as we can.

File

core/modules/migrate/src/Plugin/migrate/destination/EntityContentBase.php, line 160
Contains \Drupal\migrate\Plugin\migrate\destination\EntityContentBase.

Class

EntityContentBase
The 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));
  }

  // 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);
          break;
        }
      }
      $row
        ->setDestinationProperty($field_name, $values);
    }
  }
}