Beispiel #1
0
 /**
  * Retrieves user tracking and SCO data and default SCORM values
  *
  * @param int $scormid the scorm id
  * @param int $attempt the attempt number
  * @return array warnings and the scoes data
  * @throws  moodle_exception
  * @since Moodle 3.0
  */
 public static function get_scorm_user_data($scormid, $attempt)
 {
     global $CFG, $DB;
     $params = self::validate_parameters(self::get_scorm_user_data_parameters(), array('scormid' => $scormid, 'attempt' => $attempt));
     $data = array();
     $warnings = array();
     $scorm = $DB->get_record('scorm', array('id' => $params['scormid']), '*', MUST_EXIST);
     $cm = get_coursemodule_from_instance('scorm', $scorm->id);
     $context = context_module::instance($cm->id);
     self::validate_context($context);
     scorm_require_available($scorm, true, $context);
     $scorm->version = strtolower(clean_param($scorm->version, PARAM_SAFEDIR));
     if (!file_exists($CFG->dirroot . '/mod/scorm/datamodels/' . $scorm->version . 'lib.php')) {
         $scorm->version = 'scorm_12';
     }
     require_once $CFG->dirroot . '/mod/scorm/datamodels/' . $scorm->version . 'lib.php';
     if ($scoes = scorm_get_scoes($scorm->id)) {
         $def = new stdClass();
         $user = new stdClass();
         foreach ($scoes as $sco) {
             $def->{$sco->id} = new stdClass();
             $user->{$sco->id} = new stdClass();
             // We force mode normal, this can be override by the client at any time.
             $def->{$sco->id} = get_scorm_default($user->{$sco->id}, $scorm, $sco->id, $params['attempt'], 'normal');
             $userdata = array();
             $defaultdata = array();
             foreach ((array) $user->{$sco->id} as $key => $val) {
                 $userdata[] = array('element' => $key, 'value' => $val);
             }
             foreach ($def->{$sco->id} as $key => $val) {
                 $defaultdata[] = array('element' => $key, 'value' => $val);
             }
             $data[] = array('scoid' => $sco->id, 'userdata' => $userdata, 'defaultdata' => $defaultdata);
         }
     }
     $result = array();
     $result['data'] = $data;
     $result['warnings'] = $warnings;
     return $result;
 }
Beispiel #2
0
require_once $CFG->dirroot . '/mod/scorm/locallib.php';
// Set some vars to use as default values.
$userdata = new stdClass();
$def = new stdClass();
$cmiobj = new stdClass();
$cmiint = new stdClass();
if (!isset($currentorg)) {
    $currentorg = '';
}
if ($scoes = $DB->get_records('scorm_scoes', array('scorm' => $scorm->id), 'sortorder, id')) {
    // Drop keys so that it is a simple array.
    $scoes = array_values($scoes);
    foreach ($scoes as $sco) {
        $def->{$sco->id} = new stdClass();
        $userdata->{$sco->id} = new stdClass();
        $def->{$sco->id} = get_scorm_default($userdata->{$sco->id}, $scorm, $sco->id, $attempt, $mode);
        // Reconstitute objectives.
        $cmiobj->{$sco->id} = scorm_reconstitute_array_element($scorm->version, $userdata->{$sco->id}, 'cmi.objectives', array('score'));
        $cmiint->{$sco->id} = scorm_reconstitute_array_element($scorm->version, $userdata->{$sco->id}, 'cmi.interactions', array('objectives', 'correct_responses'));
    }
}
// If SCORM 1.2 standard mode is disabled allow higher datamodel limits.
if (intval(get_config("scorm", "scorm12standard"))) {
    $cmistring256 = '^[\\u0000-\\uFFFF]{0,255}$';
    $cmistring4096 = '^[\\u0000-\\uFFFF]{0,4096}$';
} else {
    $cmistring256 = '^[\\u0000-\\uFFFF]{0,64000}$';
    $cmistring4096 = $cmistring256;
}
$scorm->autocommit = $scorm->autocommit === "1" ? true : false;
$scorm->masteryoverride = $scorm->masteryoverride === "1" ? true : false;