components); $issue['pid'] = $project->nid; $issue['category'] = $categories[array_rand($categories)]; $issue['component'] = $components[array_rand($components)]; $issue['priority'] = array_rand($priorities); $issue['assigned'] = $users[array_rand($users)]->uid; $issue['sid'] = $statuses[array_rand($statuses)]; $issue['name'] = $users[array_rand($users)]->name; $issue['title'] = _project_issue_generate_random_field($pid, 'title'); $issue['body'] = _project_issue_generate_random_field($pid, 'body'); _project_issue_generate_drupal_execute('project_issue_node_form', $issue, array('type' => 'project_issue')); } } /** * Generates project issue comments and metadata. * * @param $num_comments * Number of comments to generate. * @param $num_metadata * Number of times times to add metadata. */ function project_issue_generate_comments($num_comments, $num_metadata) { require_once(drupal_get_path('module', 'devel') .'/devel_generate.inc'); $projects = _project_issue_generate_get_field('projects'); $categories = _project_issue_generate_get_field('categories'); $priorities = _project_issue_generate_get_field('priorities'); $users = devel_get_users(); $statuses = _project_issue_generate_get_field('statuses'); for ($i = 0; $i < $num_comments; $i++) { srand((double) microtime() * 1000000); // Select a random issue and generate a comment on it $result = db_query("SELECT nid FROM {node} WHERE type = 'project_issue' ORDER BY RAND() LIMIT 1"); $nid = db_fetch_object($result)->nid; devel_create_comments(1, $users, array($nid => 'project_issue'), 0); if ($num_metadata >= $i) { $cid = db_next_id('{comments}_cid') - 1; $project = $projects[array_rand($projects)]; $components = unserialize($project->components); $result = db_query('SELECT pid, rid, component, category, priority, assigned, sid FROM {project_issues} WHERE nid = %d', $nid); $original_issue_data = serialize(db_fetch_object($result)); $pid = $project->nid; $category = $categories[array_rand($categories)]; $component = $components[array_rand($components)]; $priority = array_rand($priorities); $assigned = $users[array_rand($users)]; $sid = $statuses[array_rand($statuses)]; $title = _project_issue_generate_random_field($pid, 'title'); db_query("INSERT INTO {project_issue_comments} (nid, cid, component, category, priority, assigned, sid, pid, title, original_issue_data)" . " VALUES (%d, %d, '%s', '%s', %d, %d, %d, %d, '%s', '%s')", $nid, $cid, $component, $category, $priority, $assigned, $sid, $pid, $title, $original_issue_data); } } drupal_set_message(t('%num comments created.', array('%num' => $num_comments))); } function _project_issue_generate_get_field($field, $pool_size = 100) { require_once(drupal_get_path('module', 'project_issue') . '/issue.inc'); switch($field) { 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': $users = array(); $result = db_query('SELECT uid, name FROM {users} ORDER BY RAND() LIMIT %d', $pool_size); while ($user = db_fetch_object($result)) { $users[] = $user; } return $users; case 'statuses': $statuses = array(); $result = db_query('SELECT sid FROM {project_issue_state}'); while ($status = db_fetch_object($result)) { $statuses[] = $status->sid; } return $statuses; } } function _project_issue_generate_random_field($pid, $field) { require_once(drupal_get_path('module', 'project_issue') . '/issue.inc'); require_once(drupal_get_path('module', 'devel') .'/devel_generate.inc'); switch($field) { case 'pid': $result = db_query('SELECT nid FROM {project_issue_projects} ORDER BY RAND() LIMIT 1'); $pid = db_fetch_object($result)->nid; return $pid; case 'category': $categories = array_keys(project_issue_category()); $category = $categories[array_rand($categories)]; return $category; case 'component': $result = db_query('SELECT components FROM {project_issue_projects} WHERE nid = %d', $pid); $components = unserialize(db_fetch_object($result)->components); $component = $components[array_rand($components)]; return $component; case 'priority': $priorities = project_issue_priority(); $priority = array_rand($priorities); return $priority; case 'assigned': $result = db_query('SELECT uid FROM {users} ORDER BY RAND() LIMIT 1'); $uid = db_fetch_object($result)->uid; return $uid; case 'sid': $result = db_query('SELECT sid FROM {project_issue_state} ORDER BY RAND() LIMIT 1'); $status = db_fetch_object($result)->sid; return $status; case 'name': $result = db_query('SELECT name FROM {users} ORDER BY RAND() LIMIT 1'); $name = db_fetch_object($result)->name; return $name; case 'title': $title = devel_create_greeking(rand(2, 15), true); return $title; case 'body': $body = devel_create_content(); return $body; } } function _project_issue_generate_drupal_execute($form_id, $form_values) { global $form_values; $args = func_get_args(); $form_id = array_shift($args); $form_values = array_shift($args); array_unshift($args, $form_id); if (isset($form_values)) { $form = call_user_func_array('drupal_retrieve_form', $args); $form['#post'] = $form_values; return _project_issue_generate_drupal_process_form($form_id, $form); } } function _project_issue_generate_drupal_process_form($form_id, &$form) { global $form_values, $form_submitted, $user, $form_button_counter; static $saved_globals = array(); // In some scenarios, this function can be called recursively. Pushing any pre-existing // $form_values and form submission data lets us start fresh without clobbering work done // in earlier recursive calls. array_push($saved_globals, array($form_values, $form_submitted, $form_button_counter)); $form_submitted = FALSE; $form_button_counter = array(0, 0); drupal_prepare_form($form_id, $form); if (($form['#programmed']) || (!empty($_POST) && (($_POST['form_id'] == $form_id)))) { drupal_validate_form($form_id, $form); // IE does not send a button value when there is only one submit button (and no non-submit buttons) // and you submit by pressing enter. // In that case we accept a submission without button values. if ((($form['#programmed']) || $form_submitted || (!$form_button_counter[0] && $form_button_counter[1])) && !form_get_errors()) { $redirect = drupal_submit_form($form_id, $form); if (!$form['#programmed']) { drupal_redirect_form($form, $redirect); } } } // We've finished calling functions that alter the global values, so we can // restore the ones that were there before this function was called. list($form_values, $form_submitted, $form_button_counter) = array_pop($saved_globals); return $redirect; }