Index: devel_generate.drush.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/devel/Attic/devel_generate.drush.inc,v
retrieving revision 1.1.2.14
diff -u -p -r1.1.2.14 devel_generate.drush.inc
--- devel_generate.drush.inc	7 Jul 2010 16:46:37 -0000	1.1.2.14
+++ devel_generate.drush.inc	21 Jan 2011 22:29:51 -0000
@@ -17,6 +17,8 @@ function devel_generate_drush_help($sect
       return dt('Generate taxonomy terms for a given vocabulary.');
     case 'drush:generate-content':
       return dt('Generate nodes and comments.');
+    case 'drush:generate-privatemsg':
+      return dt('Generate private message threads.');
   }
 }
 
@@ -61,6 +63,15 @@ function devel_generate_drush_command() 
     ),
     'aliases' => array('genc'),
   );
+  $items['generate-privatemsg'] = array(
+    'description' => 'Creates private message threads.',
+    'drupal dependencies' => array('devel_generate', 'privatemsg'),
+    'arguments' => array(
+      'num_threads' => 'Number of private message threads to create.',
+      'num_members' => 'Number of users to include in each thread.',
+    ),
+    'aliases' => array('genp'),
+  );
   return $items;
 }
 
@@ -138,6 +149,22 @@ function drush_devel_generate_generate_c
   drush_log(dt('Generated @num_nodes nodes, @max_comments comments per node', array('@num_nodes' => $num_nodes, '@max_comments' => $max_comments)), 'ok');
 }
 
+/**
+ * Command callback. Generate a number of private message threads.
+ */
+function drush_devel_generate_generate_privatemsg($num_threads = NULL, $num_members = NULL) {
+  if (drush_generate_is_number($num_threads) == FALSE) {
+    drush_set_error('DEVEL_GENERATE_INVALID_NUM_THREADS', dt('Invalid number of threads'));
+  }
+  if (drush_generate_is_number($num_members) == FALSE) {
+    drush_set_error('DEVEL_GENERATE_INVALID_NUM_MEMBERS', dt('Invalid number of members'));
+  }
+
+  drush_generate_include_devel();
+  drush_op('devel_generate_privatemsg_data', $num_threads, $num_members);
+  drush_log(dt('Generated @num_threads thread with @num_members members per thread', array('@num_threads' => $num_threads, '@num_members' => $num_members)));
+}
+
 //////////////////////////////////////////////////////////////////////////////
 // Helper functions
 
@@ -153,4 +180,4 @@ function drush_generate_is_number($numbe
 function drush_generate_include_devel() {
   $path = drupal_get_path('module', 'devel_generate');
   require_once($path .'/devel_generate.inc');
-}
\ No newline at end of file
+}
Index: devel_generate.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/devel/Attic/devel_generate.inc,v
retrieving revision 1.14.2.24
diff -u -p -r1.14.2.24 devel_generate.inc
--- devel_generate.inc	26 Oct 2010 05:11:54 -0000	1.14.2.24
+++ devel_generate.inc	21 Jan 2011 22:30:11 -0000
@@ -515,3 +515,30 @@ function devel_generate_nodeapi(&$node, 
     }
   }
 }
+
+/**
+ * Creates privatemsg threads.
+ */
+function devel_generate_privatemsg_data($num_threads, $num_members) {
+  for ($x = 0; $x < $num_threads; $x++) {
+    // pick a random author - TODO - make sure they have write privatemsg permission
+    $author = db_fetch_object(db_query("SELECT * FROM {users} WHERE uid > 0 ORDER BY RAND() LIMIT 1"));
+
+    $rec = array();
+    $res = db_query("SELECT * FROM {users} WHERE uid > 1 ORDER BY RAND() LIMIT %d", $num_members);
+    while ($acc = db_fetch_object($res)) {
+      $rec[$acc->uid] = $acc;
+    }
+    $fs = array(
+      'validate_built_message' => array(
+        'author' => $author,
+        'recipients' => $rec,
+        'timestamp' => time(),
+        'subject' => devel_generate_word(mt_rand(4, 20)),
+        'body' => devel_create_content(3),
+      ),
+    );
+    pm_send(array(), $fs);
+  }
+}
+
Index: devel_generate.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/devel/Attic/devel_generate.module,v
retrieving revision 1.11.2.16
diff -u -p -r1.11.2.16 devel_generate.module
--- devel_generate.module	6 Dec 2010 15:27:22 -0000	1.11.2.16
+++ devel_generate.module	21 Jan 2011 22:30:14 -0000
@@ -42,6 +42,15 @@ function devel_generate_menu() {
       'access arguments' => array('administer nodes'),
     );
   }
+  if (module_exists('privatemsg')) {
+    $items['admin/generate/privatemsg'] = array(
+      'title' => 'Generate private messages',
+      'description' => 'Generate a given number of private messages.',
+      'page callback' => 'drupal_get_form',
+      'page arguments' => array('devel_generate_privatemsg_form'),
+      'access arguments' => array('administer privatemsg settings'),
+    );
+  }
 
   return $items;
 }
@@ -229,3 +238,37 @@ function devel_generate_taxonomy_form_su
   require_once('devel_generate.inc');
   devel_generate_taxonomy_data($form_state['values']['num_vocab'], $form_state['values']['num_terms'], $form_state['values']['title_length'], $form_state['values']['kill_taxonomy']);
 }
+
+function devel_generate_privatemsg_form() {
+  $form = array();
+
+  $form['num_threads'] = array(
+    '#type' => 'textfield',
+    '#title' => t('How many message threads would you like to generate?'),
+    '#default_value' => 10,
+    '#size' => 10,
+  );
+  $form['num_members'] = array(
+    '#type' => 'textfield',
+    '#title' => t('What is the max number of users that should be part of these threads?'),
+    '#default_value' => 10,
+    '#size' => 10,
+  );
+  $form['submit'] = array(
+    '#type' => 'submit',
+    '#value' => t('Do it!'),
+  );
+
+  return $form;
+}
+
+function devel_generate_privatemsg_form_submit($form, &$form_state) {
+  if ($form_state['values']['num_threads'] > 10) {
+    devel_batch_generate_privatemsg($form_state['values']['num_threads'], $form_state['values']['num_members']);
+  }
+  else {
+    require_once('devel_generate.inc');
+    devel_generate_privatemsg_data($form_state['values']['num_threads'], $form_state['values']['num_members']);
+  }
+}
+
Index: devel_generate_batch.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/devel/Attic/devel_generate_batch.inc,v
retrieving revision 1.1.2.5
diff -u -p -r1.1.2.5 devel_generate_batch.inc
--- devel_generate_batch.inc	2 Feb 2009 21:00:52 -0000	1.1.2.5
+++ devel_generate_batch.inc	21 Jan 2011 22:30:15 -0000
@@ -68,3 +68,45 @@ function devel_generate_batch_finished($
   drupal_set_message($message);
 }
 
+/**
+ * Batch generates privatemsg threads.
+ */
+function devel_batch_generate_privatemsg($num_threads, $num_members) {
+  $operations = array();
+    
+  // start the batch
+  $batch = array(
+    'title' => t('Generating Private Message Threads'),
+    'operations' => array(
+      array('devel_generate_batch_privatemsg', array($num_threads, $num_members)),
+    ),
+    'finished' => 'devel_generate_batch_privatemsg_finished',
+    'file' => drupal_get_path('module', 'devel_generate') . '/devel_generate_batch.inc',
+  );
+  batch_set($batch);
+}
+
+function devel_generate_batch_privatemsg($num_threads, $num_members, &$context) {
+  require_once('devel_generate.inc');
+  if (empty($context['sandbox'])) {
+    $context['sandbox']['progress'] = 0;
+    $context['sandbox']['max'] = $num_threads;
+    $context['results']['num_threads'] = $num_threads;
+  }
+ 
+  devel_generate_privatemsg_data(1, $num_members); 
+  $context['sandbox']['progress']++;
+  if ($context['sandbox']['progress'] != $context['sandbox']['max']) {
+    $context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
+  }
+}
+
+function devel_generate_batch_privatemsg_finished($success, $results, $operations) {
+  if ($success) {
+    $message = t('Created @num_threads successfully.', array('@num_threads' => $results['num_threads']));
+  }
+  else {
+    $message = t('Finished with an error.');
+  }
+  drupal_set_message($message);
+}
