a8166b5fc97d495b3abcf6c14a958e6f37c91925
[moodle.git] / mod / scorm / loadSCO.php
1 <?php
2     require_once("../../config.php");
3     require_once("lib.php");
5     optional_variable($id);    // Course Module ID, or
6     optional_variable($a);     // scorm ID
7     optional_variable($scoid); // sco ID
8     optional_variable($mode);  // lesson mode
10     if ($id) {
11         if (! $cm = get_record("course_modules", "id", $id)) {
12             error("Course Module ID was incorrect");
13         }
15         if (! $course = get_record("course", "id", $cm->course)) {
16             error("Course is misconfigured");
17         }
19         if (! $scorm = get_record("scorm", "id", $cm->instance)) {
20             error("Course module is incorrect");
21         }
23     } else {
24         if (! $scorm = get_record("scorm", "id", $a)) {
25             error("Course module is incorrect");
26         }
27         if (! $course = get_record("course", "id", $scorm->course)) {
28             error("Course is misconfigured");
29         }
30         if (! $cm = get_coursemodule_from_instance("scorm", $scorm->id, $course->id)) {
31             error("Course Module ID was incorrect");
32         }
33     }
35     require_login($course->id, false, $cm);
36     if (!empty($scoid)) {
37     //
38     // Direct sco request
39     //
40         if ($sco = get_record("scorm_scoes","id",$scoid)) {
41             if ($sco->launch == '') {
42                 // Search for the next launchable sco
43                 if ($scoes = get_records_select("scorm_scoes","scorm=".$scorm->id." AND launch<>'' AND id>".$sco->id,"id ASC")) {
44                     $sco = current($scoes);
45                 }
46             }
47         }
48     } else {
49     //
50     // Search for first incomplete sco
51     //
52         if ( $scoes_track = get_records_select("scorm_scoes_track","userid=".$USER->id." AND element='cmi.core.lesson_status' AND scormid=".$scorm->id,"scoid ASC") ) {
53             $sco_track = current($scoes_track);
54             while ((($sco_track->value == "completed") || ($sco_track->value == "passed") || ($sco_track->value == "failed")) && ($mode == "normal")) {
55                 $sco_track = next($scoes_track);
56             }
57             $sco = get_record("scorm_scoes","id",$sco_track->scoid);
58         }
59            }
60        //
61     // If no sco was found get the first of SCORM package
62     //
63     if (!isset($sco)) {
64         $scoes = get_records_select("scorm_scoes","scorm=".$scorm->id." AND launch<>''","id ASC");
65         $sco = current($scoes);
66     }
68     //
69     // Forge SCO URL
70     //
71     $connector = '';
72     $version = substr($scorm->version,0,4);
73     if (!empty($sco->parameters) || ($version == 'AICC')) {
74         if (stripos($sco->launch,'?') !== false) {
75             $connector = '&';
76         } else {
77             $connector = '?';
78         }
79     }
80     if (scorm_external_link($sco->launch)) {
81         if ($version == 'AICC') {
82             if (!empty($sco->parameters)) {
83                 $sco->parameters = '&'. $sco->parameters;
84             }
85             $result = $sco->launch.$connector.'aicc_sid='.sesskey().'&aicc_url='.$CFG->wwwroot.'/mod/scorm/aicc.php'.$sco->parameters;
86         } else {
87             $result = $sco->launch.$connector.$sco->parameters;
88         }
89     } else {
90         if ($CFG->slasharguments) {
91             $result = $CFG->wwwroot.'/file.php/'.$scorm->course.'/moddata/scorm/'.$scorm->id.'/'.$sco->launch.$connector.$sco->parameters;
92         } else {
93             $result = $CFG->wwwroot.'/file.php?file=/'.$scorm->course.'/moddata/scorm/'.$scorm->id.'/'.$sco->launch.$connector.$sco->parameters;
94         }
95     }
96 ?>
97 <html>
98     <head>
99         <title>LoadSCO</title>
100         <script language="javascript" type="text/javascript">
101         <!--
102             setTimeout('document.location = "<?php echo $result ?>";',1000);
103         -->
104         </script>
105     </head>
106     <body>
107         &nbsp;
108     </body>
109 </html>