You are here

class SimpleSitemapQueue in Simple XML sitemap 4.x

Same name and namespace in other branches
  1. 8.3 src/Queue/SimplesitemapQueue.php \Drupal\simple_sitemap\Queue\SimplesitemapQueue

Class SimpleSitemapQueue

Hierarchy

Expanded class hierarchy of SimpleSitemapQueue

1 string reference to 'SimpleSitemapQueue'
simple_sitemap.services.yml in ./simple_sitemap.services.yml
simple_sitemap.services.yml
1 service uses SimpleSitemapQueue
simple_sitemap.queue in ./simple_sitemap.services.yml
Drupal\simple_sitemap\Queue\SimpleSitemapQueue

File

src/Queue/SimpleSitemapQueue.php, line 12

Namespace

Drupal\simple_sitemap\Queue
View source
class SimpleSitemapQueue extends DatabaseQueue {

  /**
   * @var \Drupal\Component\Datetime\Time
   */
  protected $time;

  /**
   * SimpleSitemapQueue constructor.
   * @param $name
   * @param \Drupal\Core\Database\Connection $connection
   * @param \Drupal\Component\Datetime\Time $time
   */
  public function __construct($name, Connection $connection, Time $time) {
    parent::__construct($name, $connection);
    $this->time = $time;
  }

  /**
   * Overrides \Drupal\Core\Queue\DatabaseQueue::claimItem().
   *
   * Unlike \Drupal\Core\Queue\DatabaseQueue::claimItem(), this method provides
   * a default lease time of 0 (no expiration) instead of 30. This allows the
   * item to be claimed repeatedly until it is deleted.
   */
  public function claimItem($lease_time = 0) {
    try {
      $item = $this->connection
        ->queryRange('SELECT data, item_id FROM {queue} q WHERE name = :name ORDER BY item_id ASC', 0, 1, [
        ':name' => $this->name,
      ])
        ->fetchObject();
      if ($item) {
        $item->data = unserialize($item->data);
        return $item;
      }
    } catch (\Exception $e) {
      $this
        ->catchException($e);
    }
    return FALSE;
  }

  /**
   * Gets a simple_sitemap queue item in a very efficient way.
   *
   * @return \Generator
   *   A queue item object with at least the following properties:
   *   - data: the same as what what passed into createItem().
   *   - item_id: the unique ID returned from createItem().
   *   - created: timestamp when the item was put into the queue.
   * @throws \Exception
   * @see \Drupal\Core\Queue\QueueInterface::claimItem
   */
  public function yieldItem() : \Generator {
    try {
      $query = $this->connection
        ->query('SELECT data, item_id FROM {queue} q WHERE name = :name ORDER BY item_id ASC', [
        ':name' => $this->name,
      ]);
      while ($item = $query
        ->fetchObject()) {
        $item->data = unserialize($item->data);
        (yield $item);
      }
    } catch (\Exception $e) {
      $this
        ->catchException($e);
    }
  }
  public function createItems($data_sets) {
    $try_again = FALSE;
    try {
      $id = $this
        ->doCreateItems($data_sets);
    } catch (\Exception $e) {

      // If there was an exception, try to create the table.
      if (!($try_again = $this
        ->ensureTableExists())) {

        // If the exception happened for other reason than the missing table,
        // propagate the exception.
        throw $e;
      }
    }

    // Now that the table has been created, try again if necessary.
    if ($try_again) {
      $id = $this
        ->doCreateItems($data_sets);
    }
    return $id;
  }
  protected function doCreateItems($data_sets) {
    $query = $this->connection
      ->insert(static::TABLE_NAME)
      ->fields([
      'name',
      'data',
      'created',
    ]);
    foreach ($data_sets as $i => $data) {
      $query
        ->values([
        $this->name,
        serialize($data),
        $this->time
          ->getRequestTime(),
      ]);
    }
    return $query
      ->execute();
  }
  public function deleteItems($item_ids) : void {
    try {
      $this->connection
        ->delete(static::TABLE_NAME)
        ->condition('item_id', $item_ids, 'IN')
        ->execute();
    } catch (\Exception $e) {
      $this
        ->catchException($e);
    }
  }

}

Members

Namesort descending Modifiers Type Description Overrides
DatabaseQueue::$connection protected property The database connection.
DatabaseQueue::$name protected property The name of the queue this instance is working with.
DatabaseQueue::catchException protected function Act on an exception when queue might be stale.
DatabaseQueue::createItem public function Adds a queue item and store it directly to the queue. Overrides QueueInterface::createItem
DatabaseQueue::createQueue public function Creates a queue. Overrides QueueInterface::createQueue
DatabaseQueue::delayItem public function Delay an item so it runs in the future. Overrides DelayableQueueInterface::delayItem
DatabaseQueue::deleteItem public function Deletes a finished item from the queue. Overrides QueueInterface::deleteItem
DatabaseQueue::deleteQueue public function Deletes a queue and every item in the queue. Overrides QueueInterface::deleteQueue
DatabaseQueue::doCreateItem protected function Adds a queue item and store it directly to the queue.
DatabaseQueue::ensureTableExists protected function Check if the table exists and create it if not.
DatabaseQueue::garbageCollection public function Cleans queues of garbage. Overrides QueueGarbageCollectionInterface::garbageCollection
DatabaseQueue::numberOfItems public function Retrieves the number of items in the queue. Overrides QueueInterface::numberOfItems
DatabaseQueue::releaseItem public function Releases an item that the worker could not process. Overrides QueueInterface::releaseItem
DatabaseQueue::schemaDefinition public function Defines the schema for the queue table.
DatabaseQueue::TABLE_NAME constant The database table name.
DependencySerializationTrait::$_entityStorages protected property
DependencySerializationTrait::$_serviceIds protected property
DependencySerializationTrait::__sleep public function 2
DependencySerializationTrait::__wakeup public function 2
SimpleSitemapQueue::$time protected property
SimpleSitemapQueue::claimItem public function Overrides \Drupal\Core\Queue\DatabaseQueue::claimItem(). Overrides DatabaseQueue::claimItem
SimpleSitemapQueue::createItems public function
SimpleSitemapQueue::deleteItems public function
SimpleSitemapQueue::doCreateItems protected function
SimpleSitemapQueue::yieldItem public function Gets a simple_sitemap queue item in a very efficient way.
SimpleSitemapQueue::__construct public function SimpleSitemapQueue constructor. Overrides DatabaseQueue::__construct