'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(); foreach ($types as $type) { $options[$type->type] = t($type->name); } } // 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 node types you are generating.'), '#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); } } }