switch ($action) {
case 'delete':
if ($eid) {
- if ($element['type'] == 'item' and $object->is_external_item() and !$object->is_outcome_item() and $object->gradetype != GRADE_TYPE_NONE) {
+ if (!element_deletable($element)) {
// no deleting of external activities - they would be recreated anyway!
- // exception is activity without grading
+ // exception is activity without grading or misconfigured activities
break;
}
$confirm = optional_param('confirm', 0, PARAM_BOOL);
$actions .= $gtree->get_calculation_icon($element, $gpr);
if ($element['type'] == 'item' or ($element['type'] == 'category' and $element['depth'] > 1)) {
- if (!($element['type'] == 'item' and $object->is_external_item() and !$object->is_outcome_item() and $object->gradetype != GRADE_TYPE_NONE)) {
+ if (element_deletable($element)) {
$actions .= '<a href="index.php?id='.$COURSE->id.'&action=delete&eid='
. $eid.'&sesskey='.sesskey().'"><img src="'.$CFG->pixpath.'/t/delete.gif" class="iconsmall" alt="'
. $strdelete.'" title="'.$strdelete.'"/></a>';
}
}
+function element_deletable($element) {
+ global $COURSE;
+
+ if ($element['type'] != 'item') {
+ return true;
+ }
+
+ $grade_item = $element['object'];
+
+ if ($grade_item->itemtype != 'mod' or $grade_item->is_outcome_item() or $grade_item->gradetype == GRADE_TYPE_NONE) {
+ return true;
+ }
+
+ $modinfo = get_fast_modinfo($COURSE);
+ if (!isset($modinfo->instances[$grade_item->itemmodule][$grade_item->iteminstance])) {
+ // module does not exist
+ return true;
+ }
+
+ return false;
+}
?>