Пример #1
0
/**
* 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;
}
Пример #2
0
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;
}