| [ Index ] |
PHP Cross Reference of Moodle 1.9.3 [Build 15-Oct-2008] |
[Summary view] [Print] [Text view]
1 <?php // $Id: loadSCO.php,v 1.33.4.7 2008/08/21 01:54:10 danmarsden Exp $ 2 require_once('../../config.php'); 3 require_once ('locallib.php'); 4 5 $id = optional_param('id', '', PARAM_INT); // Course Module ID, or 6 $a = optional_param('a', '', PARAM_INT); // scorm ID 7 $scoid = required_param('scoid', PARAM_INT); // sco ID 8 9 $delayseconds = 2; // Delay time before sco launch, used to give time to browser to define API 10 11 if (!empty($id)) { 12 if (! $cm = get_coursemodule_from_id('scorm', $id)) { 13 error('Course Module ID was incorrect'); 14 } 15 if (! $course = get_record('course', 'id', $cm->course)) { 16 error('Course is misconfigured'); 17 } 18 if (! $scorm = get_record('scorm', 'id', $cm->instance)) { 19 error('Course module is incorrect'); 20 } 21 } else if (!empty($a)) { 22 if (! $scorm = get_record('scorm', 'id', $a)) { 23 error('Course module is incorrect'); 24 } 25 if (! $course = get_record('course', 'id', $scorm->course)) { 26 error('Course is misconfigured'); 27 } 28 if (! $cm = get_coursemodule_from_instance('scorm', $scorm->id, $course->id)) { 29 error('Course Module ID was incorrect'); 30 } 31 } else { 32 error('A required parameter is missing'); 33 } 34 35 require_login($course->id, false, $cm); 36 if (!empty($scoid)) { 37 // 38 // Direct SCO request 39 // 40 if ($sco = scorm_get_sco($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<>'".sql_empty()."' AND id>".$sco->id,'id ASC')) { 44 $sco = current($scoes); 45 } 46 } 47 } 48 } 49 // 50 // If no sco was found get the first of SCORM package 51 // 52 if (!isset($sco)) { 53 $scoes = get_records_select('scorm_scoes','scorm='.$scorm->id." AND launch<>'".sql_empty()."'",'id ASC'); 54 $sco = current($scoes); 55 } 56 57 if ($sco->scormtype == 'asset') { 58 $attempt = scorm_get_last_attempt($scorm->id,$USER->id); 59 $element = $scorm->version == 'scorm_13'?'cmi.completion_status':'cmi.core.lesson_status'; 60 $value = 'completed'; 61 $result = scorm_insert_track($USER->id, $scorm->id, $sco->id, $attempt, $element, $value); 62 } 63 64 // 65 // Forge SCO URL 66 // 67 $connector = ''; 68 $version = substr($scorm->version,0,4); 69 if ((isset($sco->parameters) && (!empty($sco->parameters))) || ($version == 'AICC')) { 70 if (stripos($sco->launch,'?') !== false) { 71 $connector = '&'; 72 } else { 73 $connector = '?'; 74 } 75 if ((isset($sco->parameters) && (!empty($sco->parameters))) && ($sco->parameters[0] == '?')) { 76 $sco->parameters = substr($sco->parameters,1); 77 } 78 } 79 80 if ($version == 'AICC') { 81 if (isset($sco->parameters) && (!empty($sco->parameters))) { 82 $sco->parameters = '&'. $sco->parameters; 83 } 84 $launcher = $sco->launch.$connector.'aicc_sid='.sesskey().'&aicc_url='.$CFG->wwwroot.'/mod/scorm/aicc.php'.$sco->parameters; 85 } else { 86 if (isset($sco->parameters) && (!empty($sco->parameters))) { 87 $launcher = $sco->launch.$connector.$sco->parameters; 88 } else { 89 $launcher = $sco->launch; 90 } 91 } 92 93 if (scorm_external_link($sco->launch)) { 94 // Remote learning activity 95 $result = $launcher; 96 } else if ($scorm->reference[0] == '#') { 97 // Repository 98 $result = $CFG->repositorywebroot.substr($scorm->reference,1).'/'.$sco->launch; 99 } else { 100 if ((basename($scorm->reference) == 'imsmanifest.xml') && scorm_external_link($scorm->reference)) { 101 // Remote manifest 102 $result = dirname($scorm->reference).'/'.$launcher; 103 } else { 104 // Moodle internal package/manifest or remote (auto-imported) package 105 if (basename($scorm->reference) == 'imsmanifest.xml') { 106 $basedir = dirname($scorm->reference); 107 } else { 108 $basedir = $CFG->moddata.'/scorm/'.$scorm->id; 109 } 110 //note: do not convert this to use get_file_url()! 111 // SCORM does not work without slasharguments anyway and there might be some extra ?xx=yy params 112 // see MDL-16060 113 $result = $CFG->wwwroot.'/file.php/'.$scorm->course.'/'.$basedir.'/'.$launcher; 114 } 115 } 116 117 $scormpixdir = $CFG->modpixpath.'/scorm/pix'; 118 ?> 119 <html> 120 <head> 121 <title>LoadSCO</title> 122 <script type="text/javascript"> 123 //<![CDATA[ 124 function doredirect() { 125 var e = document.getElementById("countdown"); 126 var cSeconds = parseInt(e.innerHTML); 127 var timer = setInterval(function() { 128 if( cSeconds ) { 129 e.innerHTML = --cSeconds; 130 } else { 131 clearInterval(timer); 132 document.body.innerHTML = "<?php echo get_string('activitypleasewait', 'scorm');?>"; 133 location = "<?php echo $result ?>"; 134 } 135 }, 1000); 136 } 137 //]]> 138 </script> 139 <noscript> 140 <meta http-equiv="refresh" content="<?php echo $delayseconds ?>;url=<?php echo $result ?>" /> 141 </noscript> 142 </head> 143 <body onload="doredirect();"> 144 <p><?php echo get_string('activityloading', 'scorm');?> <span id="countdown"><?php echo $delayseconds ?></span> <?php echo get_string('numseconds');?>. <img src='<?php echo $scormpixdir;?>/wait.gif'><p> 145 <?php if (debugging('',DEBUG_DEVELOPER)) { 146 add_to_log($course->id, 'scorm', 'launch', 'view.php?id='.$cm->id, $result, $cm->id); 147 } 148 ?> 149 </body> 150 </html>
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated: Wed Jan 14 11:33:29 2009 | Cross-referenced by PHPXref 0.7 |