]> git.mjollnir.org Git - moodle.git/commitdiff
MDL-14666 "overview report is very inefficient when view detailed marks is selected...
authorjamiesensei <jamiesensei>
Fri, 2 May 2008 15:11:59 +0000 (15:11 +0000)
committerjamiesensei <jamiesensei>
Fri, 2 May 2008 15:11:59 +0000 (15:11 +0000)
mod/quiz/report/overview/report.php

index 358e385ce5f01517ef72e76e8f98e026abca7d70..c3dbd9cac6a2d814638e082785676af437f10463 100644 (file)
@@ -422,8 +422,25 @@ class quiz_report extends quiz_default_report {
         }
         if(!empty($attempts) || !empty($noattempts)) {
             if ($attempts) {
+                if($detailedmarks) {
+                    $attemptids = array();
+                    foreach ($attempts as $attempt){
+                        $attemptids[] = $attempt->attemptuniqueid;
+                    }
+                    $attemptidlist = join($attemptids, ',');
+                    $questionidlist = join($questionids, ',');
+                    $detailledgradedsql = "SELECT qs.id as qsid, qqi.question, qs.grade, qs.event, qs.attempt, qqi.grade as qqigrade, qns.newgraded FROM " .
+                            "{$CFG->prefix}quiz_question_instances qqi, " .
+                            "{$CFG->prefix}question_sessions qns " .
+                            "LEFT JOIN {$CFG->prefix}question_states qs " .
+                            "ON qs.attempt IN ($attemptidlist) AND " .
+                            "qns.newgraded = qs.id " .
+                            "WHERE qqi.question = qs.question AND " .
+                            "qqi.quiz = $quiz->id";
+                    $detailledgrades = get_records_sql($detailledgradedsql);
+                    echo count($detailledgrades);
+                }
                 foreach ($attempts as $attempt) {
-
                     $picture = print_user_picture($attempt->userid, $course->id, $attempt->picture, false, true);
 
                     $userlink = '<a href="'.$CFG->wwwroot.'/user/view.php?id='.$attempt->userid.
@@ -483,23 +500,29 @@ class quiz_report extends quiz_default_report {
                     }
 
                     if($detailedmarks) {
+                        //get the detailled grade data for this attempt
+                        $attemptdetailledgrades = array();
+                        foreach ($detailledgrades as $detailledgrade){
+                            if ($detailledgrade->attempt == $attempt->attemptuniqueid){
+                                $attemptdetailledgrades[$detailledgrade->question] = $detailledgrade;
+                            }
+                        }
+                    
                         if(empty($attempt->attempt)) {
                             foreach($questionids as $questionid) {
                                 $row[] = '-';
                             }
                         } else {
                             foreach($questionids as $questionid) {
-                                $gradedstateid = get_field('question_sessions', 'newgraded', 'attemptid',
-                                        $attempt->attemptuniqueid, 'questionid', $questionid);
-                                if ($gradedstateid) {
-                                    $grade = number_format(get_field('question_states', 'grade', 'id',
-                                            $gradedstateid), $quiz->decimalpoints);
+                                if (question_state_is_graded($attemptdetailledgrades[$questionid])) {
+                                    $grade = number_format($attemptdetailledgrades[$questionid]->grade, $quiz->decimalpoints);
+                                    $grade = $grade.'/'.number_format($attemptdetailledgrades[$questionid]->qqigrade, $quiz->decimalpoints);
                                 } else {
-                                    $grade = '--';
+                                    $grade = '--'.'/'.number_format($attemptdetailledgrades[$questionid]->qqigrade, $quiz->decimalpoints);
                                 }
                                 if (!$download) {
                                     $row[] = link_to_popup_window('/mod/quiz/reviewquestion.php?state='.
-                                            $gradedstateid.'&amp;number='.$questions[$questionid]->number,
+                                            $attemptdetailledgrades[$questionid]->qsid.'&amp;number='.$questions[$questionid]->number,
                                             'reviewquestion', $grade, 450, 650, $strreviewquestion, 'none', true);
                                 } else {
                                     $row[] = $grade;