/**
  * Lock/unlock this grade.
  *
  * @param int $lockedstate 0, 1 or a timestamp int(10) after which date the item will be locked.
  * @param bool $cascade Ignored param
  * @param bool $refresh Refresh grades when unlocking
  * @return bool True if successful, false if can not set new lock state for grade
  */
 public function set_locked($lockedstate, $cascade = false, $refresh = true)
 {
     $this->load_grade_item();
     if ($lockedstate) {
         if ($this->grade_item->needsupdate) {
             //can not lock grade if final not calculated!
             return false;
         }
         $this->locked = time();
         $this->update();
         return true;
     } else {
         if (!empty($this->locked) and $this->locktime < time()) {
             //we have to reset locktime or else it would lock up again
             $this->locktime = 0;
         }
         // remove the locked flag
         $this->locked = 0;
         $this->update();
         if ($refresh and !$this->is_overridden()) {
             //refresh when unlocking and not overridden
             $this->grade_item->refresh_grades($this->userid);
         }
         return true;
     }
 }