MDL-16177 Added generation of forum discussions and posts, with multiple users and nesting of replies.

This commit is contained in:
nicolasconnault
2008-08-22 19:40:41 +00:00
parent 4dc67f1e92
commit f4c2e8a690
+107 -6
View File
@@ -24,6 +24,8 @@ $settings['number-of-sections'] = 10;
$settings['number-of-modules'] = 50;
$settings['questions-per-course'] = 20;
$settings['questions-per-quiz'] = 5;
$settings['discussion-per-forum'] = 5;
$settings['posts-per-forum-discussion'] = 15;
$settings['entries-per-glossary'] = 1;
$settings['assignment-grades'] = true;
$settings['quiz-grades'] = true;
@@ -90,6 +92,10 @@ $arguments = array(
'help' => 'The number of questions to generate per course. Default=20', 'type'=>'NUMBER', 'default' => 20),
array('short'=>'qq', 'long' => 'questions-per-quiz',
'help' => 'The number of questions to assign to each quiz. Default=5', 'type'=>'NUMBER', 'default' => 5),
array('short'=>'df', 'long' => 'discussions-per-forum',
'help' => 'The number of discussions to generate for each forum. Default=5', 'type'=>'NUMBER', 'default' => 5),
array('short'=>'pd', 'long' => 'posts-per-forum-discussion',
'help' => 'The number of posts to generate for each forum discussion. Default=15', 'type'=>'NUMBER', 'default' => 15),
);
// Building the USAGE output of the command line version
@@ -475,6 +481,7 @@ if ($run_script) {
$quizzes = array();
$assignments = array();
$glossaries = array();
$forums = array();
if (count($courses) > 0) {
$libraries = array();
@@ -664,15 +671,23 @@ if ($run_script) {
$quiz->instance = $quiz_instance;
$quizzes[] = $quiz;
} elseif ($moduledata->name == 'assignment') {
$assignment_instance = $DB->get_field('course_modules', 'instance', array('id' => $module->coursemodule));
$assignment_instance = $DB->get_field('course_modules', 'instance',
array('id' => $module->coursemodule));
$assignment = $DB->get_record('assignment', array('id' => $assignment_instance));
$assignment->instance = $assignment_instance;
$assignments[] = $assignment;
} elseif ($moduledata->name == 'glossary') {
$glossary_instance = $DB->get_field('course_modules', 'instance', array('id' => $module->coursemodule));
$glossary_instance = $DB->get_field('course_modules', 'instance',
array('id' => $module->coursemodule));
$glossary = $DB->get_record('glossary', array('id' => $glossary_instance));
$glossary->instance = $glossary_instance;
$glossaries[] = $glossary;
} elseif ($moduledata->name == 'forum') {
$forum_instance = $DB->get_field('course_modules', 'instance',
array('id' => $module->coursemodule));
$forum = $DB->get_record('forum', array('id' => $forum_instance));
$forum->instance = $forum_instance;
$forums[] = $forum;
}
}
}
@@ -751,13 +766,15 @@ if ($run_script) {
/**
* ROLE ASSIGNMENTS
*/
$course_users = array();
if (count($courses) > 0) {
verbose("Inserting student->course role assignments...");
$assigned_count = 0;
$assigned_users = array();
$course_users = array();
foreach ($courses as $courseid) {
$course_users[$courseid] = array();
// Select $students_per_course for assignment to course
shuffle($users);
$users_to_assign = array_slice($users, 0, $settings['students-per-course']);
@@ -776,6 +793,7 @@ if ($run_script) {
if ($success) {
$assigned_count++;
$course_users[$courseid][] = $random_user;
if (!isset($assigned_users[$random_user])) {
$assigned_users[$random_user] = 1;
} else {
@@ -796,6 +814,77 @@ if ($run_script) {
}
}
/**
* FORUM DISCUSSIONS AND POSTS GENERATION
*/
if (in_array('forum', $settings['modules-list']) &&
$settings['discussions-per-forum'] &&
$settings['posts-per-forum-discussion']) {
$discussions_count = 0;
$posts_count = 0;
foreach ($forums as $forum) {
$forum_users = $course_users[$forum->course];
for ($i = 0; $i < $settings['discussions-per-forum']; $i++) {
$mform = new fake_form();
require_once($CFG->dirroot.'/mod/forum/lib.php');
$discussion = new stdClass();
$discussion->name = 'Test discussion';
$discussion->intro = 'This is just a test forum discussion';
$discussion->format = 1;
$discussion->forum = $forum->id;
$discussion->mailnow = false;
$discussion->course = $forum->course;
$message = '';
$super_global_user = clone($USER);
$user_id = $forum_users[array_rand($forum_users)];
$USER = $DB->get_record('user', array('id' => $user_id));
if ($discussion_id = forum_add_discussion($discussion, $mform, $message)) {
$discussion = $DB->get_record('forum_discussions', array('id' => $discussion_id));
$discussions_count++;
// Add posts to this discussion
$post_ids = array($discussion->firstpost);
for ($j = 0; $j < $settings['posts-per-forum-discussion']; $j++) {
$global_user = clone($USER);
$user_id = $forum_users[array_rand($forum_users)];
$USER = $DB->get_record('user', array('id' => $user_id));
$post = new stdClass();
$post->discussion = $discussion_id;
$post->subject = 'Re: test discussion';
$post->message = '<p>Nothing much to say, since this is just a test...</p>';
$post->format = 1;
$post->parent = $post_ids[array_rand($post_ids)];
if ($post_ids[] = forum_add_new_post($post, $mform, $message)) {
$posts_count++;
}
$USER = $global_user;
}
}
$USER = $super_global_user;
if ($forum->type == 'single') {
break;
}
}
}
if ($discussions_count > 0) {
echo "$discussions_count forum discussions have been generated.{$settings['eolchar']}";
}
if ($posts_count > 0) {
echo "$posts_count forum posts have been generated.{$settings['eolchar']}";
}
}
/**
* ASSIGNMENT GRADES GENERATION
*/
@@ -819,7 +908,9 @@ if ($run_script) {
}
}
}
echo "$grades_count assignment grades have been generated.{$settings['eolchar']}";
if ($grades_count > 0) {
echo "$grades_count assignment grades have been generated.{$settings['eolchar']}";
}
}
/**
@@ -844,7 +935,9 @@ if ($run_script) {
}
}
}
echo "$grades_count quiz grades have been generated.{$settings['eolchar']}";
if ($grades_count > 0) {
echo "$grades_count quiz grades have been generated.{$settings['eolchar']}";
}
}
/**
@@ -869,7 +962,9 @@ if ($run_script) {
}
}
}
echo "$entries_count glossary definitions have been generated.{$settings['eolchar']}";
if ($entries_count > 0) {
echo "$entries_count glossary definitions have been generated.{$settings['eolchar']}";
}
}
}
@@ -985,4 +1080,10 @@ function data_cleanup() {
ob_end_clean();
}
}
class fake_form {
function get_new_filename($string) {
return false;
}
}
?>