diff --git a/HANDOFF.md b/HANDOFF.md index af85aaa..f36a1d6 100644 --- a/HANDOFF.md +++ b/HANDOFF.md @@ -167,10 +167,15 @@ quale. Tre ritocchi minori ma con qualche implicazione: - **Pagina profilo** (`Profile` → rotta `profilo`, nome `profile`) accessibile a - ogni utente loggato (nel gruppo `auth`, nessun permesso): mostra nome, email e - qualifica del solo utente corrente (sola lettura). Nell'header il blocco utente - è ora un link a questa pagina, con nome in evidenza ed `email · qualifica` - sotto. Non esiste un campo "username": l'email fa da identificativo. + ogni utente loggato (nel gruppo `auth`, nessun permesso): l'utente corrente può + modificare il proprio nome/cognome ed email (`updateProfile`) e cambiare la + password (`updatePassword`, con verifica della password attuale via regola + `current_password`; il cast `hashed` cifra al salvataggio). Nell'header il + blocco utente è un link a questa pagina, con nome in evidenza ed + `email · qualifica` sotto. Non esiste un campo "username" né "cognome" + separato: `name` è il nome completo (etichettato "Nome e cognome") e l'email fa + da identificativo. La qualifica (ruolo) non è modificabile dal profilo — resta + in gestione all'admin. - **Viewer PDF pubblico**: oltre a territorio/proclamatore/data mostra ora *giorni assegnato*, *consegna prevista* e *scadenza*. Sono attributi calcolati su `Assegnazione` (`data_consegna_presunta`, `giorni_alla_scadenza`) basati diff --git a/app/Livewire/Profile.php b/app/Livewire/Profile.php index 88a802e..d21f60b 100644 --- a/app/Livewire/Profile.php +++ b/app/Livewire/Profile.php @@ -2,10 +2,61 @@ namespace App\Livewire; +use Illuminate\Validation\Rule; use Livewire\Component; class Profile extends Component { + public string $name = ''; + public string $email = ''; + + public string $current_password = ''; + public string $password = ''; + public string $password_confirmation = ''; + + public function mount(): void + { + $user = auth()->user(); + $this->name = $user->name; + $this->email = $user->email; + } + + public function updateProfile(): void + { + $user = auth()->user(); + + $validated = $this->validate([ + 'name' => ['required', 'string', 'max:255'], + 'email' => ['required', 'email', 'max:255', Rule::unique('users', 'email')->ignore($user->id)], + ]); + + $user->update([ + 'name' => $validated['name'], + 'email' => $validated['email'], + ]); + + session()->flash('profile_success', 'Profilo aggiornato con successo.'); + } + + public function updatePassword(): void + { + // `current_password` verifica che la password attuale digitata combaci + // con quella dell'utente loggato prima di consentire il cambio. + $this->validate([ + 'current_password' => ['required', 'current_password'], + 'password' => ['required', 'string', 'min:8', 'confirmed'], + ]); + + // Il cast `hashed` sul modello User cifra il valore in fase di salvataggio. + auth()->user()->update([ + 'password' => $this->password, + ]); + + $this->reset(['current_password', 'password', 'password_confirmation']); + + session()->flash('password_success', 'Password aggiornata con successo.'); + } + public function render() { return view('livewire.profile', [ diff --git a/resources/views/livewire/profile.blade.php b/resources/views/livewire/profile.blade.php index fb4493c..db205e5 100644 --- a/resources/views/livewire/profile.blade.php +++ b/resources/views/livewire/profile.blade.php @@ -7,9 +7,9 @@

Il mio profilo

-
+
{{-- Intestazione: avatar iniziale + nome --}} -
+
{{ strtoupper(mb_substr($user->name, 0, 1)) }} @@ -25,20 +25,70 @@
- {{-- Dettagli --}} -
-
-
Nome
-
{{ $user->name }}
-
-
-
Email
-
{{ $user->email }}
-
-
-
Qualifica
-
{{ ucfirst($user->roles->first()?->name ?? 'utente') }}
-
-
+ {{-- Dati profilo --}} +
+

Dati profilo

+

Aggiorna nome e cognome ed email.

+ + @if(session('profile_success')) +
+ {{ session('profile_success') }} +
+ @endif + +
+
+ + + @error('name')

{{ $message }}

@enderror +
+
+ + + @error('email')

{{ $message }}

@enderror +
+
+ +
+
+
+ + {{-- Cambio password --}} +
+

Cambia password

+

Per motivi di sicurezza conferma la password attuale.

+ + @if(session('password_success')) +
+ {{ session('password_success') }} +
+ @endif + +
+
+ + + @error('current_password')

{{ $message }}

@enderror +
+
+
+ + + @error('password')

{{ $message }}

@enderror +
+
+ + +
+
+
+ +
+
+