コード例 #1
0
ファイル: lib.php プロジェクト: nagyistoce/moodle-Teach-Pilot
/**
* 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 $udutu Form data
* @return int
*/
function udutu_update_instance($udutu)
{
    global $CFG;
    require_once 'locallib.php';
    if (($packagedata = udutu_check_package($udutu)) != null) {
        $udutu->pkgtype = $packagedata->pkgtype;
        if ($packagedata->launch == 0) {
            $udutu->launch = $packagedata->launch;
            $udutu->datadir = $packagedata->datadir;
            $udutu->parse = 1;
            if (!udutu_external_link($udutu->reference)) {
                $udutu->md5hash = md5_file($CFG->dataroot . '/' . $udutu->course . '/' . $udutu->reference);
            } else {
                $udutu->dir = $CFG->dataroot . '/' . $udutu->course . '/moddata/udutu';
                $udutu->md5hash = md5_file($udutu->dir . $udutu->datadir . '/' . basename($udutu->reference));
            }
        } else {
            $udutu->parse = 0;
        }
    }
    $udutu->timemodified = time();
    $udutu->id = $udutu->instance;
    $udutu = udutu_option2text($udutu);
    $udutu->width = str_replace('%', '', $udutu->width);
    $udutu->height = str_replace('%', '', $udutu->height);
    if (!isset($udutu->whatgrade)) {
        $udutu->whatgrade = 0;
    }
    $udutu->grademethod = $udutu->whatgrade * 10 + $udutu->grademethod;
    // Check if udutu manifest needs to be reparsed
    if ($udutu->parse == 1) {
        $udutu->dir = $CFG->dataroot . '/' . $udutu->course . '/moddata/udutu';
        if (is_dir($udutu->dir . '/' . $udutu->id)) {
            udutu_delete_files($udutu->dir . '/' . $udutu->id);
        }
        if (isset($udutu->datadir) && $udutu->datadir != $udutu->id && (udutu_external_link($udutu->reference) || basename($udutu->reference) != 'imsmanifest.xml' && $udutu->reference[0] != '#')) {
            rename($udutu->dir . $udutu->datadir, $udutu->dir . '/' . $udutu->id);
        }
        $udutu->launch = udutu_parse($udutu);
    } else {
        $oldudutu = get_record('udutu', 'id', $udutu->id);
        $udutu->reference = $oldudutu->reference;
        // This fix a problem with Firefox when the teacher choose Cancel on overwrite question
    }
    return update_record('udutu', $udutu);
}
コード例 #2
0
    if (isset($sco->parameters) && !empty($sco->parameters)) {
        $launcher = $sco->launch . $connector . $sco->parameters;
    } else {
        $launcher = $sco->launch;
    }
}
if (udutu_external_link($sco->launch)) {
    // Remote learning activity
    $result = $launcher;
} else {
    if ($udutu->reference[0] == '#') {
        // Repository
        require_once $repositoryconfigfile;
        $result = $CFG->repositorywebroot . substr($udutu->reference, 1) . '/' . $sco->launch;
    } else {
        if (basename($udutu->reference) == 'imsmanifest.xml' && udutu_external_link($udutu->reference)) {
            // Remote manifest
            $result = dirname($udutu->reference) . '/' . $launcher;
        } else {
            // Moodle internal package/manifest or remote (auto-imported) package
            if (basename($udutu->reference) == 'imsmanifest.xml') {
                $basedir = dirname($udutu->reference);
            } else {
                $basedir = $CFG->moddata . '/udutu/' . $udutu->id;
            }
            if ($CFG->slasharguments) {
                $result = $CFG->wwwroot . '/file.php/' . $udutu->course . '/' . $basedir . '/' . $launcher;
            } else {
                $result = $CFG->wwwroot . '/file.php?file=/' . $udutu->course . '/' . $basedir . '/' . $launcher;
            }
        }
コード例 #3
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;
}