Primo commit

This commit is contained in:
Francesco Picone
2026-04-05 19:26:04 +02:00
commit 701f479b7f
135 changed files with 21445 additions and 0 deletions

View File

@@ -0,0 +1,121 @@
<?php
namespace App\Livewire\Setup;
use Livewire\Component;
use Livewire\WithFileUploads;
use App\Models\Setting;
use App\Models\User;
use Illuminate\Support\Facades\Hash;
class Wizard extends Component
{
use WithFileUploads;
public int $step = 1;
// Step 1
public string $congregazione_nome = '';
public $logo;
// Step 2
public int $giorni_giacenza_da_assegnare = 120;
public int $giorni_giacenza_prioritari = 180;
public int $giorni_per_smarrito = 120;
public int $home_limit_list = 10;
// Step 3 (admin creation if no users)
public string $admin_name = '';
public string $admin_email = '';
public string $admin_password = '';
public string $admin_password_confirmation = '';
public bool $needsAdmin = false;
public function mount()
{
if (Setting::isSetupComplete()) {
return redirect()->route('dashboard');
}
$this->needsAdmin = User::count() <= 1;
$setting = Setting::first();
if ($setting) {
$this->congregazione_nome = $setting->congregazione_nome ?? '';
$this->giorni_giacenza_da_assegnare = $setting->giorni_giacenza_da_assegnare;
$this->giorni_giacenza_prioritari = $setting->giorni_giacenza_prioritari;
$this->giorni_per_smarrito = $setting->giorni_per_smarrito;
$this->home_limit_list = $setting->home_limit_list;
}
}
public function nextStep()
{
if ($this->step === 1) {
$this->validate([
'congregazione_nome' => 'required|string|max:255',
'logo' => 'nullable|image|max:2048',
]);
}
if ($this->step === 2) {
$this->validate([
'giorni_giacenza_da_assegnare' => 'required|integer|min:1|max:999',
'giorni_giacenza_prioritari' => 'required|integer|min:1|max:999',
'giorni_per_smarrito' => 'required|integer|min:1|max:999',
'home_limit_list' => 'required|integer|min:1|max:100',
]);
}
$this->step++;
}
public function previousStep()
{
$this->step = max(1, $this->step - 1);
}
public function finish()
{
if ($this->needsAdmin) {
$this->validate([
'admin_name' => 'required|string|max:255',
'admin_email' => 'required|email|unique:users,email',
'admin_password' => 'required|min:8|confirmed',
]);
}
$setting = Setting::instance();
$setting->congregazione_nome = $this->congregazione_nome;
$setting->giorni_giacenza_da_assegnare = $this->giorni_giacenza_da_assegnare;
$setting->giorni_giacenza_prioritari = $this->giorni_giacenza_prioritari;
$setting->giorni_per_smarrito = $this->giorni_per_smarrito;
$setting->home_limit_list = $this->home_limit_list;
$setting->setup_completed = true;
if ($this->logo) {
$path = $this->logo->store('logos', 'public');
$setting->logo_path = $path;
}
$setting->save();
if ($this->needsAdmin && $this->admin_email) {
$admin = User::create([
'name' => $this->admin_name,
'email' => $this->admin_email,
'password' => Hash::make($this->admin_password),
]);
$admin->assignRole('amministratore');
}
session()->flash('success', 'Setup completato con successo!');
return redirect()->route('dashboard');
}
public function render()
{
return view('livewire.setup.wizard')
->layout('components.layouts.guest', ['title' => 'Setup iniziale']);
}
}