original_string: protected function regrade_attempts_needing_it($quiz, \core\dml\sql_join $groupstudentsjoins) {
          global $DB;
          $this->unlock_session();
  
          $join = '{quiz_overview_regrades} qqr ON qqr.questionusageid = quiza.uniqueid';
          $where = "quiza.quiz = :qid AND quiza.preview = 0 AND qqr.regraded = 0";
          $params = array('qid' => $quiz->id);
  
          // Fetch all attempts that need regrading.
          if ($this->hasgroupstudents && !empty($groupstudentsjoins->joins)) {
              $join .= "\nJOIN {user} u ON u.id = quiza.userid
                      {$groupstudentsjoins->joins}";
              $where .= " AND {$groupstudentsjoins->wheres}";
              $params += $groupstudentsjoins->params;
          }
  
          $toregrade = $DB->get_recordset_sql("
                  SELECT quiza.uniqueid, qqr.slot
                    FROM {quiz_attempts} quiza
                    JOIN $join
                   WHERE $where", $params);
  
          $attemptquestions = array();
          foreach ($toregrade as $row) {
              $attemptquestions[$row->uniqueid][] = $row->slot;
          }
          $toregrade->close();
  
          if (!$attemptquestions) {
              return;
          }
  
          $attempts = $DB->get_records_list('quiz_attempts', 'uniqueid',
                  array_keys($attemptquestions));
  
          $this->clear_regrade_table($quiz, $groupstudentsjoins);
  
          $progressbar = new progress_bar('quiz_overview_regrade', 500, true);
          $a = array(
              'count' => count($attempts),
              'done'  => 0,
          );
          foreach ($attempts as $attempt) {
              $this->regrade_attempt($attempt, false, $attemptquestions[$attempt->uniqueid]);
              $a['done']++;
              $progressbar->update($a['done'], $a['count'],
                      get_string('regradingattemptxofy', 'quiz_overview', $a));
          }
  
          $this->update_overall_grades($quiz);
      }
code: protected function regrade_attempts_needing_it($quiz, \core\dml\sql_join $groupstudentsjoins) {
          global $DB;
          $this->unlock_session();
  
          $join = '{quiz_overview_regrades} qqr ON qqr.questionusageid = quiza.uniqueid';
          $where = "quiza.quiz = :qid AND quiza.preview = 0 AND qqr.regraded = 0";
          $params = array('qid' => $quiz->id);
  
          // Fetch all attempts that need regrading.
          if ($this->hasgroupstudents && !empty($groupstudentsjoins->joins)) {
              $join .= "\nJOIN {user} u ON u.id = quiza.userid
                      {$groupstudentsjoins->joins}";
              $where .= " AND {$groupstudentsjoins->wheres}";
              $params += $groupstudentsjoins->params;
          }
  
          $toregrade = $DB->get_recordset_sql("
                  SELECT quiza.uniqueid, qqr.slot
                    FROM {quiz_attempts} quiza
                    JOIN $join
                   WHERE $where", $params);
  
          $attemptquestions = array();
          foreach ($toregrade as $row) {
              $attemptquestions[$row->uniqueid][] = $row->slot;
          }
          $toregrade->close();
  
          if (!$attemptquestions) {
              return;
          }
  
          $attempts = $DB->get_records_list('quiz_attempts', 'uniqueid',
                  array_keys($attemptquestions));
  
          $this->clear_regrade_table($quiz, $groupstudentsjoins);
  
          $progressbar = new progress_bar('quiz_overview_regrade', 500, true);
          $a = array(
              'count' => count($attempts),
              'done'  => 0,
          );
          foreach ($attempts as $attempt) {
              $this->regrade_attempt($attempt, false, $attemptquestions[$attempt->uniqueid]);
              $a['done']++;
              $progressbar->update($a['done'], $a['count'],
                      get_string('regradingattemptxofy', 'quiz_overview', $a));
          }
  
          $this->update_overall_grades($quiz);
      }
code_tokens: protected function regrade_attempts_needing_it ( $ quiz , \ core \ dml \ sql_join $ groupstudentsjoins ) { global $ DB ; $ this -> unlock_session ( ) ; $ join = '{quiz_overview_regrades} qqr ON qqr.questionusageid = quiza.uniqueid' ; $ where = "quiza.quiz = :qid AND quiza.preview = 0 AND qqr.regraded = 0" ; $ params = array ( 'qid' => $ quiz -> id ) ; // Fetch all attempts that need regrading. if ( $ this -> hasgroupstudents && ! empty ( $ groupstudentsjoins -> joins ) ) { $ join .= "\nJOIN {user} u ON u.id = quiza.userid
                      {$groupstudentsjoins->joins}" ; $ where .= " AND {$groupstudentsjoins->wheres}" ; $ params += $ groupstudentsjoins -> params ; } $ toregrade = $ DB -> get_recordset_sql ( "
                  SELECT quiza.uniqueid, qqr.slot
                    FROM {quiz_attempts} quiza
                    JOIN $join
                   WHERE $where" , $ params ) ; $ attemptquestions = array ( ) ; foreach ( $ toregrade as $ row ) { $ attemptquestions [ $ row -> uniqueid ] [ ] = $ row -> slot ; } $ toregrade -> close ( ) ; if ( ! $ attemptquestions ) { return ; } $ attempts = $ DB -> get_records_list ( 'quiz_attempts' , 'uniqueid' , array_keys ( $ attemptquestions ) ) ; $ this -> clear_regrade_table ( $ quiz , $ groupstudentsjoins ) ; $ progressbar = new progress_bar ( 'quiz_overview_regrade' , 500 , true ) ; $ a = array ( 'count' => count ( $ attempts ) , 'done' => 0 , ) ; foreach ( $ attempts as $ attempt ) { $ this -> regrade_attempt ( $ attempt , false , $ attemptquestions [ $ attempt -> uniqueid ] ) ; $ a [ 'done' ] ++ ; $ progressbar -> update ( $ a [ 'done' ] , $ a [ 'count' ] , get_string ( 'regradingattemptxofy' , 'quiz_overview' , $ a ) ) ; } $ this -> update_overall_grades ( $ quiz ) ; }
docstring: Regrade those questions in those attempts that are marked as needing regrading
  in the quiz_overview_regrades table.
  @param object $quiz the quiz settings.
  @param \core\dml\sql_join $groupstudentsjoins empty for all attempts, otherwise regrade attempts
  for these users.
docstring_tokens: Regrade those questions in those attempts that are marked as needing regrading in the quiz_overview_regrades table .