ScheduledTransitionsJobs.php in Scheduled Transitions 8
File
src/ScheduledTransitionsJobs.php
View source
<?php
declare (strict_types=1);
namespace Drupal\scheduled_transitions;
use Drupal\Component\Datetime\TimeInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Queue\QueueFactory;
use Drupal\scheduled_transitions\Plugin\QueueWorker\ScheduledTransitionJob;
use Psr\Log\LoggerInterface;
class ScheduledTransitionsJobs implements ScheduledTransitionsJobsInterface {
protected const LOCK_DURATION = 1800;
protected $entityTypeManager;
protected $time;
protected $queue;
protected $logger;
public function __construct(EntityTypeManagerInterface $entityTypeManager, TimeInterface $time, QueueFactory $queueFactory, LoggerInterface $logger) {
$this->entityTypeManager = $entityTypeManager;
$this->time = $time;
$this->queue = $queueFactory
->get('scheduled_transition_job');
$this->logger = $logger;
}
public function jobCreator() : void {
$transitionStorage = $this->entityTypeManager
->getStorage('scheduled_transition');
$now = $this->time
->getRequestTime();
$query = $transitionStorage
->getQuery();
$query
->condition('transition_on', $now, '<=');
$or = $query
->orConditionGroup()
->condition('locked_on', NULL, 'IS NULL')
->condition('locked_on', $now - static::LOCK_DURATION, '>=');
$query
->condition($or);
$ids = $query
->execute();
$transitions = $transitionStorage
->loadMultiple($ids);
foreach ($transitions as $transition) {
$transition
->setLockedOn($now)
->save();
$queueItem = [];
$queueItem[ScheduledTransitionJob::SCHEDULED_TRANSITION_ID] = $transition
->id();
$this->queue
->createItem($queueItem);
$this->logger
->info('Created scheduled transition job for #@id', [
'@id' => $transition
->id(),
]);
}
}
}