MDL-15666 minor fixes to assignment portfolio callers, additional param for generator (assignment type), and unit tests for sha1

This commit is contained in:
nicolasconnault
2008-09-04 13:25:16 +00:00
parent 77ac22a5b6
commit eb32c6ca84
4 changed files with 92 additions and 29 deletions
+33 -22
View File
@@ -81,6 +81,8 @@ class generator {
array('short'=>'mods', 'long' => 'modules_list',
'help' => 'The list of modules you want to generate', 'default' => $this->modules_list,
'type' => 'mod1,mod2...'),
array('short'=>'at', 'long' => 'assignment_type',
'help' => 'The specific type of assignment you want to generate. Defaults to random', 'default' => 'random'),
array('short'=>'ag', 'long' => 'assignment_grades',
'help' => 'Generate random grades for each student/assignment tuple', 'default' => true),
array('short'=>'qg', 'long' => 'quiz_grades',
@@ -269,7 +271,7 @@ class generator {
public function generate_courses() {
global $DB;
$this->verbose("Generating {$this->get('number_of_courses')} courses...");
$this->verbose("Generating " . $this->get('number_of_courses')." courses...");
$base_course = new stdClass();
$next_course_id = $DB->get_field_sql("SELECT MAX(id) FROM {course}") + 1;
@@ -288,7 +290,6 @@ class generator {
$newcourse->fullname = "Test course $next_course_id";
$newcourse->shortname = "Test $next_course_id";
$newcourse->idnumber = $this->get('data_prefix') . $next_course_id;
if (!$course = create_course($newcourse)) {
$this->verbose("Error inserting a new course in the database!");
if (!$this->get('ignore_errors')) {
@@ -394,7 +395,12 @@ class generator {
switch ($moduledata->name) {
case 'assignment':
$module->description = $description;
$module->assignmenttype = $assignment_types[rand(0, count($assignment_types) - 1)];
if ($this->get('assignment_type') == 'random') {
$module->assignmenttype = $assignment_types[rand(0, count($assignment_types) - 1)];
} else {
$module->assignmenttype = $this->get('assignment_type');
}
$module->timedue = mktime() + 89487321;
$module->grade = rand(50,100);
break;
@@ -617,7 +623,9 @@ class generator {
if (!quiz_add_quiz_question($questions[$quiz->course][$random]->id, $quiz)) {
// Could not add question to quiz!! report error
echo "WARNING: Could not add question id $random to quiz id $quiz->id{$this->eolchar}";
if (!$this->get('quiet')) {
echo "WARNING: Could not add question id $random to quiz id $quiz->id{$this->eolchar}";
}
} else {
$this->verbose("Adding question id $random to quiz id $quiz->id.");
$questions_added[] = $random;
@@ -762,33 +770,36 @@ class generator {
}
public function generate_grades($course_users, $courses, $modules) {
global $CFG, $DB;
global $CFG, $DB, $USER;
/**
* ASSIGNMENT GRADES GENERATION
*/
if ($this->get('assignment_grades') && isset($modules['assignment'])) {
$grades_count = 0;
foreach ($course_users as $userid => $courses) {
foreach ($modules['assignment'] as $assignment) {
if (in_array($assignment->course, $courses)) {
$maxgrade = $assignment->grade;
$random_grade = rand(0, $maxgrade);
$grade = new stdClass();
$grade->assignment = $assignment->id;
$grade->userid = $userid;
$grade->grade = $random_grade;
$grade->rawgrade = $random_grade;
$grade->teacher = $USER->id;
$DB->insert_record('assignment_submissions', $grade);
grade_update('mod/assignment', $courseid, 'mod', 'assignment', $assignment->id, 0, $grade);
$this->verbose("A grade ($random_grade) has been given to user $userid for assignment $assignment->id");
$grades_count++;
foreach ($course_users as $courseid => $userid_array) {
foreach ($userid_array as $userid) {
foreach ($modules['assignment'] as $assignment) {
if (in_array($assignment->course, $courses)) {
$maxgrade = $assignment->grade;
$random_grade = rand(0, $maxgrade);
$grade = new stdClass();
$grade->assignment = $assignment->id;
$grade->userid = $userid;
$grade->grade = $random_grade;
$grade->rawgrade = $random_grade;
$grade->teacher = $USER->id;
$DB->insert_record('assignment_submissions', $grade);
grade_update('mod/assignment', $assignment->course, 'mod', 'assignment', $assignment->id, 0, $grade);
$this->verbose("A grade ($random_grade) has been given to user $userid "
. "for assignment $assignment->id");
$grades_count++;
}
}
}
}
if ($grades_count > 0) {
echo "$grades_count assignment grades have been generated.{$this->eolchar}";
$this->verbose("$grades_count assignment grades have been generated.{$this->eolchar}");
}
}
@@ -814,7 +825,7 @@ class generator {
}
}
}
if ($grades_count > 0) {
if ($grades_count > 0 && !$this->get('quiet')) {
echo "$grades_count quiz grades have been generated.{$this->eolchar}";
}
}
+4 -3
View File
@@ -3174,7 +3174,7 @@ class assignment_portfolio_caller extends portfolio_module_caller_base {
public function prepare_package() {
global $CFG;
if (is_callable(array($this->assignment, 'portfolio_prepare_package'))) {
return $this->assignment->portfolio_prepare_package($this->exporter);
return $this->assignment->portfolio_prepare_package($this->exporter, $this->user->id);
}
$fs = get_file_storage();
$status = true;
@@ -3189,7 +3189,7 @@ class assignment_portfolio_caller extends portfolio_module_caller_base {
public function get_sha1() {
global $CFG;
if (is_callable(array($this->assignment, 'portfolio_get_sha1'))) {
return $this->assignment->portfolio_get_sha1();
return $this->assignment->portfolio_get_sha1($this->user->id);
}
// default ...
@@ -3198,7 +3198,8 @@ class assignment_portfolio_caller extends portfolio_module_caller_base {
if ($this->file) {
return $fs->get_file_by_id($this->file)->get_contenthash();
}
if ($files = $fs->get_area_files($this->assignment->context->id, 'assignment_submission', $this->user->id, '', false)) {
if ($files = $fs->get_area_files($this->assignment->context->id,
'assignment_submission', $this->user->id, '', false)) {
$sha1s = array();
foreach ($files as $file) {
$sha1s[] = $file->get_contenthash();
@@ -0,0 +1,51 @@
<?php // $Id$
require_once($CFG->libdir.'/simpletest/testportfoliolib.php');
require_once($CFG->dirroot.'/mod/assignment/lib.php');
require_once($CFG->dirroot.'/admin/generator.php');
Mock::generate('assignment_portfolio_caller', 'mock_caller');
Mock::generate('portfolio_exporter', 'mock_exporter');
class testAssignmentPortfolioCallers extends portfoliolib_test {
public $module_type = 'assignment';
public $modules = array();
public $entries = array();
public $caller;
public function setUp() {
global $DB, $USER;
parent::setUp();
$settings = array('quiet' => 1, 'database_prefix' => 'tst_', 'pre_cleanup' => 1,
'modules_list' => array($this->module_type), 'assignment_grades' => true,
'assignment_type' => 'online',
'number_of_students' => 5, 'students_per_course' => 5, 'number_of_sections' => 1,
'number_of_modules' => 1, 'questions_per_course' => 0);
generator_generate_data($settings);
$this->modules = $DB->get_records($this->module_type);
$first_module = reset($this->modules);
$cm = get_coursemodule_from_instance($this->module_type, $first_module->id);
$submissions = $DB->get_records('assignment_submissions', array('assignment' => $first_module->id));
$first_submission = reset($submissions);
$callbackargs = array('assignmentid' => $cm->id, 'userid' => $USER->id);
$this->caller = new assignment_portfolio_caller($callbackargs);
$this->caller->set('exporter', new mock_exporter());
$user = $DB->get_record('user', array('id' => $first_submission->userid));
$this->caller->set('user', $user);
}
public function tearDown() {
parent::tearDown();
}
public function test_caller_sha1() {
$sha1 = $this->caller->get_sha1();
$this->caller->prepare_package();
$this->assertEqual($sha1, $this->caller->get_sha1());
}
}
?>
@@ -270,13 +270,13 @@ class assignment_online extends assignment_base {
return true;
}
function portfolio_get_sha1() {
$submission = $this->get_submission();
function portfolio_get_sha1($userid=0) {
$submission = $this->get_submission($userid);
return sha1(format_text($submission->data1, $submission->data2));
}
function portfolio_prepare_package($exporter) {
$submission = $this->get_submission();
function portfolio_prepare_package($exporter, $userid=0) {
$submission = $this->get_submission($userid);
return $exporter->write_new_file(format_text($submission->data1, $submission->data2), 'assignment.html');
}
}