++ Primo Caricamento

This commit is contained in:
2026-03-30 19:15:13 +02:00
commit 663a68d59b
47 changed files with 3561 additions and 0 deletions

View File

@@ -0,0 +1,68 @@
<?php
namespace App\Http\Controllers;
// ─────────────────────────────────────────────────────────────────────────────
// SettingController — pannello impostazioni dinamiche
//
// Permette all'admin di modificare le impostazioni dell'applicazione
// senza toccare il codice o riavviare i container.
// ─────────────────────────────────────────────────────────────────────────────
use App\Services\SettingService;
use Illuminate\Http\Request;
class SettingController extends Controller
{
public function __construct(
private SettingService $settings
) {}
// ─── Mostra il pannello impostazioni ──────────────────────────────────
public function index()
{
// Tutte le impostazioni correnti dal servizio
$current = $this->settings->all();
// Configurazione per la UI (label, gruppi, tipi)
$config = config('settings');
return view('settings.index', compact('current', 'config'));
}
// ─── Salva le modifiche ────────────────────────────────────────────────
public function update(Request $request)
{
$types = config('settings.types', []);
$defaults = config('settings.defaults', []);
// Costruisce le regole di validazione dinamicamente
// in base ai tipi definiti in config/settings.php
$rules = [];
foreach ($defaults as $key => $default) {
$type = $types[$key] ?? 'string';
$rules[$key] = match ($type) {
'integer' => 'nullable|integer|min:1',
'boolean' => 'nullable|boolean',
'string' => 'nullable|string|max:255',
'text' => 'nullable|string',
default => 'nullable|string',
};
}
$validated = $request->validate($rules);
// I checkbox non inviati dal form hanno valore null → false per i boolean
foreach ($types as $key => $type) {
if ($type === 'boolean' && ! array_key_exists($key, $validated)) {
$validated[$key] = false;
}
}
$this->settings->setMany($validated);
return redirect()
->route('settings.index')
->with('success', 'Impostazioni salvate con successo. La cache è stata aggiornata.');
}
}