From: David Mudrak Date: Mon, 4 Jan 2010 18:24:17 +0000 (+0000) Subject: Various fixes found during testing X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=10bc4bce2bea574505150317f8cb62f815398c59;p=moodle.git Various fixes found during testing --- diff --git a/mod/workshop/eval/best/lib.php b/mod/workshop/eval/best/lib.php index c9c1004658..45d6a439fe 100644 --- a/mod/workshop/eval/best/lib.php +++ b/mod/workshop/eval/best/lib.php @@ -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); diff --git a/mod/workshop/lib.php b/mod/workshop/lib.php index 4f8da4f193..46ddec70a1 100644 --- a/mod/workshop/lib.php +++ b/mod/workshop/lib.php @@ -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); } diff --git a/mod/workshop/locallib.php b/mod/workshop/locallib.php index 96a39aa550..ea2a313725 100644 --- a/mod/workshop/locallib.php +++ b/mod/workshop/locallib.php @@ -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); } } } diff --git a/mod/workshop/simpletest/testlocallib.php b/mod/workshop/simpletest/testlocallib.php index dee410936e..3eed04ade0 100644 --- a/mod/workshop/simpletest/testlocallib.php +++ b/mod/workshop/simpletest/testlocallib.php @@ -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); }