? automatic_subqueue_creation.patch
Index: smartqueue_users.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/smartqueue_users/smartqueue_users.module,v
retrieving revision 1.36.2.1
diff -u -p -r1.36.2.1 smartqueue_users.module
--- smartqueue_users.module	2 Sep 2009 13:36:14 -0000	1.36.2.1
+++ smartqueue_users.module	20 Oct 2010 06:17:44 -0000
@@ -49,6 +49,14 @@ function smartqueue_users_nodequeue_form
     '#default_value' => (int)_smartqueue_users_settings_get('restrict_by_author', $qid),
   );
   
+  $form['placeholder']['smartqueue_users']['generate_subqueues'] = array(
+    '#type' => 'checkbox',
+    '#title' => t("Automatically generate subqueues on account creation"),
+    '#description' => t("A subqueue will automatically be created when a user registers."),
+    '#default_value' => (int)_smartqueue_users_settings_get('generate_subqueues', $qid),
+  );
+  
+  
   $form['placeholder']['smartqueue_users']['subqueue_limit'] = array(
     '#type' => 'textfield',
     '#title' => t('Maximum number of subqueues per user'),
@@ -110,6 +118,7 @@ function smartqueue_users_nodequeue_form
   $qid = $queue->qid;
   
   _smartqueue_users_settings_set('restrict_by_author', $qid, (bool)$form_state['values']['restrict_by_author']);
+  _smartqueue_users_settings_set('generate_subqueues', $qid, (bool)$form_state['values']['generate_subqueues']);
   _smartqueue_users_settings_set('subqueue_limit', $qid, (int)$form_state['values']['subqueue_limit']);
   _smartqueue_users_settings_set('subqueue_privacy_default', $qid, (int)$form_state['values']['subqueue_privacy_default']);
   _smartqueue_users_settings_set('subqueue_privacy_changeable', $qid, (bool)$form_state['values']['subqueue_privacy_changeable']);
@@ -306,9 +315,34 @@ function smartqueue_users_user($op, &$ed
       }
       
       break;
+    case 'insert':
+        $qids = smartqueue_users_get_eligible_queues($account);
+        if (count($qids)) {
+          foreach ($qids as $qid) {
+            $subqueues = nodequeue_load_subqueues_by_reference(array($qid => array(0 => $account->uid)));
+            if (empty($subqueues)) {
+              $queue = nodequeue_load($qid);
+              nodequeue_add_subqueue($queue, $account->name ."'s ". $queue->title, smartqueue_users_get_next_reference_string($account->uid, $queue->qid));
+            }
+          }
+        }
+      break;
   }
 }
 
+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)) {
+    if (_smartqueue_users_settings_get('generate_subqueues', $row->qid)) {
+      $qids[] = $row->qid;
+    }
+  }
+  
+  return $qids;
+}
 
 /**
  * Block hooks.
