diff --git a/mod/assignment/lib.php b/mod/assignment/lib.php index 1b4dd4d57b2..8d5c2ff4301 100644 --- a/mod/assignment/lib.php +++ b/mod/assignment/lib.php @@ -2893,6 +2893,8 @@ function assignment_print_overview($courses, &$htmlarray) { return; } + $assignmentids = array(); + // Do assignment_base::isopen() here without loading the whole thing for speed foreach ($assignments as $key => $assignment) { $time = time(); @@ -2905,9 +2907,16 @@ function assignment_print_overview($courses, &$htmlarray) { } if (empty($isopen) || empty($assignment->timedue)) { unset($assignments[$key]); + }else{ + $assignmentids[] = $assignment->id; } } + if(empty($assignmentids)){ + // no assigments to look at - we're done + return true; + } + $strduedate = get_string('duedate', 'assignment'); $strduedateno = get_string('duedateno', 'assignment'); $strgraded = get_string('graded', 'assignment'); @@ -2917,6 +2926,31 @@ function assignment_print_overview($courses, &$htmlarray) { $strassignment = get_string('modulename', 'assignment'); $strreviewed = get_string('reviewed','assignment'); + + // NOTE: we do all possible database work here *outside* of the loop to ensure this scales + // + list($sqlassignmentids, $assignmentidparams) = $DB->get_in_or_equal($assignmentids); + + // build up and array of unmarked submissions indexed by assigment id/ userid + // for use where the user has grading rights on assigment + $rs = $DB->get_recordset_sql("SELECT id, assignment, userid + FROM {assignment_submissions} + WHERE teacher = 0 AND timemarked = 0 + AND assignment $sqlassignmentids", $assignmentidparams); + + $unmarkedsubmissions = array(); + foreach ($rs as $rd) { + $unmarkedsubmissions[$rd->assignment][$rd->userid] = $rd->id; + } + $rs->close(); + + + // get all user submissions, indexed by assigment id + $mysubmissions = $DB->get_records_sql("SELECT assignment, timemarked, teacher, grade + FROM {assignment_submissions} + WHERE userid = ? AND + assignment $sqlassignmentids", array_merge(array($USER->id), $assignmentidparams)); + foreach ($assignments as $assignment) { $str = '