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);
}
$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',
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));
// 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);
}
}
$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);
}
}
}
// 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);
}
$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);
}
$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);
}
$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);
}
$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);
}
$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);
}
$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);
}
$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);
}
$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);
}
$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);
}
$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);
$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);
}
$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);
}
$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);
}
$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);
$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);
}
$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);
}
$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);
}
$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);
}