3
0
Fork 0
mirror of https://github.com/farmOS/farmOS.git synced 2024-02-23 11:37:38 +01:00

Issue #3229503: Rolling back log migration deletes quantities

This commit is contained in:
Michael Stenta 2021-09-14 18:44:24 -04:00
parent 7c2f2466de
commit 44a14b5422

View file

@ -6,8 +6,10 @@ use Drupal\Component\Datetime\TimeInterface;
use Drupal\Core\Database\Connection;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\State\StateInterface;
use Drupal\log\Entity\Log;
use Drupal\migrate\Event\MigrateEvents;
use Drupal\migrate\Event\MigrateImportEvent;
use Drupal\migrate\Event\MigrateRowDeleteEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
/**
@ -78,6 +80,7 @@ class FarmMigrationSubscriber implements EventSubscriberInterface {
public static function getSubscribedEvents() {
$events[MigrateEvents::PRE_IMPORT][] = ['onMigratePreImport'];
$events[MigrateEvents::POST_IMPORT][] = ['onMigratePostImport'];
$events[MigrateEvents::PRE_ROW_DELETE][] = ['onMigratePreRowDelete'];
return $events;
}
@ -104,6 +107,16 @@ class FarmMigrationSubscriber implements EventSubscriberInterface {
$this->addRevisionLogMessage($event);
}
/**
* Run row pre-deletion logic.
*
* @param \Drupal\migrate\Event\MigrateRowDeleteEvent $event
* The row delete event object.
*/
public function onMigratePreRowDelete(MigrateRowDeleteEvent $event) {
$this->deleteLogQuantityReferences($event);
}
/**
* Grant default text format permission to anonymous role.
*
@ -241,4 +254,28 @@ class FarmMigrationSubscriber implements EventSubscriberInterface {
}
}
/**
* Delete references to quantities from logs.
*
* @param \Drupal\migrate\Event\MigrateRowDeleteEvent $event
* The row delete event object.
*/
public function deleteLogQuantityReferences(MigrateRowDeleteEvent $event) {
// If the migration is in the farm_migrate_log migration group, delete all
// references to quantity entities from the log that is being deleted.
// This prevents the quantity entity itself from being deleted by
// LogEventSubscriber in the farm_log_quantity module.
// @see \Drupal\farm_log_quantity\EventSubscriber\LogEventSubscriber
$migration = $event->getMigration();
if (isset($migration->migration_group) && $migration->migration_group == 'farm_migrate_log') {
$id_values = $event->getDestinationIdValues();
if (!empty($id_values['id'])) {
$log = Log::load($id_values['id']);
$log->quantity = [];
$log->save();
}
}
}
}