You are here

private function MigrateExecutable::importRow in Migrate Manifest 3.x

Same name and namespace in other branches
  1. 8.2 src/MigrateExecutable.php \Drupal\migrate_manifest\MigrateExecutable::importRow()
  2. 8 src/MigrateExecutable.php \Drupal\migrate_manifest\MigrateExecutable::importRow()

Helper method that imports a single row.

Parameters

\Drupal\migrate\Row $row:

\Drupal\migrate\Plugin\MigrateDestinationInterface $destination:

1 call to MigrateExecutable::importRow()
MigrateExecutable::import in src/MigrateExecutable.php
Performs an import operation - migrate items from source to destination.

File

src/MigrateExecutable.php, line 93

Class

MigrateExecutable

Namespace

Drupal\migrate_manifest

Code

private function importRow(Row $row, MigrateDestinationInterface $destination) {
  $id_map = $this->migration
    ->getIdMap();

  // Hide values in internal property so saveMessages can use them.
  $this->sourceIdValues = $row
    ->getSourceIdValues();
  try {
    $this
      ->processRow($row);
    $this
      ->getEventDispatcher()
      ->dispatch(MigrateEvents::PRE_ROW_SAVE, new MigratePreRowSaveEvent($this->migration, $this->message, $row));
    $destination_ids = $id_map
      ->lookupDestinationIds($this->sourceIdValues);
    $destination_id_values = $destination_ids ? reset($destination_ids) : [];
    $destination_id_values = $destination
      ->import($row, $destination_id_values);
    $this
      ->getEventDispatcher()
      ->dispatch(MigrateEvents::POST_ROW_SAVE, new MigratePostRowSaveEvent($this->migration, $this->message, $row, $destination_id_values));
    if ($destination_id_values) {

      // We do not save an idMap entry for config.
      if ($destination_id_values !== TRUE) {
        $id_map
          ->saveIdMapping($row, $destination_id_values, $this->sourceRowStatus, $destination
          ->rollbackAction());
      }
    }
    else {
      $id_map
        ->saveIdMapping($row, [], MigrateIdMapInterface::STATUS_FAILED);
      if (!$id_map
        ->messageCount()) {
        $message = $this
          ->t('New object was not saved, no error provided');
        $this
          ->saveMessage($message);
        $this->message
          ->display($message);
      }
    }
  } catch (MigrateException $e) {
    $id_map
      ->saveIdMapping($row, [], $e
      ->getStatus());
    $this
      ->saveMessage($e
      ->getMessage(), $e
      ->getLevel());
  } catch (MigrateSkipRowException $e) {
    if ($e
      ->getSaveToMap()) {
      $id_map
        ->saveIdMapping($row, [], MigrateIdMapInterface::STATUS_IGNORED);
    }
    if ($message = trim($e
      ->getMessage())) {
      $this
        ->saveMessage($message, MigrationInterface::MESSAGE_INFORMATIONAL);
    }
  } catch (\Exception $e) {
    $id_map
      ->saveIdMapping($row, [], MigrateIdMapInterface::STATUS_FAILED);
    $this
      ->handleException($e);
  }
  $this->sourceRowStatus = MigrateIdMapInterface::STATUS_IMPORTED;
}