### Eclipse Workspace Patch 1.0
#P moodle
Index: mod/scorm/report.php
===================================================================
RCS file: /cvsroot/moodle/moodle/mod/scorm/report.php,v
retrieving revision 1.46.2.12
diff -u -r1.46.2.12 report.php
--- mod/scorm/report.php	27 Mar 2009 01:48:14 -0000	1.46.2.12
+++ mod/scorm/report.php	11 Apr 2009 14:36:13 -0000
@@ -4,6 +4,9 @@
 
     require_once("../../config.php");
     require_once('locallib.php');
+    require_once('reportsettings_form.php');    
+
+    define('SCORM_REPORT_DEFAULT_PAGE_SIZE', 20);
 
     $id = optional_param('id', '', PARAM_INT);    // Course Module ID, or
     $a = optional_param('a', '', PARAM_INT);     // SCORM ID
@@ -12,6 +15,7 @@
     $attempt = optional_param('attempt', '1', PARAM_INT);  // attempt number
     $action     = optional_param('action', '', PARAM_ALPHA);
     $attemptids = optional_param('attemptid', array(), PARAM_RAW); //get array of responses to delete.
+    $page = optional_param('page', 1, PARAM_INT);  // report page
 
     if (!empty($id)) {
         if (! $cm = get_coursemodule_from_id('scorm', $id)) {
@@ -70,7 +74,7 @@
             if (empty($a)) {
                 $navigation = build_navigation($strreport, $cm);
                 print_header("$course->shortname: ".format_string($scorm->name), $course->fullname,$navigation,
-                             '', '', true);
+                             '', '', true, update_module_button($cm->id, $course->id, $strscorm));
             } else {
 
                 $navlinks = array();
@@ -79,7 +83,7 @@
                 $navigation = build_navigation($navlinks, $cm);
 
                 print_header("$course->shortname: ".format_string($scorm->name), $course->fullname,
-                             $navigation, '', '', true);
+                             $navigation, '', '', true, update_module_button($cm->id, $course->id, $strscorm));
             }
         } else {
 
@@ -90,7 +94,7 @@
             $navigation = build_navigation($navlinks, $cm);
 
             print_header("$course->shortname: ".format_string($scorm->name), $course->fullname, $navigation,
-                     '', '', true);
+                     '', '', true, update_module_button($cm->id, $course->id, $strscorm));
         }
         print_heading(format_string($scorm->name));
     }
@@ -107,6 +111,20 @@
         if (empty($a)) {
             // No options, show the global scorm report
 
+            $mform = new mod_scorm_report_settings( $CFG->wwwroot.'/mod/scorm/report.php?id='.$id );
+            if ($fromform = $mform->get_data()) {
+                set_user_preference('scorm_report_detailed', $fromform->detailedrep);
+                set_user_preference('scorm_report_pagesize', $fromform->pagesize);
+                $detailedrep = $fromform->detailedrep;
+                $pagesize = $fromform->pagesize;
+            } else {
+                $detailedrep = get_user_preferences('scorm_report_detailed', false);
+                $pagesize = get_user_preferences('scorm_report_pagesize', 0);
+            }
+            if ($pagesize < 1) {
+                $pagesize = SCORM_REPORT_DEFAULT_PAGE_SIZE;
+            }
+
             if (!empty($CFG->enablegroupings) && !empty($cm->groupingid)) {
                 $sql = "SELECT st.userid, st.scormid
                         FROM {$CFG->prefix}scorm_scoes_track st
@@ -164,6 +182,19 @@
                 $table->wrap[] = 'nowrap';
                 $table->size[] = '*';
 
+                if ($detailedrep && $scoes = get_records_select('scorm_scoes',"scorm='$scorm->id' ORDER BY id")) {
+                    foreach ($scoes as $sco) {
+                        if ($sco->launch!='') {
+                            $table->head[]= format_string($sco->title);
+                            $table->align[] = 'center';
+                            $table->wrap[] = '';
+                            $table->size[] = '*';
+                        }
+                    }
+                } else {
+                    $scoes = NULL;
+                }
+                
                 foreach($scousers as $scouser){
                     $userdata = scorm_get_user_data($scouser->userid);
                     $attempt = scorm_get_last_attempt($scorm->id,$scouser->userid);
@@ -189,9 +220,77 @@
                         $row[] = userdate($timetracks->start, get_string('strftimedaydatetime'));
                         $row[] = userdate($timetracks->finish, get_string('strftimedaydatetime'));
                         $row[] = scorm_grade_user_attempt($scorm, $scouser->userid, $a);
+                        // print out all scores of attempt
+                        if ($scoes) {
+                            foreach ($scoes as $sco) {
+                                if ($sco->launch!='') {
+                                    if ($trackdata = scorm_get_tracks($sco->id,$scouser->userid,$attempt)) {
+                                        if ($trackdata->status == '') {
+                                            $trackdata->status = 'notattempted';
+                                        }
+                                        $strstatus = get_string($trackdata->status, 'scorm');
+                                        // if raw score exists, print it
+                                        if ($trackdata->score_raw != '') {
+                                            $score = $trackdata->score_raw;
+                                            // add max score if it exists
+                                            if ($scorm->version == 'SCORM_1.3') {
+                                                $maxkey = 'cmi.score.max';
+                                            } else {
+                                                $maxkey = 'cmi.core.score.max';
+                                            }
+                                            if (isset($trackdata->$maxkey)) {
+                                                $score .= '/'.$trackdata->$maxkey;
+                                            }
+                                        // else print out status
+                                        } else {
+                                            $score = $strstatus;
+                                        }
+                                        $row[] = '<img src="'.$scormpixdir.'/'.$trackdata->status.'.gif" alt="'.$strstatus.'" title="'.$strstatus.'" />&nbsp;
+                                                  <a href="report.php?b='.$sco->id.'&amp;user='.$scouser->userid.'&amp;attempt='.$attempt.
+                                                 '" title="'.get_string('details','scorm').'">'.$score.'</a>';
+                                    } else {
+                                        // if we don't have track data, we haven't attempted yet
+                                        $strstatus = get_string('notattempted', 'scorm');
+                                        $row[] = '<img src="'.$scormpixdir.'/notattempted.gif" alt="'.$strstatus.'" title="'.$strstatus.'" />&nbsp;'.$strstatus;
+                                    }
+                                }
+                            }
+                        }
                         $table->data[] = $row;
                     }
                 }
+                
+                $totalpages = ceil( count($table->data) / $pagesize );
+                if ($page < 1 || $page > $totalpages) {
+                    $page = 1;
+                }
+                $table->data = array_slice($table->data, ($page-1)*$pagesize, $pagesize);
+                
+                if ($totalpages > 1) {
+                    $pagelist = get_string('page'). ':&nbsp;';
+                    if ($page != 1) {
+                        $pagelist .= '&nbsp;(<a href="'.$CFG->wwwroot.'/mod/scorm/report.php?id='.$id.'&page='.($page-1).'">'.get_string('previous').'</a>)&nbsp;';
+                    }
+                    for($i = 1; $i <= $totalpages; $i++) {
+                        if ($i != $page) {
+                            $pagelist .= '&nbsp;<a href="'.$CFG->wwwroot.'/mod/scorm/report.php?id='.$id.'&page='.$i.'">'.$i.'</a>&nbsp;';
+                        } else {
+                            $pagelist .= '&nbsp;<b>'.$i.'</b>&nbsp;';
+                        }
+                    }
+                    if ($page != $totalpages) {
+                        $pagelist .= '&nbsp;(<a href="'.$CFG->wwwroot.'/mod/scorm/report.php?id='.$id.'&page='.($page+1).'">'.get_string('next').'</a>)';
+                    }
+                } else {
+                    $pagelist = '';
+                }
+                
+                if ($pagelist != '') {
+                    echo '<div align="center">';
+                    echo $pagelist;
+                    echo '</div><br />';
+                }
+                                
                 echo '<div id="scormtablecontainer">';
                 if (has_capability('mod/scorm:deleteresponses',$contextmodule)) {
                     echo '<form id="attemptsform" method="post" action="'.$_SERVER['PHP_SELF'].'" onsubmit="var menu = document.getElementById(\'menuaction\'); return (menu.options[menu.selectedIndex].value == \'delete\' ? \''.addslashes_js(get_string('deleteattemptcheck','quiz')).'\' : true);">';
@@ -210,6 +309,16 @@
                 } else {
                     print_table($table);
                 }
+
+                if ($pagelist != '') {
+                    echo '<br />';
+                    echo '<div align="center">';
+                    echo $pagelist;
+                    echo '</div>';
+                }
+                
+                $mform->set_data(compact('detailedrep', 'pagesize'));
+                $mform->display();
                 echo '</div>';
             } else {
                 notify(get_string('noactivity', 'scorm'));
Index: lang/en_utf8/scorm.php
===================================================================
RCS file: /cvsroot/moodle/moodle/lang/en_utf8/scorm.php,v
retrieving revision 1.18.4.13
diff -u -r1.18.4.13 scorm.php
--- lang/en_utf8/scorm.php	21 Jan 2009 16:21:37 -0000	1.18.4.13
+++ lang/en_utf8/scorm.php	11 Apr 2009 14:36:12 -0000
@@ -107,6 +107,7 @@
 $string['organization'] = 'Organization';
 $string['organizations'] = 'Organizations';
 $string['othertracks'] = 'Other Tracks';
+$string['pagesize'] = 'Page size';
 $string['packagedir'] = 'Filesystem Error: Can\'t create package directory';
 $string['packagefile'] = 'No package file specified';
 $string['passed'] = 'Passed';
@@ -117,6 +118,7 @@
 $string['popupmenu'] = 'In a drop down menu';
 $string['popupopen'] = 'Open package in a new window';
 $string['position_error'] = 'The $a->tag tag can\'t be child of $a->parent tag';
+$string['preferencesuser'] = 'Preferences for this report';
 $string['prev'] = 'Previous';
 $string['raw'] = 'Raw score';
 $string['regular'] = 'Regular Manifest';
Index: mod/scorm/reportsettings_form.php
===================================================================
RCS file: mod/scorm/reportsettings_form.php
diff -N mod/scorm/reportsettings_form.php
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ mod/scorm/reportsettings_form.php	1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,20 @@
+<?php
+require_once "$CFG->libdir/formslib.php";
+class mod_scorm_report_settings extends moodleform {
+    
+    function definition() {
+        global $COURSE;
+        $mform    =& $this->_form;
+        
+        $mform->addElement('header', 'preferencesuser', get_string('preferencesuser', 'scorm'));
+
+        $mform->addElement('text', 'pagesize', get_string('pagesize', 'scorm'));
+        $mform->setType('pagesize', PARAM_INT);
+
+        $mform->addElement('selectyesno', 'detailedrep', get_string('details', 'scorm'));
+
+        $this->add_action_buttons(false, get_string('savepreferences'));
+    }
+    
+}
+?>
