NodeRevisionsAutocleanCommands.php in Node Revisions Autoclean 8
File
src/Commands/NodeRevisionsAutocleanCommands.php
View source
<?php
namespace Drupal\node_revisions_autoclean\Commands;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\StringTranslation\StringTranslationTrait;
use Drupal\node_revisions_autoclean\Batch\Batch;
use Drupal\node_revisions_autoclean\Services\RevisionsManager;
use Drush\Commands\DrushCommands;
use Drupal\Core\Batch\BatchBuilder;
class NodeRevisionsAutocleanCommands extends DrushCommands {
use StringTranslationTrait;
protected $entityTypeManager;
protected $revisionsManager;
public function __construct(EntityTypeManagerInterface $entityTypeManager, RevisionsManager $revisionsManager) {
parent::__construct();
$this->entityTypeManager = $entityTypeManager;
$this->revisionsManager = $revisionsManager;
}
public function deleteRevisionsAccordingSiteSettings() {
$nodes = $this->entityTypeManager
->getStorage('node')
->loadMultiple();
$count = 0;
foreach ($nodes as $node) {
$revisions = $this->revisionsManager
->revisionsToDelete($node);
if (count($revisions)) {
$this->revisionsManager
->deleteRevisions($revisions);
$this
->logger()
->log('success', $this
->t('@count revisions deleted for node @nid : @label', [
'@count' => count($revisions),
'@nid' => $node
->id(),
'@label' => $node
->label(),
]));
}
$count += count($revisions);
}
$this
->logger()
->log('success', $this
->t('Global : @count revisions deleted.', [
'@count' => $count,
]));
}
public function deleteRevisionsAccordingSiteSettingsBatch() {
$this
->logger()
->info('Revision deletion batch operations start');
try {
$storage = $this->entityTypeManager
->getStorage('node');
$query = $storage
->getQuery()
->condition('status', '1');
$nids = $query
->execute();
} catch (\Exception $e) {
$this
->logger()
->error($e
->getMessage());
}
$operations = [];
$numOperations = 0;
$batchId = 1;
$batch_builder = new BatchBuilder();
$batch_builder
->setFinishCallback([
Batch::class,
'processNodeFinished',
]);
if (!empty($nids)) {
foreach ($nids as $nid) {
$this
->logger()
->info($this
->t("Preparing batch : @id ", [
'@id' => $batchId,
]));
$batch_builder
->addOperation([
Batch::class,
'processNode',
], [
$batchId,
$nid,
]);
$batchId++;
$numOperations++;
}
}
else {
$this
->logger()
->warning('No nodes');
}
$batch_builder
->setTitle($this
->t('Node revisions autoclean @num node(s)', [
'@num' => $numOperations,
]));
batch_set($batch_builder
->toArray());
drush_backend_batch_process();
$this
->logger()
->info("Batch operations end.");
}
}