mirror of
https://github.com/moodle/moodle.git
synced 2025-04-21 08:22:07 +02:00
MDL-10711 adding deleting of grade data when deleting module or course
This commit is contained in:
parent
f2c883562d
commit
f615fbaba0
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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) {
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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.
|
||||
|
@ -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'
|
||||
);
|
||||
|
Loading…
x
Reference in New Issue
Block a user