/** * Remove all dir */ function scorm_delete_files($directory) { if (is_dir($directory)) { $handle = opendir($directory); while (($file = readdir($handle)) != '') { if ($file != "." && $file != "..") { if (!is_dir($directory . "/" . $file)) { unlink($directory . "/" . $file); } else { scorm_delete_files($directory . "/" . $file); } } } closedir($handle); rmdir($directory); } }
function scorm_check_package($data) { global $CFG, $COURSE; require_once $CFG->libdir . '/filelib.php'; $courseid = $data->course; // Course Module ID $reference = $data->reference; // Package path $scormid = $data->instance; // scorm ID $validation = new stdClass(); if (!empty($courseid) && !empty($reference)) { $externalpackage = scorm_external_link($reference); $validation->launch = 0; $referencefield = $reference; if (empty($reference)) { $validation = null; } else { if ($reference[0] == '#') { if (isset($CFG->repositoryactivate) && $CFG->repositoryactivate) { $referencefield = $reference . '/imsmanifest.xml'; $reference = $CFG->repository . substr($reference, 1) . '/imsmanifest.xml'; } else { $validation = null; } } else { if (!$externalpackage) { $reference = $CFG->dataroot . '/' . $courseid . '/' . $reference; } } } if (!empty($scormid)) { // // SCORM Update // if (!empty($validation) && (is_file($reference) || $externalpackage)) { if (!$externalpackage) { $mdcheck = md5_file($reference); } else { if ($externalpackage) { if ($scormdir = make_upload_directory("{$courseid}/{$CFG->moddata}/scorm")) { if ($tempdir = scorm_tempdir($scormdir)) { $content = download_file_content($reference); $file = fopen($tempdir . '/' . basename($reference), 'x'); fwrite($file, $content); fclose($file); $mdcheck = md5_file($tempdir . '/' . basename($reference)); scorm_delete_files($tempdir); } } } } if ($scorm = get_record('scorm', 'id', $scormid)) { if ($scorm->reference[0] == '#') { if (isset($CFG->repositoryactivate) && $CFG->repositoryactivate) { $oldreference = $CFG->repository . substr($scorm->reference, 1) . '/imsmanifest.xml'; } else { $oldreference = $scorm->reference; } } else { if (!scorm_external_link($scorm->reference)) { $oldreference = $CFG->dataroot . '/' . $courseid . '/' . $scorm->reference; } else { $oldreference = $scorm->reference; } } $validation->launch = $scorm->launch; if ($oldreference == $reference && $mdcheck != $scorm->md5hash || $oldreference != $reference) { // This is a new or a modified package $validation->launch = 0; } else { // Old package already validated if (strpos($scorm->version, 'AICC') !== false) { $validation->pkgtype = 'AICC'; } else { $validation->pkgtype = 'SCORM'; } } } else { $validation = null; } } else { $validation = null; } } //$validation->launch = 0; if ($validation != null && $validation->launch == 0) { // // Package must be validated // $ext = strtolower(substr(basename($reference), strrpos(basename($reference), '.'))); $tempdir = ''; switch ($ext) { case '.pif': case '.zip': // Create a temporary directory to unzip package and validate package $scormdir = ''; if ($scormdir = make_upload_directory("{$courseid}/{$CFG->moddata}/scorm")) { if ($tempdir = scorm_tempdir($scormdir)) { if ($externalpackage) { $content = download_file_content($reference); $file = fopen($tempdir . '/' . basename($reference), 'x'); fwrite($file, $content); fclose($file); } else { copy("{$reference}", $tempdir . '/' . basename($reference)); } unzip_file($tempdir . '/' . basename($reference), $tempdir, false); if (!$externalpackage) { unlink($tempdir . '/' . basename($reference)); } if (is_file($tempdir . '/imsmanifest.xml')) { $validation = scorm_validate_manifest($tempdir . '/imsmanifest.xml'); $validation->pkgtype = 'SCORM'; } else { $validation = scorm_validate_aicc($tempdir); $validation->pkgtype = 'AICC'; } } else { $validation = null; } } else { $validation = null; } break; case '.xml': if (basename($reference) == 'imsmanifest.xml') { if ($externalpackage) { if ($scormdir = make_upload_directory("{$courseid}/{$CFG->moddata}/scorm")) { if ($tempdir = scorm_tempdir($scormdir)) { $content = download_file_content($reference); $file = fopen($tempdir . '/' . basename($reference), 'x'); fwrite($file, $content); fclose($file); if (is_file($tempdir . '/' . basename($reference))) { $validation = scorm_validate_manifest($tempdir . '/' . basename($reference)); } else { $validation = null; } } } } else { $validation = scorm_validate_manifest($reference); } $validation->pkgtype = 'SCORM'; } else { $validation = null; } break; default: $validation = null; break; } if ($validation == null) { if (is_dir($tempdir)) { // Delete files and temporary directory scorm_delete_files($tempdir); } } else { if ($ext == '.xml' && !$externalpackage) { $validation->datadir = dirname($referencefield); } else { $validation->datadir = substr($tempdir, strlen($scormdir)); } $validation->launch = 0; } } } else { $validation = null; } return $validation; }
/** * 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; }*/ scorm_grade_item_delete(stripslashes_recursive($scorm)); return $result; }