Ejemplo n.º 1
0
function send_content_ready($token, $username, $format, $importdata, $fetchnow = false)
{
    global $REMOTEWWWROOT;
    require_once get_config('docroot') . 'import/lib.php';
    list($user, $authinstance) = find_remote_user($username, $REMOTEWWWROOT);
    if (!$user) {
        throw new ImportException(null, "Could not find user {$username} for {$REMOTEWWWROOT}");
    }
    // go verify the token
    if (!($queue = get_record('import_queue', 'token', $token, 'host', $REMOTEWWWROOT))) {
        throw new ImportException(null, "Could not find queue record with given token for username {$username} for {$REMOTEWWWROOT}");
    }
    if (strtotime($queue->expirytime) < time()) {
        throw new ImportException(null, "Queue record has expired");
    }
    $class = null;
    try {
        $class = PluginImport::class_from_format($format);
    } catch (Exception $e) {
        throw new ImportException(null, "Invalid format {$format}");
    }
    $queue->format = $format;
    if ($class == 'PluginImportLeap') {
        // don't import persondata over mnet
        // because it will just silently overwrite stuff
        // which is not really desirable.
        $queue->loglevel = get_config('leapovermnetloglevel');
        $importdata['skippersondata'] = true;
    }
    $queue->data = serialize($importdata);
    update_record('import_queue', $queue);
    $tr = new MnetImporterTransport($queue);
    try {
        $tr->validate_import_data();
    } catch (Exception $e) {
        throw new ImportException(null, 'Invalid importdata: ' . $e->getMessage());
    }
    if (!array_key_exists('totalsize', $importdata)) {
        throw new ImportException(null, 'Invalid importdata: missing totalsize');
    }
    if (!$user->quota_allowed($importdata['totalsize'])) {
        $e = new ImportException(null, 'Exceeded user quota');
        $e->set_log_off();
        throw $e;
    }
    $result = new StdClass();
    if ($fetchnow && PluginImport::import_immediately_allowed()) {
        // either immediately spawn a curl request to go fetch the file
        $importer = PluginImport::create_importer($queue->id, $tr, $queue);
        $importer->prepare();
        try {
            $importer->validate_transported_data($tr);
        } catch (Exception $e) {
            throw new ImportException(null, 'Invalid importdata: ' . $e->getMessage());
        }
        $importer->process();
        $importer->cleanup();
        delete_records('import_queue', 'id', $queue->id);
        $result->status = true;
        $result->type = 'complete';
        $returndata = $importer->get_return_data();
        $result->querystring = '?';
        foreach ($importer->get_return_data() as $k => $v) {
            $result->querystring .= $k . '=' . $v . '&';
        }
        $importer->get('importertransport')->cleanup();
    } else {
        // or set ready to 1 for the next cronjob to go fetch it.
        $result->status = set_field('import_queue', 'ready', 1, 'id', $queue->id);
        $result->type = 'queued';
    }
    return $result;
}