[ Index ]

PHP Cross Reference of Moodle 1.9.3 [Build 15-Oct-2008]

title

Body

[close]

/mod/scorm/ -> loadSCO.php (source)

   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');?>. &nbsp; <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>


Generated: Wed Jan 14 11:33:29 2009 Cross-referenced by PHPXref 0.7