Index: nodequeue.module =================================================================== --- nodequeue.module (revision 156) +++ nodequeue.module (revision 170) @@ -215,8 +215,51 @@ // node in a queue twice, the 2nd position would be wrong. nodequeue_subqueue_remove_node($obj->sqid, $node->nid); } + break; + case 'insert': + if($node->nodequeue_options){ + foreach($node->nodequeue_options as $key => $option){ + if($option != 0){ + $queue = nodequeue_load($key); + $subqueues = nodequeue_load_subqueues_by_queue($queue->qid); + foreach($subqueues as $subqueue){ + nodequeue_subqueue_add($queue, $subqueue,$node->nid); + } + } + } + } break; + case 'update': + if($node->nodequeue_options){ + foreach($node->nodequeue_options as $key => $option){ + if($option != 0){ + $queue = nodequeue_load($key); + $subqueues = nodequeue_load_subqueues_by_queue($queue->qid); + $result = db_query("SELECT nid FROM nodequeue_nodes WHERE nid = %d AND qid = %d", $node->nid, $queue->qid); + if(!($item = db_fetch_object($result))) { + foreach($subqueues as $subqueue){ + nodequeue_subqueue_add($queue, $subqueue,$node->nid); + } + } + } + else{ + $queue = nodequeue_load($key); + $subqueues = nodequeue_load_subqueues_by_queue($queue->qid); + foreach($subqueues as $subqueue){ + nodequeue_subqueue_remove_node($subqueue->sqid, $node->nid); + } + } + } + } + case 'load': + $result = db_query("SELECT qid FROM nodequeue_nodes WHERE nid = %d", $node->nid); + while ($queue = db_fetch_object($result)) { + $queuelist[$queue->qid] = $queue->qid; + } + return array('queues' => $queuelist); + break; } + } /** @@ -243,9 +286,7 @@ foreach ($subqueues as $id => $subqueue) { unset($subqueues[$id]->position); } - nodequeue_set_subqueue_positions($subqueues, $node->nid); - //drupal_set_message(dprint_r($subqueues, true)); foreach ($subqueues as $subqueue) { $queue = $queues[$subqueue->qid]; @@ -300,7 +341,9 @@ if (!is_numeric($subqueue) || !nodequeue_check_token($node->nid)) { return drupal_goto(); } + $subqueue = nodequeue_load_subqueue($subqueue); + drupal_set_message('nodequeue admin add node'); nodequeue_subqueue_add($queue, $subqueue, $node->nid); // Provide a response if this is javascript. @@ -652,7 +695,7 @@ '#type' => 'value', '#value' => $queue->subqueues, ); - + if (isset($queue->qid)) { $form[] = array( '#type' => 'submit', @@ -669,7 +712,6 @@ '#value' => $queue->count, ); } - nodequeue_api_queue_form($queue, $form); return $form; @@ -1950,12 +1992,10 @@ function nodequeue_subqueue_add($queue, $subqueue, $nid) { // If adding this would make the queue too big, pop the front node // (or nodes) out. - if ($queue->size) { // 0 means infinity so never do this if false nodequeue_check_subqueue_size($queue, $subqueue, $queue->size - 1); } - db_query("INSERT INTO {nodequeue_nodes} (sqid, qid, nid, position, timestamp) VALUES (%d, %d, %d, %d, %d)", $subqueue->sqid, $queue->qid, $nid, $subqueue->count + 1, time()); } @@ -1998,7 +2038,7 @@ $diff = $end - $start + 1; db_query("DELETE FROM {nodequeue_nodes} WHERE sqid = %d AND position >= %d AND position <= %d", $sqid, $start, $end); - db_query("UPDATE {nodequeue_nodes} SET position = position - %d WHERE sqid = %d AND position > %d", $diff, $sqid, $end); + db_query("UPDATE {nodequeue_nodes} SET position = position - %d WHERE sqid = %d AND position > %d", $diff, $sqid, $end); } /** @@ -2493,7 +2533,7 @@ '#title' => t('Nodequeue tab label'), '#default_value' => variable_get('nodequeue_tab_name', t('Nodequeue')), '#description' => t('If nodes will have a menu tab for manipulating related nodequeues, what should that tab be called?'), - ); + ); return system_settings_form($form); } @@ -2537,3 +2577,70 @@ function nodequeue_check_token($seed) { return drupal_get_token($seed) == $_GET['token']; } + +/** + * Implementation of hook_form_alter() + */ +function nodequeue_form_alter(&$form, $form_state, $form_id) { + + $queues = nodequeue_load_queues(nodequeue_get_all_qids(NULL)); + $queuelist = array(); + foreach($queues as $queue){ + foreach($queue->types as $type){ + if($form['#node']->type == $type) + $queuelist[$queue->qid] = $queue->title; + } + } + if(count($queuelist)){ + if (($form['#id'] == 'node-form')) { + $form['nodequeue_options'] = array( + '#type' => 'checkboxes', + '#weight' => '10', + '#title' => t('Choose which queue to add to'), + '#default_value' => nodequeue_get_selected_queues($form['nid']['#value']), + '#options' => $queuelist, + '#description' => t('Choose from the checkboxes in which queues you would like your content to appear'), + ); + } + + } +} + +function nodequeue_get_selected_queues($nid){ + $queuelist = array(); + $result = db_query("SELECT {nodequeue_nodes.qid} as nnqid, {nodequeue_queue.title} as nqtitle FROM {nodequeue_nodes} JOIN {nodequeue_queue} ON nodequeue_nodes.qid = nodequeue_queue.qid WHERE nodequeue_nodes.nid = %d", $nid); + while ($queue = db_fetch_object($result)) { + $queuelist[] = $queue->nnqid; +} + return $queuelist; +} + + + +function nodequeue_form_submit($form, &$form_state) { + + $node = node_load($form_state['values']['nid']); + $form_options = $form_state['values']['nodequeue_options']; + + foreach($form_options as $key => $new_option){ + if($new_option == 0){ + if(!empty($node->queues)){ + if (array_key_exists($key, $node->queues)){ + $queue = nodequeue_load($key); + $subqueues = nodequeue_load_subqueues_by_queue($queue->qid); + foreach($subqueues as $subqueue) + nodequeue_subqueue_remove_node($subqueue->sqid,$node->nid); + } + } + } + if(($new_option != $node->queues[$key]) && ($new_option != 0)){ + $queue = nodequeue_load($key); + $subqueues = nodequeue_load_subqueues_by_queue($queue->qid); + foreach($subqueues as $subqueue) + nodequeue_subqueue_add($queue, $subqueue,$node->nid); + } + + } + +} +