]> git.mjollnir.org Git - moodle.git/commitdiff
fixes for overriding of scales, outcomes and minor access control tweak
authorskodak <skodak>
Tue, 7 Aug 2007 22:50:32 +0000 (22:50 +0000)
committerskodak <skodak>
Tue, 7 Aug 2007 22:50:32 +0000 (22:50 +0000)
grade/edit/tree/grade.php
grade/edit/tree/grade_form.php
grade/report/grader/lib.php
lib/grade/grade_item.php

index 58a2b2d98a01863911bf28f9b5a09723c8868019..3a0b01753fe27f5d17c8e815e4794159504a99cb 100644 (file)
@@ -108,6 +108,11 @@ if ($mform->is_cancelled()) {
 } else if ($data = $mform->get_data(false)) {
     $old_grade_grade = new grade_grade(array('userid'=>$data->userid, 'itemid'=>$grade_item->id), true); //might not exist yet
 
+    // fix no grade for scales
+    if ($grade_item->gradetype == GRADE_TYPE_SCALE and $data->finalgrade < 1) {
+        $data->finalgrade = NULL;
+    }
+
     // update final grade or feedback
     $grade_item->update_final_grade($data->userid, $data->finalgrade, NULL, 'editgrade', $data->feedback, $data->feedbackformat);
 
@@ -125,7 +130,7 @@ if ($mform->is_cancelled()) {
         }
     }
 
-    if (has_capability('moodle/grade:override', $context)) {
+    if (has_capability('moodle/grade:manage', $context) or has_capability('moodle/grade:override', $context)) {
         // ignore overridden flag when changing final grade
         if ($old_grade_grade->finalgrade == $grade_grade->finalgrade) {
             if ($grade_grade->set_overridden($data->overridden) and empty($data->overridden)) {
index da5f03f99ed662e1d927b944fe75198ceb9e7a0b..1e2894ac48256b3c3a94a0d149c0431ed121b254 100755 (executable)
@@ -24,7 +24,12 @@ class edit_grade_form extends moodleform {
         } else if ($grade_item->gradetype == GRADE_TYPE_SCALE) {
             // scale grade
             $scaleopt = array();
-            $scaleopt[-1] = get_string('nograde');
+
+            if (empty($grade_item->outcomeid)) {
+                $scaleopt[-1] = get_string('nograde'); 
+            } else {
+                $scaleopt[-1] = get_string('nooutcome', 'grades'); 
+            }
 
             $i = 1;
             if ($scale = get_record('scale', 'id', $grade_item->scaleid)) {
index 564c7832208fc18637c7bd3c11ed68ceca50dc70..fee2b93df26f23fa0c29fa36d52c80db8ca256ae 100644 (file)
@@ -616,10 +616,16 @@ class grade_report_grader extends grade_report {
                         }
 
                         if ($this->get_pref('quickgrading') and $grade->is_editable()) {
+                            $oldval = empty($gradeval) ? -1 : $gradeval;
+                            if (empty($item->outcomeid)) {
+                                $nogradestr = $this->get_lang_string('nograde'); 
+                            } else {
+                                $nogradestr = $this->get_lang_string('nooutcome', 'grades'); 
+                            }
                             $studentshtml .= '<input type="hidden" name="oldgrade_'.$userid.'_'
-                                          .$item->id.'" value="'.$gradeval.'"/>';
+                                          .$item->id.'" value="'.$oldval.'"/>';
                             $studentshtml .= choose_from_menu($scaleopt, 'grade_'.$userid.'_'.$item->id,
-                                                              $gradeval, $this->get_lang_string('nograde'), '', '-1',
+                                                              $gradeval, $nogradestr, '', '-1',
                                                               true, false, $tabindices[$item->id]['grade']);
                         } elseif(!empty($scale)) {
                             $scales = explode(",", $scale->scale);
index da4b6e7f2682c535fda478ef45f6a3324f8ef2b7..b9a5e6ac3e4199f1994bf268d6292c6086bd677f 100644 (file)
@@ -611,6 +611,10 @@ class grade_item extends grade_object {
                 return "Could not calculate grades for grade item"; // TODO: improve and localize
             }
 
+        // noncalculated outcomes already have final values - raw grades not used
+        } else if ($this->is_outcome_item()) {
+            return true;
+
         // aggregate the category grade
         } else if ($this->is_category_item() or $this->is_course_item()) {
             // aggregate category grade item
@@ -1262,13 +1266,16 @@ class grade_item extends grade_object {
                 $grade->finalgrade = $finalgrade;
             }
 
-            // if we can update the raw grade, do update it
-            if ($this->is_outcome_item() or !$this->is_normal_item()
-             or $this->plusfactor != 0 or $this->multfactor != 1
-             or !events_is_registered('grade_updated', $this->itemtype.'/'.$this->itemmodule)) {
+            if ($this->is_outcome_item()) {
+                // no updates of raw grades for outcomes - raw grades not used
+
+            } else if (!$this->is_normal_item() or $this->plusfactor != 0 or $this->multfactor != 1
+                    or !events_is_registered('grade_updated', $this->itemtype.'/'.$this->itemmodule)) {
+                // we can not update the raw grade - flag it as overridden
                 if (!$grade->overridden) {
                     $grade->overridden = time();
                 }
+
             } else {
                 $grade->rawgrade = $finalgrade;
                 // copy current grademin/max and scale