65e62a500ad06d940562f7b8bf526d3b2a249dba
[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     
38     if (!empty($scoid)) {       
39     //
40     // Direct sco request
41     //
42         if ($sco = get_record("scorm_scoes","id",$scoid)) {
43             if ($sco->launch == '') {
44                 // Search for the next launchable sco 
45                 if ($scoes = get_records_select("scorm_scoes","scorm=".$scorm->id." AND launch<>'' AND id>".$sco->id,"id ASC")) {
46                     $sco = current($scoes);
47                 }
48             }
49         }
50     } else {
51     //
52     // Search for first incomplete sco
53     //
54         if ( $scoes_track = get_records_select("scorm_scoes_track","userid=".$USER->id." AND element='cmi.core.lesson_status' AND scormid=".$scorm->id,"scoid ASC") ) {
55             $sco_track = current($scoes_track);
56             while ((($sco_track->value == "completed") || ($sco_track->value == "passed") || ($sco_track->value == "failed")) && ($mode == "normal")) {
57                 $sco_track = next($scoes_track);
58             }
59             $sco = get_record("scorm_scoes","id",$sco_track->scoid);
60         }
61         
62     }
63     
64     //
65     // If no sco was found get the first of SCORM package
66     //
67     if (!isset($sco)) {
68         $scoes = get_records_select("scorm_scoes","scorm=".$scorm->id." AND launch<>''","id ASC");
69         $sco = current($scoes);
70     }
72     //
73     // Forge SCO URL
74     //
75     $connector = '';
76     $version = substr($scorm->version,0,4);
77     if (!empty($sco->parameters) || ($version == 'AICC')) {
78         if (stripos($sco->launch,'?') !== false) {
79             $connector = '&';
80         } else {
81             $connector = '?';
82         }
83     }
84     if (scorm_external_link($sco->launch)) {
85         if ($version == 'AICC') {
86             if (!empty($sco->parameters)) {
87                 $sco->parameters = '&'. $sco->parameters;
88             }
89             $result = $sco->launch.$connector.'aicc_sid='.sesskey().'&aicc_url='.$CFG->wwwroot.'/mod/scorm/aicc.php'.$sco->parameters;
90         } else {
91             $result = $sco->launch.$connector.$sco->parameters;
92         }
93     } else {
94         if ($CFG->slasharguments) {
95             $result = $CFG->wwwroot.'/file.php/'.$scorm->course.'/moddata/scorm/'.$scorm->id.'/'.$sco->launch.$connector.$sco->parameters;
96         } else {
97             $result = $CFG->wwwroot.'/file.php?file=/'.$scorm->course.'/moddata/scorm/'.$scorm->id.'/'.$sco->launch.$connector.$sco->parameters;
98         }
99     }
100 ?>
101 <html>
102     <head>
103         <title>LoadSCO</title>
104         <script language="javascript" type="text/javascript">
105         <!--
106             setTimeout('document.location = "<?php echo $result ?>";',1000);
107         -->
108         </script>
109     </head>
110     <body>
111         &nbsp;
112     </body>
113 </html>