Fixed a problem with AICC tracking
[moodle.git] / mod / scorm / playscorm.php
1 <?PHP  // $Id$
3 /// This page prints a particular instance of scorm
5     require_once('../../config.php');
6     require_once('lib.php');
8     //
9     // Checkin' script parameters
10     //
11     $id = optional_param('id', '', PARAM_INT);       // Course Module ID, or
12     $a = optional_param('a', '', PARAM_INT);         // scorm ID
13     $scoid = required_param('scoid', '', PARAM_INT);  // sco ID
14     $mode = optional_param('mode', '', PARAM_ALPHA); // navigation mode
15     $currentorg = optional_param('currentorg', '', PARAM_ALPHANUM); // selected organization
16     
17     $modestring = '';
18     $scoidstring = '';
19     $currentorgstring = '';
20     if (!empty($mode)) {
21         $modestring = '&mode='.$mode;
22     }
23     if (!empty($scoid)) {
24         $scoidstring = '&scoid='.$scoid;
25     }
26     if (!empty($currentorg)) {
27         $currentorgstring = '&currentorg='.$currentorg;
28     }
30     if (!empty($id)) {
31         if (! $cm = get_record("course_modules", "id", $id)) {
32             error("Course Module ID was incorrect");
33         }
34         if (! $course = get_record("course", "id", $cm->course)) {
35             error("Course is misconfigured");
36         }
37         if (! $scorm = get_record("scorm", "id", $cm->instance)) {
38             error("Course module is incorrect");
39         }
40     } else if (!empty($a)) {
41         if (! $scorm = get_record("scorm", "id", $a)) {
42             error("Course module is incorrect");
43         }
44         if (! $course = get_record("course", "id", $scorm->course)) {
45             error("Course is misconfigured");
46         }
47         if (! $cm = get_coursemodule_from_instance("scorm", $scorm->id, $course->id)) {
48             error("Course Module ID was incorrect");
49         }
50     } else {
51         error('A required parameter is missing');
52     }
54     require_login($course->id, false, $cm);
56     $strscorms = get_string('modulenameplural', 'scorm');
57     $strscorm  = get_string('modulename', 'scorm');
58     $strexpand = get_string('expcoll','scorm');
59     $strpopup = get_string('popup','scorm');
61     if ($course->category) {
62         $navigation = "<a target=\"{$CFG->framename}\" href=\"../../course/view.php?id=$course->id\">$course->shortname</a> ->
63                        <a target=\"{$CFG->framename}\" href=\"index.php?id=$course->id\">$strscorms</a> ->";
64     } else {
65         $navigation = "<a target=\"{$CFG->framename}\" href=\"index.php?id=$course->id\">$strscorms</a> ->";
66     }
68     $pagetitle = strip_tags("$course->shortname: ".format_string($scorm->name));
70     if (!$cm->visible and !isteacher($course->id)) {
71         print_header($pagetitle, "$course->fullname", "$navigation ".format_string($scorm->name), '', '', true,
72                      update_module_button($cm->id, $course->id, $strscorm), navmenu($course, $cm));
73         notice(get_string("activityiscurrentlyhidden"));
74     }
76     //
77     // TOC processing
78     //
79     $result = scorm_get_toc($scorm,'structurelist',$currentorg,$scoid,$mode,true);
80     $sco = $result->sco;
81     if ($mode == 'normal') {
82         if ($trackdata = scorm_get_tracks($USER->id,$sco->id)) {
83             if (($trackdata->status == 'completed') || ($trackdata->status == 'passed') || ($trackdata->status == 'failed')) {
84                 $mode = 'review';
85             }
86         }
87     }
88     add_to_log($course->id, 'scorm', 'view', "playscorm.php?id=$cm->id&scoid=$sco->id", "$scorm->id");
89     $scoidstring = '&scoid='.$sco->id;
90     $modestring = '&mode='.$mode;
92     $SESSION->scorm_scoid = $sco->id;
93     $SESSION->scorm_status = 'Not Initialized';
94     $SESSION->scorm_mode = $mode;
96     //
97     // Print the page header
98     //
99     $scripts = '';
100     if (($scorm->popup == 1) && ($result->prerequisites)) {
101         $scripts = 'onunload="top.main.close();"';
102     }
103     
104     print_header($pagetitle, "$course->fullname",
105                  "$navigation <a target='{$CFG->framename}' href='view.php?id=$cm->id'>".format_string($scorm->name,true)."</a>",
106                  '', '', true, update_module_button($cm->id, $course->id, $strscorm), '', false, $scripts);
107 ?>
108     <script language="JavaScript" type="text/javascript" src="request.js"></script>
109     <script language="JavaScript" type="text/javascript" src="api.php?id=<?php echo $cm->id.$scoidstring.$modestring ?>"></script>
111     <table class="fullscreen">
112     <tr>
113 <?php  
114     if ($scorm->hidetoc == 0) {
115 ?>
116             <td class="top">
117             <table class='generalbox'>
118                <tr>
119                    <td class="structurehead"><?php print_string('coursestruct','scorm') ?></td>
120                </tr>
121                <tr>
122                    <td><?php echo $result->toc; ?></td>
123                </tr>
124             </table>
125         </td>
126 <?php
127     }
128     $browseclass = '';
129     if ($scorm->popup == 0) {
130         $browseclass = 'class="left"';
131     }
132 ?>
133         <td class="top">
134             <table class="fullscreen">
135                 <tr>
136                     <?php echo $mode == 'browse' ? '<td '.$browseclass.'>'.get_string('browsemode','scorm').'</td>' : ''; ?>
137                     <td class="right">       
138                 <form name="navform" method="post" action="playscorm.php?id=<?php echo $cm->id ?>" target="_top">
139                     <input name="scoid" type="hidden" />
140                     <input name="currentorg" type="hidden" value="<?php echo $currentorg ?>" />
141                     <input name="mode" type="hidden" value="<?php echo $mode ?>" />
142                     <input name="prev" type="<?php if (($sco->prev == 0) || ($sco->showprev == 1)) { echo 'hidden'; } else { echo 'button'; } ?>" value="<?php print_string('prev','scorm') ?>" onClick="prevSCO();" />
143                     <input name="next" type="<?php if (($sco->next == 0) || ($sco->shownext == 1)) { echo 'hidden'; } else { echo 'button'; } ?>" value="<?php print_string('next','scorm') ?>" onClick="nextSCO();" />
144                     <input name="exit" type="button" value="<?php print_string('exit','scorm') ?>" onClick="playSCO(0)" />
145                 </form>
146                 </td>
147                 </tr>
148 <?php
149     if ($scorm->popup == 0) {
150 ?>
151                 <tr><td class="right">
152 <?php
153         if ($result->prerequisites) {
154 ?>
155                     <iframe name="main" class="scoframe" width="<?php echo $scorm->width<=100 ? $scorm->width.'%' : $scorm->width ?>" height="<?php echo $scorm->height<=100 ? $scorm->height.'%' : $scorm->height ?>" src="loadSCO.php?id=<?php echo $cm->id.$scoidstring.$modestring ?>"></iframe>
156 <?php
157         } else {
158             print_simple_box(get_string('noprerequisites','scorm'),'center');
159         }
160 ?>
161                 </td></tr>
162 <?php
163     }
164 ?>
165             </table>
166          </td>
167     </tr>
168     </table>
170     <script language="javascript" type="text/javascript">
171     <!--
172 <?php
173     if ($scorm->popup == 1) {
174         if ($result->prerequisites) {
175 ?>
176         top.main = window.open("loadSCO.php?id=<?php echo $cm->id.$scoidstring.$modestring ?>","","width=<?php echo $scorm->width<=100 ? $scorm->width.'%' : $scorm->width ?>,height=<?php echo $scorm->height<=100 ? $scorm->height.'%' : $scorm->height ?>,scrollbars=1");
177 <?php
178         } else {
179 ?>
180         alert("<?php print_string('noprerequisites','scorm') ?>");
181 <?php
182         }
183     }
184 ?>
185         function playSCO(scoid) {
186             if (scoid == 0) {
187                 //top.main.close();
188                 document.location = '<?php echo $CFG->wwwroot ?>/course/view.php?id=<?php echo $cm->course ?>';
189             } else {
190                 document.navform.scoid.value=scoid;
191                 document.navform.submit();
192             }
193         }
195         function prevSCO() {
196             playSCO(<?php echo $sco->prev ?>);
197         }
199         function nextSCO() {
200             playSCO(<?php echo $sco->next ?>);
201         }
203         function expandCollide(which,list) {
204             var nn=document.ids?true:false
205             var w3c=document.getElementById?true:false
206             var beg=nn?"document.ids.":w3c?"document.getElementById(":"document.all.";
207             var mid=w3c?").style":".style";
209             if (eval(beg+list+mid+".display") != "none") {
210                 which.src = "pix/plus.gif";
211                 eval(beg+list+mid+".display='none';");
212             } else {
213                 which.src = "pix/minus.gif";
214                 eval(beg+list+mid+".display='block';");
215             }
216         }
217     -->
218     </script>
219 </body>
220 </html>