diff --git a/plugin-webseite/README.md b/plugin-webseite/README.md index 723274f0..c5f34fdf 100644 --- a/plugin-webseite/README.md +++ b/plugin-webseite/README.md @@ -7,6 +7,8 @@ Eigenständige Webseite, von der DeskHub-Installationen Plugins und Kundenportal - Verwaltung mit allen Paketen, Versionen, Signaturstatus und Download-Zähler (keine öffentliche Übersichtsseite: Die Startseite führt zur Verwaltung) - Katalog für DeskHub: `catalog.php?type=plugins` und `catalog.php?type=themes` - Verwaltung (`admin.php`): Pakete hochladen, Versionen entfernen, Vorschaubilder +- **Vorschaubild nur einmal:** Das Bild eines Plugins oder Themes bleibt bei jeder neuen Version erhalten, auch wenn du die alte Version vorher entfernst. Beim Eintrag in der Verwaltung lässt es sich ersetzen oder entfernen. Liegt im ZIP eine Datei `vorschau.png`, wird sie beim ersten Veröffentlichen automatisch verwendet. +- **WordPress-Plugin und Chrome-Erweiterung** (Tab „Apps“): ZIP hochladen, die Versionsnummer wird aus dem Plugin-Kopf (`Version:`) bzw. der `manifest.json` gelesen (eine eingetippte Nummer hat Vorrang). Abruf der neuesten Version: `app-release.php?platform=wordpress` oder `platform=chrome` (mit `&download=1` als Datei). - Prüft jedes Paket beim Hochladen (Dateitypen, Pfade, `plugin.json`, Berechtigungen) und **signiert es automatisch** mit eurem privaten Schlüssel - Veröffentlichte Versionen sind unveränderlich: Für Änderungen gibt es eine neue Version diff --git a/plugin-webseite/admin.php b/plugin-webseite/admin.php index 28e614d0..9e071585 100644 --- a/plugin-webseite/admin.php +++ b/plugin-webseite/admin.php @@ -84,7 +84,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && !$tooBig) { $error = 'App-Upload fehlgeschlagen (Code ' . ($upload['error'] ?? '?') . '). Prüft upload_max_filesize, post_max_size und die Servergrenze.'; } else { $res = site_publish_app((string) ($_POST['platform'] ?? ''), (string) $upload['tmp_name'], trim((string) ($_POST['version'] ?? '')), (string) ($_POST['notes'] ?? '')); - if ($res['ok']) $message = 'App-Version veröffentlicht.'; + if ($res['ok']) $message = 'App-Version ' . $res['version'] . ' veröffentlicht.'; else $error = $res['error']; } } elseif ($action === 'delete_app') { @@ -107,6 +107,15 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && !$tooBig) { } else { $error = 'Ungültige Installation.'; } + } elseif ($action === 'set_preview' || $action === 'remove_preview') { + $img = $_FILES['preview'] ?? []; + if ($action === 'set_preview' && ($img['error'] ?? UPLOAD_ERR_NO_FILE) !== UPLOAD_ERR_OK) { + $error = 'Bitte ein Bild auswählen (PNG, JPG oder WebP, höchstens 1 MB).'; + } else { + $res = site_set_preview((int) ($_POST['id'] ?? 0), $action === 'set_preview' ? (string) $img['tmp_name'] : null, $action === 'set_preview' ? (string) $img['name'] : null); + if ($res['ok']) $message = $action === 'set_preview' ? 'Vorschaubild geändert. Es bleibt bei weiteren Versionen erhalten.' : 'Vorschaubild entfernt.'; + else $error = $res['error']; + } } elseif ($action === 'feature' || $action === 'unfeature') { $message = site_set_featured((int) ($_POST['id'] ?? 0), $action === 'feature') ? ($action === 'feature' ? 'Als „Empfohlen“ markiert. DeskHub zeigt es nach der nächsten Katalog-Aktualisierung (spätestens in wenigen Minuten).' : 'Empfehlung entfernt.') : null; $error = $message ? null : 'Eintrag nicht gefunden.'; @@ -144,7 +153,7 @@ site_header($loggedIn ? $tabs[$tab][0] . ' · Verwaltung' : 'Anmelden', $tab, $l null, 'windows' => null, 'minecraft' => null]; + $latestApp = array_fill_keys(array_keys(site_app_platforms()), null); foreach ($appReleases as $r) if (array_key_exists($r['platform'], $latestApp) && $latestApp[$r['platform']] === null) $latestApp[$r['platform']] = $r; $pushSa = push_service_account(); $pushRows = push_db()->query('SELECT * FROM push_installs ORDER BY COALESCE(last_used_at, created_at) DESC LIMIT 200')->fetchAll(); @@ -200,7 +209,8 @@ site_header($loggedIn ? $tabs[$tab][0] . ' · Verwaltung' : 'Anmelden', $tab, $l - + +
Bei einem Update von Plugin oder Theme bleibt das vorhandene Bild erhalten: einfach weglassen. Ändern oder entfernen kannst du es unten bei dem Eintrag.
@@ -218,6 +228,12 @@ site_header($loggedIn ? $tabs[$tab][0] . ' · Verwaltung' : 'Anmelden', $tab, $l 🌐 = site_h((string) $__l['name']) ?> (= site_h((string) $__l['code']) ?>) = admin_btn(!empty($it['featured']) ? 'unfeature' : 'feature', ['id' => (int) $it['id']], !empty($it['featured']) ? 'Empfehlung entfernen' : 'Als Empfehlung markieren', 'ghost sm') ?> +| = site_h($v['version']) ?> | = site_h(substr($v['created_at'], 0, 10)) ?> | = (int) $v['downloads'] ?> Downloads | @@ -232,24 +248,24 @@ site_header($loggedIn ? $tabs[$tab][0] . ' · Verwaltung' : 'Anmelden', $tab, $l -