X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/06b500984250f75b98f38a8f25ac953cb45aeee4..refs/pull/3245/head:/app/Http/Controllers/UserController.php diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index 414bfefeb..3903682eb 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -12,7 +12,9 @@ use BookStack\Exceptions\UserUpdateException; use BookStack\Uploads\ImageRepo; use Exception; use Illuminate\Http\Request; +use Illuminate\Support\Facades\DB; use Illuminate\Support\Str; +use Illuminate\Validation\Rules\Password; use Illuminate\Validation\ValidationException; class UserController extends Controller @@ -60,6 +62,7 @@ class UserController extends Controller $this->checkPermission('users-manage'); $authMethod = config('auth.method'); $roles = $this->userRepo->getAllRoles(); + $this->setPageTitle(trans('settings.users_add_new')); return view('users.create', ['authMethod' => $authMethod, 'roles' => $roles]); } @@ -74,15 +77,16 @@ class UserController extends Controller { $this->checkPermission('users-manage'); $validationRules = [ - 'name' => ['required'], - 'email' => ['required', 'email', 'unique:users,email'], + 'name' => ['required'], + 'email' => ['required', 'email', 'unique:users,email'], + 'setting' => ['array'], ]; $authMethod = config('auth.method'); $sendInvite = ($request->get('send_invite', 'false') === 'true'); if ($authMethod === 'standard' && !$sendInvite) { - $validationRules['password'] = ['required', 'min:6']; + $validationRules['password'] = ['required', Password::default()]; $validationRules['password-confirm'] = ['required', 'same:password']; } elseif ($authMethod === 'ldap' || $authMethod === 'saml2' || $authMethod === 'openid') { $validationRules['external_auth_id'] = ['required']; @@ -98,20 +102,30 @@ class UserController extends Controller } $user->refreshSlug(); - $user->save(); - if ($sendInvite) { - $this->inviteService->sendInvitation($user); - } + DB::transaction(function () use ($user, $sendInvite, $request) { + $user->save(); - if ($request->filled('roles')) { - $roles = $request->get('roles'); - $this->userRepo->setUserRoles($user, $roles); - } + // Save user-specific settings + if ($request->filled('setting')) { + foreach ($request->get('setting') as $key => $value) { + setting()->putUser($user, $key, $value); + } + } + + if ($sendInvite) { + $this->inviteService->sendInvitation($user); + } + + if ($request->filled('roles')) { + $roles = $request->get('roles'); + $this->userRepo->setUserRoles($user, $roles); + } - $this->userRepo->downloadAndAssignUserAvatar($user); + $this->userRepo->downloadAndAssignUserAvatar($user); - $this->logActivity(ActivityType::USER_CREATE, $user); + $this->logActivity(ActivityType::USER_CREATE, $user); + }); return redirect('/settings/users'); } @@ -155,11 +169,11 @@ class UserController extends Controller $this->checkPermissionOrCurrentUser('users-manage', $id); $this->validate($request, [ - 'name' => 'min:2', + 'name' => ['min:2'], 'email' => ['min:2', 'email', 'unique:users,email,' . $id], - 'password' => ['min:6', 'required_with:password_confirm'], + 'password' => ['required_with:password_confirm', Password::default()], 'password-confirm' => ['same:password', 'required_with:password'], - 'setting' => 'array', + 'setting' => ['array'], 'profile_image' => array_merge(['nullable'], $this->getImageValidationRules()), ]); @@ -193,7 +207,7 @@ class UserController extends Controller $user->external_auth_id = $request->get('external_auth_id'); } - // Save an user-specific settings + // Save user-specific settings if ($request->filled('setting')) { foreach ($request->get('setting') as $key => $value) { setting()->putUser($user, $key, $value);