X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/045710ea08ddee13e976d776410ac5b41981d58f..refs/pull/3784/head:/app/Http/Controllers/UserController.php diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index a635bbaa6..895481d02 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -3,6 +3,8 @@ namespace BookStack\Http\Controllers; use BookStack\Auth\Access\SocialAuthService; +use BookStack\Auth\Queries\AllUsersPaginatedAndSorted; +use BookStack\Auth\Role; use BookStack\Auth\User; use BookStack\Auth\UserRepo; use BookStack\Exceptions\ImageUploadException; @@ -16,8 +18,8 @@ use Illuminate\Validation\ValidationException; class UserController extends Controller { - protected $userRepo; - protected $imageRepo; + protected UserRepo $userRepo; + protected ImageRepo $imageRepo; /** * UserController constructor. @@ -39,12 +41,16 @@ class UserController extends Controller 'search' => $request->get('search', ''), 'sort' => $request->get('sort', 'name'), ]; - $users = $this->userRepo->getAllUsersPaginatedAndSorted(20, $listDetails); + + $users = (new AllUsersPaginatedAndSorted())->run(20, $listDetails); $this->setPageTitle(trans('settings.users')); $users->appends($listDetails); - return view('users.index', ['users' => $users, 'listDetails' => $listDetails]); + return view('users.index', [ + 'users' => $users, + 'listDetails' => $listDetails, + ]); } /** @@ -54,7 +60,7 @@ class UserController extends Controller { $this->checkPermission('users-manage'); $authMethod = config('auth.method'); - $roles = $this->userRepo->getAllRoles(); + $roles = Role::query()->orderBy('display_name', 'asc')->get(); $this->setPageTitle(trans('settings.users_add_new')); return view('users.create', ['authMethod' => $authMethod, 'roles' => $roles]); @@ -75,9 +81,9 @@ class UserController extends Controller $passwordRequired = ($authMethod === 'standard' && !$sendInvite); $validationRules = [ - 'name' => ['required'], + 'name' => ['required', 'max:100'], 'email' => ['required', 'email', 'unique:users,email'], - 'language' => ['string'], + 'language' => ['string', 'max:15', 'alpha_dash'], 'roles' => ['array'], 'roles.*' => ['integer'], 'password' => $passwordRequired ? ['required', Password::default()] : null, @@ -109,7 +115,7 @@ class UserController extends Controller $activeSocialDrivers = $socialAuthService->getActiveDrivers(); $mfaMethods = $user->mfaValues->groupBy('method'); $this->setPageTitle(trans('settings.user_profile')); - $roles = $this->userRepo->getAllRoles(); + $roles = Role::query()->orderBy('display_name', 'asc')->get(); return view('users.edit', [ 'user' => $user, @@ -133,11 +139,11 @@ class UserController extends Controller $this->checkPermissionOrCurrentUser('users-manage', $id); $validated = $this->validate($request, [ - 'name' => ['min:2'], + 'name' => ['min:2', 'max:100'], 'email' => ['min:2', 'email', 'unique:users,email,' . $id], 'password' => ['required_with:password_confirm', Password::default()], 'password-confirm' => ['same:password', 'required_with:password'], - 'language' => ['string'], + 'language' => ['string', 'max:15', 'alpha_dash'], 'roles' => ['array'], 'roles.*' => ['integer'], 'external_auth_id' => ['string'], @@ -283,6 +289,27 @@ class UserController extends Controller return response('', 204); } + public function updateCodeLanguageFavourite(Request $request) + { + $validated = $this->validate($request, [ + 'language' => ['required', 'string', 'max:20'], + 'active' => ['required', 'bool'], + ]); + + $currentFavoritesStr = setting()->getForCurrentUser('code-language-favourites', ''); + $currentFavorites = array_filter(explode(',', $currentFavoritesStr)); + + $isFav = in_array($validated['language'], $currentFavorites); + if (!$isFav && $validated['active']) { + $currentFavorites[] = $validated['language']; + } elseif ($isFav && !$validated['active']) { + $index = array_search($validated['language'], $currentFavorites); + array_splice($currentFavorites, $index, 1); + } + + setting()->putUser(user(), 'code-language-favourites', implode(',', $currentFavorites)); + } + /** * Changed the stored preference for a list sort order. */