diff --git a/grade/edit/tree/grade.php b/grade/edit/tree/grade.php
index 63a885878e3..d9f4a272542 100644
--- a/grade/edit/tree/grade.php
+++ b/grade/edit/tree/grade.php
@@ -13,11 +13,11 @@ if (!$course = get_record('course', 'id', $courseid)) {
print_error('nocourseid');
}
-// TODO: fix capabilities check
-// TODO: add proper check that grade is editable
require_login($course);
$context = get_context_instance(CONTEXT_COURSE, $course->id);
-require_capability('moodle/grade:override', $context);
+if (!has_capability('moodle/grade:manage', $context)) {
+ require_capability('moodle/grade:override', $context);
+}
// default return url
$gpr = new grade_plugin_return();
@@ -82,7 +82,7 @@ if ($grade = get_record('grade_grades', 'itemid', $grade_item->id, 'userid', $us
$mform->set_data($grade);
} else {
- $mform->set_data(array('itemid'=>$itemid, 'userid'=>$userid));
+ $mform->set_data(array('itemid'=>$itemid, 'userid'=>$userid, 'locked'=>$grade_item->locked, 'locktime'=>$grade_item->locktime));
}
if ($mform->is_cancelled()) {
@@ -97,31 +97,47 @@ if ($mform->is_cancelled()) {
$grade_grade = grade_grade::fetch(array('userid'=>$data->userid, 'itemid'=>$grade_item->id));
- if (empty($data->hidden)) {
- if (empty($data->hiddenuntil)) {
- $grade_grade->set_hidden(0);
+ if (has_capability('moodle/grade:manage', $context) or has_capability('moodle/grade:hide', $context)) {
+ if (empty($data->hidden)) {
+ if (empty($data->hiddenuntil)) {
+ $grade_grade->set_hidden(0);
+ } else {
+ $grade_grade->set_hidden($data->hiddenuntil);
+ }
} else {
- $grade_grade->set_hidden($data->hiddenuntil);
+ $grade_grade->set_hidden(1);
}
+ }
+
+ if (has_capability('moodle/grade:override', $context)) {
+ // ignore overridden flag when changing final grade
+ if ($old_grade_grade->finalgrade == $grade_grade->finalgrade) {
+ if ($grade_grade->set_overridden($data->overridden) and empty($data->overridden)) {
+ $grade_item->force_regrading(); // force regrading only when clearing the flag
+ }
+ }
+ }
+
+ if (has_capability('moodle/grade:manage', $context)) {
+ if ($grade_grade->set_excluded($data->excluded)) {
+ $grade_item->force_regrading();
+ }
+ }
+
+ if (($old_grade_grade->locked or $old_grade_grade->locktime)
+ and (!has_capability('moodle/grade:manage', $context) and !has_capability('moodle/grade:unlock', $context))) {
+ //ignore data
+
+ } else if ((!$old_grade_grade->locked and !$old_grade_grade->locktime)
+ and (!has_capability('moodle/grade:manage', $context) and !has_capability('moodle/grade:lock', $context))) {
+ //ignore data
+
} else {
- $grade_grade->set_hidden(1);
- }
+ $grade_grade->set_locked($data->locked);
+ $grade_grade->set_locktime($data->locktime);
+ }
- // ignore overridden flag when changing final grade
- if ($old_grade_grade->finalgrade == $grade_grade->finalgrade) {
- if ($grade_grade->set_overridden($data->overridden) and empty($data->overridden)) {
- $grade_item->force_regrading(); // force regrading only when clearing the flag
- }
- }
-
- if ($grade_grade->set_excluded($data->excluded)) {
- $grade_item->force_regrading();
- }
-
- $grade_grade->set_locked($data->locked);
- $grade_grade->set_locktime($data->locktime);
-
- redirect($returnurl);
+ redirect($returnurl, 'x', 10);
}
$strgrades = get_string('grades');
diff --git a/grade/edit/tree/grade_form.php b/grade/edit/tree/grade_form.php
index faec98924ea..da5f03f99ed 100755
--- a/grade/edit/tree/grade_form.php
+++ b/grade/edit/tree/grade_form.php
@@ -80,18 +80,22 @@ class edit_grade_form extends moodleform {
}
function definition_after_data() {
- global $CFG;
+ global $CFG, $COURSE;
+
+ $context = get_context_instance(CONTEXT_COURSE, $COURSE->id);
$mform =& $this->_form;
$grade_item = $this->_customdata['grade_item'];
- if ($userid = $mform->getElementValue('userid')) {
- $user = get_record('user', 'id', $userid);
+ // fill in user name if user still exists
+ $userid = $mform->getElementValue('userid');
+ if ($user = get_record('user', 'id', $userid)) {
$username = ''.fullname($user).'';
$user_el =& $mform->getElement('user');
$user_el->setValue($username);
}
+ // add activity name + link
if ($grade_item->itemtype == 'mod') {
$cm = get_coursemodule_from_instance($grade_item->itemmodule, $grade_item->iteminstance, $grade_item->courseid);
$itemname = ''.$grade_item->get_name().'';
@@ -100,6 +104,33 @@ class edit_grade_form extends moodleform {
}
$itemname_el =& $mform->getElement('itemname');
$itemname_el->setValue($itemname);
+
+ // access control - disable not allowed elements
+ if (!has_capability('moodle/grade:manage', $context)) {
+ $mform->hardFreeze('excluded');
+ }
+
+ if (!has_capability('moodle/grade:manage', $context) and !has_capability('moodle/grade:hide', $context)) {
+ $mform->hardFreeze('hidden');
+ $mform->hardFreeze('hiddenuntil');
+ }
+
+ $old_grade_grade = new grade_grade(array('itemid'=>$grade_item->id, 'userid'=>$userid));
+ if (empty($old_grade_grade->id)) {
+ $old_grade_grade->locked = $grade_item->locked;
+ $old_grade_grade->locktime = $grade_item->locktime;
+ }
+
+ if (($old_grade_grade->locked or $old_grade_grade->locktime)
+ and (!has_capability('moodle/grade:manage', $context) and !has_capability('moodle/grade:unlock', $context))) {
+ $mform->hardFreeze('locked');
+ $mform->hardFreeze('locktime');
+
+ } else if ((!$old_grade_grade->locked and !$old_grade_grade->locktime)
+ and (!has_capability('moodle/grade:manage', $context) and !has_capability('moodle/grade:lock', $context))) {
+ $mform->hardFreeze('locked');
+ $mform->hardFreeze('locktime');
+ }
}
}
diff --git a/grade/lib.php b/grade/lib.php
index 54c2281221a..7712f6cde9f 100644
--- a/grade/lib.php
+++ b/grade/lib.php
@@ -718,7 +718,11 @@ class grade_tree {
global $CFG;
if (!has_capability('moodle/grade:manage', $this->context)) {
- return '';
+ if ($element['type'] == 'grade' and has_capability('moodle/grade:override', $this->context)) {
+ // oki - let them override grade
+ } else {
+ return '';
+ }
}
static $stredit = null;