mirror of
https://github.com/moodle/moodle.git
synced 2025-01-19 06:18:28 +01:00
MDL-9628 non-existent grades can be locked/hidden/edited :-)
This commit is contained in:
parent
5730bc6119
commit
d3c3da1b77
@ -26,6 +26,7 @@ if (!$element = $gtree->locate_element($eid)) {
|
|||||||
error('Incorrect element id!', $returnurl);
|
error('Incorrect element id!', $returnurl);
|
||||||
}
|
}
|
||||||
$object = $element['object'];
|
$object = $element['object'];
|
||||||
|
$type = $element['type'];
|
||||||
|
|
||||||
|
|
||||||
switch ($action) {
|
switch ($action) {
|
||||||
@ -34,6 +35,9 @@ switch ($action) {
|
|||||||
if (!has_capability('moodle/grade:manage', $context) and !has_capability('moodle/grade:hide', $context)) {
|
if (!has_capability('moodle/grade:manage', $context) and !has_capability('moodle/grade:hide', $context)) {
|
||||||
error('No permission to hide!', $returnurl);
|
error('No permission to hide!', $returnurl);
|
||||||
}
|
}
|
||||||
|
if ($type == 'grade' and empty($object->id)) {
|
||||||
|
$object->insert();
|
||||||
|
}
|
||||||
$object->set_hidden(1);
|
$object->set_hidden(1);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -43,6 +47,9 @@ switch ($action) {
|
|||||||
if (!has_capability('moodle/grade:manage', $context) and !has_capability('moodle/grade:hide', $context)) {
|
if (!has_capability('moodle/grade:manage', $context) and !has_capability('moodle/grade:hide', $context)) {
|
||||||
error('No permission to show!', $returnurl);
|
error('No permission to show!', $returnurl);
|
||||||
}
|
}
|
||||||
|
if ($type == 'grade' and empty($object->id)) {
|
||||||
|
$object->insert();
|
||||||
|
}
|
||||||
$object->set_hidden(0);
|
$object->set_hidden(0);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -52,6 +59,9 @@ switch ($action) {
|
|||||||
if (!has_capability('moodle/grade:manage', $context) and !has_capability('moodle/grade:lock', $context)) {
|
if (!has_capability('moodle/grade:manage', $context) and !has_capability('moodle/grade:lock', $context)) {
|
||||||
error('No permission to lock!', $returnurl);
|
error('No permission to lock!', $returnurl);
|
||||||
}
|
}
|
||||||
|
if ($type == 'grade' and empty($object->id)) {
|
||||||
|
$object->insert();
|
||||||
|
}
|
||||||
$object->set_locked(1);
|
$object->set_locked(1);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -61,6 +71,9 @@ switch ($action) {
|
|||||||
if (!has_capability('moodle/grade:manage', $context) and !has_capability('moodle/grade:unlock', $context)) {
|
if (!has_capability('moodle/grade:manage', $context) and !has_capability('moodle/grade:unlock', $context)) {
|
||||||
error('No permission to unlock!', $returnurl);
|
error('No permission to unlock!', $returnurl);
|
||||||
}
|
}
|
||||||
|
if ($type == 'grade' and empty($object->id)) {
|
||||||
|
$object->insert();
|
||||||
|
}
|
||||||
$object->set_locked(0);
|
$object->set_locked(0);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -43,7 +43,7 @@ class edit_grade_form extends moodleform {
|
|||||||
/// hiding
|
/// hiding
|
||||||
/// advcheckbox is not compatible with disabledIf !!
|
/// advcheckbox is not compatible with disabledIf !!
|
||||||
$mform->addElement('checkbox', 'hidden', get_string('hidden', 'grades'));
|
$mform->addElement('checkbox', 'hidden', get_string('hidden', 'grades'));
|
||||||
$mform->addElement('date_time_selector', 'hiddenuntil', get_string('hiddeuntil', 'grades'), array('optional'=>true));
|
$mform->addElement('date_time_selector', 'hiddenuntil', get_string('hiddenuntil', 'grades'), array('optional'=>true));
|
||||||
$mform->disabledIf('hiddenuntil', 'hidden', 'checked');
|
$mform->disabledIf('hiddenuntil', 'hidden', 'checked');
|
||||||
|
|
||||||
/// locking
|
/// locking
|
||||||
|
@ -46,7 +46,7 @@ class edit_outcomeitem_form extends moodleform {
|
|||||||
/// hiding
|
/// hiding
|
||||||
/// advcheckbox is not compatible with disabledIf !!
|
/// advcheckbox is not compatible with disabledIf !!
|
||||||
$mform->addElement('checkbox', 'hidden', get_string('hidden', 'grades'));
|
$mform->addElement('checkbox', 'hidden', get_string('hidden', 'grades'));
|
||||||
$mform->addElement('date_time_selector', 'hiddenuntil', get_string('hiddeuntil', 'grades'), array('optional'=>true));
|
$mform->addElement('date_time_selector', 'hiddenuntil', get_string('hiddenuntil', 'grades'), array('optional'=>true));
|
||||||
$mform->disabledIf('hiddenuntil', 'hidden', 'checked');
|
$mform->disabledIf('hiddenuntil', 'hidden', 'checked');
|
||||||
|
|
||||||
//locking
|
//locking
|
||||||
|
@ -648,8 +648,27 @@ class grade_tree {
|
|||||||
* @return object element
|
* @return object element
|
||||||
*/
|
*/
|
||||||
function locate_element($eid) {
|
function locate_element($eid) {
|
||||||
if (strpos($eid, 'g') === 0) {
|
// it is a grade - construct a new object
|
||||||
// it is a grade construct a new object
|
if (strpos($eid, 'n') === 0) {
|
||||||
|
if (!preg_match('/n(\d+)u(\d+)/', $eid, $matches)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$itemid = $matches[1];
|
||||||
|
$userid = $matches[2];
|
||||||
|
|
||||||
|
//extra security check - the grade item must be in this tree
|
||||||
|
if (!$item_el = $this->locate_element('i'.$itemid)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// $gradea->id may be null - means does not exist yet
|
||||||
|
$grade = new grade_grade(array('itemid'=>$itemid, 'userid'=>$userid));
|
||||||
|
|
||||||
|
$grade->grade_item =& $item_el['object']; // this may speedup grade_grade methods!
|
||||||
|
return array('eid'=>'n'.$itemid.'u'.$userid,'object'=>$grade, 'type'=>'grade');
|
||||||
|
|
||||||
|
} else if (strpos($eid, 'g') === 0) {
|
||||||
$id = (int)substr($eid, 1);
|
$id = (int)substr($eid, 1);
|
||||||
if (!$grade = grade_grade::fetch(array('id'=>$id))) {
|
if (!$grade = grade_grade::fetch(array('id'=>$id))) {
|
||||||
return null;
|
return null;
|
||||||
@ -677,6 +696,19 @@ class grade_tree {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the grade eid - the grade may not exist yet.
|
||||||
|
* @param $grade_grade object
|
||||||
|
* @return string eid
|
||||||
|
*/
|
||||||
|
function get_grade_eid($grade_grade) {
|
||||||
|
if (empty($grade_grade->id)) {
|
||||||
|
return 'n'.$grade_grade->itemid.'u'.$grade_grade->userid;
|
||||||
|
} else {
|
||||||
|
return 'g'.$grade_grade->id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return edit icon for give element
|
* Return edit icon for give element
|
||||||
* @param object $element
|
* @param object $element
|
||||||
@ -715,8 +747,11 @@ class grade_tree {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 'grade':
|
case 'grade':
|
||||||
//TODO: improve dealing with new grades
|
if (empty($object->id)) {
|
||||||
|
$url = $CFG->wwwroot.'/grade/edit/tree/grade.php?courseid='.$this->courseid.'&itemid='.$object->itemid.'&userid='.$object->userid;
|
||||||
|
} else {
|
||||||
$url = $CFG->wwwroot.'/grade/edit/tree/grade.php?courseid='.$this->courseid.'&id='.$object->id;
|
$url = $CFG->wwwroot.'/grade/edit/tree/grade.php?courseid='.$this->courseid.'&id='.$object->id;
|
||||||
|
}
|
||||||
$url = $gpr->add_url_params($url);
|
$url = $gpr->add_url_params($url);
|
||||||
if (!empty($object->feedback)) {
|
if (!empty($object->feedback)) {
|
||||||
$feedback = format_text($object->feedback, $object->feedbackformat);
|
$feedback = format_text($object->feedback, $object->feedbackformat);
|
||||||
|
@ -562,7 +562,6 @@ class grade_report_grader extends grade_report {
|
|||||||
|
|
||||||
if (isset($this->finalgrades[$userid][$item->id])) {
|
if (isset($this->finalgrades[$userid][$item->id])) {
|
||||||
$gradeval = $this->finalgrades[$userid][$item->id]->finalgrade;
|
$gradeval = $this->finalgrades[$userid][$item->id]->finalgrade;
|
||||||
|
|
||||||
$grade = new grade_grade($this->finalgrades[$userid][$item->id], false);
|
$grade = new grade_grade($this->finalgrades[$userid][$item->id], false);
|
||||||
$grade->feedback = stripslashes_safe($this->finalgrades[$userid][$item->id]->feedback);
|
$grade->feedback = stripslashes_safe($this->finalgrades[$userid][$item->id]->feedback);
|
||||||
$grade->feedbackformat = $this->finalgrades[$userid][$item->id]->feedbackformat;
|
$grade->feedbackformat = $this->finalgrades[$userid][$item->id]->feedbackformat;
|
||||||
@ -577,7 +576,8 @@ class grade_report_grader extends grade_report {
|
|||||||
$grade->grade_item =& $this->items[$itemid]; // this speedsup is_hidden() and other grade_grade methods
|
$grade->grade_item =& $this->items[$itemid]; // this speedsup is_hidden() and other grade_grade methods
|
||||||
|
|
||||||
// emulate grade element
|
// emulate grade element
|
||||||
$element = array('eid'=>'g'.$grade->id, 'object'=>$grade, 'type'=>'grade');
|
$eid = $this->gtree->get_grade_eid($grade);
|
||||||
|
$element = array('eid'=>$eid, 'object'=>$grade, 'type'=>'grade');
|
||||||
|
|
||||||
if ($grade->is_overridden()) {
|
if ($grade->is_overridden()) {
|
||||||
$studentshtml .= '<td class="overridden">';
|
$studentshtml .= '<td class="overridden">';
|
||||||
@ -590,8 +590,7 @@ class grade_report_grader extends grade_report {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Do not show any icons if no grade (no record in DB to match)
|
// Do not show any icons if no grade (no record in DB to match)
|
||||||
// TODO: change edit/hide/etc. links to use itemid and userid to allow creating of new grade objects
|
if (!$item->needsupdate and $USER->gradeediting[$this->courseid]) {
|
||||||
if (!$item->needsupdate and !empty($grade->id) and $USER->gradeediting[$this->courseid]) {
|
|
||||||
$studentshtml .= $this->get_icons($element);
|
$studentshtml .= $this->get_icons($element);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user