12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- <?php
-
- namespace App\Actions\Fortify;
-
- use App\Models\User;
- use Illuminate\Contracts\Auth\MustVerifyEmail;
- use Illuminate\Support\Facades\Validator;
- use Illuminate\Validation\Rule;
- use Laravel\Fortify\Contracts\UpdatesUserProfileInformation;
-
- class UpdateUserProfileInformation implements UpdatesUserProfileInformation
- {
- /**
- * Validate and update the given user's profile information.
- *
- * @param array<string, string> $input
- */
- public function update(User $user, array $input): void
- {
- Validator::make($input, [
- 'name' => ['required', 'string', 'max:255'],
- 'email' => ['required', 'email', 'max:255', Rule::unique('users')->ignore($user->id)],
- 'photo' => ['nullable', 'mimes:jpg,jpeg,png', 'max:1024'],
- ])->validateWithBag('updateProfileInformation');
-
- if (isset($input['photo'])) {
- $user->updateProfilePhoto($input['photo']);
- }
-
- if ($input['email'] !== $user->email &&
- $this->userMustVerifyEmail()) {
- $this->updateVerifiedUser($user, $input);
- } else {
- $user->forceFill([
- 'name' => $input['name'],
- 'email' => $input['email'],
- ])->save();
- }
- }
-
- /**
- * Determine if the user must verify their email address.
- */
- protected function userMustVerifyEmail(): bool
- {
- return in_array(MustVerifyEmail::class, class_implements(User::class));
- }
-
- /**
- * Update the given verified user's profile information.
- *
- * @param array<string, string> $input
- */
- protected function updateVerifiedUser(User $user, array $input): void
- {
- $user->forceFill([
- 'name' => $input['name'],
- 'email' => $input['email'],
- 'email_verified_at' => null,
- ])->save();
-
- $user->sendEmailVerificationNotification();
- }
- }
|