? multiple_smartqueue_support.patch
Index: smartqueue_users.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/smartqueue_users/smartqueue_users.module,v
retrieving revision 1.36
diff -u -p -r1.36 smartqueue_users.module
--- smartqueue_users.module	15 Nov 2008 17:32:43 -0000	1.36
+++ smartqueue_users.module	21 Oct 2010 16:08:48 -0000
@@ -25,6 +25,7 @@ function smartqueue_users_nodequeue_info
  * Implementation of hook_nodequeue()
  */
 function smartqueue_users_nodequeue_form($queue, &$form) {
+  $qid = isset($qid) ? $queue->qid : 0;
   /*
   $form['placeholder']['sq_title'] = array(
     '#type' => 'textfield',
@@ -36,13 +37,13 @@ function smartqueue_users_nodequeue_form
     '#type' => 'checkbox',
     '#title' => t("Restrict contents of user NodeQueue to content that is created by the NodeQueue's owner"),
     '#description' => t("When this box is checked, each User SubQueue can only contain content created by that NodeQueue's author."),
-    '#default_value' => variable_get('smartqueue_users_sq_'. $queue->qid .'_restrict_author', 0),
+    '#default_value' => variable_get('smartqueue_users_sq_'. $qid .'_restrict_author', 0),
     '#weight' => 1,
   );
   $form['display_user_page'] = array(
     '#type' => 'checkbox',
     '#title' => t("Display User Node Queues on User (profile) pages."),
-    '#default_value' => module_exists('views') && variable_get('display_user_page'. $queue->qid .'_restrict_author', 1),
+    '#default_value' => module_exists('views') && variable_get('display_user_page'. $qid .'_restrict_author', 1),
     '#description' => t("Requires the Views module to be enabled."),
     '#weight' => 1,
     '#disabled' => !(module_exists('views')),
@@ -51,7 +52,7 @@ function smartqueue_users_nodequeue_form
     '#type'=> 'checkbox',
     '#title' => t("Hide other users' add/remove links from administrators (Recommended)"),
     '#description' => t("When checked, users with the 'manipulate all user node queues' permission will not see add/remove links for other users' node queues. Useful for preventing Administrators from seeing an overwhelming number of links. This can also be a performance improvement for sites with large numbers of user node queues."),
-    '#default_value' => variable_get('smartqueue_users_'. smartqueue_users_get_qid() . '_admin_hide_links', 1),
+    '#default_value' => variable_get('smartqueue_users_'. $qid . '_admin_hide_links', 1),
   );
   
   $form['submit_actions'] = array(
@@ -79,20 +80,51 @@ function smartqueue_users_nodequeue_form
   );
 }
 
-function _smartqueue_users_all_eligible_roles() {
-  $queue = nodequeue_load(smartqueue_users_get_qid());
-  if (empty($queue->roles)) {
-    return array();
-  }
-  $q_roles = $queue->roles;
-  $roles = array();
-  //create a normalized roles array
-  foreach ($q_roles as $key => $rid) {
-    $roles[$rid] = $rid;
+/**
+ * Returns a list of eligible nodequeues for $account.
+ */
+function smartqueue_users_get_eligible_queues($account) {
+  $qids = array();
+  
+  $account_roles = array_keys($account->roles);
+  $queue_ids = db_query("SELECT nq.qid FROM {nodequeue_queue} nq INNER JOIN {nodequeue_roles} nqr ON nqr.qid = nq.qid WHERE nqr.rid IN (". db_placeholders($account_roles, 'int') .") AND nq.owner = 'smartqueue_users'", $account_roles);
+  
+  while ($row = db_fetch_object($queue_ids)) {
+      $qids[] = $row->qid;
+  }
+  
+  return $qids;
+}
+
+
+function _smartqueue_users_all_eligible_roles($qid = NULL) {
+  if ($qid) {
+    $qids = array($qid);
+  }
+  else {
+    // By default we'll return a list of all roles eligible for any smartqueues.
+    $smartqueues = db_query("SELECT qid FROM {nodequeue_queues} WHERE owner = 'smartqueue_users'");
+    while ($smartqueue = db_fetch_object($smartqueues)) {
+      $qids[] = $smartqueue->qid;
+    }
+  }
+  
+  foreach ($qids as $smartqueue_id) {
+    $queue = nodequeue_load($smartqueue_id);
+    if (!empty($queue->roles)) {
+      $q_roles = $queue->roles;
+      $roles = array();
+      //create a normalized roles array
+      foreach ($q_roles as $key => $rid) {
+        $roles[$rid] = $rid;
+      }
+    }
   }
   return $roles;
 }
-function _smartqueue_users_get_eligible_accounts($roles = NULL) {
+function _smartqueue_users_get_eligible_accounts($qid, $roles = NULL) {
+  
+  $accounts = array();
   if (empty($roles)) {
     $roles = _smartqueue_users_all_eligible_roles();
     if (empty($roles)) {
@@ -101,8 +133,15 @@ function _smartqueue_users_get_eligible_
   }
   $all_auth = ($roles[2] == 2);
   if ($all_auth) {
+    $users = array();
     //Don't restrict to status = 1 because we might want to include these users when deciding to batch delete SubQueues.
     $query = db_query("SELECT uid, name FROM {users} WHERE uid > 0");
+    
+    while ($u = db_fetch_array($query)) {
+      $accounts[$u['uid']] = $u['name'];
+    }
+    
+    return $accounts;
   }
   else {
     //The array key always contains the rid. Depending on the format of the roles array, enabled roles have either the rid or 1 as the value.
@@ -111,11 +150,10 @@ function _smartqueue_users_get_eligible_
         $sql_roles[] = $value;
       }
     }
-    $in = implode(', ', array_fill(0, count($sql_roles), "'%d'"));
-    $query = db_query("SELECT u.uid, u.name FROM {users} u INNER JOIN {users_roles} r ON u.uid=r.uid WHERE r.rid IN($in)", $sql_roles);
+    
+    $query = db_query("SELECT u.uid, u.name FROM {users} u INNER JOIN {users_roles} r ON u.uid=r.uid WHERE r.rid IN(". db_placeholders($sql_roles, 'int') .")", $sql_roles);
   }
   $result = array();
-  $accounts = array();
   while ($result = db_fetch_array($query)) {
     $accounts[$result['uid']] = $result['name'];
   }
@@ -123,25 +161,31 @@ function _smartqueue_users_get_eligible_
 }
 
 function smartqueue_users_nodequeue_form_submit(&$queue, $form_state) {
-  variable_set('smartqueue_users_sq_'. $form_state['values']['qid'] .'_restrict_author', $form_state['values']['restrict_by_author']);
-  variable_set('display_user_page'. $form_state['values']['qid'] .'_restrict_author', $form_state['values']['display_user_page']);
-  variable_set('smartqueue_users_'. $form_state['values']['qid'] .'_display_user_page', $form_state['values']['display_user_page']);
-  variable_set('smartqueue_users_'. $form_state['values']['qid'] . '_admin_hide_links', $form_state['values']['admin_hide_links']);
-
-
+ 
   
 }
 
 function smartqueue_users_nodequeue_form_submit_finish(&$queue, $form_state) {
   if ($form_state['values']['submit_actions']['create'] == 1) {
-    $accounts = _smartqueue_users_get_eligible_accounts($form_state['values']['roles']);
-    $existing_subqueues = smartqueue_users_get_all_user_subqueues();
+    // Set 
+    variable_set('smartqueue_users_sq_'. $queue->qid .'_restrict_author', $form_state['values']['restrict_by_author']);
+    variable_set('display_user_page'. $queue->qid .'_restrict_author', $form_state['values']['display_user_page']);
+    variable_set('smartqueue_users_'. $queue->qid .'_display_user_page', $form_state['values']['display_user_page']);
+    variable_set('smartqueue_users_'. $queue->qid . '_admin_hide_links', $form_state['values']['admin_hide_links']);
+     
+    $accounts = _smartqueue_users_get_eligible_accounts($queue->qid, $form_state['values']['roles']);
+    $existing_subqueues = smartqueue_users_get_all_user_subqueues($queue->qid);
     $accounts_without_subqueues = array_diff_key($accounts, $existing_subqueues);
-    smartqueue_users_batch_add_subqueues($accounts_without_subqueues);
+    smartqueue_users_batch_add_subqueues($accounts_without_subqueues, $queue);
   }
   switch ($form_state['values']['submit_actions']['destroy']) {
     case 'delete':
-      drupal_goto('admin/content/nodequeue/smartqueue_users/batch_delete');
+      variable_del('smartqueue_users_sq_'. $form_state['values']['qid'] .'_restrict_author');
+      variable_del('display_user_page'. $form_state['values']['qid'] .'_restrict_author');
+      variable_del('smartqueue_users_'. $form_state['values']['qid'] .'_display_user_page');
+      variable_del('smartqueue_users_'. $form_state['values']['qid'] . '_admin_hide_links');
+      
+      drupal_goto('admin/content/nodequeue/smartqueue_users/batch_delete/'. $form_state['values']['qid']);
       break;
     //case 'disable':
       //smartqueue_users_batch_disable_subqueues(array_values($extra_subqueues);
@@ -182,7 +226,7 @@ function smartqueue_users_nodequeue_subq
   global $user;
   $restrict_by_author = variable_get('smartqueue_users_sq_'. $queue->qid .'_restrict_author', 0);
   $access_own = user_access('manipulate own user queue');
-  $admin_hide_links = variable_get('smartqueue_users_'. smartqueue_users_get_qid() . '_admin_hide_links', 1);
+  $admin_hide_links = variable_get('smartqueue_users_'. $queue->qid . '_admin_hide_links', 1);
   /*
   if (user_access("manipulate all queues" || user_access('manipulate all user queues'))) {
     $access_all = TRUE;
@@ -214,25 +258,20 @@ function smartqueue_users_nodequeue_subq
   return $references;
 }
 
-function smartqueue_users_load_subqueue_by_uid($uid) {
-
-  //TODO: Would be smart if this defaulted to the current user or accepted arguments
-  $qid = smartqueue_users_get_qid();
-  if (empty($qid)) {
-    return;
-  }
-  else {
-    //$queue = array_shift(nodequeue_load_queues(array($qid => $qid)));
-    $sq = nodequeue_load_subqueues_by_reference(array($qid => array(0 => $uid)));
+function smartqueue_users_load_subqueue_by_uid($qid, $uid = NULL) {
+  if (!$uid) {
+    global $user;
+    $uid = $user->uid;
   }
-  return $sq;
+  return nodequeue_load_subqueues_by_reference(array($qid => array(0 => $uid)));
+  
 }
 
 function smartqueue_users_menu() {
-  $items['admin/content/nodequeue/smartqueue_users/batch_delete'] = array(
+  $items['admin/content/nodequeue/smartqueue_users/batch_delete/%nodequeue'] = array(
     'title' => t('Confirm Smartqueue Users Batch Queue Deletion'),
     'page callback' => 'drupal_get_form',
-    'page arguments' => array('smartqueue_users_batch_delete_subqueues_confirm'),
+    'page arguments' => array('smartqueue_users_batch_delete_subqueues_confirm', 5),
     'access callback' => 'smartqueue_users_batch_delete_access',
   );
   return $items;
@@ -246,67 +285,68 @@ function smartqueue_users_user($op, &$ed
   global $user;
   switch ($op) {
     case 'insert':
-      //Determine whether the account is eligible for a SubQueue.
-      $eligible_roles = _smartqueue_users_all_eligible_roles();
-      // Regardless of whether a user is added programatically or via the 'create' form, roles other then 'authenticated' show up in $edit['roles'], not in $account->roles
-      $edit_roles = array();
-      $edit_roles = $edit['roles'];
-      $account_roles = $account->roles;
-      if (is_array($edit_roles)) {
-        $account_roles = array_flip(array_merge(array_keys($edit_roles), array_keys($account->roles))); //There must be a better way to do this.
-      }
-      if (count(array_intersect_key($eligible_roles, $account_roles)) > 0) {
-        //Check if a subqueue already exists for this account.
-        $existing_subqueue = smartqueue_users_load_subqueue_by_uid($account->uid);
-        if (!empty($existing_subqueue)) {
-          drupal_set_message(t('Skipped creating a subqueue for user %name with uid @uid because one already existed with qid @qid.', array('%name' => $account->name, '@uid' => $account->uid, '@qid' => $existing_sq->qid)));
-        }
-        else {
-          //Create a new subqueue for the user. -- Abstract this out to its own function if\when rules for User SubQueue names get more complicated.
-          $queue->qid = smartqueue_users_get_qid();
-          nodequeue_add_subqueue($queue, $account->name ."'s Node Queue", $account->uid);
-          if (user_access('administer nodequeue') || user_access('manipulate all queues') || user_access('manipulate all user queues')) {
-            drupal_set_message(t("Added Subqueue."));
+      $queues = smartqueue_users_get_eligible_queues($account);
+      if (!empty($queues)) {
+        foreach($queues as $qid) {
+          $existing_subqueue = smartqueue_users_load_subqueue_by_uid($qid, $account->uid);
+          if (!empty($existing_subqueue)) {
+              drupal_set_message(t('Skipped creating a subqueue for user %name with uid @uid because one already existed with qid @qid.', array('%name' => $account->name, '@uid' => $account->uid, '@qid' => $existing_sq->qid)));
+          }
+          else {
+            //Create a new subqueue for the user. -- Abstract this out to its own function if\when rules for User SubQueue names get more complicated.
+            $queue = nodequeue_load($qid);
+            
+            nodequeue_add_subqueue($queue, $account->name ."'s ". $queue->title, $account->uid);
+            if (user_access('administer nodequeue') || user_access('manipulate all queues') || user_access('manipulate all user queues')) {
+              drupal_set_message(t("Added Subqueue."));
+            }
           }
         }
       }
       break;
     case 'update':
-      $existing_subqueue = smartqueue_users_load_subqueue_by_uid($account->uid);
-      //TODO: Udate subqueue name when user's name is updated.
-      if (!empty($existing_sq->qid)  && $existing_sq->name != $account->name ."'s NodeQueue") {
-        nodequeue_subqueue_update_title($existing_sq->id, $account->name ."'s NodeQueue'");
+      $qids = smartqueue_users_get_qids();
+      foreach ($qids as $qid) {
+        $existing_subqueue = smartqueue_users_load_subqueue_by_uid($qid, $account->uid);
+        //TODO: Udate subqueue name when user's name is updated.
+        if (!empty($existing_sq->qid)  && $existing_sq->name != $account->name ."'s ". $queue->title) {
+          nodequeue_subqueue_update_title($existing_sq->id, $account->name ."'s ". $queue->title);
+        }
       }
       break;
     case 'delete':
-      $existing_subqueue = smartqueue_users_load_subqueue_by_uid($account->uid);
-      //Delete this user's SubQueue if it exists.
-      if (!empty($existing_subqueue)) {
-        nodequeue_remove_subqueue($existing_subqueue->qid);
-        drupal_set_message("Deleted SubQueue.");
+      $qids = smartqueue_users_get_qids();
+      foreach ($qids as $qid) {
+        $existing_subqueue = smartqueue_users_load_subqueue_by_uid($qid, $account->uid);
+        //Delete this user's SubQueue if it exists.
+        if (!empty($existing_subqueue)) {
+          nodequeue_remove_subqueue($existing_subqueue->qid);
+          drupal_set_message("Deleted SubQueue.");
+        }
       }
       break;
     case 'view':
       unset($access);
-      $qid = smartqueue_users_get_qid();
+      $qids = smartqueue_users_get_qids();
       $access = ((user_access('view own user queue on user profile page') && $account->uid == $user->uid) || user_access('view all user queues on profile pages'));
-      
-      if (module_exists('views') && variable_get('smartqueue_users_'. $qid .'_display_user_page', 1) && $access) {
-        $output .= views_embed_view('smartqueue_users_user', 'default', $account->uid);
-        if ($user->uid == $account->uid) {
-          $qid = smartqueue_users_get_qid();
-          $sq = smartqueue_users_load_subqueue_by_uid($account->uid);
-          if (is_array($sq) && !empty($sq) && user_access('manipulate own user queue')) {
-            $sq = array_shift($sq);
-            $output .= l('Manipulate my Node Queue', 'admin/content/nodequeue/'. $sq->qid .'/view/'. $sq->sqid);
+      foreach ($qids as $qid) {
+        if (module_exists('views') && variable_get('smartqueue_users_'. $qid .'_display_user_page', 1) && $access) {
+          $queue = nodequeue_load($qid);
+          $output = views_embed_view('smartqueue_users_user_'. $queue->qid, 'default', $account->uid);
+          if ($user->uid == $account->uid) {
+            $sq = smartqueue_users_load_subqueue_by_uid($qid, $account->uid);
+            if (is_array($sq) && !empty($sq) && user_access('manipulate own user queue')) {
+              $sq = array_shift($sq);
+              $output .= l('Manipulate this Node Queue', 'admin/content/nodequeue/'. $sq->qid .'/view/'. $sq->sqid);
+            }
           }
+          $account->content['summary']['smartqueue_users_'. $queue->qid] = array(
+            '#type' => 'user_profile_item',
+            '#title' => t($queue->title),
+            '#value' => $output,
+            '#attributes' => 'smartqueue_user_queue',
+          );
         }
-        $account->content['summary']['smartqueue_users'] = array(
-          '#type' => 'user_profile_item',
-          '#title' => t('User Queue'),
-          '#value' => $output,
-          '#attributes' => 'smartqueue_user_queue',
-        );
       }
   }
 }
@@ -319,19 +359,16 @@ function smartqueue_users_form_alter(&$f
         $form['title']['#weight'] = -1;
         $form['submit']['#weight'] = 9;
         $form[0]['#weight'] = 9; // the Delete button.
-        if (smartqueue_users_get_qid() && empty($form['title']['#default_value'])) {
-          drupal_set_message("Only one User Smartqueue can exist at a time.");
-          drupal_goto('admin/content/nodequeue'); 
-        }
+  
       }
       break;
     case 'user_confirm_delete':
     case 'user_multiple_delete_confirm':
       $accounts = array();
       $accounts = $form['#post']['accounts']; // **NOTE** Verify that this is secure.
-      $existing_queue = smartqueue_users_load_subqueues_by_uid($accounts);
+      $existing_queues = smartqueue_users_load_subqueues_by_uid($accounts);
       //Display a warning message if this user has a NodeQueue that will be deleted.
-      if (!empty($existing_queue)) {
+      if (!empty($existing_queues)) {
         //TODO: Make this message more informative.
         drupal_set_message(t("Node Queues will be deleted."), 'status');
       }
@@ -343,18 +380,22 @@ function smartqueue_users_perm() {
   return array('manipulate own user queue', 'manipulate all user queues', 'view own user queue on user profile page', 'view all user queues on profile pages');
 }
 
-function smartqueue_users_get_qid() {
-  static $qid;
+function smartqueue_users_get_qids() {
+  static $qids;
   if (!isset($qid)) {
-    $qid = db_result(db_query("SELECT qid FROM {nodequeue_queue} WHERE owner = 'smartqueue_users'"));
+    $qid_list = db_query("SELECT qid FROM {nodequeue_queue} WHERE owner = 'smartqueue_users'");
+    while ($qid = db_fetch_object($qid_list)) {
+      $qids[] = $qid->qid;
+    }
   }
-  return $qid;
+  
+  return $qids;
 }
 
 //TODO - Make sure to document this function, especially $uids
 function smartqueue_users_load_subqueues_by_uid($uids) {
-  $qid = smartqueue_users_get_qid();
-  if (empty($qid) || !isset($uids)) {
+  $qids = smartqueue_users_get_qids();
+  if (empty($qids) || !isset($uids)) {
     //Return if smartqueue_users has no NodeQueue or no uids are provided.
     return;
   }
@@ -363,9 +404,15 @@ function smartqueue_users_load_subqueues
       //Add the single UID into an array of accounts to use as SubQueue references.
       $uids[] = $uids;
     }
+    
+    if (is_array($qids)) {
+      foreach ($qids as $qid) {
+        $params[] = $uids;
+      }
+    }
     //$queue = array_shift(nodequeue_load_queues(array($qid => $qid)));
-    $existing_sq = nodequeue_load_subqueues_by_reference(array($qid => $uids));
-    return $existing_sq;
+    $existing_sqs = nodequeue_load_subqueues_by_reference($params);
+    return $existing_sqs;
   }
 }
 
@@ -373,19 +420,17 @@ function smartqueue_users_batch_update_s
   
 }
 
-function smartqueue_users_batch_add_subqueues($accounts) {
-  $qid = smartqueue_users_get_qid();
-  $queue->qid = $qid;
+function smartqueue_users_batch_add_subqueues($accounts, &$queue) {
   foreach ($accounts as $uid => $name) {
-    $sq = nodequeue_add_subqueue($queue, $name ."'s Node Queue", $uid);
-    drupal_set_message(t("Added Node Queue: @title", array('@title' => $name ."'s Node Queue")));
+    $sq = nodequeue_add_subqueue($queue, $name ."'s ". $queue->title, $uid);
+    drupal_set_message(t("Added Node Queue: @title", array('@title' => $name ."'s ". $queue->title)));
   }
 }
 
-function smartqueue_users_batch_delete_subqueues_confirm() {
-  $qid = smartqueue_users_get_qid();
-  $accounts = _smartqueue_users_get_eligible_accounts();
-  $existing_subqueues = smartqueue_users_get_all_user_subqueues();
+function smartqueue_users_batch_delete_subqueues_confirm($queue) {
+  $qid = $queue->qid;
+  $accounts = _smartqueue_users_get_eligible_accounts($qid);
+  $existing_subqueues = smartqueue_users_get_all_user_subqueues($qid);
   $extra_subqueues = array_diff_key($existing_subqueues, $accounts);
   if (empty($extra_subqueues)) {
     drupal_set_message(t("There are no extra subqueues to delete."));
@@ -417,13 +462,13 @@ function smartqueue_users_batch_delete_s
   }
 }
 
-function smartqueue_users_get_all_user_subqueues() {
-  $subqueues = array();
-  //returns an array keyed on the subqueue reference with the sq id as the value
-  $qid = smartqueue_users_get_qid();
-  $query = db_query("SELECT sqid, reference FROM {nodequeue_subqueue} WHERE qid = %d", $qid);
-  while ($result = db_fetch_array($query)) {
-    $subqueues[$result['reference']] = $result['sqid'];
+function smartqueue_users_get_all_user_subqueues($qid) {
+  if ($qid) {
+    $subqueues = array();
+    $query = db_query("SELECT sqid, reference FROM {nodequeue_subqueue} WHERE qid = %d", $qid);
+    while ($result = db_fetch_array($query)) {
+      $subqueues[$result['reference']] = $result['sqid'];
+    }
   }
   return $subqueues;
 }
\ No newline at end of file
Index: smartqueue_users_views.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/smartqueue_users/smartqueue_users_views.inc,v
retrieving revision 1.3
diff -u -p -r1.3 smartqueue_users_views.inc
--- smartqueue_users_views.inc	17 Aug 2008 01:32:34 -0000	1.3
+++ smartqueue_users_views.inc	21 Oct 2010 16:08:48 -0000
@@ -1,94 +1,105 @@
 <?php
 
 function smartqueue_users_views_default_views() {
-  $view = new view;
-  $view->name = 'smartqueue_users_user';
-  $view->description = 'Displays the nodes in a user\'s queue';
-  $view->tag = 'nodequeue';
-  $view->view_php = '';
-  $view->base_table = 'node';
-  $view->is_cacheable = FALSE;
-  $view->api_version = 2;
-  $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
-  $handler = $view->new_display('default', 'Defaults', 'default');
-  $handler->override_option('relationships', array(
-  'nodequeue_rel' => array(
-    'label' => 'queue',
-    'required' => 1,
-    'limit' => 1,
-    'qids' => array(
-      smartqueue_users_get_qid() => 1,
-      '1' => 0,
-      '3' => 0,
-    ),
-    'id' => 'nodequeue_rel',
-    'table' => 'node',
-    'field' => 'nodequeue_rel',
-    'relationship' => 'none',
-    ),
-  ));
-
-  $handler->override_option('sorts', array(
-    'position' => array(
-      'id' => 'position',
-      'table' => 'nodequeue_nodes',
-      'field' => 'position',
-    ),
-  ));
-  $handler->override_option('arguments', array(
-    'reference' => array(
-      'default_action' => 'ignore',
-      'style_plugin' => 'default_summary',
-      'style_options' => array(),
-      'wildcard' => 'all',
-      'wildcard_substitution' => 'All',
-      'title' => '',
-      'default_argument_type' => 'fixed',
-      'default_argument' => '',
-      'validate_type' => 'none',
-      'validate_fail' => 'not found',
-      'glossary' => 0,
-      'limit' => '0',
-      'case' => 'none',
-      'path_case' => 'none',
-      'transform_dash' => 0,
-      'id' => 'reference',
-      'table' => 'nodequeue_subqueue',
-      'field' => 'reference',
-      'relationship' => 'nodequeue_rel',
-      'default_options_div_prefix' => '',
-      'default_argument_user' => 0,
-      'default_argument_fixed' => '',
-      'default_argument_php' => '',
-      'validate_argument_node_type' => array(
-        'blog' => 0,
-        'poll' => 0,
-        'forum' => 0,
-        'book' => 0,
-        'page' => 0,
-        'story' => 0,
-      ),
-      'validate_argument_node_access' => 0,
-      'validate_argument_nid_type' => 'nid',
-      'validate_argument_vocabulary' => array(
-        '2' => 0,
-        '1' => 0,
-      ),
-      'validate_argument_type' => 'tid',
-      'validate_argument_php' => '',
-    ),
-  ));
-  $handler->override_option('access', array(
-    'type' => 'none',
-    'role' => array(),
-    'perm' => '',
-  ));
-  $handler->override_option('empty', 'This user does not have a queue that contains any posts.');
-  $handler->override_option('empty_format', '1');
-  $handler->override_option('use_pager', '1');
-  $handler->override_option('style_plugin', 'list');
-  $handler->override_option('row_plugin', 'node');
+  $views = array();
+  $qids = smartqueue_users_get_qids();
+  if (!empty($qids)) {
+    foreach ($qids as $qid) {
+      $queue = nodequeue_load($qid);
+      $view = new view;
+      $view->name = 'smartqueue_users_user_'. $qid;
+      $view->description = 'Displays the nodes in the '. $queue->title ." user smartqueue";
+      $view->tag = 'nodequeue';
+      $view->view_php = '';
+      $view->base_table = 'node';
+      $view->is_cacheable = FALSE;
+      $view->api_version = 2;
+      $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
+      $handler = $view->new_display('default', 'Defaults', 'default');
+      $handler->override_option('relationships', array(
+        'nodequeue_rel' => array(
+          'label' => 'queue',
+          'required' => 1,
+          'limit' => 1,
+          'qids' => array(
+            $qid => $qid,
+          ),
+          'id' => 'nodequeue_rel',
+          'table' => 'node',
+          'field' => 'nodequeue_rel',
+          'relationship' => 'none',
+        ),
+      ));
+      $handler->override_option('sorts', array(
+        'position' => array(
+          'order' => 'ASC',
+          'id' => 'position',
+          'table' => 'nodequeue_nodes',
+          'field' => 'position',
+          'relationship' => 'nodequeue_rel',
+        ),
+      ));
+      $handler->override_option('arguments', array(
+        'reference' => array(
+          'default_action' => 'ignore',
+          'style_plugin' => 'default_summary',
+          'style_options' => array(),
+          'wildcard' => 'all',
+          'wildcard_substitution' => 'All',
+          'title' => '',
+          'default_argument_type' => 'fixed',
+          'default_argument' => '',
+          'validate_type' => 'none',
+          'validate_fail' => 'not found',
+          'glossary' => 0,
+          'limit' => '0',
+          'case' => 'none',
+          'path_case' => 'none',
+          'transform_dash' => 0,
+          'id' => 'reference',
+          'table' => 'nodequeue_subqueue',
+          'field' => 'reference',
+          'relationship' => 'nodequeue_rel',
+          'default_options_div_prefix' => '',
+          'default_argument_user' => 0,
+          'default_argument_fixed' => '',
+          'default_argument_php' => '',
+          'validate_argument_node_type' => array(
+            'blog' => 0,
+            'poll' => 0,
+            'forum' => 0,
+            'book' => 0,
+            'page' => 0,
+            'story' => 0,
+          ),
+          'validate_argument_node_access' => 0,
+          'validate_argument_nid_type' => 'nid',
+          'validate_argument_vocabulary' => array(
+            '2' => 0,
+            '1' => 0,
+          ),
+          'validate_argument_type' => 'tid',
+          'validate_argument_php' => '',
+        ),
+      ));
+      $handler->override_option('access', array(
+        'type' => 'none',
+        'role' => array(),
+        'perm' => '',
+      ));
+      $handler->override_option('cache', array(
+        'type' => 'none',
+      ));
+      $handler->override_option('empty', 'This user does not have a queue that contains any posts.');
+      $handler->override_option('empty_format', '1');
+      $handler->override_option('use_pager', '1');
+      $handler->override_option('style_plugin', 'list');
+      $handler->override_option('row_plugin', 'node');
+      
+      $views[$view->name] = $view;
+    }
+    
+  }
   
-  $views[$view->name] = $view;
   return $views;
 }
\ No newline at end of file
