public function MigrationImportSync::sync in Migrate Tools 8.5
Same name and namespace in other branches
- 8.4 src/EventSubscriber/MigrationImportSync.php \Drupal\migrate_tools\EventSubscriber\MigrationImportSync::sync()
Event callback to sync source and destination.
Parameters
\Drupal\migrate\Event\MigrateImportEvent $event: The migration import event.
File
- src/
EventSubscriber/ MigrationImportSync.php, line 51
Class
- MigrationImportSync
- Import and sync source and destination.
Namespace
Drupal\migrate_tools\EventSubscriberCode
public function sync(MigrateImportEvent $event) {
$migration = $event
->getMigration();
if (!empty($migration->syncSource)) {
$id_map = $migration
->getIdMap();
$id_map
->prepareUpdate();
// Clone so that any generators aren't initialized prematurely.
$source = clone $migration
->getSourcePlugin();
$source
->rewind();
$source_id_values = [];
while ($source
->valid()) {
$source_id_values[] = $source
->current()
->getSourceIdValues();
$source
->next();
}
$id_map
->rewind();
$destination = $migration
->getDestinationPlugin();
while ($id_map
->valid()) {
$map_source_id = $id_map
->currentSource();
if (!in_array($map_source_id, $source_id_values, TRUE)) {
$destination_ids = $id_map
->currentDestination();
$this
->dispatchRowDeleteEvent(MigrateEvents::PRE_ROW_DELETE, $migration, $destination_ids);
$this
->dispatchRowDeleteEvent(MigratePlusEvents::MISSING_SOURCE_ITEM, $migration, $destination_ids);
$destination
->rollback($destination_ids);
$this
->dispatchRowDeleteEvent(MigrateEvents::POST_ROW_DELETE, $migration, $destination_ids);
$id_map
->delete($map_source_id);
}
$id_map
->next();
}
$this->dispatcher
->dispatch(MigrateEvents::POST_ROLLBACK, new MigrateRollbackEvent($migration));
}
}