]> git.mjollnir.org Git - moodle.git/commitdiff
MDL-10711 adding deleting of grade data when deleting module or course
authorskodak <skodak>
Fri, 3 Aug 2007 19:25:22 +0000 (19:25 +0000)
committerskodak <skodak>
Fri, 3 Aug 2007 19:25:22 +0000 (19:25 +0000)
course/lib.php
lib/db/upgrade.php
lib/grade/grade_category.php
lib/grade/grade_item.php
lib/gradelib.php
lib/moodlelib.php

index 7b0ba2fa98591d7f135d7eacebc4ce8ad87c03f9..e53aeea90cb8e885b8d2b1d25a05de8274e09496 100644 (file)
@@ -2076,15 +2076,27 @@ function set_coursemodule_visible($id, $visible, $prevstateoverrides=false) {
  *
  */
 function delete_course_module($id) {
+    global $CFG;
+    require_once($CFG->libdir.'/gradelib.php');
+
     if (!$cm = get_record('course_modules', 'id', $id)) {
         return true;
     }
     $modulename = get_field('modules', 'name', 'id', $cm->module);
+    //delete events from calendar
     if ($events = get_records_select('event', "instance = '$cm->instance' AND modulename = '$modulename'")) {
         foreach($events as $event) {
             delete_event($event->id);
         }
     }
+    //delete grade items, outcome items and grades attached to modules
+    if ($grade_items = grade_item::fetch_all(array('itemtype'=>'mod', 'itemmodule'=>$modulename,
+                                                   'iteminstance'=>$cm->instance, 'courseid'=>$cm->course))) {
+        foreach ($grade_items as $grade_item) {
+            $grade_item->delete('moddelete');
+        }
+        
+    }
     return delete_records('course_modules', 'id', $cm->id);
 }
 
index f636b6046f0923edf12fce77eeda64596827a243..52e08292b699f015197e6bfc28a5a27212daed3c 100644 (file)
@@ -1604,6 +1604,8 @@ function xmldb_main_upgrade($oldversion=0) {
     if ($result && $oldversion < 2007072209) {
         $tables = array('grade_category',
                         'grade_item',
+                        'grade_letter',
+                        'grade_preferences',
                         'grade_exceptions');
 
         foreach ($tables as $table) {
index 3c2b87735955914fdb4ad6b6766bd33e4efdf416..2bfad2337c3752aadee78dd3dea83322b17434e2 100644 (file)
@@ -189,25 +189,42 @@ class grade_category extends grade_object {
      * @return boolean success
      */
     function delete($source=null) {
-        if ($this->is_course_category()) {
-            debuggin('Can not delete top course category!');
-            return false;
-        }
-
-        $this->force_regrading();
-
         $grade_item = $this->load_grade_item();
-        $parent = $this->load_parent_category();
 
-        // Update children's categoryid/parent field first
-        if ($children = grade_item::fetch_all(array('categoryid'=>$this->id))) {
-            foreach ($children as $child) {
-                $child->set_parent($parent->id);
+        if ($this->is_course_category()) {
+            if ($categories = grade_category::fetch_all(array('courseid'=>$this->courseid))) {
+                foreach ($categories as $category) {
+                    if ($category->id == $this->id) {
+                        continue; // do not delete course category yet
+                    }
+                    $category->delete($source);
+                }
             }
-        }
-        if ($children = grade_category::fetch_all(array('parent'=>$this->id))) {
-            foreach ($children as $child) {
-                $child->set_parent($parent->id);
+            
+            if ($items = grade_item::fetch_all(array('courseid'=>$this->courseid))) {
+                foreach ($items as $item) {
+                    if ($item->id == $grade_item->id) {
+                        continue; // do not delete course item yet
+                    }
+                    $item->delete($source);
+                }
+            }
+
+        } else {
+            $this->force_regrading();
+    
+            $parent = $this->load_parent_category();
+    
+            // Update children's categoryid/parent field first
+            if ($children = grade_item::fetch_all(array('categoryid'=>$this->id))) {
+                foreach ($children as $child) {
+                    $child->set_parent($parent->id);
+                }
+            }
+            if ($children = grade_category::fetch_all(array('parent'=>$this->id))) {
+                foreach ($children as $child) {
+                    $child->set_parent($parent->id);
+                }
             }
         }
 
@@ -254,7 +271,10 @@ class grade_category extends grade_object {
     }
 
     /**
-     * TODO document
+     * Internal function - used only from fetch_course_category()
+     * Normal insert() can not be used for course category
+     * @param int $courseid
+     * @return bool success
      */
     function insert_course_category($courseid) {
         $this->courseid  = $courseid;
index 614e0adb2925d1ddca0ccc1ead85a63723735db9..f096574adbd0829d9cec6c2473408659106ba124 100644 (file)
@@ -299,13 +299,10 @@ class grade_item extends grade_object {
      * @return boolean success
      */
     function delete($source=null) {
-        if ($this->is_course_item()) {
-            debuggin('Can not delete course or category item!');
-            return false;
+        if (!$this->is_course_item()) {
+            $this->force_regrading();
         }
 
-        $this->force_regrading();
-
         if ($grades = grade_grade::fetch_all(array('itemid'=>$this->id))) {
             foreach ($grades as $grade) {
                 $grade->delete($source);
index 72f6d0d91dbd6229d37f0c7a27994b5bd5830135..eedccdd28201a961a75923f63f3b3752a2940fb7 100644 (file)
@@ -754,6 +754,40 @@ function grade_get_legacy_grade_item($modinstance, $grademax, $scaleid) {
     return $grade_item;
 }
 
+/**
+ * Remove all grade related course data - history is kept
+ * @param int $courseid
+ * @showfeedback boolean print feedback
+ */
+function remove_course_grades($courseid, $showfeedback) {
+    $strdeleted = get_string('deleted');
+
+    $course_category = grade_category::fetch_course_category($courseid);
+    $course_category->delete('coursedelete');
+    if ($showfeedback) {
+        notify($strdeleted.' - '.get_string('grades', 'grades').', '.get_string('items', 'grades').', '.get_string('categories', 'grades'));
+    }
+
+    if ($outcomes = grade_outcome::fetch_all(array('courseid'=>$courseid))) {
+        foreach ($outcomes as $outcome) {
+            $outcome->delete('coursedelete');
+        }
+    }
+    delete_records('grade_outcomes_courses', 'courseid', $courseid);
+    if ($showfeedback) {
+        notify($strdeleted.' - '.get_string('outcomes', 'grades'));
+    }
+
+    if ($scales = grade_scale::fetch_all(array('courseid'=>$courseid))) {
+        foreach ($scales as $scale) {
+            $scale->delete('coursedelete');
+        }
+    }
+    if ($showfeedback) {
+        notify($strdeleted.' - '.get_string('scales'));
+    }
+
+}
 
 /**
  * Builds an array of percentages indexed by integers for the purpose of building a select drop-down element.
index e800ec7e60dcfe409f46442b464faa7aa3e0ce27..f46956c8d7bd8f60b4a234317874db95e1c85276 100644 (file)
@@ -2968,6 +2968,7 @@ function set_login_session_preferences() {
  */
 function delete_course($courseid, $showfeedback = true) {
     global $CFG;
+    require_once($CFG->libdir.'/gradelib.php');
     $result = true;
 
     if (!remove_course_contents($courseid, $showfeedback)) {
@@ -2977,6 +2978,8 @@ function delete_course($courseid, $showfeedback = true) {
         $result = false;
     }
 
+    remove_course_grades($courseid, $showfeedback);
+
     if (!delete_records("course", "id", $courseid)) {
         if ($showfeedback) {
             notify("An error occurred while deleting the main course record.");
@@ -3150,11 +3153,6 @@ function remove_course_contents($courseid, $showfeedback=true) {
         'log' => 'course', // Delete logs
         'course_sections' => 'course', // Delete any course stuff
         'course_modules' => 'course',
-        'grade_category' => 'courseid', // Delete gradebook stuff
-        'grade_exceptions' => 'courseid',
-        'grade_item' => 'courseid',
-        'grade_letter' => 'courseid',
-        'grade_preferences' => 'courseid',
         'backup_courses' => 'courseid', // Delete scheduled backup stuff
         'backup_log' => 'courseid'
     );