163 lines
6.7 KiB
PHP
163 lines
6.7 KiB
PHP
<?php
|
|
$themes = [
|
|
'light' => 'Light',
|
|
'ocean' => 'Ocean',
|
|
'graphite' => 'Graphite',
|
|
];
|
|
|
|
require_auth();
|
|
|
|
$current = user_theme();
|
|
$timezoneOptions = modules()->timezones();
|
|
$nexusSettings = nexus_settings();
|
|
$isAdmin = auth_is_admin();
|
|
$notice = null;
|
|
|
|
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
|
$settingsSection = trim((string) ($_POST['settings_section'] ?? 'theme'));
|
|
if ($settingsSection === 'nexus' && $isAdmin) {
|
|
$displayTimezoneCustom = isset($_POST['display_timezone_custom']) ? '1' : '0';
|
|
$displayTimezone = trim((string) ($_POST['display_timezone'] ?? ''));
|
|
$cronTimezone = trim((string) ($_POST['cron_timezone'] ?? ''));
|
|
|
|
foreach (['displayTimezone' => $displayTimezone, 'cronTimezone' => $cronTimezone] as $key => $value) {
|
|
if ($value !== '') {
|
|
try {
|
|
new DateTimeZone($value);
|
|
} catch (\Throwable) {
|
|
$$key = '';
|
|
}
|
|
}
|
|
}
|
|
|
|
$nexusSettings['display_timezone_custom'] = $displayTimezoneCustom;
|
|
$nexusSettings['display_timezone'] = $displayTimezoneCustom === '1' ? $displayTimezone : '';
|
|
$nexusSettings['cron_timezone'] = $cronTimezone;
|
|
nexus_save_settings($nexusSettings);
|
|
$nexusSettings = nexus_settings();
|
|
$notice = 'Nexus-Einstellungen gespeichert.';
|
|
} else {
|
|
$theme = (string)($_POST['theme'] ?? 'light');
|
|
if (!isset($themes[$theme])) {
|
|
$theme = 'light';
|
|
}
|
|
set_user_theme($theme);
|
|
$current = $theme;
|
|
$notice = 'Theme gespeichert.';
|
|
}
|
|
}
|
|
|
|
$systemTimezone = nexus_system_timezone_name();
|
|
$effectiveDisplayTimezone = nexus_display_timezone_name();
|
|
$effectiveCronTimezone = nexus_cron_timezone_name();
|
|
$displayTimezoneCustom = !empty($nexusSettings['display_timezone_custom']);
|
|
$savedDisplayTimezone = trim((string) ($nexusSettings['display_timezone'] ?? ''));
|
|
$savedCronTimezone = trim((string) ($nexusSettings['cron_timezone'] ?? ''));
|
|
?>
|
|
<div class="module-shell"><div class="module-page-bg"><div class="module-page-stack">
|
|
<section class="section-box">
|
|
<h1>Nexus Einstellungen</h1>
|
|
<p class="muted">Persönliche Anzeige und systemweite Standardwerte.</p>
|
|
|
|
<?php if ($notice): ?>
|
|
<div class="section-box" style="margin-top:1rem; border-color:var(--accent-2);">
|
|
<?= e($notice) ?>
|
|
</div>
|
|
<?php endif; ?>
|
|
|
|
<div class="setup-form" style="margin-top:1rem;">
|
|
<section class="section-box setup-panel">
|
|
<div class="setup-panel__head">
|
|
<div>
|
|
<span class="pill">Benutzer</span>
|
|
<h2>Persönliches Design</h2>
|
|
</div>
|
|
</div>
|
|
<form method="post" class="setup-form">
|
|
<input type="hidden" name="settings_section" value="theme">
|
|
<div class="setup-grid">
|
|
<label class="setup-field muted">
|
|
<span>Farbpalette</span>
|
|
<select name="theme">
|
|
<?php foreach ($themes as $key => $label): ?>
|
|
<option value="<?= e($key) ?>" <?= $current === $key ? 'selected' : '' ?>>
|
|
<?= e($label) ?>
|
|
</option>
|
|
<?php endforeach; ?>
|
|
</select>
|
|
</label>
|
|
</div>
|
|
<div class="setup-actions setup-actions--footer">
|
|
<button class="cta-button" type="submit">Design speichern</button>
|
|
</div>
|
|
</form>
|
|
</section>
|
|
|
|
<?php if ($isAdmin): ?>
|
|
<section class="section-box setup-panel">
|
|
<div class="setup-panel__head">
|
|
<div>
|
|
<span class="pill">Nexus</span>
|
|
<h2>Standard-Zeitzonen</h2>
|
|
<p class="muted">Diese Werte werden von Modulen als Default übernommen, sofern dort kein eigener Override gesetzt ist.</p>
|
|
</div>
|
|
</div>
|
|
<form method="post" class="setup-form">
|
|
<input type="hidden" name="settings_section" value="nexus">
|
|
<datalist id="nexus-timezone-options">
|
|
<?php foreach ($timezoneOptions as $timezoneOption): ?>
|
|
<option value="<?= e((string) $timezoneOption['value']) ?>"><?= e((string) $timezoneOption['label']) ?></option>
|
|
<?php endforeach; ?>
|
|
</datalist>
|
|
<div class="setup-grid">
|
|
<div class="setup-field muted">
|
|
<span>System-Zeitzone</span>
|
|
<div><?= e($systemTimezone) ?></div>
|
|
<small class="muted">Diese Zeitzone wird genutzt, wenn keine globale Anzeige-Zeitzone gesetzt ist.</small>
|
|
</div>
|
|
<div class="setup-field muted">
|
|
<span>Anzeige-Zeitzone</span>
|
|
<label style="display:flex; align-items:center; gap:10px;">
|
|
<input type="checkbox" name="display_timezone_custom" value="1" <?= $displayTimezoneCustom ? 'checked' : '' ?> data-global-display-tz-toggle>
|
|
<span>Custom-Zeitzone verwenden</span>
|
|
</label>
|
|
<div class="setup-db-message setup-db-message--hint">Aktiv: <?= e($effectiveDisplayTimezone) ?></div>
|
|
</div>
|
|
</div>
|
|
<div class="setup-grid" data-global-display-tz-panel <?= $displayTimezoneCustom ? '' : 'hidden' ?>>
|
|
<label class="setup-field muted">
|
|
<span>Custom Anzeige-Zeitzone</span>
|
|
<input type="text" name="display_timezone" value="<?= e($savedDisplayTimezone !== '' ? $savedDisplayTimezone : $effectiveDisplayTimezone) ?>" list="nexus-timezone-options" autocomplete="off">
|
|
</label>
|
|
</div>
|
|
<div class="setup-grid">
|
|
<label class="setup-field muted">
|
|
<span>Standard-Zeitzone für Crons</span>
|
|
<input type="text" name="cron_timezone" value="<?= e($savedCronTimezone !== '' ? $savedCronTimezone : $effectiveCronTimezone) ?>" list="nexus-timezone-options" autocomplete="off">
|
|
<small class="muted">Wird in Modul-Crons als Standard verwendet. Einzelne Module oder Einträge können das übersteuern.</small>
|
|
</label>
|
|
</div>
|
|
<div class="setup-actions setup-actions--footer">
|
|
<button class="cta-button" type="submit">Nexus-Einstellungen speichern</button>
|
|
</div>
|
|
</form>
|
|
</section>
|
|
<?php endif; ?>
|
|
</div>
|
|
</section>
|
|
</div></div></div>
|
|
<?php if ($isAdmin): ?>
|
|
<script>
|
|
(() => {
|
|
const toggle = document.querySelector('[data-global-display-tz-toggle]');
|
|
const panel = document.querySelector('[data-global-display-tz-panel]');
|
|
if (!toggle || !panel) return;
|
|
const sync = () => {
|
|
panel.hidden = !toggle.checked;
|
|
};
|
|
toggle.addEventListener('change', sync);
|
|
sync();
|
|
})();
|
|
</script>
|
|
<?php endif; ?>
|