mailwolt/app/Livewire/Ui/System/SettingsForm.php

93 lines
3.4 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
namespace App\Livewire\Ui\System;
use App\Models\Setting;
use Livewire\Component;
class SettingsForm extends Component
{
// Tab-Steuerung (optional per Alpine, hier aber auch als Prop)
public string $tab = 'general';
// Allgemein
public string $instance_name = ''; // readonly
public string $locale = 'de';
public string $timezone = 'Europe/Berlin';
public ?int $session_timeout = 120; // Minuten
// Domains & SSL
public string $ui_domain = '';
public string $mail_domain = '';
public string $webmail_domain = '';
public bool $ssl_auto = true;
// Sicherheit
public bool $twofa_enabled = false;
public ?int $rate_limit = 5; // Versuche / Minute
public ?int $password_min = 10;
protected function rules(): array
{
return [
'locale' => 'required|string|max:10',
'timezone' => 'required|string|max:64',
'session_timeout' => 'nullable|integer|min:5|max:1440',
'ui_domain' => 'nullable|string|max:190',
'mail_domain' => 'nullable|string|max:190',
'webmail_domain' => 'nullable|string|max:190',
'ssl_auto' => 'boolean',
'twofa_enabled' => 'boolean',
'rate_limit' => 'nullable|integer|min:1|max:100',
'password_min' => 'nullable|integer|min:6|max:128',
];
}
public function mount(): void
{
// Anzeige-Name der Instanz lies was du hast (z.B. config('app.name'))
$this->instance_name = (string) (config('app.name') ?? 'MailWolt');
// Laden aus unserem einfachen Store
$this->locale = Setting::get('locale', $this->locale);
$this->timezone = Setting::get('timezone', $this->timezone);
$this->session_timeout = (int) Setting::get('session_timeout', $this->session_timeout);
$this->ui_domain = Setting::get('ui_domain', $this->ui_domain);
$this->mail_domain = Setting::get('mail_domain', $this->mail_domain);
$this->webmail_domain = Setting::get('webmail_domain', $this->webmail_domain);
$this->ssl_auto = (bool) Setting::get('ssl_auto', $this->ssl_auto);
$this->twofa_enabled = (bool) Setting::get('twofa_enabled', $this->twofa_enabled);
$this->rate_limit = (int) Setting::get('rate_limit', $this->rate_limit);
$this->password_min = (int) Setting::get('password_min', $this->password_min);
}
public function save(): void
{
$this->validate();
Setting::put('locale', $this->locale);
Setting::put('timezone', $this->timezone);
Setting::put('session_timeout', $this->session_timeout);
Setting::put('ui_domain', $this->ui_domain);
Setting::put('mail_domain', $this->mail_domain);
Setting::put('webmail_domain', $this->webmail_domain);
Setting::put('ssl_auto', $this->ssl_auto);
Setting::put('twofa_enabled', $this->twofa_enabled);
Setting::put('rate_limit', $this->rate_limit);
Setting::put('password_min', $this->password_min);
$this->dispatch('toast', type: 'success', message: 'Einstellungen gespeichert'); // optional
}
public function render()
{
return view('livewire.ui.system.settings-form');
}
}