diff --git a/mod/assign/lib.php b/mod/assign/lib.php index 9b26b123614..3545586357e 100644 --- a/mod/assign/lib.php +++ b/mod/assign/lib.php @@ -312,38 +312,6 @@ function assign_print_overview($courses, &$htmlarray) { // list($sqlassignmentids, $assignmentidparams) = $DB->get_in_or_equal($assignmentids); - // Build up and array of unmarked submissions indexed by assignment id/ userid - // for use where the user has grading rights on assignment. - $dbparams = array_merge(array(ASSIGN_SUBMISSION_STATUS_SUBMITTED), $assignmentidparams); - $rs = $DB->get_recordset_sql('SELECT - s.assignment as assignment, - s.userid as userid, - s.id as id, - s.status as status, - g.timemodified as timegraded - FROM {assign_submission} s - LEFT JOIN {assign_grades} g ON - s.userid = g.userid AND - s.assignment = g.assignment - WHERE - ( g.timemodified is NULL OR - s.timemodified > g.timemodified ) AND - s.timemodified IS NOT NULL AND - s.status = ? AND - s.assignment ' . $sqlassignmentids, $dbparams); - - $unmarkedsubmissions = array(); - foreach ($rs as $rd) { - $unmarkedsubmissions[$rd->assignment][$rd->userid] = $rd->id; - } - $rs->close(); - - - // get all user submissions, indexed by assignment id - $mysubmissions = $DB->get_records_sql("SELECT a.id AS assignment, a.nosubmissions AS nosubmissions, g.timemodified AS timemarked, g.grader AS grader, g.grade AS grade, s.status AS status - FROM {assign} a LEFT JOIN {assign_grades} g ON g.assignment = a.id AND g.userid = ? LEFT JOIN {assign_submission} s ON s.assignment = a.id AND s.userid = ? - WHERE a.id $sqlassignmentids", array_merge(array($USER->id, $USER->id), $assignmentidparams)); - foreach ($assignments as $assignment) { // Do not show assignments that are not open if (!in_array($assignment->id, $assignmentids)) { @@ -361,7 +329,33 @@ function assign_print_overview($courses, &$htmlarray) { } $context = context_module::instance($assignment->coursemodule); if (has_capability('mod/assign:grade', $context)) { + if (!isset($unmarkedsubmissions)) { + // Build up and array of unmarked submissions indexed by assignment id/ userid + // for use where the user has grading rights on assignment. + $dbparams = array_merge(array(ASSIGN_SUBMISSION_STATUS_SUBMITTED), $assignmentidparams); + $rs = $DB->get_recordset_sql('SELECT + s.assignment as assignment, + s.userid as userid, + s.id as id, + s.status as status, + g.timemodified as timegraded + FROM {assign_submission} s + LEFT JOIN {assign_grades} g ON + s.userid = g.userid AND + s.assignment = g.assignment + WHERE + ( g.timemodified is NULL OR + s.timemodified > g.timemodified ) AND + s.timemodified IS NOT NULL AND + s.status = ? AND + s.assignment ' . $sqlassignmentids, $dbparams); + $unmarkedsubmissions = array(); + foreach ($rs as $rd) { + $unmarkedsubmissions[$rd->assignment][$rd->userid] = $rd->id; + } + $rs->close(); + } // count how many people can submit $submissions = 0; // init if ($students = get_enrolled_users($context, 'mod/assign:view', 0, 'u.id')) { @@ -377,6 +371,15 @@ function assign_print_overview($courses, &$htmlarray) { $str .= '
'; } } if (has_capability('mod/assign:submit', $context)) { + if (!isset($mysubmissions)) { + // get all user submissions, indexed by assignment id + $mysubmissions = $DB->get_records_sql("SELECT a.id AS assignment, a.nosubmissions AS nosubmissions, g.timemodified + AS timemarked, g.grader AS grader, g.grade AS grade, s.status AS status + FROM {assign} a LEFT JOIN {assign_grades} g ON g.assignment = a.id AND + g.userid = ? LEFT JOIN {assign_submission} s ON s.assignment = a.id AND + s.userid = ? WHERE a.id $sqlassignmentids", + array_merge(array($USER->id, $USER->id), $assignmentidparams)); + } $str .= '