NodeRevisionGenerate.php in Node Revision Delete 8
File
modules/node_revision_generate/src/NodeRevisionGenerate.php
View source
<?php
namespace Drupal\node_revision_generate;
use Drupal\Core\StringTranslation\StringTranslationTrait;
use Drupal\Core\StringTranslation\TranslationInterface;
use Drupal\Core\Database\Connection;
use Drupal\Component\Datetime\TimeInterface;
use Drupal\Core\Batch\BatchBuilder;
class NodeRevisionGenerate implements NodeRevisionGenerateInterface {
use StringTranslationTrait;
protected $time;
protected $connection;
public function __construct(TimeInterface $time, Connection $connection, TranslationInterface $string_translation) {
$this->time = $time;
$this->connection = $connection;
$this->stringTranslation = $string_translation;
}
public function getAvailableNodesForRevisions(array $bundles, $revisions_age) {
$interval_time = [
':interval' => $revisions_age,
':current_time' => $this->time
->getRequestTime(),
];
$query = $this->connection
->select('node_field_data', 'node');
$query
->leftJoin('node_revision', 'revision', 'node.vid = revision.vid');
$query
->addField('node', 'nid');
$query
->addField('revision', 'revision_timestamp');
$query
->isNotNull('node.title');
$query
->condition('node.type', $bundles, 'IN');
$query
->condition('node.status', 1);
$query
->where('revision.revision_timestamp + :interval <= :current_time', $interval_time);
return $query
->execute()
->fetchAll();
}
public function getRevisionCreationBatch(array $nodes_for_revisions, $revisions_number, $revisions_age) {
$batch_builder = new BatchBuilder();
$batch_builder
->setTitle($this
->t('Generating revisions'))
->setInitMessage($this
->t('Starting to create revisions.'))
->setProgressMessage($this
->t('Processed @current out of @total (@percentage%). Estimated time: @estimate.'))
->setErrorMessage($this
->t('The revision creation process has encountered an error.'))
->setFinishCallback([
NodeRevisionGenerateBatch::class,
'finish',
]);
foreach ($nodes_for_revisions as $node) {
$revision_timestamp = $node->revision_timestamp;
$i = 0;
$revision_timestamp += $revisions_age;
while ($i < $revisions_number && $revision_timestamp <= $this->time
->getRequestTime()) {
$batch_builder
->addOperation([
NodeRevisionGenerateBatch::class,
'generateRevisions',
], [
$node->nid,
$revision_timestamp,
]);
$revision_timestamp += $revisions_age;
$i++;
}
}
return $batch_builder
->toArray();
}
public function existsNodesContentType($content_type) {
$query = $this->connection
->select('node');
$query
->addField('node', 'nid');
$query
->condition('type', $content_type);
return (bool) $query
->countQuery()
->execute()
->fetchField();
}
}