View source
<?php
if (!ini_get('safe_mode')) {
set_time_limit(240);
}
function devel_create_users($num, $kill, $age = 0) {
$url = parse_url($GLOBALS['base_url']);
if ($kill) {
db_query('DELETE FROM {users} WHERE uid > 1');
drupal_set_message(t('Users deleted.'));
}
if ($num > 0) {
$names = array();
while (count($names) < $num) {
$length = mt_rand(6, 12);
$name = devel_generate_word($length);
$names[$name] = '';
}
foreach ($names as $name => $value) {
$pass = md5(user_password());
$mail = $name . '@' . $url['host'];
$now = time();
$created = $age ? mt_rand($now - $age, $now) : $now - 1;
$account = user_save(NULL, array(
'name' => $name,
'pass' => $pass,
'mail' => $mail,
'status' => '1',
'created' => $created,
'access' => $now,
'devel_generate' => TRUE,
));
}
drupal_set_message(t('!num_users created.', array(
'!num_users' => format_plural($num, '1 user', '@count users'),
)));
}
}
function devel_generate_content($form_state) {
$form_state['values'] += array(
'time_range' => 0,
'add_alias' => FALSE,
'add_statistics' => FALSE,
);
if ($form_state['values']['kill_content']) {
devel_generate_content_kill($form_state['values']);
}
if (count($form_state['values']['node_types'])) {
devel_generate_content_pre_node($form_state['values']);
for ($i = 1; $i <= $form_state['values']['num_nodes']; $i++) {
devel_generate_content_add_node($form_state['values']);
}
}
drupal_set_message(format_plural($form_state['values']['num_nodes'], '1 node created.', '@count nodes created'));
}
function devel_generate_add_comments($node, $users, $max_comments, $title_length = 8) {
$num_comments = mt_rand(1, $max_comments);
for ($i = 1; $i <= $num_comments; $i++) {
$comment->nid = $node->nid;
$comment->cid = NULL;
$comment->format = FILTER_FORMAT_DEFAULT;
$comment->name = 'devel generate';
$comment->mail = 'devel_generate@example.com';
$comment->timestamp = mt_rand($node->created, time());
switch ($i % 3) {
case 1:
$comment->pid = db_result(db_query_range("SELECT cid FROM {comments} WHERE pid = 0 AND nid = %d ORDER BY RAND()", $comment->nid, 0, 1));
break;
case 2:
$comment->pid = db_result(db_query("SELECT cid FROM {comments} WHERE pid > 0 AND nid = %d ORDER BY RAND()", $comment->nid, 0, 1));
break;
default:
$comment->pid = 0;
}
$comment->subject = devel_create_greeking(mt_rand(1, $title_length), TRUE);
$comment->comment = devel_create_content();
$comment->uid = $users[array_rand($users)];
comment_save((array) $comment);
}
}
function devel_generate_vocabs($records, $maxlength = 12, $types = array(
'story',
'blog',
'forum',
'page',
)) {
$vocs = array();
for ($i = 1; $i <= $records; $i++) {
$voc = array();
$voc['name'] = devel_generate_word(rand(2, $maxlength));
$voc['description'] = "description of " . $voc['name'];
$voc['nodes'] = array_flip(array(
$types[array_rand($types)],
));
foreach ($voc['nodes'] as $key => $value) {
$voc['nodes'][$key] = $key;
}
$voc['multiple'] = 1;
$voc['required'] = 0;
$voc['relations'] = 1;
$voc['hierarchy'] = 1;
$voc['weight'] = mt_rand(0, 10);
taxonomy_save_vocabulary($voc);
$vocs[] = $voc['name'];
}
return $vocs;
}
function devel_generate_terms($records, $vocs, $maxlength = 12) {
$terms = array();
for ($i = 1; $i <= $records; $i++) {
switch ($i % 2) {
case 1:
$term['vid'] = $vocs[array_rand($vocs)];
break;
case 2:
default:
$parent = db_fetch_object(db_query_range("SELECT t.tid, v.vid FROM {term_data} t INNER JOIN {vocabulary} v ON t.vid = v.vid ORDER BY RAND()", 0, 1));
$term['parent'] = array(
$parent->tid,
);
$term['vid'] = $parent->vid;
break;
}
$term['name'] = devel_generate_word(mt_rand(2, $maxlength));
$term['description'] = "description of " . $term['name'];
$term['weight'] = mt_rand(0, 10);
$status = taxonomy_save_term($term);
$output = NULL;
if ($status) {
$terms[] = $term['name'];
}
unset($term);
}
return $terms;
}
function devel_generate_get_vocabs() {
$vocs = array();
$result = db_query("SELECT vid FROM {vocabulary}");
while ($voc = db_fetch_object($result)) {
$vocs[] = $voc->vid;
}
return $vocs;
}
function devel_generate_taxonomy_data($num_vocab, $num_terms, $title_length, $kill) {
if ($kill) {
db_query("DELETE FROM {term_data}");
db_query("DELETE FROM {term_node}");
db_query("DELETE FROM {term_hierarchy}");
db_query("DELETE FROM {term_relation}");
db_query("DELETE FROM {term_synonym}");
db_query("DELETE FROM {vocabulary}");
db_query("DELETE FROM {vocabulary_node_types}");
switch ($GLOBALS['db_type']) {
case 'mysql':
case 'mysqli':
db_query("ALTER TABLE {vocabulary} AUTO_INCREMENT = 1");
db_query("ALTER TABLE {term_data} AUTO_INCREMENT = 1");
break;
case 'pgsql':
db_query("SELECT setval('{vocabulary}_vid_seq', 1, false)");
db_query("SELECT setval('{term_data}_tid_seq', 1, false)");
break;
}
drupal_set_message(t('Deleted taxonomy.'));
}
$new_vocs = devel_generate_vocabs($num_vocab, $title_length);
if (!empty($new_vocs)) {
drupal_set_message(t('Created the following new vocabularies: !vocs', array(
'!vocs' => theme('item_list', $new_vocs),
)));
}
$vocs = devel_generate_get_vocabs();
$new_terms = devel_generate_terms($num_terms, $vocs, $title_length);
if (!empty($new_terms)) {
drupal_set_message(t('Created the following new terms: !terms', array(
'!terms' => theme('item_list', $new_terms),
)));
}
}
function devel_generate_word($length) {
srand((double) microtime() * 1000000);
$vowels = array(
"a",
"e",
"i",
"o",
"u",
);
$cons = array(
"b",
"c",
"d",
"g",
"h",
"j",
"k",
"l",
"m",
"n",
"p",
"r",
"s",
"t",
"u",
"v",
"w",
"tr",
"cr",
"br",
"fr",
"th",
"dr",
"ch",
"ph",
"wr",
"st",
"sp",
"sw",
"pr",
"sl",
"cl",
"sh",
);
$num_vowels = count($vowels);
$num_cons = count($cons);
$word = '';
while (strlen($word) < $length) {
$word .= $cons[mt_rand(0, $num_cons - 1)] . $vowels[mt_rand(0, $num_vowels - 1)];
}
return substr($word, 0, $length);
}
function devel_create_content($type = NULL) {
$nparas = mt_rand(1, 12);
$type = empty($type) ? mt_rand(0, 3) : $type;
$output = "";
switch ($type % 3) {
case 1:
for ($i = 1; $i <= $nparas; $i++) {
$output .= devel_create_para(mt_rand(10, 60), 1);
}
break;
case 2:
for ($i = 1; $i <= $nparas; $i++) {
$output .= devel_create_para(mt_rand(10, 60), 2);
}
break;
default:
for ($i = 1; $i <= $nparas; $i++) {
$output .= devel_create_para(mt_rand(10, 60)) . "\n\n";
}
}
return $output;
}
function devel_generate_content_types() {
$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_get_types();
foreach ($types as $type) {
$options[$type->type] = t($type->name);
}
}
unset($options['poll']);
return $options;
}
function devel_create_para($words, $type = 0) {
$output = "";
switch ($type) {
case 1:
$output .= "<p>";
$output .= devel_create_greeking($words);
$output = trim($output) . "</p>";
break;
case 2:
$output .= devel_create_greeking($words);
$output = trim($output) . "<br />";
break;
default:
$output .= devel_create_greeking($words);
$output = trim($output);
}
return $output;
}
function devel_create_greeking($words, $title = FALSE) {
$dictionary = array(
"abbas",
"abdo",
"abico",
"abigo",
"abluo",
"accumsan",
"acsi",
"ad",
"adipiscing",
"aliquam",
"aliquip",
"amet",
"antehabeo",
"appellatio",
"aptent",
"at",
"augue",
"autem",
"bene",
"blandit",
"brevitas",
"caecus",
"camur",
"capto",
"causa",
"cogo",
"comis",
"commodo",
"commoveo",
"consectetuer",
"consequat",
"conventio",
"cui",
"damnum",
"decet",
"defui",
"diam",
"dignissim",
"distineo",
"dolor",
"dolore",
"dolus",
"duis",
"ea",
"eligo",
"elit",
"enim",
"erat",
"eros",
"esca",
"esse",
"et",
"eu",
"euismod",
"eum",
"ex",
"exerci",
"exputo",
"facilisi",
"facilisis",
"fere",
"feugiat",
"gemino",
"genitus",
"gilvus",
"gravis",
"haero",
"hendrerit",
"hos",
"huic",
"humo",
"iaceo",
"ibidem",
"ideo",
"ille",
"illum",
"immitto",
"importunus",
"imputo",
"in",
"incassum",
"inhibeo",
"interdico",
"iriure",
"iusto",
"iustum",
"jugis",
"jumentum",
"jus",
"laoreet",
"lenis",
"letalis",
"lobortis",
"loquor",
"lucidus",
"luctus",
"ludus",
"luptatum",
"macto",
"magna",
"mauris",
"melior",
"metuo",
"meus",
"minim",
"modo",
"molior",
"mos",
"natu",
"neo",
"neque",
"nibh",
"nimis",
"nisl",
"nobis",
"nostrud",
"nulla",
"nunc",
"nutus",
"obruo",
"occuro",
"odio",
"olim",
"oppeto",
"os",
"pagus",
"pala",
"paratus",
"patria",
"paulatim",
"pecus",
"persto",
"pertineo",
"plaga",
"pneum",
"populus",
"praemitto",
"praesent",
"premo",
"probo",
"proprius",
"quadrum",
"quae",
"qui",
"quia",
"quibus",
"quidem",
"quidne",
"quis",
"ratis",
"refero",
"refoveo",
"roto",
"rusticus",
"saepius",
"sagaciter",
"saluto",
"scisco",
"secundum",
"sed",
"si",
"similis",
"singularis",
"sino",
"sit",
"sudo",
"suscipere",
"suscipit",
"tamen",
"tation",
"te",
"tego",
"tincidunt",
"torqueo",
"tum",
"turpis",
"typicus",
"ulciscor",
"ullamcorper",
"usitas",
"ut",
"utinam",
"utrum",
"uxor",
"valde",
"valetudo",
"validus",
"vel",
"velit",
"veniam",
"venio",
"vereor",
"vero",
"verto",
"vicis",
"vindico",
"virtus",
"voco",
"volutpat",
"vulpes",
"vulputate",
"wisi",
"ymo",
"zelus",
);
$greeking = "";
if (!$title) {
while ($words > 0) {
$sentence_length = mt_rand(3, 10);
$greeking .= ucfirst($dictionary[array_rand($dictionary)]);
for ($i = 1; $i < $sentence_length; $i++) {
$greeking .= " " . $dictionary[array_rand($dictionary)];
}
$greeking .= ". ";
$words -= $sentence_length;
}
}
else {
$title_length = $words;
$array = array();
for ($i = 0; $i < $words; $i++) {
$array[] = $dictionary[array_rand($dictionary)];
}
$greeking = ucwords(implode(' ', $array));
}
return $greeking;
}
function devel_generate_add_terms(&$node) {
$vocabs = taxonomy_get_vocabularies($node->type);
foreach ($vocabs as $vocab) {
$sql = "SELECT tid FROM {term_data} WHERE vid = %d ORDER BY RAND()";
$result = db_query_range($sql, $vocab->vid, 0, 5);
while ($row = db_fetch_object($result)) {
$node->taxonomy[] = $row->tid;
if (!$vocab->multiple) {
break;
}
}
}
}
function devel_get_users() {
$users = array();
$result = db_query_range("SELECT uid FROM {users}", 0, 50);
while ($user = db_fetch_object($result)) {
$users[] = $user->uid;
}
return $users;
}
function devel_generate_add_upload(&$node) {
$source = 'misc/blog.png';
$size = filesize($source);
file_copy($source);
$file = new stdClass();
$file->filename = 'blog.png';
$file->filepath = $source;
$file->filemime = 'image/png';
$file->list = variable_get('upload_list_default', TRUE);
$file->description = 'b log.png was here';
$file->filesize = $size;
$file->weight = mt_rand(0, 10);
$file->new = TRUE;
db_query("INSERT INTO {files} (uid, filename, filepath, filemime, filesize, status, timestamp) VALUES (%d, '%s', '%s', '%s', %d, %d, %d)", $node->uid, $file->filename, $file->filepath, $file->filemime, $file->filesize, FILE_STATUS_TEMPORARY, time());
$file->fid = db_last_insert_id('files', 'fid');
$node->files[$file->fid] = $file;
}
function devel_generate_add_statistics($node) {
$totalcount = mt_rand(0, 500);
$daycount = mt_rand(0, $totalcount);
$timestamp = time() - mt_rand(0, $node->created);
db_query('INSERT INTO {node_counter} (nid, daycount, totalcount, timestamp) VALUES (%d, %d, %d, %d)', $node->nid, $daycount, $totalcount, $timestamp);
}
function devel_generate_content_kill($results) {
$sql = 'SELECT nid FROM {node} WHERE type IN (' . db_placeholders($results['node_types'], 'text') . ')';
$result = db_query($sql, $results['node_types']);
$i = 0;
while ($row = db_fetch_object($result)) {
node_delete($row->nid);
$i++;
}
drupal_set_message(format_plural($i, 'Deleted one post', 'Deleted @count posts'));
}
function devel_generate_content_pre_node(&$results) {
$users = devel_get_users();
$users = array_merge($users, array(
'0',
));
$results['users'] = $users;
}
function devel_generate_content_add_node(&$results) {
$node->type = array_rand($results['node_types']);
module_load_include('inc', 'node', 'node.pages');
$type = node_get_types('type', $node->type);
node_object_prepare($node);
$users = $results['users'];
$node->uid = $users[array_rand($users)];
$node->title = devel_create_greeking(mt_rand(1, $results['title_length']), TRUE);
if ($type->has_body) {
$node->body = "node ({$node->type}) - " . devel_create_content();
$node->teaser = node_teaser($node->body);
$node->filter = variable_get('filter_default_format', 1);
$node->format = FILTER_FORMAT_DEFAULT;
}
$node->language = '';
$node->revision = mt_rand(0, 1);
$node->promote = mt_rand(0, 1);
$node->created = time() - mt_rand(0, $results['time_range']);
$node->devel_generate = $results;
node_save($node);
}
function devel_generate_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
if (isset($node->devel_generate)) {
$results = $node->devel_generate;
switch ($op) {
case 'presave':
if ($results['add_upload']) {
devel_generate_add_upload($node);
}
if ($results['add_terms']) {
devel_generate_add_terms($node);
}
if (isset($results['add_language']) && variable_get('language_content_type_' . $node->type, 0)) {
$languages = array_keys($results['add_language']);
$node->language = $languages[array_rand($languages)];
}
break;
case 'insert':
if ($results['max_comments'] && $node->comment >= COMMENT_NODE_READ_WRITE) {
devel_generate_add_comments($node, $results['users'], $results['max_comments'], $results['title_length']);
}
if ($results['add_alias']) {
path_set_alias("node/{$node->nid}", "node-{$node->nid}-{$node->type}");
}
if ($results['add_statistics']) {
devel_generate_add_statistics($node);
}
break;
}
}
}