You are here

UniqueQueueItem.php in TMGMT Extension Suite 8

Same filename and directory in other branches
  1. 8.3 src/Utils/UniqueQueueItem.php
  2. 8.2 src/Utils/UniqueQueueItem.php

Contains QueueUniqueItem service class.

File

src/Utils/UniqueQueueItem.php
View source
<?php

/**
 * @file
 * Contains QueueUniqueItem service class.
 */
namespace Drupal\tmgmt_extension_suit\Utils;

use Drupal\Core\Database\Connection;
use Drupal\Core\Queue\QueueFactory;
use Psr\Log\LoggerInterface;
class UniqueQueueItem {

  /**
   * @var \Drupal\Core\Queue\QueueFactory
   */
  private $queueFactory;

  /**
   * @var \Psr\Log\LoggerInterface
   */
  private $logger;

  /**
   * @var \Drupal\Core\Database\Connection
   */
  private $databaseConnection;
  public function __construct(QueueFactory $queueFactory, LoggerInterface $logger, Connection $databaseConnection) {
    $this->queueFactory = $queueFactory;
    $this->logger = $logger;
    $this->databaseConnection = $databaseConnection;
  }

  /**
   * Adds item into a queue only if it's unique.
   *
   * @param string $queueName
   *   Queue name.
   * @param array $data
   *   Data to be added.
   */
  public function addItem($queueName, $data) {
    $serializedData = serialize($data);
    $count = $this->databaseConnection
      ->select('queue', 'q')
      ->condition('q.name', $queueName)
      ->condition('q.data', $serializedData)
      ->countQuery()
      ->execute()
      ->fetchField();
    if ($count != 0) {
      return;
    }
    $result = $this->queueFactory
      ->get($queueName)
      ->createItem($data);
    if ($result) {
      $this->logger
        ->info('New unique item has been added into the "@queue" queue. Serialized queue item: @item.', [
        '@queue' => $queueName,
        '@item' => $serializedData,
      ]);
    }
  }

}

Classes

Namesort descending Description
UniqueQueueItem