70 lines
2.1 KiB
PHP
70 lines
2.1 KiB
PHP
<?php
|
||
|
||
namespace App\Livewire\Ui\System;
|
||
|
||
use Illuminate\Validation\Rule;
|
||
use Livewire\Component;
|
||
|
||
class GeneralForm extends Component
|
||
{
|
||
public array $locales;
|
||
public array $timezones;
|
||
|
||
public string $instance_name = 'MailWolt'; // readonly Anzeige
|
||
public string $locale;
|
||
public string $timezone;
|
||
public int $session_timeout = 120; // Minuten
|
||
|
||
// Beispieldaten – später aus Config/DB füllen
|
||
|
||
public function mount(): void
|
||
{
|
||
$this->locales = config('system.locales', []);
|
||
$this->timezones = config('system.timezones', []);
|
||
|
||
// prefill from settings
|
||
$this->locale = \App\Models\Setting::get('system.locale', 'de');
|
||
$this->timezone = \App\Models\Setting::get('system.timezone', 'Europe/Berlin');
|
||
$this->session_timeout= (int)\App\Models\Setting::get('system.session_timeout', 120);
|
||
}
|
||
|
||
protected function rules(): array
|
||
{
|
||
return [
|
||
'locale' => ['required', Rule::in(collect($this->locales)->pluck('value')->all())],
|
||
'timezone' => ['required', Rule::in($this->timezones)],
|
||
'session_timeout' => ['required','integer','min:5','max:1440'],
|
||
];
|
||
}
|
||
|
||
public function save(): void
|
||
{
|
||
$this->validate();
|
||
|
||
\App\Models\Setting::setMany([
|
||
'system.locale' => $this->locale,
|
||
'system.timezone' => $this->timezone,
|
||
'system.session_timeout' => $this->session_timeout,
|
||
]);
|
||
|
||
// TODO: persist to settings storage (DB/Config)
|
||
// e.g. Settings::set('app.locale', $this->locale);
|
||
// Settings::set('app.timezone', $this->timezone);
|
||
// Settings::set('session.timeout', $this->session_timeout);
|
||
|
||
$this->dispatch('toast',
|
||
type: 'done',
|
||
badge: 'Einstellungen',
|
||
title: 'Gespeichert',
|
||
text: 'Die allgemeinen Einstellungen wurden erfolgreich gespeichert.',
|
||
duration: 6000,
|
||
);
|
||
// $this->dispatch('toast', body: 'Einstellungen gespeichert.');
|
||
}
|
||
|
||
public function render()
|
||
{
|
||
return view('livewire.ui.system.general-form');
|
||
}
|
||
}
|