? multiple_subqueues.patch
Index: nodequeue.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/nodequeue/nodequeue.module,v
retrieving revision 1.100
diff -u -p -r1.100 nodequeue.module
--- nodequeue.module	26 Nov 2009 01:42:03 -0000	1.100
+++ nodequeue.module	6 Jan 2010 05:40:15 -0000
@@ -809,6 +809,43 @@ function nodequeue_edit_queue_form(&$for
       Changing this setting will <strong>not</strong> update content that is already in the queue.'),
     '#access' => module_exists('translation_helpers'),
   );
+  
+  /**************************************
+   * Fields for adding subqueues to queue
+   **************************************/
+  $form['new_subqueues'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Subqueues'),
+    '#description' => t('Add subuqueues to the nodequeue'),
+  );
+  
+    
+  $form['new_subqueues']['no_default_subqueue'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Do not create default subqueue'),
+    '#description' => t('Only add subqueues specified below; do not add the default subqueue'),
+  );
+  
+  $form['new_subqueues']['add_subqueues'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Add additional subqueues'),
+  );
+  
+  $form['new_subqueues']['new_subqueue_1'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Subqueue 1'),
+    '#description' => t('Name of first subqueue')
+  );
+
+  $form['new_subqueues']['new_subqueue_2'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Subqueue 2'),
+    '#description' => t('Name of second subqueue')
+  );
+
+  /****************************
+   * End of new subqueue fields
+   ****************************/
 
   $form['submit'] = array(
     '#type' => 'submit',
@@ -874,6 +911,25 @@ function nodequeue_edit_queue_form_valid
   if (empty($form_state['values']['title'])) {
     form_set_error('title', t('Please enter a title for this queue.'));
   }
+  
+  if ($form_state['values']['new_subqueues']['add_subqueues']) {
+    if(!$form_state['values']['new_subqueues']['new_subqueue_1']) {
+      form_set_error('new_subqueue_1', t('Please enter a title for the new subqueue'));
+    }
+  }
+  // Put new subqueue names in array to make it easier to loop through them in nodequeue_save.
+  // The preference would be to set $form['#tree'] = TRUE, but that would probably mess up
+  // other parts of the module
+  
+  foreach($form_state['values'] as $key => $value) {
+    if($form_state['values']['add_subqueues']) {
+      $position = strstr($key, 'new_subqueue');
+      if($position == $key) {
+        $form_state['values']['new_subqueues'][] = $value;
+      }
+    }
+  }
+  
   $queue = (object) $form_state['values'];
   // fix checkboxes
   $queue->roles = array_keys(array_filter($queue->roles));
@@ -905,7 +961,7 @@ function nodequeue_edit_queue_form_submi
   nodequeue_api_queue_form_submit($queue, $form_state);
 
   $qid = nodequeue_save($queue); // sets $queue->qid if needed.
-
+  
   nodequeue_api_queue_form_submit_finish($queue, $form_state);
 
   nodequeue_check_subqueue_sizes($queue);
@@ -1907,6 +1963,16 @@ function nodequeue_save(&$queue) {
   else {
     variable_set('nodequeue_links', FALSE);
   }
+  
+  // Add details for additional subqueues to $queue->add_subqueue
+  if($queue->add_subqueues) {
+    if($queue->no_default_subqueue) {// If we're adding only subqueues and not the default subqueue
+      unset($queue->add_subqueue[0]); 
+    }
+    foreach($queue->new_subqueues as $key => $value) {
+      $queue->add_subqueue[] = $value;  
+    }  
+  }
 
   if (isset($queue->add_subqueue) && is_array($queue->add_subqueue)) {
     foreach ($queue->add_subqueue as $reference => $title) {
@@ -1916,6 +1982,11 @@ function nodequeue_save(&$queue) {
       if ($reference == 0) {
         $reference = $queue->qid;
       }
+      
+      if($queue->no_default_subqueue) {
+        // Empty $reference so it will be updated to the new sqid in nodequeue_add_subqueue
+        $reference = '';
+      }      
       nodequeue_add_subqueue($queue, $title, $reference);
     }
   }
