~ubuntu-branches/ubuntu/breezy/moodle/breezy

« back to all changes in this revision

Viewing changes to mod/scorm/scormAPI.php

  • Committer: Bazaar Package Importer
  • Author(s): Andrew Mitchell
  • Date: 2005-10-13 02:00:59 UTC
  • mfrom: (1.1.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20051013020059-y2qcyo41t7nqppcg
Tags: 1.5.2-1ubuntu1
* Resync with debian (security update)
* changed dependencys to php5
* changed apache dependency to apache2 
* References
  CAN-2005-2247

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
<?php
2
 
    require_once("../../config.php");
3
 
    require_once("lib.php");
4
 
 
5
 
    optional_variable($id);    // Course Module ID, or
6
 
    optional_variable($a);     // scorm ID
7
 
    optional_variable($scoid); // sco ID
8
 
    optional_variable($mode);
9
 
 
10
 
    if ($id) {
11
 
        if (! $cm = get_record("course_modules", "id", $id)) {
12
 
            error("Course Module ID was incorrect");
13
 
        }
14
 
 
15
 
        if (! $course = get_record("course", "id", $cm->course)) {
16
 
            error("Course is misconfigured");
17
 
        }
18
 
 
19
 
        if (! $scorm = get_record("scorm", "id", $cm->instance)) {
20
 
            error("Course module is incorrect");
21
 
        }
22
 
 
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
 
    }
34
 
 
35
 
    require_login($course->id);
36
 
 
37
 
    if ( $scoes_user = get_records_select("scorm_sco_users","userid = ".$USER->id." AND scormid = ".$scorm->id,"scoid ASC") ) {
38
 
        //
39
 
        // Already user
40
 
        //
41
 
        if (!empty($scoid)) {   
42
 
            // Direct sco request
43
 
            //$sco = get_record("scorm_scoes","id",$scoid);
44
 
            if ($sco = get_record("scorm_scoes","id",$scoid)) {
45
 
                if ($sco->launch == '') {
46
 
                    // Search for th first launchable sco 
47
 
                    if ($scoes = get_records("scorm_scoes","scorm",$scorm->id,"id ASC")) {
48
 
                        $sco = current($scoes);
49
 
                        while ($sco->id < $scoid) {
50
 
                            $sco = next($scoes);
51
 
                        }
52
 
                        while ($sco->launch == '') {
53
 
                            $sco = next($scoes);
54
 
                        }
55
 
                    }
56
 
                }
57
 
            }
58
 
        } else {
59
 
            // Search for first incomplete sco
60
 
            foreach ( $scoes_user as $sco_user ) {
61
 
                if (($sco_user->cmi_core_lesson_status != "completed") && ($sco_user->cmi_core_lesson_status != "passed") && ($sco_user->cmi_core_lesson_status != "failed")) {
62
 
                    $sco = get_record("scorm_scoes","id",$sco_user->scoid);
63
 
                    break;
64
 
                } else {
65
 
                    // If review mode get the first
66
 
                    if ($mode == "review") {
67
 
                        $sco = get_record("scorm_scoes","id",$sco_user->scoid);
68
 
                        break;
69
 
                    }
70
 
                }
71
 
            }
72
 
        }
73
 
        if (!isset($sco)) {  // If no sco was found get the first of SCORM package
74
 
            $scoes = get_records_select("scorm_scoes","scorm=".$scorm->id." AND launch<>'' order by id ASC");
75
 
            $sco = each($scoes);
76
 
        }
77
 
    } else {
78
 
        //
79
 
        // A new user
80
 
        //
81
 
        if ($scoes = get_records("scorm_scoes","scorm",$scorm->id,"id ASC")) {
82
 
            //
83
 
            // Create user scoes records
84
 
            //
85
 
            foreach ($scoes as $sco) {
86
 
                if (($sco->launch != "") && ($sco->type != "sca") && ($sco->type != "asset")){
87
 
                    if (!isset($first)) {
88
 
                        $first = $sco;
89
 
                    }
90
 
                    $sco_user->userid = $USER->id;
91
 
                    $sco_user->scoid = $sco->id;
92
 
                    $sco_user->scormid = $scorm->id;
93
 
                    $element = "cmi_core_lesson_status";
94
 
                    $sco_user->$element = "not attempted";
95
 
                    $ident = insert_record("scorm_sco_users",$sco_user);
96
 
                }
97
 
            }
98
 
            if (isset($first)) {
99
 
                $sco = $first;
100
 
            }
101
 
            if (!empty($scoid)) {
102
 
                if ($sco = get_record("scorm_scoes","id",$scoid)) {
103
 
                    unset($first);
104
 
                }
105
 
            }
106
 
        }
107
 
    }
108
 
    //
109
 
    // Get first, last, prev and next scoes
110
 
    //
111
 
    $scoes = get_records("scorm_scoes","scorm",$scorm->id,"id ASC");
112
 
    $min = 0;
113
 
    $max = 0;
114
 
    $prevsco = 0;
115
 
    $nextsco = 0;
116
 
    foreach ($scoes as $fsco) {
117
 
        if ($fsco->launch != "") {
118
 
            if (!$min || ($min > $fsco->id))
119
 
                $min = $fsco->id;
120
 
            if (!$max || ($max < $fsco->id))
121
 
                $max = $fsco->id;
122
 
            if ((!$prevsco) || ($sco->id > $fsco->id)) {
123
 
                $prevsco = $fsco->id;
124
 
            }
125
 
            if ((!$nextsco) && ($sco->id < $fsco->id)) {
126
 
                $nextsco = $fsco->id;
127
 
            }
128
 
        }
129
 
    }
130
 
    $first = NULL;
131
 
    $last = NULL;
132
 
    if ($sco->id == $min)
133
 
        $first = $sco;
134
 
    if ($sco->id == $max)
135
 
        $last = $sco;
136
 
 
137
 
    // Get current sco User data
138
 
    $sco_user = get_record("scorm_sco_users","userid",$USER->id,"scoid",$sco->id);
139
 
    
140
 
    if (scorm_external_link($sco->launch)) {
141
 
        $result = $sco->launch;
142
 
    } else {
143
 
        if ($CFG->slasharguments) {
144
 
            $result = "$CFG->wwwroot/file.php/$scorm->course/moddata/scorm$scorm->datadir/$sco->launch";
145
 
        } else {
146
 
            $result = "$CFG->wwwroot/file.php?file=/$scorm->course/moddata/scorm$scorm->datadir/$sco->launch";
147
 
        }
148
 
    }
149
 
    $navObj = "top.";
150
 
    if ($scorm->popup == "") {
151
 
        $navObj = "top.navigation.";
152
 
    }
153
 
    
154
 
    if ($sco->type == 'sco') {
155
 
        include("api1_2.php");
156
 
    }
157
 
 
158
 
?>
159
 
 
160
 
function hilightcurrent(popupmenu) {
161
 
    for (i=0;i < popupmenu.options.length;i++) {
162
 
         if ( popupmenu.options[i].value == <?php echo $sco->id; ?> )
163
 
                popupmenu.options[i].selected = true;
164
 
    }
165
 
}
166
 
 
167
 
function SCOInitialize() { 
168
 
<?php
169
 
    if ( $sco->previous || $first) {
170
 
        print "\t".$navObj."document.navform.prev.disabled = true;\n";
171
 
        print "\t".$navObj."document.navform.prev.style.display = 'none';\n";
172
 
    }
173
 
    if ( $sco->next || $last) {
174
 
        print "\t".$navObj."document.navform.next.disabled = true;\n";
175
 
        print "\t".$navObj."document.navform.next.style.display = 'none';\n";
176
 
    }
177
 
?>
178
 
<?php   
179
 
    if ($scorm->popup == "") { 
180
 
        echo "\t    top.main.location=\"$result\";\n";
181
 
        echo "\t    hilightcurrent(".$navObj."document.navform.courseStructure);\n";
182
 
    } else {
183
 
        $popuplocation = '';
184
 
        if (isset($_COOKIE["SCORMpopup"])) {
185
 
            $popuplocation = $_COOKIE["SCORMpopup"];
186
 
        }
187
 
        echo "\t    top.main = window.open('$result','main','$scorm->popup$popuplocation');\n";
188
 
    }
189
 
?>
190
 
191
 
 
192
 
function SCOFinish(){
193
 
    if (typeof API != "undefined") {
194
 
        API.SaveTotalTime();
195
 
    }
196
 
}
197
 
 
198
 
function changeSco(direction) {
199
 
    if (direction == "previous")
200
 
        <?php echo $navObj ?>document.navform.scoid.value="<?php echo $prevsco; ?>";
201
 
    else
202
 
        <?php echo $navObj ?>document.navform.scoid.value="<?php echo $nextsco; ?>";
203
 
            
204
 
    //alert ("Prev: <?php echo $prevsco; ?>\nNext: <?php echo $nextsco; ?>\nNew SCO: "+<?php echo $navObj ?>document.navform.scoid.value);
205
 
    <?php echo $navObj ?>document.navform.submit();
206
 
}
207
 
 
208
 
function closeMain() {
209
 
    if (document.all) {
210
 
        document.cookie = "SCORMpopup=" + escape(",top="+top.main.screenTop+",left="+top.main.screenLeft);
211
 
    } else {
212
 
        document.cookie = "SCORMpopup=" + escape(",top="+top.main.screenY+",left="+top.main.screenX);
213
 
    }
214
 
    top.main.close();
215
 
}
 
 
b'\\ No newline at end of file'