Upload via GUI (28 Dateien)

This commit is contained in:
2026-10-21 16:55:37 +00:00
parent 4abd3453c9
commit 65b336373d
12 changed files with 315 additions and 3 deletions
+26
View File
@@ -2,6 +2,7 @@
declare(strict_types=1);
/** Verwaltung der Webseite: Anmelden, Pakete veröffentlichen, Versionen entfernen. */
require_once __DIR__ . '/inc/layout.php';
require_once __DIR__ . '/inc/push.php';
session_set_cookie_params(['lifetime' => 0, 'path' => '/', 'secure' => !empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off', 'httponly' => true, 'samesite' => 'Strict']);
session_name('plugin_site_admin');
@@ -71,6 +72,16 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if ($res['ok']) $message = "Veröffentlicht: {$res['slug']} {$res['version']} (" . ($res['signed'] ? 'signiert' : 'NICHT signiert, kein Signierschlüssel eingerichtet') . ').';
else $error = $res['error'];
}
} elseif (in_array($action, ['push_block', 'push_unblock', 'push_delete'], true)) {
$pid = (string) ($_POST['id'] ?? '');
if (preg_match('/^[a-f0-9]{24}$/', $pid)) {
$pp = push_db();
if ($action === 'push_delete') $pp->prepare('DELETE FROM push_installs WHERE id = ?')->execute([$pid]);
else $pp->prepare('UPDATE push_installs SET blocked = ? WHERE id = ?')->execute([$action === 'push_block' ? 1 : 0, $pid]);
$message = ['push_block' => 'Installation gesperrt.', 'push_unblock' => 'Installation entsperrt.', 'push_delete' => 'Installation gelöscht (sie meldet sich beim nächsten Senden von selbst neu an).'][$action];
} else {
$error = 'Ungültige Installation.';
}
} elseif ($action === 'delete') {
$message = site_delete_version((int) ($_POST['id'] ?? 0)) ? 'Version entfernt.' : null;
$error = $message ? null : 'Version nicht gefunden.';
@@ -116,6 +127,21 @@ site_header('Verwaltung');
<button type="submit">Veröffentlichen</button>
</form>
<h2>Push-Dienst (Android-App)</h2>
<?php $pushSa = push_service_account(); $pushRows = push_db()->query('SELECT * FROM push_installs ORDER BY COALESCE(last_used_at, created_at) DESC LIMIT 200')->fetchAll(); ?>
<p class="<?= $pushSa ? 'ok' : 'warn' ?>"><?= $pushSa ? '✓ Firebase-Dienstkonto eingebaut (Projekt ' . site_h($pushSa['project_id']) . ').' : 'Kein Firebase-Dienstkonto eingebaut: schluessel/firebase-dienstkonto.json fehlt beim Bauen, Push-Nachrichten sind nicht möglich.' ?></p>
<?php if (!$pushRows): ?><p class="muted">Noch keine DeskHub-Installation angemeldet.</p><?php else: ?>
<table class="admin">
<caption>Angemeldete DeskHub-Installationen (<?= count($pushRows) ?>)</caption>
<?php foreach ($pushRows as $p): ?>
<tr><td><?= site_h($p['name'] !== '' ? $p['name'] : $p['id']) ?></td><td><?= site_h(substr((string) $p['created_at'], 0, 16)) ?></td><td><?= $p['last_used_at'] ? 'zuletzt ' . site_h(substr((string) $p['last_used_at'], 0, 16)) : 'noch nie genutzt' ?></td><td><?= (int) $p['sent_total'] ?> gesendet</td>
<td><?= (int) $p['blocked'] === 1 ? '<span class="warn">gesperrt</span>' : '<span class="ok">aktiv</span>' ?></td>
<td><form method="post"><input type="hidden" name="action" value="<?= (int) $p['blocked'] === 1 ? 'push_unblock' : 'push_block' ?>"><input type="hidden" name="csrf" value="<?= site_h(admin_csrf()) ?>"><input type="hidden" name="id" value="<?= site_h($p['id']) ?>"><button type="submit" class="link"><?= (int) $p['blocked'] === 1 ? 'Entsperren' : 'Sperren' ?></button></form></td>
<td><form method="post" data-confirm="Installation wirklich löschen?"><input type="hidden" name="action" value="push_delete"><input type="hidden" name="csrf" value="<?= site_h(admin_csrf()) ?>"><input type="hidden" name="id" value="<?= site_h($p['id']) ?>"><button type="submit" class="link">Löschen</button></form></td></tr>
<?php endforeach; ?>
</table>
<?php endif; ?>
<h2>Veröffentlichte Pakete</h2>
<?php foreach (['plugin' => 'Plugins', 'theme' => 'Themes'] as $t => $label): $items = site_items($t); ?>
<h3><?= site_h($label) ?></h3>