Add profile avatar uploads
linter / quality (pull_request) Successful in 1m28s
tests / ci (8.4) (pull_request) Successful in 1m53s

This commit is contained in:
2026-06-24 13:55:27 +02:00
parent 732f49ee80
commit 598f8631f9
18 changed files with 547 additions and 24 deletions
@@ -3,6 +3,7 @@
namespace App\Http\Controllers\Admin;
use App\Actions\Permissions\PermissionService;
use App\Actions\Users\UpdateUserAvatar;
use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\StoreManagedUserRequest;
use App\Http\Requests\Admin\SyncUserGlobalPermissionsRequest;
@@ -19,6 +20,7 @@ class UserManagementController extends Controller
{
public function __construct(
private readonly PermissionService $permissionService,
private readonly UpdateUserAvatar $avatars,
) {}
public function index(): Response
@@ -46,13 +48,15 @@ class UserManagementController extends Controller
{
$validated = $request->validated();
User::query()->create([
$user = User::query()->create([
'name' => Arr::get($validated, 'name'),
'email' => Arr::get($validated, 'email'),
'password' => Arr::get($validated, 'password'),
'must_change_password_on_next_login' => (bool) Arr::get($validated, 'must_change_password_on_next_login', true),
]);
$this->avatars->generate($user);
return to_route('admin.users.index')
->with('status', 'User was created.');
}
@@ -2,18 +2,25 @@
namespace App\Http\Controllers\Settings;
use App\Actions\Users\UpdateUserAvatar;
use App\Http\Controllers\Controller;
use App\Http\Requests\Settings\ProfileDeleteRequest;
use App\Http\Requests\Settings\ProfileUpdateRequest;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Http\UploadedFile;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\Auth;
use Inertia\Inertia;
use Inertia\Response;
class ProfileController extends Controller
{
public function __construct(
private readonly UpdateUserAvatar $avatars,
) {}
/**
* Show the user's profile settings page.
*/
@@ -33,9 +40,14 @@ class ProfileController extends Controller
*/
public function update(ProfileUpdateRequest $request): RedirectResponse
{
$validated = $request->validated();
$user = $request->user();
$user->fill($request->validated());
$user->fill([
'name' => Arr::get($validated, 'name'),
'email' => Arr::get($validated, 'email'),
]);
$nameChanged = $user->isDirty('name');
if ($user->isDirty('email')) {
$user->email_verified_at = null;
@@ -43,6 +55,14 @@ class ProfileController extends Controller
$user->save();
$avatar = Arr::get($validated, 'avatar');
if ($avatar instanceof UploadedFile) {
$this->avatars->upload($user, $avatar);
} elseif (! $user->hasUploadedAvatar() && ($nameChanged || blank($user->avatar_path))) {
$this->avatars->generate($user);
}
return to_route('profile.edit');
}