function Installer_fast_file_check($file, $installname, $includeDir)
{
    // Prüfen, ob das Ergebnis nicht bereits in einer Session steht
    // um Dauerverbindungen zu Redaxo.de zu vermeiden.
    if (isset($_SESSION['fastcheck'][$file])) {
        // Session exisitert - um overhead zu sparen, wird das Ergebnis der
        // letzten Session ausgegeben
        return $_SESSION['fastcheck'][$file];
    } else {
        // Session besteht noch nicht, also First-Run OK!
        // Pfad zum TEMP-Verzeichnis
        // TODO: Variablen ersetzen!
        $path = $includeDir . "/addons/installer/temp/" . md5($file) . ".zip";
        $file_output = '';
        try {
            $socket = rex_installer_socket::createByUrl($file);
            $socket->doGet();
            $res = fopen($path, 'w');
            $file_output = $socket->writeBodyTo($res);
        } catch (rex_installer_socket_exception $e) {
            // fehlermeldung:
            echo rex_warning($e->getMessage());
            return FALSE;
        }
        if (!$file_output) {
            echo rex_warning("Das AddOn konnte aufgrund von Serverproblemen nicht überprüft werden! Fast-Check Ergebnisse sind deswegen fehlerhaft (Alle fallen durch, obwohl das AddOn in Ordnung sein könnte). Korrete AddOns lassen sich normalerweise dennoch ohne Probleme installieren. Eine zweite Sicherheitsroutine wird versuchen die Sicherheit weiterhin zu gewährleisten. Für weitere Versuche klicke auf das Plus-Symbol");
            return FALSE;
        }
        // Zip Klasse laden
        $zip = new dUnzip2($path);
        // Inhalt vom ZIP-FILE laden. Liefert ARRAY zurück
        $zipList = $zip->getList();
        // Ruft die Sicherheitsfunktion auf, um zu prüfen, ob es sich
        // um ein richtiges AddOn handelt, wenn ja, true, ansonsten false
        if (Installer_check_if_file_is_addon($zipList, $installname)) {
            $zip->__destroy();
            // fclose && memory free
            @unlink($path);
            // Datei löschen
            // Um ständige Verbindungen zu Redaxo.de zu unterbinden,
            // wird das Ergebnis in eine Session geschrieben
            $_SESSION['fastcheck'][$file] = true;
            return true;
        } else {
            $zip->__destroy();
            // fclose && memory free
            @unlink($path);
            // Datei löschen
            // Um ständige Verbindungen zu Redaxo.de zu unterbinden,
            // wird das Ergebnis in eine Session geschrieben
            $_SESSION['fastcheck'][$file] = false;
            return false;
        }
    }
}
function Installer_getAddons($pathToApi)
{
    try {
        $socket = rex_installer_socket::createByUrl($pathToApi);
        $socket->doGet();
        $file_output = $socket->getBody();
    } catch (rex_installer_socket_exception $e) {
        // fehlermeldung:
        echo rex_warning($e->getMessage());
    }
    if ($file_output) {
        $addons = json_decode(utf8_encode($file_output));
        return $addons;
    } else {
        return FALSE;
    }
}
function Installer_download_file_from_redaxo($file, $path)
{
    $file_output = '';
    try {
        $socket = rex_installer_socket::createByUrl($file);
        $socket->doGet();
        $res = fopen($path, 'w');
        $file_output = $socket->writeBodyTo($res);
    } catch (rex_installer_socket_exception $e) {
        // fehlermeldung:
        echo rex_warning($e->getMessage());
    }
    // Prüfen, ob Daten empfangen wurden, wenn nicht, false, ansonsten true
    if ($file_output) {
        return true;
    } else {
        return false;
    }
}
$valid = false;
$path = false;
$file_output = '';
$remote_file = rex_request('remote_file', 'string');
//ini_set('display_errors', 0);
?>

<div id="zip_installer_output">
<?php 
if ($func) {
    if ($_FILES['zip_file']['size'] > 0 or $remote_file) {
        if ($_FILES['zip_file']['type'] == 'application/zip' or $_FILES['zip_file']['type'] == 'application/x-zip-compressed' or $remote_file) {
            if ($remote_file) {
                try {
                    $path = $REX['INCLUDE_PATH'] . "/addons/installer/" . time() . ".zip";
                    $socket = rex_installer_socket::createByUrl($remote_file);
                    $socket->doGet();
                    $res = @fopen($path, 'w');
                    $file_output = $socket->writeBodyTo($res);
                } catch (rex_installer_socket_exception $e) {
                    // fehlermeldung:
                    echo rex_warning($e->getMessage());
                    $file_output = false;
                    $valid = false;
                }
            } else {
                $file_output = false;
            }
            $connector = $file_output ? $path : $_FILES['zip_file']['tmp_name'];
            if ($connector) {
                // Zip Klasse laden