original_string: public function update_grade($grade, $reopenattempt = false) {
          global $DB;
  
          $grade->timemodified = time();
  
          if (!empty($grade->workflowstate)) {
              $validstates = $this->get_marking_workflow_states_for_current_user();
              if (!array_key_exists($grade->workflowstate, $validstates)) {
                  return false;
              }
          }
  
          if ($grade->grade && $grade->grade != -1) {
              if ($this->get_instance()->grade > 0) {
                  if (!is_numeric($grade->grade)) {
                      return false;
                  } else if ($grade->grade > $this->get_instance()->grade) {
                      return false;
                  } else if ($grade->grade < 0) {
                      return false;
                  }
              } else {
                  // This is a scale.
                  if ($scale = $DB->get_record('scale', array('id' => -($this->get_instance()->grade)))) {
                      $scaleoptions = make_menu_from_list($scale->scale);
                      if (!array_key_exists((int) $grade->grade, $scaleoptions)) {
                          return false;
                      }
                  }
              }
          }
  
          if (empty($grade->attemptnumber)) {
              // Set it to the default.
              $grade->attemptnumber = 0;
          }
          $DB->update_record('assign_grades', $grade);
  
          $submission = null;
          if ($this->get_instance()->teamsubmission) {
              if (isset($this->mostrecentteamsubmission)) {
                  $submission = $this->mostrecentteamsubmission;
              } else {
                  $submission = $this->get_group_submission($grade->userid, 0, false);
              }
          } else {
              $submission = $this->get_user_submission($grade->userid, false);
          }
  
          // Only push to gradebook if the update is for the most recent attempt.
          if ($submission && $submission->attemptnumber != $grade->attemptnumber) {
              return true;
          }
  
          if ($this->gradebook_item_update(null, $grade)) {
              \mod_assign\event\submission_graded::create_from_grade($this, $grade)->trigger();
          }
  
          // If the conditions are met, allow another attempt.
          if ($submission) {
              $this->reopen_submission_if_required($grade->userid,
                      $submission,
                      $reopenattempt);
          }
  
          return true;
      }
code: public function update_grade($grade, $reopenattempt = false) {
          global $DB;
  
          $grade->timemodified = time();
  
          if (!empty($grade->workflowstate)) {
              $validstates = $this->get_marking_workflow_states_for_current_user();
              if (!array_key_exists($grade->workflowstate, $validstates)) {
                  return false;
              }
          }
  
          if ($grade->grade && $grade->grade != -1) {
              if ($this->get_instance()->grade > 0) {
                  if (!is_numeric($grade->grade)) {
                      return false;
                  } else if ($grade->grade > $this->get_instance()->grade) {
                      return false;
                  } else if ($grade->grade < 0) {
                      return false;
                  }
              } else {
                  // This is a scale.
                  if ($scale = $DB->get_record('scale', array('id' => -($this->get_instance()->grade)))) {
                      $scaleoptions = make_menu_from_list($scale->scale);
                      if (!array_key_exists((int) $grade->grade, $scaleoptions)) {
                          return false;
                      }
                  }
              }
          }
  
          if (empty($grade->attemptnumber)) {
              // Set it to the default.
              $grade->attemptnumber = 0;
          }
          $DB->update_record('assign_grades', $grade);
  
          $submission = null;
          if ($this->get_instance()->teamsubmission) {
              if (isset($this->mostrecentteamsubmission)) {
                  $submission = $this->mostrecentteamsubmission;
              } else {
                  $submission = $this->get_group_submission($grade->userid, 0, false);
              }
          } else {
              $submission = $this->get_user_submission($grade->userid, false);
          }
  
          // Only push to gradebook if the update is for the most recent attempt.
          if ($submission && $submission->attemptnumber != $grade->attemptnumber) {
              return true;
          }
  
          if ($this->gradebook_item_update(null, $grade)) {
              \mod_assign\event\submission_graded::create_from_grade($this, $grade)->trigger();
          }
  
          // If the conditions are met, allow another attempt.
          if ($submission) {
              $this->reopen_submission_if_required($grade->userid,
                      $submission,
                      $reopenattempt);
          }
  
          return true;
      }
code_tokens: public function update_grade ( $ grade , $ reopenattempt = false ) { global $ DB ; $ grade -> timemodified = time ( ) ; if ( ! empty ( $ grade -> workflowstate ) ) { $ validstates = $ this -> get_marking_workflow_states_for_current_user ( ) ; if ( ! array_key_exists ( $ grade -> workflowstate , $ validstates ) ) { return false ; } } if ( $ grade -> grade && $ grade -> grade != - 1 ) { if ( $ this -> get_instance ( ) -> grade > 0 ) { if ( ! is_numeric ( $ grade -> grade ) ) { return false ; } else if ( $ grade -> grade > $ this -> get_instance ( ) -> grade ) { return false ; } else if ( $ grade -> grade < 0 ) { return false ; } } else { // This is a scale. if ( $ scale = $ DB -> get_record ( 'scale' , array ( 'id' => - ( $ this -> get_instance ( ) -> grade ) ) ) ) { $ scaleoptions = make_menu_from_list ( $ scale -> scale ) ; if ( ! array_key_exists ( ( int ) $ grade -> grade , $ scaleoptions ) ) { return false ; } } } } if ( empty ( $ grade -> attemptnumber ) ) { // Set it to the default. $ grade -> attemptnumber = 0 ; } $ DB -> update_record ( 'assign_grades' , $ grade ) ; $ submission = null ; if ( $ this -> get_instance ( ) -> teamsubmission ) { if ( isset ( $ this -> mostrecentteamsubmission ) ) { $ submission = $ this -> mostrecentteamsubmission ; } else { $ submission = $ this -> get_group_submission ( $ grade -> userid , 0 , false ) ; } } else { $ submission = $ this -> get_user_submission ( $ grade -> userid , false ) ; } // Only push to gradebook if the update is for the most recent attempt. if ( $ submission && $ submission -> attemptnumber != $ grade -> attemptnumber ) { return true ; } if ( $ this -> gradebook_item_update ( null , $ grade ) ) { \ mod_assign \ event \ submission_graded :: create_from_grade ( $ this , $ grade ) -> trigger ( ) ; } // If the conditions are met, allow another attempt. if ( $ submission ) { $ this -> reopen_submission_if_required ( $ grade -> userid , $ submission , $ reopenattempt ) ; } return true ; }
docstring: Update a grade in the grade table for the assignment and in the gradebook.
  
  @param stdClass $grade a grade record keyed on id
  @param bool $reopenattempt If the attempt reopen method is manual, allow another attempt at this assignment.
  @return bool true for success
docstring_tokens: Update a grade in the grade table for the assignment and in the gradebook .