You are here

function auto_entityqueue_add_entity_to_queue in Auto Entityqueue 8

Same name and namespace in other branches
  1. 7 auto_entityqueue.module \auto_entityqueue_add_entity_to_queue()

Add an entity to a queue.

Parameters

$entity:

EntityQueue $queue:

1 call to auto_entityqueue_add_entity_to_queue()
auto_entityqueue_entity_insert in ./auto_entityqueue.module
Implements hook_entity_insert().

File

./auto_entityqueue.module, line 74
Handles automatically adding entities to entityqueues.

Code

function auto_entityqueue_add_entity_to_queue($entity, EntityQueue $queue) {

  // Get the entity id.
  $entity_id = $entity
    ->id();

  // Get the queue entity settings.
  $entity_settings = $queue
    ->getEntitySettings();
  $queue_settings = $queue
    ->getQueueSettings();

  // Get the subqueues.
  $query = \Drupal::entityQuery('entity_subqueue')
    ->condition('queue', $queue
    ->id());
  $result = $query
    ->execute();
  $subqueues = EntitySubqueue::loadMultiple($result);

  // Add entity to each subqueue.
  foreach ($subqueues as $subqueue) {
    $items = $subqueue
      ->get('items')
      ->getValue();

    // Deetermine if we should remove an item from the list to avoid exceeding
    // the maximum number of items.
    $remove_item = !empty($queue_settings['max_size']) && count($items) >= $queue_settings['max_size'];
    if (isset($entity_settings['handler_settings']['auto_entityqueue']['insert_front']) && $entity_settings['handler_settings']['auto_entityqueue']['insert_front']) {
      !$remove_item or array_pop($items);
      array_unshift($items, array(
        'target_id' => $entity_id,
      ));
    }
    else {
      !$remove_item or array_shift($items);
      array_push($items, array(
        'target_id' => $entity_id,
      ));
    }
    $subqueue
      ->set('items', $items);
    $subqueue
      ->save();
  }
}