X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/d3709de035bcb3fbf8440a79ac7a5df8331333a9..refs/pull/63/head:/app/Http/Controllers/UserController.php diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index b81be16f6..55ca5be19 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -2,6 +2,7 @@ namespace BookStack\Http\Controllers; +use BookStack\Activity; use Illuminate\Http\Request; use Illuminate\Http\Response; @@ -46,7 +47,8 @@ class UserController extends Controller public function create() { $this->checkPermission('user-create'); - return view('users/create'); + $authMethod = config('auth.method'); + return view('users/create', ['authMethod' => $authMethod]); } /** @@ -57,31 +59,43 @@ class UserController extends Controller public function store(Request $request) { $this->checkPermission('user-create'); - $this->validate($request, [ + $validationRules = [ 'name' => 'required', 'email' => 'required|email|unique:users,email', - 'password' => 'required|min:5', - 'password-confirm' => 'required|same:password', 'role' => 'required|exists:roles,id' - ]); + ]; + + $authMethod = config('auth.method'); + if ($authMethod === 'standard') { + $validationRules['password'] = 'required|min:5'; + $validationRules['password-confirm'] = 'required|same:password'; + } elseif ($authMethod === 'ldap') { + $validationRules['external_auth_id'] = 'required'; + } + $this->validate($request, $validationRules); + $user = $this->user->fill($request->all()); - $user->password = bcrypt($request->get('password')); - $user->save(); + if ($authMethod === 'standard') { + $user->password = bcrypt($request->get('password')); + } elseif ($authMethod === 'ldap') { + $user->external_auth_id = $request->get('external_auth_id'); + } + + $user->save(); $user->attachRoleId($request->get('role')); // Get avatar from gravatar and save - if (!env('DISABLE_EXTERNAL_SERVICES', false)) { + if (!config('services.disable_services')) { $avatar = \Images::saveUserGravatar($user); $user->avatar()->associate($avatar); $user->save(); } - return redirect('/users'); + return redirect('/settings/users'); } - /** * Show the form for editing the specified user. * @param int $id @@ -94,10 +108,12 @@ class UserController extends Controller return $this->currentUser->id == $id; }); + $authMethod = config('auth.method'); + $user = $this->user->findOrFail($id); $activeSocialDrivers = $socialAuthService->getActiveDrivers(); $this->setPageTitle('User Profile'); - return view('users/edit', ['user' => $user, 'activeSocialDrivers' => $activeSocialDrivers]); + return view('users/edit', ['user' => $user, 'activeSocialDrivers' => $activeSocialDrivers, 'authMethod' => $authMethod]); } /** @@ -114,8 +130,8 @@ class UserController extends Controller }); $this->validate($request, [ - 'name' => 'required', - 'email' => 'required|email|unique:users,email,' . $id, + 'name' => 'min:2', + 'email' => 'min:2|email|unique:users,email,' . $id, 'password' => 'min:5|required_with:password_confirm', 'password-confirm' => 'same:password|required_with:password', 'role' => 'exists:roles,id' @@ -124,19 +140,26 @@ class UserController extends Controller ]); $user = $this->user->findOrFail($id); - $user->fill($request->except('password')); + $user->fill($request->all()); + // Role updates if ($this->currentUser->can('user-update') && $request->has('role')) { $user->attachRoleId($request->get('role')); } + // Password updates if ($request->has('password') && $request->get('password') != '') { $password = $request->get('password'); $user->password = bcrypt($password); } + // External auth id updates + if ($this->currentUser->can('user-update') && $request->has('external_auth_id')) { + $user->external_auth_id = $request->get('external_auth_id'); + } + $user->save(); - return redirect('/users'); + return redirect('/settings/users'); } /** @@ -174,6 +197,25 @@ class UserController extends Controller } $this->userRepo->destroy($user); - return redirect('/users'); + return redirect('/settings/users'); + } + + /** + * Show the user profile page + * @param $id + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function showProfilePage($id) + { + $user = $this->userRepo->getById($id); + $userActivity = $this->userRepo->getActivity($user); + $recentlyCreated = $this->userRepo->getRecentlyCreated($user, 5, 0); + $assetCounts = $this->userRepo->getAssetCounts($user); + return view('users/profile', [ + 'user' => $user, + 'activity' => $userActivity, + 'recentlyCreated' => $recentlyCreated, + 'assetCounts' => $assetCounts + ]); } }