+ /**
+ * Update the specified user in storage.
+ *
+ * @throws UserUpdateException
+ * @throws ImageUploadException
+ * @throws ValidationException
+ */
+ public function update(Request $request, int $id)
+ {
+ $this->preventAccessInDemoMode();
+ $this->checkPermissionOrCurrentUser('users-manage', $id);
+
+ $validated = $this->validate($request, [
+ 'name' => ['min:2'],
+ 'email' => ['min:2', 'email', 'unique:users,email,' . $id],
+ 'password' => ['required_with:password_confirm', Password::default()],
+ 'password-confirm' => ['same:password', 'required_with:password'],
+ 'language' => ['string'],
+ 'roles' => ['array'],
+ 'roles.*' => ['integer'],
+ 'external_auth_id' => ['string'],
+ 'profile_image' => array_merge(['nullable'], $this->getImageValidationRules()),
+ ]);
+
+ $user = $this->userRepo->getById($id);
+ $this->userRepo->update($user, $validated, userCan('users-manage'));
+
+ // Save profile image if in request
+ if ($request->hasFile('profile_image')) {
+ $imageUpload = $request->file('profile_image');
+ $this->imageRepo->destroyImage($user->avatar);
+ $image = $this->imageRepo->saveNew($imageUpload, 'user', $user->id);
+ $user->image_id = $image->id;