53dc7d04368d7b1fd11c7309d96d42a348d8a558
[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;
94     //
95     // Print the page header
96     //
97     $scripts = '';
98     if ($scorm->popup == 1) {
99         $scripts = 'onunload="top.main.close();"';
100     }
101     
102     print_header($pagetitle, "$course->fullname",
103                  "$navigation <a target='{$CFG->framename}' href='view.php?id=$cm->id'>".format_string($scorm->name,true)."</a>",
104                  '', '', true, update_module_button($cm->id, $course->id, $strscorm), '', false, $scripts);
105 ?>
106     <script language="JavaScript" type="text/javascript" src="request.js"></script>
107     <script language="JavaScript" type="text/javascript" src="api.php?id=<?php echo $cm->id.$scoidstring.$modestring ?>"></script>
109     <table class="fullscreen">
110     <tr>
111 <?php  
112     if ($scorm->hidetoc == 0) {
113 ?>
114             <td class="top">
115             <table class='generalbox'>
116                <tr>
117                    <td class="structurehead"><?php print_string('coursestruct','scorm') ?></td>
118                </tr>
119                <tr>
120                    <td><?php echo $result->toc; ?></td>
121                </tr>
122             </table>
123         </td>
124 <?php
125     }
126     $browseclass = '';
127     if ($scorm->popup == 0) {
128         $browseclass = 'class="left"';
129     }
130 ?>
131         <td class="top">
132             <table class="fullscreen">
133                 <tr>
134                     <?php echo $mode == 'browse' ? '<td '.$browseclass.'>'.get_string('browsemode','scorm').'</td>' : ''; ?>
135                     <td class="right">       
136                 <form name="navform" method="post" action="playscorm.php?id=<?php echo $cm->id ?>" target="_top">
137                     <input name="scoid" type="hidden" />
138                     <input name="currentorg" type="hidden" value="<?php echo $currentorg ?>" />
139                     <input name="mode" type="hidden" value="<?php echo $mode ?>" />
140                     <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();" />
141                     <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();" />
142                     <input name="exit" type="button" value="<?php print_string('exit','scorm') ?>" onClick="playSCO(0)" />
143                 </form>
144                 </td>
145                 </tr>
146 <?php
147     if ($scorm->popup == 0) {
148 ?>
149                 <tr><td class="right">
150 <?php
151         if ($result->prerequisites) {
152 ?>
153                     <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>
154 <?php
155         } else {
156             print_simple_box(get_string('noprerequisites','scorm'),'center');
157         }
158 ?>
159                 </td></tr>
160 <?php
161     }
162 ?>
163             </table>
164          </td>
165     </tr>
166     </table>
168     <script language="javascript" type="text/javascript">
169     <!--
170 <?php
171     if ($scorm->popup == 1) {
172         if ($result->prerequisites) {
173 ?>
174         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");
175 <?php
176         } else {
177 ?>
178         alert("<?php print_string('noprerequisites','scorm') ?>");
179 <?php
180         }
181     }
182 ?>
183         function playSCO(scoid) {
184             if (scoid == 0) {
185                 //top.main.close();
186                 document.location = '<?php echo $CFG->wwwroot ?>/course/view.php?id=<?php echo $cm->course ?>';
187             } else {
188                 document.navform.scoid.value=scoid;
189                 document.navform.submit();
190             }
191         }
193         function prevSCO() {
194             playSCO(<?php echo $sco->prev ?>);
195         }
197         function nextSCO() {
198             playSCO(<?php echo $sco->next ?>);
199         }
201         function expandCollide(which,list) {
202             var nn=document.ids?true:false
203             var w3c=document.getElementById?true:false
204             var beg=nn?"document.ids.":w3c?"document.getElementById(":"document.all.";
205             var mid=w3c?").style":".style";
207             if (eval(beg+list+mid+".display") != "none") {
208                 which.src = "pix/plus.gif";
209                 eval(beg+list+mid+".display='none';");
210             } else {
211                 which.src = "pix/minus.gif";
212                 eval(beg+list+mid+".display='block';");
213             }
214         }
215     -->
216     </script>
217 </body>
218 </html>