*
*/
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);
}
if ($result && $oldversion < 2007072209) {
$tables = array('grade_category',
'grade_item',
+ 'grade_letter',
+ 'grade_preferences',
'grade_exceptions');
foreach ($tables as $table) {
* @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);
+ }
}
}
}
/**
- * 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;
* @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);
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.
*/
function delete_course($courseid, $showfeedback = true) {
global $CFG;
+ require_once($CFG->libdir.'/gradelib.php');
$result = true;
if (!remove_course_contents($courseid, $showfeedback)) {
$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.");
'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'
);