diff -urpN drupal-old/sites/all/modules/project_issue/generate_comments/project_issue_generate_comments.inc drupal-new/sites/all/modules/project_issue/generate_comments/project_issue_generate_comments.inc
--- drupal-old/sites/all/modules/project_issue/generate_comments/project_issue_generate_comments.inc	1969-12-31 21:00:00.000000000 -0300
+++ drupal-new/sites/all/modules/project_issue/generate_comments/project_issue_generate_comments.inc	2007-12-14 22:49:34.000000000 -0200
@@ -0,0 +1,149 @@
+<?php
+// If not in 'safe mode', increase the maximum execution time :
+if (!ini_get('safe_mode')) {
+  set_time_limit(240);
+}
+
+/**
+ * Generate some random project issue comments.
+ *
+ * @param $num
+ *  Number of comments to generate.
+ */
+function project_issue_generate_issue_comments($num) {
+  require_once(drupal_get_path('module', 'devel') .'/devel_generate.inc');
+
+  $issues = _project_issue_generate_get_field('issues');
+  $projects = _project_issue_generate_get_field('projects');
+  $categories = _project_issue_generate_get_field('categories');
+  $priorities = _project_issue_generate_get_field('priorities');
+  $users = _project_issue_generate_get_field('users');
+
+  for ($i = 0; $i < $num; $i++) {
+    srand((double) microtime() * 1000000);
+
+    $k = array_rand($issues);
+
+    $account = user_load(array('uid' => $users[array_rand($users)]->uid));
+    if (rand(0,10)) {
+      if (rand(0,1)) {
+        $project = $projects[array_rand($projects)];
+        $components = unserialize($project->components);
+	$issues[$k]->pid = $project->nid;
+	$issues[$k]->component = $components[array_rand($components)];
+      }
+      if (rand(0,1)) {
+        $issues[$k]->category = $categories[array_rand($categories)];
+      }
+      if (rand(0,1)) {
+        $issues[$k]->priority = array_rand($priorities);
+      }
+      if (rand(0,1)) {
+        $issues[$k]->title=devel_create_greeking(rand(2, 15), true);
+      }
+      if (rand(0,1)) {
+        $issues[$k]->sid = array_rand(_project_issue_generate_get_permitted_sids($account));
+        if (!isset($issues[$k]->sid)) {
+          unset($comment);
+          continue;
+        }
+      }
+      if (rand(0,1)) {
+        $issues[$k]->assigned = $account->uid;
+      }
+    }
+
+    $comment=array();
+    $comment['project_info']=array('pid' => $issues[$k]->pid, 'component' => $issues[$k]->component);
+    $comment['category'] = $issues[$k]->category;
+    $comment['priority'] = $issues[$k]->priority;
+    $comment['title'] = $issues[$k]->title;
+    $comment['sid'] = $issues[$k]->sid;
+    $comment['assigned'] = $issues[$k]->assigned;
+    $comment['comment'] = devel_create_content();
+    $comment['format'] = '1';
+    $comment['cid'] = '';
+
+    drupal_execute('comment_form', $comment, array('pid' => '', 'nid' => $issues[$k]->nid));
+    $result = db_query("SELECT MAX(cid) AS cid FROM comments");
+    $newcid = db_fetch_object($result)->cid;
+    db_query("UPDATE {comments} SET uid='{$account->uid}' WHERE cid='{$newcid}'");
+    drupal_set_message(t('Your <em>comment</em> has been created.'));
+  }
+}
+
+function _project_issue_generate_get_field($field, $pool_size = 100) {
+  require_once(drupal_get_path('module', 'project_issue') . '/issue.inc');
+
+  switch($field) {
+    case 'issues':
+      $issues = array();
+      $results = db_query('SELECT p.nid, p.pid, p.category, p.component, p.priority, p.rid, p.assigned, p.sid, n.title FROM {project_issues} p INNER JOIN {node} n ON n.nid=p.nid');
+      while ($result = db_fetch_object($results)) {
+        $issues[]=$result;
+      }
+      return $issues;
+    case 'projects':
+      $projects = array();
+
+      $result = db_query('SELECT nid, components FROM {project_issue_projects}');
+      while ($project = db_fetch_object($result)) {
+        $projects[] = $project;
+      }
+
+      return $projects;
+
+    case 'categories':
+      $categories = array_keys(project_issue_category());
+      return $categories;
+
+    case 'priorities':
+      $priorities = project_issue_priority();
+      return $priorities;
+
+    case 'users':
+      // Determine what role ids have permission to create project_issue nodes.
+      $users = array();
+      $allowed_roles = user_roles(FALSE, 'create project issues');
+
+      // If any authenticated user can create project_issue nodes,
+      // then there is no need for an INNER JOIN in our query.
+      // Otherwise, the query needs to INNER JOIN on the users
+      // table so that only users with roles that are allowed to
+      // create project_issue nodes are selected.
+      if (isset($allowed_roles[DRUPAL_AUTHENTICATED_RID])) {
+        $join = '';
+        $where = '';
+      }
+      else {
+        $join = 'INNER JOIN {users_roles} ur ON u.uid = ur.uid';
+        $where = "WHERE ur.rid IN (". implode(', ', array_keys($allowed_roles)) .")";
+      }
+      $sql = "SELECT u.uid FROM {users} u $join $where ORDER BY RAND() LIMIT %d";
+      $result = db_query($sql, $pool_size);
+      while ($user = db_fetch_object($result)) {
+        $users[] = $user;
+      }
+      return $users;
+  }
+}
+
+function _project_issue_generate_get_permitted_sids($user) {
+  static $permitted_states;
+
+  if (!isset($permitted_states)) {
+    $permitted_states = array();
+  }
+
+  if (isset($user->uid)) {
+    if (isset($permitted_states[$user->uid])) {
+      return $permitted_states[$user->uid];
+    }
+    else {
+      $states = project_issue_state($sid = 0, TRUE, TRUE, 0, FALSE, $user);
+      $permitted_states[$user->uid] = $states;
+      return $states;
+    }
+  }
+  return array();
+}
diff -urpN drupal-old/sites/all/modules/project_issue/generate_comments/project_issue_generate_comments.info drupal-new/sites/all/modules/project_issue/generate_comments/project_issue_generate_comments.info
--- drupal-old/sites/all/modules/project_issue/generate_comments/project_issue_generate_comments.info	1969-12-31 21:00:00.000000000 -0300
+++ drupal-new/sites/all/modules/project_issue/generate_comments/project_issue_generate_comments.info	2007-12-14 16:08:51.000000000 -0200
@@ -0,0 +1,4 @@
+name = Project issue comments generator
+description = Generate random issue comments.
+dependencies = project_issue devel
+package = Development
diff -urpN drupal-old/sites/all/modules/project_issue/generate_comments/project_issue_generate_comments.module drupal-new/sites/all/modules/project_issue/generate_comments/project_issue_generate_comments.module
--- drupal-old/sites/all/modules/project_issue/generate_comments/project_issue_generate_comments.module	1969-12-31 21:00:00.000000000 -0300
+++ drupal-new/sites/all/modules/project_issue/generate_comments/project_issue_generate_comments.module	2007-12-14 17:15:26.000000000 -0200
@@ -0,0 +1,40 @@
+<?php
+
+/**
+ * Implementation of hook_menu().
+ */
+function project_issue_generate_comments_menu($may_cache) {
+  $items = array();
+
+  if ($may_cache) {
+    $items[] = array(
+      'path' => 'admin/project/generate_issue_comment',
+      'title' => t('Generate issue comments'),
+      'description' => t('Generate a given number of issue comments.'),
+      'callback' => 'drupal_get_form',
+      'callback arguments' => array('project_issue_generate_comments_form'),
+      'access' => user_access('administer nodes'),
+    );
+  }
+
+  return $items;
+}
+
+function project_issue_generate_comments_form() {
+  $form['num'] = array(
+    '#type' => 'textfield',
+    '#title' => t('How many issue comments would you like to generate?'),
+    '#default_value' => 100,
+    '#size' => 10,
+  );
+  $form['submit'] = array(
+    '#type' => 'submit',
+    '#value' => t('Do it!'),
+  );
+  return $form;
+}
+
+function project_issue_generate_comments_form_submit($form_id, $form_values) {
+  require_once('project_issue_generate_comments.inc');
+  project_issue_generate_issue_comments($form_values['num']);
+}
