From d0d030b8743a1fc324e6952c97b8ac76256884a8 Mon Sep 17 00:00:00 2001
From: David Mudrak <david.mudrak@gmail.com>
Date: Tue, 1 Jun 2010 23:56:07 +0200
Subject: [PATCH 3/3] MDL-22062 Make idnumber of additional module grade items editable in the gradebook

This patch allows grade items with itemnumber > 0 being edited in the
gradebook. It also improves the grade_verify_idnumber() so that it does
not allow the item with itemnumber > 0 have the same idnumber as the
major grade item with itemnumber 0.
---
 grade/edit/tree/item_form.php |    6 +++++-
 lib/gradelib.php              |    5 +++++
 2 files changed, 10 insertions(+), 1 deletions(-)

diff --git a/grade/edit/tree/item_form.php b/grade/edit/tree/item_form.php
index a768b95..a324076 100644
--- a/grade/edit/tree/item_form.php
+++ b/grade/edit/tree/item_form.php
@@ -224,7 +224,11 @@ class edit_item_form extends moodleform {
             } else {
                 if ($grade_item->is_external_item()) {
                     // following items are set up from modules and should not be overrided by user
-                    $mform->hardFreeze('itemname,idnumber,gradetype,grademax,grademin,scaleid');
+                    $mform->hardFreeze('itemname,gradetype,grademax,grademin,scaleid');
+                    if ($grade_item->itemnumber == 0) {
+                        // the idnumber of grade itemnumber 0 is synced with course_modules
+                        $mform->hardFreeze('idnumber');
+                    }
                     //$mform->removeElement('calculation');
                 }
             }
diff --git a/lib/gradelib.php b/lib/gradelib.php
index ed75412..af51266 100644
--- a/lib/gradelib.php
+++ b/lib/gradelib.php
@@ -864,6 +864,11 @@ function grade_verify_idnumber($idnumber, $courseid, $grade_item=null, $cm=null)
 
     // keep existing even when not unique
     if ($cm and $cm->idnumber == $idnumber) {
+        if ($grade_item and $grade_item->itemnumber != 0) {
+            // grade item with itemnumber > 0 can't have the same idnumber as the main
+            // itemnumber 0 which is synced with course_modules
+            return false;
+        }
         return true;
     } else if ($grade_item and $grade_item->idnumber == $idnumber) {
         return true;
-- 
1.6.4.4

