Various fixes found during testing

This commit is contained in:
David Mudrak 2010-01-04 18:24:17 +00:00
parent f27b70fbbc
commit 10bc4bce2b
4 changed files with 75 additions and 31 deletions

View File

@ -139,6 +139,10 @@ class workshop_best_evaluation implements workshop_evaluation {
protected function process_assessments(array $assessments, array $diminfo, stdClass $settings) {
global $DB;
if (empty($assessments)) {
return;
}
// reindex the passed flat structure to be indexed by assessmentid
$assessments = $this->prepare_data_from_recordset($assessments);

View File

@ -358,20 +358,42 @@ function workshop_update_grades(stdClass $workshop, $userid=0) {
require_once($CFG->libdir.'/gradelib.php');
$whereuser = $userid ? ' AND authorid = :userid' : '';
$params = array('workshopid' => $workshop->id, 'maxgrade' => $workshop->grade, 'userid' => $userid);
$sql = 'SELECT authorid, authorid AS userid, grade * :maxgrade / 100 AS rawgrade,
feedbackauthor AS feedback, feedbackauthorformat AS feedbackformat,
timemodified AS datesubmitted
$params = array('workshopid' => $workshop->id, 'userid' => $userid);
$sql = 'SELECT authorid, grade, gradeover, gradeoverby, feedbackauthor, feedbackauthorformat, timemodified, timegraded
FROM {workshop_submissions}
WHERE workshopid = :workshopid AND example=0' . $whereuser;
$submissiongrades = $DB->get_records_sql($sql, $params);
$records = $DB->get_records_sql($sql, $params);
$submissiongrades = array();
foreach ($records as $record) {
$grade = new stdClass();
$grade->userid = $record->authorid;
if (!is_null($record->gradeover)) {
$grade->rawgrade = grade_floatval($workshop->grade * $record->gradeover / 100);
$grade->usermodified = $record->gradeoverby;
} else {
$grade->rawgrade = grade_floatval($workshop->grade * $record->grade / 100);
}
$grade->feedback = $record->feedbackauthor;
$grade->feedbackformat = $record->feedbackauthorformat;
$grade->datesubmitted = $record->timemodified;
$grade->dategraded = $record->timegraded;
$submissiongrades[$record->authorid] = $grade;
}
$whereuser = $userid ? ' AND userid = :userid' : '';
$params = array('workshopid' => $workshop->id, 'maxgrade' => $workshop->gradinggrade, 'userid' => $userid);
$sql = 'SELECT userid, gradinggrade * :maxgrade / 100 AS rawgrade
$params = array('workshopid' => $workshop->id, 'userid' => $userid);
$sql = 'SELECT userid, gradinggrade, timegraded
FROM {workshop_aggregations}
WHERE workshopid = :workshopid' . $whereuser;
$assessmentgrades = $DB->get_records_sql($sql, $params);
$records = $DB->get_records_sql($sql, $params);
$assessmentgrades = array();
foreach ($records as $record) {
$grade = new stdClass();
$grade->userid = $record->userid;
$grade->rawgrade = grade_floatval($workshop->gradinggrade * $record->gradinggrade / 100);
$grade->dategraded = $record->timegraded;
$assessmentgrades[$record->userid] = $grade;
}
workshop_grade_item_update($workshop, $submissiongrades, $assessmentgrades);
}

View File

@ -910,17 +910,17 @@ class workshop {
$calculated = $DB->count_records_select('workshop_submissions',
'workshopid = ? AND (grade IS NOT NULL OR gradeover IS NOT NULL)', array($this->id));
$task = new stdClass();
$task->title = get_string('calculategrades', 'workshop');
$task->title = get_string('calculatesubmissiongrades', 'workshop');
$a = new stdClass();
$a->expected = $expected;
$a->calculated = $calculated;
$task->details = get_string('calculategradesdetails', 'workshop', $a);
$task->details = get_string('calculatesubmissiongradesdetails', 'workshop', $a);
if ($calculated >= $expected) {
$task->completed = true;
} elseif ($this->phase > self::PHASE_EVALUATION) {
$task->completed = false;
}
$phase->tasks['calculategradinggrade'] = $task;
$phase->tasks['calculatesubmissiongrade'] = $task;
$expected = count($this->get_potential_reviewers(false));
$calculated = $DB->count_records_select('workshop_aggregations',
@ -1006,7 +1006,14 @@ class workshop {
if (self::PHASE_CLOSED == $newphase) {
// push the grades into the gradebook
$workshop = new stdClass();
foreach ($this as $property => $value) {
$workshop->{$property} = $value;
}
$workshop->course = $this->course->id;
$workshop->cmidnumber = $this->cm->id;
$workshop->modname = 'workshop';
workshop_update_grades($workshop);
}
$DB->set_field('workshop', 'phase', $newphase, array('id' => $this->id));
@ -1510,7 +1517,11 @@ class workshop {
// check if the new final grade differs from the one stored in the database
if (grade_floats_different($finalgrade, $current)) {
// we need to save new calculation into the database
$DB->set_field('workshop_submissions', 'grade', $finalgrade, array('id' => $submissionid));
$record = new stdClass();
$record->id = $submissionid;
$record->grade = $finalgrade;
$record->timegraded = time();
$DB->update_record('workshop_submissions', $record);
}
}
@ -1569,9 +1580,14 @@ class workshop {
$record->workshopid = $this->id;
$record->userid = $reviewerid;
$record->gradinggrade = $finalgrade;
$record->timegraded = time();
$DB->insert_record('workshop_aggregations', $record);
} else {
$DB->set_field('workshop_aggregations', 'gradinggrade', $finalgrade, array('id' => $agid));
$record = new stdClass();
$record->id = $agid;
$record->gradinggrade = $finalgrade;
$record->timegraded = time();
$DB->update_record('workshop_aggregations', $record);
}
}
}

View File

@ -81,7 +81,7 @@ class workshop_internal_api_test extends UnitTestCase {
// fixture set-up
$batch = array(); // batch of a submission's assessments
$batch[] = (object)array('submissionid' => 12, 'submissiongrade' => null, 'weight' => 1, 'grade' => null);
$DB->expectNever('set_field');
$DB->expectNever('update_record');
// excercise SUT
$this->workshop->aggregate_submission_grades_process($batch);
}
@ -93,7 +93,7 @@ class workshop_internal_api_test extends UnitTestCase {
$batch = array(); // batch of a submission's assessments
$batch[] = (object)array('submissionid' => 12, 'submissiongrade' => null, 'weight' => 1, 'grade' => 10.12345);
$expected = 10.12345;
$DB->expectOnce('set_field', array('workshop_submissions', 'grade', $expected, array('id' => 12)));
$DB->expectOnce('update_record');
// excercise SUT
$this->workshop->aggregate_submission_grades_process($batch);
}
@ -106,7 +106,7 @@ class workshop_internal_api_test extends UnitTestCase {
$batch[] = (object)array('submissionid' => 12, 'submissiongrade' => null, 'weight' => 1, 'grade' => 45.54321);
$batch[] = (object)array('submissionid' => 12, 'submissiongrade' => null, 'weight' => 1, 'grade' => null);
$expected = 45.54321;
$DB->expectOnce('set_field', array('workshop_submissions', 'grade', $expected, array('id' => 12)));
$DB->expectOnce('update_record');
// excercise SUT
$this->workshop->aggregate_submission_grades_process($batch);
}
@ -118,7 +118,7 @@ class workshop_internal_api_test extends UnitTestCase {
$batch = array(); // batch of a submission's assessments
$batch[] = (object)array('submissionid' => 12, 'submissiongrade' => null, 'weight' => 4, 'grade' => 14.00012);
$expected = 14.00012;
$DB->expectOnce('set_field', array('workshop_submissions', 'grade', $expected, array('id' => 12)));
$DB->expectOnce('update_record');
// excercise SUT
$this->workshop->aggregate_submission_grades_process($batch);
}
@ -133,7 +133,7 @@ class workshop_internal_api_test extends UnitTestCase {
$batch[] = (object)array('submissionid' => 45, 'submissiongrade' => null, 'weight' => 1, 'grade' => 10.00000);
$batch[] = (object)array('submissionid' => 45, 'submissiongrade' => null, 'weight' => 1, 'grade' => 0.00000);
$expected = 19.67750;
$DB->expectOnce('set_field', array('workshop_submissions', 'grade', $expected, array('id' => 45)));
$DB->expectOnce('update_record');
// excercise SUT
$this->workshop->aggregate_submission_grades_process($batch);
}
@ -148,7 +148,7 @@ class workshop_internal_api_test extends UnitTestCase {
$batch[] = (object)array('submissionid' => 45, 'submissiongrade' => 12.57750, 'weight' => 1, 'grade' => 10.00000);
$batch[] = (object)array('submissionid' => 45, 'submissiongrade' => 12.57750, 'weight' => 1, 'grade' => 0.00000);
$expected = 19.67750;
$DB->expectOnce('set_field', array('workshop_submissions', 'grade', $expected, array('id' => 45)));
$DB->expectOnce('update_record');
// excercise SUT
$this->workshop->aggregate_submission_grades_process($batch);
}
@ -162,7 +162,7 @@ class workshop_internal_api_test extends UnitTestCase {
$batch[] = (object)array('submissionid' => 45, 'submissiongrade' => 19.67750, 'weight' => 1, 'grade' => 12.59000);
$batch[] = (object)array('submissionid' => 45, 'submissiongrade' => 19.67750, 'weight' => 1, 'grade' => 10.00000);
$batch[] = (object)array('submissionid' => 45, 'submissiongrade' => 19.67750, 'weight' => 1, 'grade' => 0.00000);
$DB->expectNever('set_field');
$DB->expectNever('update_record');
// excercise SUT
$this->workshop->aggregate_submission_grades_process($batch);
}
@ -176,7 +176,7 @@ class workshop_internal_api_test extends UnitTestCase {
$batch[] = (object)array('submissionid' => 45, 'submissiongrade' => null, 'weight' => 1, 'grade' => 2.00000);
$batch[] = (object)array('submissionid' => 45, 'submissiongrade' => null, 'weight' => 1, 'grade' => 1.00000);
$expected = 2.33333;
$DB->expectOnce('set_field', array('workshop_submissions', 'grade', $expected, array('id' => 45)));
$DB->expectOnce('update_record');
// excercise SUT
$this->workshop->aggregate_submission_grades_process($batch);
}
@ -191,7 +191,7 @@ class workshop_internal_api_test extends UnitTestCase {
$batch[] = (object)array('submissionid' => 45, 'submissiongrade' => null, 'weight' => 1, 'grade' => 10.00000);
$batch[] = (object)array('submissionid' => 45, 'submissiongrade' => null, 'weight' => 0, 'grade' => 1000.00000);
$expected = 17.66667;
$DB->expectOnce('set_field', array('workshop_submissions', 'grade', $expected, array('id' => 45)));
$DB->expectOnce('update_record');
// excercise SUT
$this->workshop->aggregate_submission_grades_process($batch);
}
@ -202,7 +202,7 @@ class workshop_internal_api_test extends UnitTestCase {
$batch = array();
$batch[] = (object)array('reviewerid'=>2, 'gradinggrade'=>null, 'gradinggradeover'=>null, 'aggregationid'=>null, 'aggregatedgrade'=>null);
// expectation
$DB->expectNever('set_field');
$DB->expectNever('update_record');
// excersise SUT
$this->workshop->aggregate_grading_grades_process($batch);
}
@ -217,6 +217,7 @@ class workshop_internal_api_test extends UnitTestCase {
$expected->workshopid = $this->workshop->id;
$expected->userid = 3;
$expected->gradinggrade = 82.87670;
$expected->timegraded = time(); // warning - this is a weak point as the time may actually change
$DB->expectOnce('insert_record', array('workshop_aggregations', $expected));
// excersise SUT
$this->workshop->aggregate_grading_grades_process($batch);
@ -228,7 +229,7 @@ class workshop_internal_api_test extends UnitTestCase {
$batch = array();
$batch[] = (object)array('reviewerid'=>3, 'gradinggrade'=>90.00000, 'gradinggradeover'=>null, 'aggregationid'=>1, 'aggregatedgrade'=>82.87670);
// expectation
$DB->expectOnce('set_field', array('workshop_aggregations', 'gradinggrade', 90.00000, array('id' => 1)));
$DB->expectOnce('update_record');
// excersise SUT
$this->workshop->aggregate_grading_grades_process($batch);
}
@ -239,7 +240,7 @@ class workshop_internal_api_test extends UnitTestCase {
$batch = array();
$batch[] = (object)array('reviewerid'=>3, 'gradinggrade'=>90.00000, 'gradinggradeover'=>null, 'aggregationid'=>1, 'aggregatedgrade'=>90.00000);
// expectation
$DB->expectNever('set_field');
$DB->expectNever('update_record');
// excersise SUT
$this->workshop->aggregate_grading_grades_process($batch);
}
@ -250,7 +251,7 @@ class workshop_internal_api_test extends UnitTestCase {
$batch = array();
$batch[] = (object)array('reviewerid'=>4, 'gradinggrade'=>91.56700, 'gradinggradeover'=>82.32105, 'aggregationid'=>2, 'aggregatedgrade'=>91.56700);
// expectation
$DB->expectOnce('set_field', array('workshop_aggregations', 'gradinggrade', 82.32105, array('id' => 2)));
$DB->expectOnce('update_record');
// excersise SUT
$this->workshop->aggregate_grading_grades_process($batch);
}
@ -267,6 +268,7 @@ class workshop_internal_api_test extends UnitTestCase {
$expected->workshopid = $this->workshop->id;
$expected->userid = 5;
$expected->gradinggrade = 79.3066;
$expected->timegraded = time(); // warning - this is a weak point as the time may actually change
$DB->expectOnce('insert_record', array('workshop_aggregations', $expected));
// excersise SUT
$this->workshop->aggregate_grading_grades_process($batch);
@ -280,7 +282,7 @@ class workshop_internal_api_test extends UnitTestCase {
$batch[] = (object)array('reviewerid'=>5, 'gradinggrade'=>87.34311, 'gradinggradeover'=>null, 'aggregationid'=>2, 'aggregatedgrade'=>79.30660);
$batch[] = (object)array('reviewerid'=>5, 'gradinggrade'=>51.12000, 'gradinggradeover'=>null, 'aggregationid'=>2, 'aggregatedgrade'=>79.30660);
// expectation
$DB->expectOnce('set_field', array('workshop_aggregations', 'gradinggrade', 64.89904, array('id' => 2)));
$DB->expectOnce('update_record');
// excersise SUT
$this->workshop->aggregate_grading_grades_process($batch);
}
@ -293,7 +295,7 @@ class workshop_internal_api_test extends UnitTestCase {
$batch[] = (object)array('reviewerid'=>5, 'gradinggrade'=>87.34311, 'gradinggradeover'=>null, 'aggregationid'=>2, 'aggregatedgrade'=>64.89904);
$batch[] = (object)array('reviewerid'=>5, 'gradinggrade'=>51.12000, 'gradinggradeover'=>null, 'aggregationid'=>2, 'aggregatedgrade'=>64.89904);
// expectation
$DB->expectOnce('set_field', array('workshop_aggregations', 'gradinggrade', 79.30660, array('id' => 2)));
$DB->expectOnce('update_record');
// excersise SUT
$this->workshop->aggregate_grading_grades_process($batch);
}
@ -306,7 +308,7 @@ class workshop_internal_api_test extends UnitTestCase {
$batch[] = (object)array('reviewerid'=>6, 'gradinggrade'=>null, 'gradinggradeover'=>null, 'aggregationid'=>3, 'aggregatedgrade'=>100.00000);
$batch[] = (object)array('reviewerid'=>6, 'gradinggrade'=>52.20000, 'gradinggradeover'=>null, 'aggregationid'=>3, 'aggregatedgrade'=>100.00000);
// expectation
$DB->expectOnce('set_field', array('workshop_aggregations', 'gradinggrade', 51.10000, array('id' => 3)));
$DB->expectOnce('update_record');
// excersise SUT
$this->workshop->aggregate_grading_grades_process($batch);
}
@ -319,7 +321,7 @@ class workshop_internal_api_test extends UnitTestCase {
$batch[] = (object)array('reviewerid'=>6, 'gradinggrade'=>null, 'gradinggradeover'=>69.00000, 'aggregationid'=>3, 'aggregatedgrade'=>100.00000);
$batch[] = (object)array('reviewerid'=>6, 'gradinggrade'=>52.20000, 'gradinggradeover'=>null, 'aggregationid'=>3, 'aggregatedgrade'=>100.00000);
// expectation
$DB->expectOnce('set_field', array('workshop_aggregations', 'gradinggrade', 57.06667, array('id' => 3)));
$DB->expectOnce('update_record');
// excersise SUT
$this->workshop->aggregate_grading_grades_process($batch);
}