function quiz_statistics_attempts_sql($quizid, $currentgroup, $groupstudents, $allattempts = true, $includeungraded = false) { global $CFG; $fromqa = '{quiz_attempts} quiza '; $whereqa = 'quiza.quiz = :quizid AND quiza.preview = 0 AND quiza.timefinish <> 0'; $qaparams = array('quizid' => $quizid); if (!empty($currentgroup) && $groupstudents) { list($grpsql, $grpparams) = get_in_or_equal(array_keys($groupstudents), SQL_PARAMS_NAMED, 'u'); $whereqa .= " AND quiza.userid $grpsql"; $qaparams += $grpparams; } if (!$allattempts) { $whereqa .= ' AND quiza.attempt = 1'; } if (!$includeungraded) { $whereqa .= ' AND quiza.sumgrades IS NOT NULL'; } return array($fromqa, $whereqa, $qaparams); }
/** * Count the number of attempts in need of a regrade. * @param object $quiz the quiz settings. * @param array $groupstudents user ids. If this is given, only data relating * to these users is cleared. */ protected function count_question_attempts_needing_regrade($quiz, $groupstudents) { global $DB; $usertest = ''; $params = array(); if ($groupstudents) { list($usql, $params) = get_in_or_equal($groupstudents); $usertest = "quiza.userid $usql AND "; } $params[] = $quiz->id; $sql = "SELECT COUNT(DISTINCT quiza.id) FROM {quiz_attempts} quiza JOIN {quiz_overview_regrades} qqr ON quiza.uniqueid = qqr.questionusageid WHERE $usertest quiza.quiz = ? AND quiza.preview = 0 AND qqr.regraded = 0"; return $DB->count_records_sql($sql, $params); }