/** * 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 udutu instance id * @return boolean */ function udutu_delete_instance($id) { global $CFG; if (!($udutu = get_record('udutu', 'id', $id))) { return false; } $result = true; $udutu->dir = $CFG->dataroot . '/' . $udutu->course . '/moddata/udutu'; if (is_dir($udutu->dir . '/' . $udutu->id)) { // Delete any dependent files require_once 'locallib.php'; udutu_delete_files($udutu->dir . '/' . $udutu->id); } // Delete any dependent records if (!delete_records('udutu_scoes_track', 'udutuid', $udutu->id)) { $result = false; } if ($scoes = get_records('udutu_scoes', 'udutu', $udutu->id)) { foreach ($scoes as $sco) { if (!delete_records('udutu_scoes_data', 'scoid', $sco->id)) { $result = false; } } delete_records('udutu_scoes', 'udutu', $udutu->id); } else { $result = false; } if (!delete_records('udutu', 'id', $udutu->id)) { $result = false; } /*if (! delete_records('udutu_sequencing_controlmode', 'udutuid', $udutu->id)) { $result = false; } if (! delete_records('udutu_sequencing_rolluprules', 'udutuid', $udutu->id)) { $result = false; } if (! delete_records('udutu_sequencing_rolluprule', 'udutuid', $udutu->id)) { $result = false; } if (! delete_records('udutu_sequencing_rollupruleconditions', 'udutuid', $udutu->id)) { $result = false; } if (! delete_records('udutu_sequencing_rolluprulecondition', 'udutuid', $udutu->id)) { $result = false; } if (! delete_records('udutu_sequencing_rulecondition', 'udutuid', $udutu->id)) { $result = false; } if (! delete_records('udutu_sequencing_ruleconditions', 'udutuid', $udutu->id)) { $result = false; }*/ return $result; }
function udutu_check_package($data) { global $CFG, $COURSE; $courseid = $data->course; // Course Module ID $reference = $data->reference; // Package path $udutuid = $data->instance; // udutu ID $validation = new stdClass(); if (!empty($courseid) && !empty($reference)) { $externalpackage = udutu_external_link($reference); $validation->launch = 0; $referencefield = $reference; if (empty($reference)) { $validation = null; } else { if ($reference[0] == '#') { require_once $repositoryconfigfile; if ($CFG->repositoryactivate) { $referencefield = $reference . '/imsmanfest.xml'; $reference = $CFG->repository . substr($reference, 1) . '/imsmanifest.xml'; } else { $validation = null; } } else { if (!$externalpackage) { $reference = $CFG->dataroot . '/' . $courseid . '/' . $reference; } } } if (!empty($udutuid)) { // // udutu Update // if (!empty($validation) && (is_file($reference) || $externalpackage)) { if (!$externalpackage) { $mdcheck = md5_file($reference); } else { if ($externalpackage) { if ($udutudir = make_upload_directory("{$courseid}/{$CFG->moddata}/udutu")) { if ($tempdir = udutu_tempdir($udutudir)) { copy("{$reference}", $tempdir . '/' . basename($reference)); $mdcheck = md5_file($tempdir . '/' . basename($reference)); udutu_delete_files($tempdir); } } } } if ($udutu = get_record('udutu', 'id', $udutuid)) { if ($udutu->reference[0] == '#') { require_once $repositoryconfigfile; if ($CFG->repositoryactivate) { $oldreference = $CFG->repository . substr($udutu->reference, 1) . '/imsmanifest.xml'; } else { $oldreference = $udutu->reference; } } else { if (!udutu_external_link($udutu->reference)) { $oldreference = $CFG->dataroot . '/' . $courseid . '/' . $udutu->reference; } else { $oldreference = $udutu->reference; } } $validation->launch = $udutu->launch; if ($oldreference == $reference && $mdcheck != $udutu->md5hash || $oldreference != $reference) { // This is a new or a modified package $validation->launch = 0; } else { // Old package already validated if (strpos($udutu->version, 'AICC') !== false) { $validation->pkgtype = 'AICC'; } else { $validation->pkgtype = 'udutu'; } } } 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 $udutudir = ''; if ($udutudir = make_upload_directory("{$courseid}/{$CFG->moddata}/udutu")) { if ($tempdir = udutu_tempdir($udutudir)) { 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 = udutu_validate_manifest($tempdir . '/imsmanifest.xml'); $validation->pkgtype = 'udutu'; } else { $validation = udutu_validate_aicc($tempdir); $validation->pkgtype = 'AICC'; } } else { $validation = null; } } else { $validation = null; } break; case '.xml': if (basename($reference) == 'imsmanifest.xml') { if ($externalpackage) { if ($udutudir = make_upload_directory("{$courseid}/{$CFG->moddata}/udutu")) { if ($tempdir = udutu_tempdir($udutudir)) { copy("{$reference}", $tempdir . '/' . basename($reference)); if (is_file($tempdir . '/' . basename($reference))) { $validation = udutu_validate_manifest($tempdir . '/' . basename($reference)); } else { $validation = null; } } } } else { $validation = udutu_validate_manifest($CFG->dataroot . '/' . $COURSE->id . '/' . $reference); } $validation->pkgtype = 'udutu'; } else { $validation = null; } break; default: $validation = null; break; } if ($validation == null) { if (is_dir($tempdir)) { // Delete files and temporary directory udutu_delete_files($tempdir); } } else { if ($ext == '.xml' && !$externalpackage) { $validation->datadir = dirname($referencefield); } else { $validation->datadir = substr($tempdir, strlen($udutudir)); } $validation->launch = 0; } } } else { $validation = null; } return $validation; }