auto_entityqueue.module in Auto Entityqueue 7
Same filename and directory in other branches
Automatically adds entities to entityqueues.
File
auto_entityqueue.moduleView source
<?php
/**
 * @file
 * Automatically adds entities to entityqueues.
 */
/**
 * Implements hook_form_FORM_ID_alter().
 */
function auto_entityqueue_form_ctools_export_ui_edit_item_form_alter(&$form, &$form_state, $form_id) {
  // Check for entityqueue.
  if (!isset($form_state['plugin']['module']) || $form_state['plugin']['module'] != 'entityqueue') {
    return;
  }
  // Get reference to queue.
  $queue =& $form_state['item'];
  // Add a checkbox field.
  $form['settings']['entityreference_field']['auto_add'] = array(
    '#title' => t('Automatically add entities to queue.'),
    '#type' => 'checkbox',
    '#default_value' => isset($queue->settings['auto_add']) ? $queue->settings['auto_add'] : FALSE,
    '#description' => t('New entities of selected types will be automatically added to the queue.'),
  );
}
/**
 * Implements hook_entity_insert().
 */
function auto_entityqueue_entity_insert($entity, $type) {
  // Check for entity type.
  if (!isset($entity->type)) {
    return;
  }
  // Get entityqueues for this type.
  $queues = auto_entityqueue_get_queues_by_type_and_bundle($type, $entity->type);
  if (count($queues)) {
    // Add entity to each queues.
    foreach ($queues as $queue) {
      auto_entityqueue_add_entity_to_queue($entity, $queue);
    }
  }
}
/**
 * Helper function to add an entity to a queue.
 *
 * @param $entity
 *  The entity object.
 * @param $queue
 *  The entityqueue object.
 */
function auto_entityqueue_add_entity_to_queue($entity, $queue) {
  // Get the target field name.
  $field_name = _entityqueue_get_target_field_name($queue->target_type);
  // Get the entity id.
  $entity_wrapper = entity_metadata_wrapper($queue->target_type, $entity);
  $entity_id = $entity_wrapper
    ->getIdentifier();
  // Get subqueues.
  $subqueues = auto_entityqueue_get_subqueues_for_queue($queue->name);
  if (count($subqueues)) {
    // Add to each subqueue.
    foreach ($subqueues as $subqueue) {
      $wrapper = entity_metadata_wrapper('entityqueue_subqueue', $subqueue);
      $wrapper->{$field_name}[] = $entity_id;
      $wrapper
        ->save();
    }
  }
}
/**
 * Loads multiple queues with a specific target type and bundle.
 *
 * @param string $target_type
 *   An entity type (e.g. 'node', 'comment', 'user').
 * @param string $bundle
 *   An entity bundle (e.g. 'page', 'article').
 *
 * @return array
 *   An array of EntityQueue objects, keyed by queue name.
 */
function auto_entityqueue_get_queues_by_type_and_bundle($target_type, $bundle) {
  $target_queues = array();
  $queues = entityqueue_queue_load_by_target_type($target_type);
  foreach ($queues as $queue) {
    if (in_array($bundle, $queue->settings['target_bundles']) && $queue->settings['auto_add'] && !isset($queue->disabled)) {
      $target_queues[$queue->name] = $queue;
    }
  }
  return $target_queues;
}
/**
 * Returns subqueues for an entityqueue.
 *
 * @param string $name
 *  The entityqueue name.
 *
 * @return array.
 *  An array of subqueues.
 */
function auto_entityqueue_get_subqueues_for_queue($name) {
  $subqueues = array();
  $query = new EntityFieldQuery();
  $query
    ->entityCondition('entity_type', 'entityqueue_subqueue')
    ->entityCondition('bundle', $name);
  $result = $query
    ->execute();
  if (!empty($result['entityqueue_subqueue'])) {
    foreach ($result['entityqueue_subqueue'] as $entityqueue_subqueue) {
      $subqueues[] = entityqueue_subqueue_load($entityqueue_subqueue->subqueue_id);
    }
  }
  return $subqueues;
}Functions
| 
            Name | 
                  Description | 
|---|---|
| auto_entityqueue_add_entity_to_queue | Helper function to add an entity to a queue. | 
| auto_entityqueue_entity_insert | Implements hook_entity_insert(). | 
| auto_entityqueue_form_ctools_export_ui_edit_item_form_alter | Implements hook_form_FORM_ID_alter(). | 
| auto_entityqueue_get_queues_by_type_and_bundle | Loads multiple queues with a specific target type and bundle. | 
| auto_entityqueue_get_subqueues_for_queue | Returns subqueues for an entityqueue. |