You are here

function nodequeue_generate_form_submit in Nodequeue 6.2

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

File

./nodequeue_generate.module, line 104

Code

function nodequeue_generate_form_submit($form, &$form_state) {
  $qids = array_keys(array_filter($form_state['values']['rows']['cb']));

  // Empty the queue
  $placeholders = implode(', ', array_fill(0, count($qids), '%d'));
  db_query("DELETE FROM {nodequeue_nodes} WHERE qid IN ({$placeholders})", $qids);
  $queues = nodequeue_load_queues($qids);
  $subqueues = nodequeue_load_subqueues_by_queue($qids);

  // TODO: handle non smart_taxonomy subqueues.
  foreach ($subqueues as $subqueue) {

    // dpr($queues[$subqueue->qid]);
    // we don't know what kind of nodes to out in, so skip. is this a good idea?
    if (empty($queues[$subqueue->qid]->types)) {
      next;
    }
    $placeholders = implode(', ', array_fill(0, count($queues[$subqueue->qid]->types), '\'%s\''));
    $args = $queues[$subqueue->qid]->types;

    // smartqueue_taxonomy pulls nodes from the proper terms. nodequeue type queues don't care about taxo.
    if ($queues[$subqueue->qid]->owner == 'nodequeue') {
      $sql = "SELECT n.nid FROM {node} n WHERE n.status = 1 AND n.type IN ({$placeholders}) ORDER BY RAND()";
      $result = db_query_range($sql, $args, 0, $form_state['values']['rows'][$subqueue->qid]['limit']);
      while ($row = db_fetch_object($result)) {
        nodequeue_subqueue_add($subqueue, $subqueue, $row->nid);
      }
    }
    elseif ($queues[$subqueue->qid]->owner == 'smartqueue_taxonomy') {
      $args[] = $subqueue->reference;
      $sql = "SELECT tn.nid FROM {term_node} tn INNER JOIN {node} n ON tn.nid=n.nid WHERE n.status = 1 AND n.type IN ({$placeholders}) AND tn.tid = %d ORDER BY RAND()";
      $result = db_query_range($sql, $args, 0, $form_state['values']['rows'][$subqueue->qid]['limit']);
      while ($row = db_fetch_object($result)) {
        nodequeue_subqueue_add($subqueue, $subqueue, $row->nid);
      }
    }
  }
  drupal_set_message(format_plural(count($qids), '1 queue populated', '@count queues populated.'));
}