pkgtype = $packagedata->pkgtype; $scorm->datadir = $packagedata->datadir; $scorm->launch = $packagedata->launch; $scorm->parse = 1; $scorm->timemodified = time(); if (!scorm_external_link($scorm->reference)) { $scorm->md5hash = md5_file($CFG->dataroot.'/'.$scorm->course.'/'.$scorm->reference); } else { $scorm->dir = $CFG->dataroot.'/'.$scorm->course.'/moddata/scorm'; $scorm->md5hash = md5_file($scorm->dir.$scorm->datadir.'/'.basename($scorm->reference)); } $scorm = scorm_option2text($scorm); $scorm->width = str_replace('%','',$scorm->width); $scorm->height = str_replace('%','',$scorm->height); //sanitize submitted values a bit $scorm->width = clean_param($scorm->width, PARAM_INT); $scorm->height = clean_param($scorm->height, PARAM_INT); if (!isset($scorm->whatgrade)) { $scorm->whatgrade = 0; } $scorm->grademethod = ($scorm->whatgrade * 10) + $scorm->grademethod; $id = insert_record('scorm', $scorm); if (scorm_external_link($scorm->reference) || ((basename($scorm->reference) != 'imsmanifest.xml') && ($scorm->reference[0] != '#'))) { // Rename temp scorm dir to scorm id $scorm->dir = $CFG->dataroot.'/'.$scorm->course.'/moddata/scorm'; rename($scorm->dir.$scorm->datadir,$scorm->dir.'/'.$id); } // Parse scorm manifest if ($scorm->parse == 1) { $scorm->id = $id; $scorm->launch = scorm_parse($scorm); set_field('scorm','launch',$scorm->launch,'id',$scorm->id); } return $id; } else { error(get_string('badpackage','scorm')); } } /** * Given an object containing all the necessary data, * (defined by the form in mod.html) this function * will update an existing instance with new data. * * @param mixed $scorm Form data * @return int */ function scorm_update_instance($scorm) { global $CFG; require_once('locallib.php'); if (($packagedata = scorm_check_package($scorm)) != null) { $scorm->pkgtype = $packagedata->pkgtype; if ($packagedata->launch == 0) { $scorm->launch = $packagedata->launch; $scorm->datadir = $packagedata->datadir; $scorm->parse = 1; if (!scorm_external_link($scorm->reference)) { $scorm->md5hash = md5_file($CFG->dataroot.'/'.$scorm->course.'/'.$scorm->reference); } else { $scorm->dir = $CFG->dataroot.'/'.$scorm->course.'/moddata/scorm'; $scorm->md5hash = md5_file($scorm->dir.$scorm->datadir.'/'.basename($scorm->reference)); } mtrace($scorm->md5hash); } else { $scorm->parse = 0; } } $scorm->timemodified = time(); $scorm->id = $scorm->instance; $scorm = scorm_option2text($scorm); $scorm->width = str_replace('%','',$scorm->width); $scorm->height = str_replace('%','',$scorm->height); if (!isset($scorm->whatgrade)) { $scorm->whatgrade = 0; } $scorm->grademethod = ($scorm->whatgrade * 10) + $scorm->grademethod; // Check if scorm manifest needs to be reparsed if ($scorm->parse == 1) { $scorm->dir = $CFG->dataroot.'/'.$scorm->course.'/moddata/scorm'; if (is_dir($scorm->dir.'/'.$scorm->id)) { scorm_delete_files($scorm->dir.'/'.$scorm->id); } if (isset($scorm->datadir) && ($scorm->datadir != $scorm->id) && (scorm_external_link($scorm->reference) || ((basename($scorm->reference) != 'imsmanifest.xml') && ($scorm->reference[0] != '#')))) { rename($scorm->dir.$scorm->datadir,$scorm->dir.'/'.$scorm->id); } $scorm->launch = scorm_parse($scorm); } else { $oldscorm = get_record('scorm','id',$scorm->id); $scorm->reference = $oldscorm->reference; // This fix a problem with Firefox when the teacher choose Cancel on overwrite question } return update_record('scorm', $scorm); } /** * Given an ID of an instance of this module, * this function will permanently delete the instance * and any data that depends on it. * * @param int $id Scorm instance id * @return boolean */ function scorm_delete_instance($id) { global $CFG; if (! $scorm = get_record('scorm', 'id', $id)) { return false; } $result = true; $scorm->dir = $CFG->dataroot.'/'.$scorm->course.'/moddata/scorm'; if (is_dir($scorm->dir.'/'.$scorm->id)) { // Delete any dependent files require_once('locallib.php'); scorm_delete_files($scorm->dir.'/'.$scorm->id); } // Delete any dependent records if (! delete_records('scorm_scoes_track', 'scormid', $scorm->id)) { $result = false; } if ($scoes = get_records('scorm_scoes','scorm',$scorm->id)) { foreach ($scoes as $sco) { if (! delete_records('scorm_scoes_data', 'scoid', $sco->id)) { $result = false; } } delete_records('scorm_scoes', 'scorm', $scorm->id); } else { $result = false; } if (! delete_records('scorm', 'id', $scorm->id)) { $result = false; } /*if (! delete_records('scorm_sequencing_controlmode', 'scormid', $scorm->id)) { $result = false; } if (! delete_records('scorm_sequencing_rolluprules', 'scormid', $scorm->id)) { $result = false; } if (! delete_records('scorm_sequencing_rolluprule', 'scormid', $scorm->id)) { $result = false; } if (! delete_records('scorm_sequencing_rollupruleconditions', 'scormid', $scorm->id)) { $result = false; } if (! delete_records('scorm_sequencing_rolluprulecondition', 'scormid', $scorm->id)) { $result = false; } if (! delete_records('scorm_sequencing_rulecondition', 'scormid', $scorm->id)) { $result = false; } if (! delete_records('scorm_sequencing_ruleconditions', 'scormid', $scorm->id)) { $result = false; }*/ return $result; } /** * Return a small object with summary information about what a * user has done with a given particular instance of this module * Used for user activity reports. * * @param int $course Course id * @param int $user User id * @param int $mod * @param int $scorm The scorm id * @return mixed */ function scorm_user_outline($course, $user, $mod, $scorm) { $return = NULL; require_once('locallib.php'); $return = scorm_grade_user($scorm, $user->id, true); return $return; } /** * Print a detailed representation of what a user has done with * a given particular instance of this module, for user activity reports. * * @param int $course Course id * @param int $user User id * @param int $mod * @param int $scorm The scorm id * @return boolean */ function scorm_user_complete($course, $user, $mod, $scorm) { global $CFG; $liststyle = 'structlist'; $scormpixdir = $CFG->modpixpath.'/scorm/pix'; $now = time(); $firstmodify = $now; $lastmodify = 0; $sometoreport = false; $report = ''; if ($orgs = get_records_select('scorm_scoes',"scorm='$scorm->id' AND organization='' AND launch=''",'id','id,identifier,title')) { if (count($orgs) <= 1) { unset($orgs); $orgs[]->identifier = ''; } $report .= '