Files
nexus/partials/landingpages/users/settings.php
Lars Gebhardt-Kusche 0f8f9567fe
All checks were successful
Deploy / deploy-staging (push) Successful in 6s
Deploy / deploy-production (push) Has been skipped
asdas
2026-05-11 01:57:23 +02:00

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; ?>