MDL-52832 quiz: sql fixing couple of incorrect group by uses

This commit is contained in:
Eloy Lafuente (stronk7) 2018-02-06 18:30:11 +01:00
parent 7416d00ad2
commit 496e80e1f5

View file

@ -1222,8 +1222,7 @@ function quiz_get_user_timeclose($courseid) {
if (has_capability('moodle/course:update', context_course::instance($courseid))) { if (has_capability('moodle/course:update', context_course::instance($courseid))) {
$sql = "SELECT quiz.id, quiz.timeclose AS usertimeclose, COALESCE(quiz.timelimit, 0) AS usertimelimit $sql = "SELECT quiz.id, quiz.timeclose AS usertimeclose, COALESCE(quiz.timelimit, 0) AS usertimelimit
FROM {quiz} quiz FROM {quiz} quiz
WHERE quiz.course = :courseid WHERE quiz.course = :courseid";
GROUP BY quiz.id";
$results = $DB->get_records_sql($sql, array('courseid' => $courseid)); $results = $DB->get_records_sql($sql, array('courseid' => $courseid));
return $results; return $results;
@ -1232,9 +1231,13 @@ function quiz_get_user_timeclose($courseid) {
// The multiple qgo JOINS are necessary because we want timeclose/timelimit = 0 (unlimited) to supercede // The multiple qgo JOINS are necessary because we want timeclose/timelimit = 0 (unlimited) to supercede
// any other group override. // any other group override.
$sql = "SELECT quiz.id, $sql = "SELECT q.id,
COALESCE(MAX(quo.timeclose), MAX(qgo1.timeclose), MAX(qgo2.timeclose), quiz.timeclose, 0) AS usertimeclose, COALESCE(v.oneclose, v.twoclose, v.threeclose, q.timeclose, 0) AS usertimeclose,
COALESCE(MAX(quo.timelimit), MAX(qgo3.timelimit), MAX(qgo4.timelimit), quiz.timelimit, 0) AS usertimelimit COALESCE(v.onelimit, v.twolimit, v.threelimit, q.timelimit, 0) AS usertimelimit
FROM (
SELECT quiz.id AS quizid,
MAX(quo.timeclose) AS oneclose, MAX(qgo1.timeclose) AS twoclose, MAX(qgo2.timeclose) AS threeclose,
MAX(quo.timelimit) AS onelimit, MAX(qgo3.timelimit) AS twolimit, MAX(qgo4.timelimit) AS threelimit
FROM {quiz} quiz FROM {quiz} quiz
LEFT JOIN {quiz_overrides} quo ON quo.quiz = quiz.id LEFT JOIN {quiz_overrides} quo ON quo.quiz = quiz.id
LEFT JOIN {groups_members} gm ON gm.userid = quo.userid LEFT JOIN {groups_members} gm ON gm.userid = quo.userid
@ -1248,7 +1251,8 @@ function quiz_get_user_timeclose($courseid) {
AND qgo4.groupid = gm.groupid AND qgo4.groupid = gm.groupid
WHERE quiz.course = :courseid WHERE quiz.course = :courseid
AND ((quo.userid = :userid) OR ((gm.userid IS NULL) AND (quo.userid IS NULL))) AND ((quo.userid = :userid) OR ((gm.userid IS NULL) AND (quo.userid IS NULL)))
GROUP BY quiz.id"; GROUP BY quiz.id) v
JOIN {quiz} q ON q.id = v.quizid";
$results = $DB->get_records_sql($sql, array('courseid' => $courseid, 'userid' => $USER->id)); $results = $DB->get_records_sql($sql, array('courseid' => $courseid, 'userid' => $USER->id));
return $results; return $results;