nexus basic

This commit is contained in:
2026-06-04 22:07:25 +02:00
parent aa7ec1d321
commit 3c1cc30fe9
11 changed files with 1222 additions and 197 deletions

View File

@@ -0,0 +1,142 @@
<?php
declare(strict_types=1);
require_admin();
$service = dashboards();
$ownerKey = 'system';
$notice = null;
$error = null;
$integrations = $service->listIntegrationsForOwner($ownerKey);
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$action = trim((string) ($_POST['action'] ?? ''));
try {
if ($action === 'create_search_engine') {
$service->createSearchEngine($ownerKey, [
'name' => trim((string) ($_POST['name'] ?? '')),
'short_code' => trim((string) ($_POST['short_code'] ?? '')),
'engine_type' => trim((string) ($_POST['engine_type'] ?? 'template')),
'template_url' => trim((string) ($_POST['template_url'] ?? '')),
'integration_id' => (int) ($_POST['integration_id'] ?? 0),
'visibility' => 'public',
'is_default' => isset($_POST['is_default']),
]);
$notice = 'Suchmaschine gespeichert.';
} elseif ($action === 'delete_search_engine') {
$service->deleteSearchEngine((int) ($_POST['engine_id'] ?? 0), $ownerKey);
$notice = 'Suchmaschine gelöscht.';
}
} catch (\Throwable $exception) {
$error = $exception->getMessage();
}
}
$engines = $service->listSearchEngines($ownerKey, true);
$GLOBALS['layout_header_base_title'] = 'Nexus Setup';
$GLOBALS['layout_header_title'] = 'Nexus Setup';
$GLOBALS['layout_header_context'] = 'Suchmaschinen';
$GLOBALS['layout_header_text'] = 'Globale Suchmaschinen für die spätere Suche im Nexus-System.';
?>
<div class="module-shell"><div class="module-page-bg"><div class="module-page-stack">
<header class="module-hero submenu-box">
<div class="module-hero-top module-hero-top--compact">
<nav class="module-tabs" aria-label="Nexus Setup Navigation">
<a class="module-button module-button--tab" href="/settings">Allgemein</a>
<a class="module-button module-button--tab" href="/settings/widgets">Widgets</a>
<a class="module-button module-button--tab" href="/integrations">Integrationen</a>
<a class="module-button module-button--tab-active" href="/settings/search-engines">Suchmaschinen</a>
<a class="module-button module-button--tab" href="/settings/apps">Apps</a>
<a class="module-button module-button--tab" href="/dashboards">Dashboards</a>
</nav>
<div class="module-hero-actions module-submenu-actions">
<a class="module-button module-button--secondary module-button--small" href="/">Nexus Übersicht</a>
</div>
</div>
</header>
<?php if ($error !== null): ?>
<section class="section-box"><?= e($error) ?></section>
<?php elseif ($notice !== null): ?>
<section class="section-box"><?= e($notice) ?></section>
<?php endif; ?>
<section class="section-box">
<h2>Neue Suchmaschine</h2>
<form method="post" class="setup-form">
<input type="hidden" name="action" value="create_search_engine">
<div class="setup-grid">
<label class="setup-field muted">
<span>Name</span>
<input type="text" name="name" required>
</label>
<label class="setup-field muted">
<span>Kurzcode</span>
<input type="text" name="short_code" placeholder="g" required>
</label>
</div>
<div class="setup-grid">
<label class="setup-field muted">
<span>Typ</span>
<select name="engine_type">
<option value="template">Such-Template</option>
<option value="integration">Integration</option>
</select>
</label>
<label class="setup-field muted">
<span>Such-URL</span>
<input type="url" name="template_url" placeholder="https://www.google.com/search?q=%s">
</label>
</div>
<div class="setup-grid">
<label class="setup-field muted">
<span>Integration optional</span>
<select name="integration_id">
<option value="0">Keine Integration</option>
<?php foreach ($integrations as $integration): ?>
<option value="<?= (int) ($integration['id'] ?? 0) ?>"><?= e((string) ($integration['name'] ?? 'Integration')) ?></option>
<?php endforeach; ?>
</select>
</label>
<label class="setup-field muted">
<input type="checkbox" name="is_default" value="1">
<span>Als globale Standard-Suche setzen</span>
</label>
</div>
<div class="setup-actions setup-actions--footer">
<button class="cta-button" type="submit">Suchmaschine speichern</button>
</div>
</form>
</section>
<div class="module-admin-grid">
<?php foreach ($engines as $engine): ?>
<article class="card-box module-admin-card">
<div class="module-admin-card__head">
<div class="module-admin-card__title">
<h2><?= e((string) ($engine['name'] ?? 'Suche')) ?></h2>
<p><?= e((string) (($engine['template_url'] ?? '') ?: 'Integration-basierte Suche.')) ?></p>
</div>
</div>
<div class="module-admin-meta">
<div class="module-admin-meta__item">
<span class="module-admin-meta__label">Kurzcode</span>
<strong class="module-admin-badge"><?= e((string) ($engine['short_code'] ?? '')) ?></strong>
</div>
<div class="module-admin-meta__item">
<span class="module-admin-meta__label">Standard</span>
<strong class="module-admin-badge<?= !empty($engine['is_default']) ? ' module-admin-badge--success' : '' ?>"><?= !empty($engine['is_default']) ? 'Ja' : 'Nein' ?></strong>
</div>
</div>
<div class="module-admin-actions">
<form method="post">
<input type="hidden" name="action" value="delete_search_engine">
<input type="hidden" name="engine_id" value="<?= (int) ($engine['id'] ?? 0) ?>">
<button class="module-button module-button--secondary module-button--small" type="submit">Löschen</button>
</form>
</div>
</article>
<?php endforeach; ?>
</div>
</div></div></div>