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. |