'Generate users',
'description' => 'Generate a given number of users. Optionally delete current users.',
'page callback' => 'drupal_get_form',
'page arguments' => array('devel_generate_users_form'),
'access arguments' => array('administer users'),
);
$items['admin/config/development/generate/content'] = array(
'title' => 'Generate content',
'description' => 'Generate a given number of nodes and comments. Optionally delete current items.',
'page callback' => 'drupal_get_form',
'page arguments' => array('devel_generate_content_form'),
'access arguments' => array('administer nodes'),
);
if (module_exists('taxonomy')) {
$items['admin/config/development/generate/taxonomy'] = array(
'title' => 'Generate taxonomy',
'description' => 'Generate a given number of vocabularies and terms. Optionally delete current taxonomies.',
'page callback' => 'drupal_get_form',
'page arguments' => array('devel_generate_taxonomy_form'),
'access arguments' => array('administer nodes'),
);
}
return $items;
}
function devel_generate_users_form() {
$form['num'] = array(
'#type' => 'textfield',
'#title' => t('How many users would you like to generate?'),
'#default_value' => 50,
'#size' => 10,
);
$form['kill_users'] = array(
'#type' => 'checkbox',
'#title' => t('Delete all users (except user id 1) before generating new users.'),
'#default_value' => FALSE,
);
$options = user_roles(TRUE);
unset($options[DRUPAL_AUTHENTICATED_RID]);
$form['roles'] = array(
'#type' => 'checkboxes',
'#title' => t('Which roles should the users receive?'),
'#description' => t('Users always receive the authenticated user role.'),
'#options' => $options,
);
$options = array(1 => t('Now'));
foreach (array(3600, 86400, 604800, 2592000, 31536000) as $interval) {
$options[$interval] = format_interval($interval, 1) . ' ' . t('ago');
}
$form['time_range'] = array(
'#type' => 'select',
'#title' => t('How old should user accounts be?'),
'#description' => t('User ages will be distributed randomly from the current time, back to the selected time.'),
'#options' => $options,
'#default_value' => 604800,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Do it!'),
);
return $form;
}
function devel_generate_users_form_submit($form_id, &$form_state) {
module_load_include('inc', 'devel_generate');
$values = $form_state['values'];
devel_create_users($values['num'], $values['kill_users'], $values['time_range'], $values['roles']);
}
function devel_generate_content_form() {
$options = array();
if (module_exists('content')) {
$types = content_types();
foreach ($types as $type) {
$warn = '';
if (count($type['fields'])) {
$warn = t('. This type contains CCK fields which will only be populated by fields that implement the content_generate hook.');
}
$options[$type['type']] = t($type['name']). $warn;
}
}
else {
$types = node_type_get_types();
$suffix = '';
foreach ($types as $type) {
if (module_exists('comment')) {
$default = variable_get('comment_' . $type->type, COMMENT_NODE_OPEN);
$map = array(t('Hidden'), t('Closed'), t('Open'));
$suffix = '. ' . t('Comments: ') . $map[$default]. '';
}
$options[$type->type] = t($type->name) . $suffix;
}
}
// we cannot currently generate valid polls.
unset($options['poll']);
if (empty($options)) {
drupal_set_message(t('You do not have any content types that can be generated. Go create a new content type already!', array('@create-type' => url('admin/structure/types/add'))), 'error', FALSE);
return;
}
$form['node_types'] = array(
'#type' => 'checkboxes',
'#title' => t('Which node types do you want to create?'),
'#options' => $options,
'#default_value' => array_keys($options),
);
$form['kill_content'] = array(
'#type' => 'checkbox',
'#title' => t('Delete all content in these node types before generating new content.'),
'#default_value' => FALSE,
);
$form['num_nodes'] = array(
'#type' => 'textfield',
'#title' => t('How many nodes would you like to generate?'),
'#default_value' => 50,
'#size' => 10,
);
$options = array(1 => t('Now'));
foreach (array(3600, 86400, 604800, 2592000, 31536000) as $interval) {
$options[$interval] = format_interval($interval, 1) . ' ' . t('ago');
}
$form['time_range'] = array(
'#type' => 'select',
'#title' => t('How far back in time should the nodes be dated?'),
'#description' => t('Node creation dates will be distributed randomly from the current time, back to the selected time.'),
'#options' => $options,
'#default_value' => 604800,
);
$form['max_comments'] = array(
'#type' => module_exists('comment') ? 'textfield' : 'value',
'#title' => t('Maximum number of comments per node.'),
'#description' => t('You must also enable comments for the content types you are generating. Note that some nodes will randomly receive zero comments. Some will receive the max.'),
'#default_value' => 0,
'#size' => 3,
'#access' => module_exists('comment'),
);
$form['title_length'] = array(
'#type' => 'textfield',
'#title' => t('Max word length of titles'),
'#default_value' => 4,
'#size' => 10,
);
$form['add_upload'] = array(
'#type' => 'checkbox',
'#disabled' => !module_exists('upload'),
'#description' => t('Requires upload.module'),
'#title' => t('Add an upload to each node'),
'#default_value' => FALSE,
);
$form['add_alias'] = array(
'#type' => 'checkbox',
'#disabled' => !module_exists('path'),
'#description' => t('Requires path.module'),
'#title' => t('Add an url alias for each node.'),
'#default_value' => FALSE,
);
$form['add_statistics'] = array(
'#type' => 'checkbox',
'#title' => t('Add statistics for each node (node_counter table).'),
'#default_value' => TRUE,
'#access' => module_exists('statistics'),
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Do it!'),
);
$form['#redirect'] = FALSE;
return $form;
}
function devel_generate_content_form_submit($form_id, &$form_state) {
module_load_include('inc', 'devel_generate', 'devel_generate');
$form_state['values']['node_types'] = array_filter($form_state['values']['node_types']);
if ($form_state['values']['num_nodes'] <= 50 && $form_state['values']['max_comments'] <= 10) {
module_load_include('inc', 'devel_generate');
devel_generate_content($form_state);
}
else {
module_load_include('inc', 'devel_generate', 'devel_generate_batch');
devel_generate_batch_content($form_state);
}
}
function devel_generate_taxonomy_form() {
$form['num_vocab'] = array(
'#type' => 'textfield',
'#title' => t('How many vocabularies would you like to generate?'),
'#default_value' => 3,
'#size' => 10,
);
$form['num_terms'] = array(
'#type' => 'textfield',
'#title' => t('How many terms would you like to generate?'),
'#default_value' => 50,
'#size' => 10,
);
$form['title_length'] = array(
'#type' => 'textfield',
'#title' => t('Max word length of term/vocab names'),
'#default_value' => 12,
'#size' => 10,
);
$form['kill_taxonomy'] = array(
'#type' => 'checkbox',
'#title' => t('Delete existing terms and vocabularies before generating new content.'),
'#default_value' => FALSE,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Do it!'),
);
return $form;
}
function devel_generate_taxonomy_form_submit($form_id, &$form_state) {
module_load_include('inc', 'devel_generate');
devel_generate_taxonomy_data($form_state['values']['num_vocab'], $form_state['values']['num_terms'], $form_state['values']['title_length'], $form_state['values']['kill_taxonomy']);
}
// Modules that want to affect generated nodes may implement hook_node('presave'). See OG module or CCK.
// A few implementations live here because core doesn't do bulk node generation.
function devel_generate_node_presave(&$node) {
if (isset($node->devel_generate)) {
$results = $node->devel_generate;
if (!empty($results['add_upload'])) {
devel_generate_add_upload($node);
}
}
}
function devel_generate_node_insert(&$node) {
if (isset($node->devel_generate)) {
$results = $node->devel_generate;
if (!empty($results['max_comments'])) {
devel_generate_add_comments($node, $results['users'], $results['max_comments'], $results['title_length']);
}
// Add an url alias. Cannot happen before save because we don't know the nid.
if (!empty($results['add_alias'])) {
$path = array(
'source' => 'node/' . $node->nid,
'alias' => 'node-' . $node->nid . '-' . $node->type,
);
path_save($path);
}
// Add node statistics.
if (!empty($results['add_statistics']) && module_exists('statistics')) {
devel_generate_add_statistics($node);
}
}
}