user(); $this->name = $user->name; $this->email = $user->email; } public function updateProfile() { $user = auth()->user(); // Il sorvegliante di gruppo entra con l'email fittizia creata col // gruppo (GruppiServizio::emailFittizia): dal profilo non la cambia. $emailFissa = $user->isSorvegliante(); $validated = $this->validate([ 'name' => ['required', 'string', 'max:255'], ] + ($emailFissa ? [] : [ 'email' => ['required', 'email', 'max:255', Rule::unique('users', 'email')->ignore($user->id)], ])); $user->fill(['name' => $validated['name']] + ($emailFissa ? [] : ['email' => $validated['email']])); $emailCambiata = $user->isDirty('email'); $user->save(); // L'indirizzo nuovo va confermato (User::booted lo segna da // confermare): finché non apre il link, l'account resta bloccato. // Il sorvegliante di gruppo non conferma l'email (User::hasVerifiedEmail). if ($emailCambiata && ! $user->isSorvegliante()) { $user->inviaConfermaEmail() ? session()->flash('success', "Profilo aggiornato. Conferma il nuovo indirizzo: ti abbiamo mandato un'email a {$user->email}.") : session()->flash('error', 'Profilo aggiornato, ma l\'email di conferma non è partita: richiedila qui sotto.'); return $this->redirect(route('verification.notice'), navigate: false); } session()->flash('profile_success', 'Profilo aggiornato con successo.'); // Ricarica la pagina così header e card mostrano subito i nuovi dati // (l'header vive nel layout, fuori dal componente). return $this->redirect(route('profile'), navigate: true); } 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. // // Si spegne anche `password_change_required`: oggi chi ha quel flag // viene dirottato dal middleware e questa pagina non la raggiunge // nemmeno, ma la condizione che il flag esprime — "questa password non // e' piu' un segreto" — la soddisfa qualunque cambio, non solo quello // fatto dalla schermata obbligatoria. Lasciarlo acceso qui // significherebbe che un domani, allentando il middleware, l'utente // resterebbe bloccato dopo aver gia' fatto quello che gli si chiedeva. auth()->user()->update([ 'password' => $this->password, 'password_change_required' => false, ]); $this->reset(['current_password', 'password', 'password_confirmation']); $this->avvisa('Password aggiornata con successo.'); } public function render() { // Il sorvegliante vede qui i dettagli del suo gruppo di servizio. $gruppo = auth()->user()->gruppoSorvegliato(); return view('livewire.profile', [ 'user' => auth()->user(), 'gruppo' => $gruppo, 'riepilogoGruppo' => $gruppo?->riepilogo(), ]); } }