Memory.php

Same filename and directory in other branches
  1. 9 core/lib/Drupal/Core/Queue/Memory.php
  2. 8.9.x core/lib/Drupal/Core/Queue/Memory.php
  3. 10 core/lib/Drupal/Core/Queue/Memory.php

Namespace

Drupal\Core\Queue

File

core/lib/Drupal/Core/Queue/Memory.php

View source
<?php

namespace Drupal\Core\Queue;


/**
 * Static queue implementation.
 *
 * This allows "un-delayed" variants of processes relying on the Queue
 * interface. The queue data resides in memory. It should only be used for
 * items that will be queued and dequeued within a given page request.
 *
 * @ingroup queue
 */
class Memory implements QueueInterface {
    
    /**
     * The queue data.
     *
     * @var array
     */
    protected $queue;
    
    /**
     * Counter for item ids.
     *
     * @var int
     */
    protected $idSequence;
    
    /**
     * Constructs a Memory object.
     *
     * @param string $name
     *   An arbitrary string. The name of the queue to work with.
     */
    public function __construct($name) {
        $this->queue = [];
        $this->idSequence = 0;
    }
    
    /**
     * {@inheritdoc}
     */
    public function createItem($data) {
        $item = new \stdClass();
        $item->item_id = $this->idSequence++;
        $item->data = $data;
        $item->created = \Drupal::time()->getCurrentTime();
        $item->expire = 0;
        $this->queue[$item->item_id] = $item;
        return $item->item_id;
    }
    
    /**
     * {@inheritdoc}
     */
    public function numberOfItems() {
        return count($this->queue);
    }
    
    /**
     * {@inheritdoc}
     */
    public function claimItem($lease_time = 30) {
        foreach ($this->queue as $key => $item) {
            if ($item->expire == 0) {
                $item->expire = \Drupal::time()->getCurrentTime() + $lease_time;
                $this->queue[$key] = $item;
                return $item;
            }
        }
        return FALSE;
    }
    
    /**
     * {@inheritdoc}
     */
    public function deleteItem($item) {
        unset($this->queue[$item->item_id]);
    }
    
    /**
     * {@inheritdoc}
     */
    public function releaseItem($item) {
        if (isset($this->queue[$item->item_id]) && $this->queue[$item->item_id]->expire != 0) {
            $this->queue[$item->item_id]->expire = 0;
            return TRUE;
        }
        return FALSE;
    }
    
    /**
     * {@inheritdoc}
     */
    public function createQueue() {
        // Nothing needed here.
    }
    
    /**
     * {@inheritdoc}
     */
    public function deleteQueue() {
        $this->queue = [];
        $this->idSequence = 0;
    }

}

Classes

Title Deprecated Summary
Memory Static queue implementation.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.