--- nodequeue_generate.module	2009-06-01 17:50:30.000000000 +0200
+++ nodequeue_generate.module_new	2009-07-19 13:19:10.610357913 +0200
@@ -89,7 +89,12 @@ function theme_nodequeue_generate_form($
   return $output;
 }
 
-function nodequeue_generate_form_submit($form, &$form_state) {
+ //published_only values
+ // $published_only = published means, only "published" nodes submitted to queue
+ // $published_only = hidden means, only "not published" nodes submitted to queue
+ // $published_only = both means, "published" and "not published" nodes submitted to queue
+
+function nodequeue_generate_form_submit($form, &$form_state, $published_only = both) {
   $qids = array_keys(array_filter($form_state['values']['rows']['cb']));
   // Empty the queue
   $placeholders = implode(', ', array_fill(0, count($qids), '%d'));
@@ -108,16 +113,35 @@ function nodequeue_generate_form_submit(
     $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.
+    //node status check
     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()";
+      if ($published_only == published){
+        $published_sql = 'n.status = 1';
+      }
+      elseif ($published_only == hidden){
+        $published_sql = 'n.status = 0';
+      }
+      elseif ($published_only == both){
+        $published_sql = 'n.status <= 1';
+      }
+      $sql = "SELECT n.nid FROM {node} n WHERE $published_sql 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') {
+      if ($published_only == published){
+        $published_sql = 'n.status = 1';
+      }
+      elseif ($published_only == hidden){
+        $published_sql = 'n.status = 0';
+      }
+      elseif ($published_only == both){
+        $published_sql = 'n.status <= 1';
+      }
       $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()";
+      $sql = "SELECT tn.nid FROM {term_node} tn INNER JOIN {node} n ON tn.nid=n.nid WHERE $published_sql 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);
