original_string: public function get_user_grade($userid, $create, $attemptnumber=-1) {
          global $DB, $USER;
  
          // If the userid is not null then use userid.
          if (!$userid) {
              $userid = $USER->id;
          }
          $submission = null;
  
          $params = array('assignment'=>$this->get_instance()->id, 'userid'=>$userid);
          if ($attemptnumber < 0 || $create) {
              // Make sure this grade matches the latest submission attempt.
              if ($this->get_instance()->teamsubmission) {
                  $submission = $this->get_group_submission($userid, 0, true, $attemptnumber);
              } else {
                  $submission = $this->get_user_submission($userid, true, $attemptnumber);
              }
              if ($submission) {
                  $attemptnumber = $submission->attemptnumber;
              }
          }
  
          if ($attemptnumber >= 0) {
              $params['attemptnumber'] = $attemptnumber;
          }
  
          $grades = $DB->get_records('assign_grades', $params, 'attemptnumber DESC', '*', 0, 1);
  
          if ($grades) {
              return reset($grades);
          }
          if ($create) {
              $grade = new stdClass();
              $grade->assignment   = $this->get_instance()->id;
              $grade->userid       = $userid;
              $grade->timecreated = time();
              // If we are "auto-creating" a grade - and there is a submission
              // the new grade should not have a more recent timemodified value
              // than the submission.
              if ($submission) {
                  $grade->timemodified = $submission->timemodified;
              } else {
                  $grade->timemodified = $grade->timecreated;
              }
              $grade->grade = -1;
              // Do not set the grader id here as it would be the admin users which is incorrect.
              $grade->grader = -1;
              if ($attemptnumber >= 0) {
                  $grade->attemptnumber = $attemptnumber;
              }
  
              $gid = $DB->insert_record('assign_grades', $grade);
              $grade->id = $gid;
              return $grade;
          }
          return false;
      }
code: public function get_user_grade($userid, $create, $attemptnumber=-1) {
          global $DB, $USER;
  
          // If the userid is not null then use userid.
          if (!$userid) {
              $userid = $USER->id;
          }
          $submission = null;
  
          $params = array('assignment'=>$this->get_instance()->id, 'userid'=>$userid);
          if ($attemptnumber < 0 || $create) {
              // Make sure this grade matches the latest submission attempt.
              if ($this->get_instance()->teamsubmission) {
                  $submission = $this->get_group_submission($userid, 0, true, $attemptnumber);
              } else {
                  $submission = $this->get_user_submission($userid, true, $attemptnumber);
              }
              if ($submission) {
                  $attemptnumber = $submission->attemptnumber;
              }
          }
  
          if ($attemptnumber >= 0) {
              $params['attemptnumber'] = $attemptnumber;
          }
  
          $grades = $DB->get_records('assign_grades', $params, 'attemptnumber DESC', '*', 0, 1);
  
          if ($grades) {
              return reset($grades);
          }
          if ($create) {
              $grade = new stdClass();
              $grade->assignment   = $this->get_instance()->id;
              $grade->userid       = $userid;
              $grade->timecreated = time();
              // If we are "auto-creating" a grade - and there is a submission
              // the new grade should not have a more recent timemodified value
              // than the submission.
              if ($submission) {
                  $grade->timemodified = $submission->timemodified;
              } else {
                  $grade->timemodified = $grade->timecreated;
              }
              $grade->grade = -1;
              // Do not set the grader id here as it would be the admin users which is incorrect.
              $grade->grader = -1;
              if ($attemptnumber >= 0) {
                  $grade->attemptnumber = $attemptnumber;
              }
  
              $gid = $DB->insert_record('assign_grades', $grade);
              $grade->id = $gid;
              return $grade;
          }
          return false;
      }
code_tokens: public function get_user_grade ( $ userid , $ create , $ attemptnumber = - 1 ) { global $ DB , $ USER ; // If the userid is not null then use userid. if ( ! $ userid ) { $ userid = $ USER -> id ; } $ submission = null ; $ params = array ( 'assignment' => $ this -> get_instance ( ) -> id , 'userid' => $ userid ) ; if ( $ attemptnumber < 0 || $ create ) { // Make sure this grade matches the latest submission attempt. if ( $ this -> get_instance ( ) -> teamsubmission ) { $ submission = $ this -> get_group_submission ( $ userid , 0 , true , $ attemptnumber ) ; } else { $ submission = $ this -> get_user_submission ( $ userid , true , $ attemptnumber ) ; } if ( $ submission ) { $ attemptnumber = $ submission -> attemptnumber ; } } if ( $ attemptnumber >= 0 ) { $ params [ 'attemptnumber' ] = $ attemptnumber ; } $ grades = $ DB -> get_records ( 'assign_grades' , $ params , 'attemptnumber DESC' , '*' , 0 , 1 ) ; if ( $ grades ) { return reset ( $ grades ) ; } if ( $ create ) { $ grade = new stdClass ( ) ; $ grade -> assignment = $ this -> get_instance ( ) -> id ; $ grade -> userid = $ userid ; $ grade -> timecreated = time ( ) ; // If we are "auto-creating" a grade - and there is a submission // the new grade should not have a more recent timemodified value // than the submission. if ( $ submission ) { $ grade -> timemodified = $ submission -> timemodified ; } else { $ grade -> timemodified = $ grade -> timecreated ; } $ grade -> grade = - 1 ; // Do not set the grader id here as it would be the admin users which is incorrect. $ grade -> grader = - 1 ; if ( $ attemptnumber >= 0 ) { $ grade -> attemptnumber = $ attemptnumber ; } $ gid = $ DB -> insert_record ( 'assign_grades' , $ grade ) ; $ grade -> id = $ gid ; return $ grade ; } return false ; }
docstring: This will retrieve a grade object from the db, optionally creating it if required.
  
  @param int $userid The user we are grading
  @param bool $create If true the grade will be created if it does not exist
  @param int $attemptnumber The attempt number to retrieve the grade for. -1 means the latest submission.
  @return stdClass The grade record
docstring_tokens: This will retrieve a grade object from the db optionally creating it if required .