]> git.mjollnir.org Git - moodle.git/commitdiff
Various fixes found during testing
authorDavid Mudrak <david.mudrak@gmail.com>
Mon, 4 Jan 2010 18:24:17 +0000 (18:24 +0000)
committerDavid Mudrak <david.mudrak@gmail.com>
Mon, 4 Jan 2010 18:24:17 +0000 (18:24 +0000)
mod/workshop/eval/best/lib.php
mod/workshop/lib.php
mod/workshop/locallib.php
mod/workshop/simpletest/testlocallib.php

index c9c10046583521f847c0b1e3e2ece2ef183ec1d0..45d6a439fe9e126dedc35d8d025c3f3f17decc06 100644 (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);
 
index 4f8da4f193990fcb79c65993cadb0e439566a0b4..46ddec70a142554953039cd9833b30a83142ad24 100644 (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);
 }
index 96a39aa550a49052c536bf35941f18b41c04e9ce..ea2a3137254b3e5b60633944655f4daaac4eb2fa 100644 (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);
             }
         }
     }
index dee410936e13870f08eaacd34521894dff650063..3eed04ade0074f02e36b788de53c0e8451984f7b 100644 (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);
     }