MDL-15666 MDL-16486

This commit is contained in:
nicolasconnault
2008-09-16 07:33:16 +00:00
parent 600992bded
commit 31355d28c1
3 changed files with 84 additions and 32 deletions
+70 -27
View File
@@ -3,6 +3,10 @@ require_once(dirname(__FILE__).'/../config.php');
require_once($CFG->libdir . '/formslib.php');
require_once($CFG->dirroot .'/course/lib.php');
require_once($CFG->dirroot .'/mod/resource/lib.php');
define('GENERATOR_RANDOM', 0);
define('GENERATOR_SEQUENCE', 1);
/**
* Controller class for data generation
*/
@@ -25,6 +29,15 @@ class generator {
'wiki' => 'wiki',
'workshop' => 'workshop');
public $resource_types = array('text', 'file', 'html', 'repository', 'directory', 'ims');
public $glossary_formats = array('continuous', 'encyclopedia', 'entrylist', 'faq', 'fullwithauthor', 'fullwithoutauthor', 'dictionary');
public $assignment_types = array('upload', 'uploadsingle', 'online', 'offline');
public $forum_types = array('single', 'eachuser', 'qanda', 'general');
public $resource_type_counter = 0;
public $assignment_type_counter = 0;
public $forum_type_counter = 0;
public $settings = array();
public $eolchar = '<br />';
public $do_generation = false;
@@ -76,13 +89,21 @@ class generator {
'help' => 'The list of modules you want to generate', 'default' => $this->modules_list,
'type' => 'mod1,mod2...'),
array('short'=>'rt', 'long' => 'resource_type',
'help' => 'The specific type of resource you want to generate. Defaults to random',
'default' => 'random',
'type' => 'STRING'),
'help' => 'The specific type of resource you want to generate. Defaults to all',
'default' => $this->resource_types,
'type' => 'SELECT'),
array('short'=>'at', 'long' => 'assignment_type',
'help' => 'The specific type of assignment you want to generate. Defaults to random',
'default' => 'random',
'type' => 'STRING'),
'help' => 'The specific type of assignment you want to generate. Defaults to all',
'default' => $this->assignment_types,
'type' => 'SELECT'),
array('short'=>'ft', 'long' => 'forum_type',
'help' => 'The specific type of forum you want to generate. Defaults to all',
'default' => $this->forum_types,
'type' => 'SELECT'),
array('short'=>'gf', 'long' => 'glossary_format',
'help' => 'The specific format of glossary you want to generate. Defaults to all',
'default' => $this->glossary_formats,
'type' => 'SELECT'),
array('short'=>'ag', 'long' => 'assignment_grades',
'help' => 'Generate random grades for each student/assignment tuple', 'default' => true),
array('short'=>'qg', 'long' => 'quiz_grades',
@@ -360,12 +381,6 @@ class generator {
array_shift($modules);
array_unshift($modules, $first_module);
$resource_types = array('text', 'file', 'html', 'repository', 'directory', 'ims');
$glossary_formats = array('continuous', 'encyclopedia', 'entrylist', 'faq', 'fullwithauthor',
'fullwithoutauthor', 'dictionary');
$assignment_types = array('upload', 'uploadsingle', 'online', 'offline');
$forum_types = array('single', 'eachuser', 'qanda', 'general');
$modules_array = array();
if (count($courses) > 0) {
@@ -409,16 +424,13 @@ class generator {
. "its speed and ease of use being affected dramatically.";
$content = 'Very useful content, I am sure you would agree';
$module_type_index = 0;
// Special module-specific config
switch ($moduledata->name) {
case 'assignment':
$module->description = $description;
if ($this->get('assignment_type') == 'random') {
$module->assignmenttype = $assignment_types[rand(0, count($assignment_types) - 1)];
} else {
$module->assignmenttype = $this->get('assignment_type');
}
$module->assignmenttype = $this->get_module_type('assignment');
$module->timedue = mktime() + 89487321;
$module->grade = rand(50,100);
break;
@@ -446,13 +458,13 @@ class generator {
break;
case 'forum':
$module->intro = $description;
$module->type = $forum_types[rand(0, count($forum_types) - 1)];
$module->type = $this->get_module_type('forum');
$module->forcesubscribe = rand(0, 1);
$module->format = 1;
break;
case 'glossary':
$module->intro = $description;
$module->displayformat = $glossary_formats[rand(0, count($glossary_formats) - 1)];
$module->displayformat = $this->glossary_formats[rand(0, count($this->glossary_formats) - 1)];
$module->cmidnumber = rand(0,999999);
break;
case 'label':
@@ -477,12 +489,7 @@ class generator {
$module->quizpassword = '';
break;
case 'resource':
if ($this->get('resource_type') == 'random') {
$module->type = $resource_types[rand(0, count($resource_types) - 1)];
} else {
$module->type = $this->get('resource_type');
}
$module->type = $this->get_module_type('resource');
$module->alltext = $content;
$module->summary = $description;
$module->windowpopup = rand(0,1);
@@ -994,6 +1001,35 @@ class generator {
return false;
}
}
public function get_module_type($modulename) {
$return_val = false;
$type = $this->get($modulename.'_type');
if (is_object($type) && isset($type->type) && isset($type->options)) {
if ($type->type == GENERATOR_RANDOM) {
$return_val = $type->options[array_rand($type->options)];
} elseif ($type->type == GENERATOR_SEQUENCE) {
$return_val = $type->options[$this->{$modulename.'_type_counter'}];
$this->{$modulename.'_type_counter'}++;
if ($this->{$modulename.'_type_counter'} == count($type->options)) {
$this->{$modulename.'_type_counter'} = 0;
}
}
} elseif (is_array($type)) {
$return_val = $type[array_rand($type)];
} elseif (is_string($type)) {
$return_val = $type;
}
return $return_val;
}
}
class generator_argument {
@@ -1070,7 +1106,7 @@ class generator_cli extends generator {
if (!is_null($value)) {
if (!empty($argument->type) && $argument->type == 'mod1,mod2...') {
if (!empty($argument->type) && ($argument->type == 'mod1,mod2...' || $argument->type == 'SELECT')) {
$value = explode(',', $value);
}
@@ -1203,6 +1239,13 @@ class generator_form extends moodleform {
$type = 'select';
$options = $generator->modules_list;
$htmloptions = array('multiple' => 'multiple');
} elseif (!empty($setting->type) && $setting->type == 'SELECT') {
$type = 'select';
$options = array();
foreach ($setting->default as $option) {
$options[$option] = $option;
}
$htmloptions = array('multiple' => 'multiple');
} elseif (!empty($setting->type)) {
$type = 'text';
}
@@ -16,12 +16,16 @@ class testAssignmentPortfolioCallers extends portfoliolib_test {
global $DB, $USER;
parent::setUp();
$assignment_types = new stdClass();
$assignment_types->type = GENERATOR_SEQUENCE;
$assignment_types->options = array('upload');
$settings = array('quiet' => 1, 'pre_cleanup' => 1,
$settings = array('quiet' => 1,
'modules_list' => array($this->module_type), 'assignment_grades' => true,
'assignment_type' => 'online',
'assignment_type' => $assignment_types,
'number_of_students' => 5, 'students_per_course' => 5, 'number_of_sections' => 1,
'number_of_modules' => 1, 'questions_per_course' => 0);
'number_of_modules' => 3, 'questions_per_course' => 0);
generator_generate_data($settings);
$this->modules = $DB->get_records($this->module_type);
@@ -1,5 +1,5 @@
<?php // $Id$
require_once($CFG->libdir.'/simpletest/testportfoliolib.php');
require_once($CFG->libdir.'/simpletest/portfolio_testclass.php');
require_once($CFG->dirroot.'/mod/resource/lib.php');
require_once($CFG->dirroot.'/admin/generator.php');
@@ -17,10 +17,15 @@ class testResourcePortfolioCallers extends portfoliolib_test {
parent::setUp();
$resource_type = new stdClass();
$resource_type->type = GENERATOR_SEQUENCE;
$resource_type->options = array('file', 'text', 'html');
$settings = array('quiet' => 1, 'pre_cleanup' => 1,
'modules_list' => array($this->module_type),
'resource_type' => $resource_type,
'number_of_students' => 15, 'students_per_course' => 15, 'number_of_sections' => 1,
'number_of_modules' => 1, 'messages_per_resource' => 15);
'number_of_modules' => 3);
generator_generate_data($settings);