You are here

function nodequeue_generate_rehash in Nodequeue 7.2

Same name and namespace in other branches
  1. 5.2 nodequeue_generate.module \nodequeue_generate_rehash()
  2. 6.2 nodequeue_generate.module \nodequeue_generate_rehash()
  3. 7.3 nodequeue_generate.module \nodequeue_generate_rehash()

Rebuild all smartqueue_taxonomy queues. Useful after a data migration has wiped your terms. When more smartqueue modules arrive, revisit this function.

Parameters

vids: An array of vocabulary ids.

4 calls to nodequeue_generate_rehash()
drush_nodequeue_generate in ./nodequeue_generate.drush.inc
Re-populates specified nodequeues with random nodes.
drush_nodequeue_generate_all in ./nodequeue_generate.drush.inc
Re-populates all nodequeues with random nodes.
drush_nodequeue_generate_rehash in ./nodequeue_generate.drush.inc
Rehashes smartqueue subqueues for taxonomy smartqueue.
nodequeue_generate_form_submit in ./nodequeue_generate.module

File

./nodequeue_generate.module, line 130

Code

function nodequeue_generate_rehash() {

  // Delete existing smartqueue taxonomy subqueues
  $subqueues = db_query("SELECT sqid FROM {nodequeue_subqueue} ns INNER JOIN {nodequeue_queue} nq ON ns.qid = nq.qid WHERE nq.owner = 'smartqueue_taxonomy'")
    ->fetchCol();
  if (!empty($subqueues)) {
    db_query("DELETE FROM {nodequeue_subqueue} WHERE sqid IN (:subqueues)", array(
      ':subqueues' => $subqueues,
    ));
  }

  // Get all queues, owned by Smartqueue taxonomy.
  $qids = db_select('nodequeue_queue', 'nq')
    ->fields('nq', array(
    'qid',
  ))
    ->condition('owner', 'smartqueue_taxonomy')
    ->execute()
    ->fetchAll();
  foreach ($qids as $qid) {
    $queue = nodequeue_load($qid->qid);
    $fields = explode('-', $queue->reference);
    $tids = array();
    $nids = array();
    foreach ($fields as $field) {

      // Get all possible tids from this field.
      $query = db_select('field_data_' . $field, 'f');
      $query
        ->condition('f.entity_type', 'node')
        ->condition('f.bundle', $queue->types, 'IN')
        ->condition('f.deleted', FALSE)
        ->addField('f', $field . '_tid', 'tid');
      $query = $query
        ->distinct();
      $query = $query
        ->execute();
      $tids += $query
        ->fetchAll();

      // Rehash for each tid.
      foreach ($tids as $tid) {
        $query = db_select('field_data_' . $field, 'f');
        $query
          ->condition('f.entity_type', 'node')
          ->condition('f.bundle', $queue->types, 'IN')
          ->condition('f.deleted', FALSE)
          ->condition('f.' . $field . '_tid', $tid->tid)
          ->fields('f', array(
          'entity_id',
        ))
          ->range(0, 1);
        $query = $query
          ->execute();
        while ($item = $query
          ->fetchAssoc()) {
          $nids[] = $item;
        }
      }
      $nodes = node_load_multiple($nids);
      foreach ($nodes as $node) {
        nodequeue_api_subqueues($queue, $node);
      }
    }
  }
}