public function AcsfDuplicationScrubEntityHandler::handle in Acquia Cloud Site Factory Connector 8
Same name and namespace in other branches
- 8.2 src/Event/AcsfDuplicationScrubEntityHandler.php \Drupal\acsf\Event\AcsfDuplicationScrubEntityHandler::handle()
Implements AcsfEventHandler::handle().
Overrides AcsfEventHandler::handle
3 calls to AcsfDuplicationScrubEntityHandler::handle()
- AcsfDuplicationScrubCommentHandler::handle in src/
Event/ AcsfDuplicationScrubCommentHandler.php - Implements AcsfEventHandler::handle().
- AcsfDuplicationScrubNodeHandler::handle in src/
Event/ AcsfDuplicationScrubNodeHandler.php - Implements AcsfEventHandler::handle().
- AcsfDuplicationScrubUserHandler::handle in src/
Event/ AcsfDuplicationScrubUserHandler.php - Implements AcsfEventHandler::handle().
3 methods override AcsfDuplicationScrubEntityHandler::handle()
- AcsfDuplicationScrubCommentHandler::handle in src/
Event/ AcsfDuplicationScrubCommentHandler.php - Implements AcsfEventHandler::handle().
- AcsfDuplicationScrubNodeHandler::handle in src/
Event/ AcsfDuplicationScrubNodeHandler.php - Implements AcsfEventHandler::handle().
- AcsfDuplicationScrubUserHandler::handle in src/
Event/ AcsfDuplicationScrubUserHandler.php - Implements AcsfEventHandler::handle().
File
- src/
Event/ AcsfDuplicationScrubEntityHandler.php, line 71
Class
- AcsfDuplicationScrubEntityHandler
- Handles the scrubbing of Drupal entities.
Namespace
Drupal\acsf\EventCode
public function handle() {
drush_print(dt('Entered @class', [
'@class' => get_class($this),
]));
$options = $this->event->context['scrub_options'];
$limit = $options['batch_' . $this->entityTypeId];
$var_name = 'acsf_duplication_scrubbed_' . $this->entityTypeId;
$entity_type = $this->entityTypeManager
->getDefinition($this->entityTypeId);
do {
// Get a range of entities we have not processed yet (i.e. do not query
// entities that could not be deleted, multiple times.)
// Deleting the highest entity first probably makes for less processing
// for some entity types (e.g. for comments, since delete() does not need
// to deal with comments that would be orphaned).
$ids = $this
->getBaseQuery()
->range(0, $limit)
->sort($entity_type
->getKey('id'), 'DESC')
->execute();
if ($ids) {
// Delete the entities, one by one. This may be slower than mass
// deleting them, but this way we can catch an exception without a mass
// delete being fully rolled back.
$entities = $this->entityTypeManager
->getStorage($this->entityTypeId)
->loadMultiple($ids);
$this
->deleteEntities($entities);
$this->acsfVarStorage
->set($var_name, min($ids), 'acsf_duplication_scrub');
}
else {
// Make sure we won't run a query for the same IDs again.
$this->acsfVarStorage
->set($var_name, 0, 'acsf_duplication_scrub');
break;
}
// If out-of-memory protection is not set, we loop until all items are
// processed.
if ($options['avoid_oom']) {
$this->event->dispatcher
->interrupt();
break;
}
} while (TRUE);
}