MDL-15666 minor fixes to assignment portfolio callers, additional param for generator (assignment type), and unit tests for sha1
This commit is contained in:
+33
-22
@@ -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}";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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');
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user