} else { $grade_grade->set_hidden($hidden); // checkbox data might be undefined } } } if (isset($data->locked) and !$grade_item->is_locked()) { 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_locktime($data->locktime); //set_lock may reset locktime $grade_grade->set_locked($data->locked, false, true); // reload grade in case it was regraded from activity $grade_grade = new grade_grade(array('userid' => $data->userid, 'itemid' => $grade_item->id), true); $grade_grade->grade_item =& $grade_item; // no db fetching } } } if (isset($data->excluded) and has_capability('moodle/grade:manage', $context)) { $grade_grade->set_excluded($data->excluded); } // detect cases when we need to do full regrading if ($old_grade_grade->excluded != $grade_grade->excluded) { $parent = $grade_item->get_parent_category(); $parent->force_regrading(); } else {
/** * Locks or unlocks this grade_item and (optionally) all its associated final grades. * @param int $locked 0, 1 or a timestamp int(10) after which date the item will be locked. * @param boolean $cascade lock/unlock child objects too * @param boolean $refresh refresh grades when unlocking * @return boolean true if grade_item all grades updated, false if at least one update fails */ function set_locked($lockedstate, $cascade = false, $refresh = true) { if ($lockedstate) { /// setting lock if ($this->needsupdate) { return false; // can not lock grade without first having final grade } $this->locked = time(); $this->update(); if ($cascade) { $grades = $this->get_final(); foreach ($grades as $g) { $grade = new grade_grade($g, false); $grade->grade_item =& $this; $grade->set_locked(1, null, false); } } return true; } else { /// removing lock if (!empty($this->locked) and $this->locktime < time()) { //we have to reset locktime or else it would lock up again $this->locktime = 0; } $this->locked = 0; $this->update(); if ($cascade) { if ($grades = grade_grade::fetch_all(array('itemid' => $this->id))) { foreach ($grades as $grade) { $grade->grade_item =& $this; $grade->set_locked(0, null, false); } } } if ($refresh) { //refresh when unlocking $this->refresh_grades(); } return true; } }
function test_grade_grade_set_locked() { $grade_item = new grade_item($this->grade_items[0]); $grade = new grade_grade($grade_item->get_final(1)); $this->assertTrue(method_exists($grade, 'set_locked')); $this->assertTrue(empty($grade_item->locked)); $this->assertTrue(empty($grade->locked)); $this->assertTrue($grade->set_locked(true)); $this->assertFalse(empty($grade->locked)); $this->assertTrue($grade->set_locked(false)); $this->assertTrue(empty($grade->locked)); $this->assertTrue($grade_item->set_locked(true)); $grade = new grade_grade($grade_item->get_final(1)); $this->assertFalse(empty($grade->locked)); $this->assertFalse($grade->set_locked(false)); $this->assertTrue($grade_item->set_locked(false)); $grade = new grade_grade($grade_item->get_final(1)); $this->assertTrue($grade->set_locked(false)); }