80 lines
2.4 KiB
PHP
80 lines
2.4 KiB
PHP
<?php
|
|
|
|
namespace App\Livewire\Ui\System\Form;
|
|
|
|
use App\Models\Setting;
|
|
use Livewire\Component;
|
|
|
|
class GeneralForm extends Component
|
|
{
|
|
public string $locale = 'de';
|
|
public string $timezone = 'Europe/Berlin';
|
|
|
|
protected function rules(): array
|
|
{
|
|
return [
|
|
'locale' => 'required|string|max:10',
|
|
'timezone' => 'required|string|max:64',
|
|
];
|
|
}
|
|
|
|
public function mount(): void
|
|
{
|
|
// Defaults aus ENV nur für den allerersten Seed in Settings (Redis/DB)
|
|
$envLocale = env('APP_LOCALE') ?? env('APP_FALLBACK_LOCALE') ?? $this->locale;
|
|
$envTimezone = env('APP_TIMEZONE') ?? $this->timezone;
|
|
|
|
// Wenn (noch) nichts in Settings liegt, einmalig mit ENV-Werten befüllen
|
|
if (Setting::get('locale', null) === null) {
|
|
Setting::set('locale', $envLocale);
|
|
}
|
|
if (Setting::get('timezone', null) === null) {
|
|
Setting::set('timezone', $envTimezone);
|
|
}
|
|
|
|
// Ab hier ausschließlich aus Settings lesen (Redis → DB Fallback)
|
|
$this->locale = (string) Setting::get('locale', $envLocale);
|
|
$this->timezone = (string) Setting::get('timezone', $envTimezone);
|
|
|
|
// Sofort für die aktuelle Request anwenden
|
|
app()->setLocale($this->locale);
|
|
@date_default_timezone_set($this->timezone);
|
|
config([
|
|
'app.locale' => $this->locale,
|
|
'app.fallback_locale' => $this->locale,
|
|
'app.timezone' => $this->timezone,
|
|
]);
|
|
}
|
|
|
|
public function save(): void
|
|
{
|
|
$this->validate();
|
|
|
|
// Persistieren: DB → Redis (siehe Setting::set)
|
|
Setting::set('locale', $this->locale);
|
|
Setting::set('timezone', $this->timezone);
|
|
|
|
// Direkt in der laufenden Request aktivieren
|
|
app()->setLocale($this->locale);
|
|
@date_default_timezone_set($this->timezone);
|
|
config([
|
|
'app.locale' => $this->locale,
|
|
'app.fallback_locale' => $this->locale, // optional
|
|
'app.timezone' => $this->timezone,
|
|
]);
|
|
|
|
$this->dispatch('toast',
|
|
type: 'done',
|
|
badge: 'System',
|
|
title: 'Allgemein gespeichert',
|
|
text: 'Sprache und Zeitzone wurden übernommen.',
|
|
duration: 5000,
|
|
);
|
|
}
|
|
|
|
public function render()
|
|
{
|
|
return view('livewire.ui.system.form.general-form');
|
|
}
|
|
}
|