]> BookStack Code Mirror - bookstack/blob - app/Http/Controllers/UserController.php
Got standard form-based registration working
[bookstack] / app / Http / Controllers / UserController.php
1 <?php
2
3 namespace Oxbow\Http\Controllers;
4
5 use Illuminate\Http\Request;
6
7 use Illuminate\Support\Facades\Hash;
8 use Oxbow\Http\Requests;
9 use Oxbow\Services\SocialAuthService;
10 use Oxbow\User;
11
12 class UserController extends Controller
13 {
14
15     protected $user;
16
17     /**
18      * UserController constructor.
19      * @param $user
20      */
21     public function __construct(User $user)
22     {
23         $this->user = $user;
24         parent::__construct();
25     }
26
27     /**
28      * Display a listing of the users.
29      *
30      * @return Response
31      */
32     public function index()
33     {
34         $users = $this->user->all();
35         return view('users/index', ['users' => $users]);
36     }
37
38     /**
39      * Show the form for creating a new user.
40      *
41      * @return Response
42      */
43     public function create()
44     {
45         $this->checkPermission('user-create');
46         return view('users/create');
47     }
48
49     /**
50      * Store a newly created user in storage.
51      *
52      * @param  Request $request
53      * @return Response
54      */
55     public function store(Request $request)
56     {
57         $this->checkPermission('user-create');
58         $this->validate($request, [
59             'name'             => 'required',
60             'email'            => 'required|email',
61             'password'         => 'required|min:5',
62             'password-confirm' => 'required|same:password',
63             'role'             => 'required|exists:roles,id'
64         ]);
65
66         $user = $this->user->fill($request->all());
67         $user->password = bcrypt($request->get('password'));
68         $user->save();
69
70         $user->attachRoleId($request->get('role'));
71         return redirect('/users');
72     }
73
74
75     /**
76      * Show the form for editing the specified user.
77      *
78      * @param  int              $id
79      * @param SocialAuthService $socialAuthService
80      * @return Response
81      */
82     public function edit($id, SocialAuthService $socialAuthService)
83     {
84         $this->checkPermissionOr('user-update', function () use ($id) {
85             return $this->currentUser->id == $id;
86         });
87
88         $user = $this->user->findOrFail($id);
89         $activeSocialDrivers = $socialAuthService->getActiveDrivers();
90         return view('users/edit', ['user' => $user, 'activeSocialDrivers' => $activeSocialDrivers]);
91     }
92
93     /**
94      * Update the specified user in storage.
95      *
96      * @param  Request $request
97      * @param  int     $id
98      * @return Response
99      */
100     public function update(Request $request, $id)
101     {
102         $this->checkPermissionOr('user-update', function () use ($id) {
103             return $this->currentUser->id == $id;
104         });
105         $this->validate($request, [
106             'name'             => 'required',
107             'email'            => 'required|email|unique:users,email,' . $id,
108             'password'         => 'min:5',
109             'password-confirm' => 'same:password',
110             'role'             => 'exists:roles,id'
111         ]);
112
113         $user = $this->user->findOrFail($id);
114         $user->fill($request->except('password'));
115
116         if ($this->currentUser->can('user-update') && $request->has('role')) {
117             $user->attachRoleId($request->get('role'));
118         }
119
120         if ($request->has('password') && $request->get('password') != '') {
121             $password = $request->get('password');
122             $user->password = bcrypt($password);
123         }
124         $user->save();
125         return redirect('/users');
126     }
127
128     /**
129      * Show the user delete page.
130      * @param $id
131      * @return \Illuminate\View\View
132      */
133     public function delete($id)
134     {
135         $this->checkPermissionOr('user-delete', function () use ($id) {
136             return $this->currentUser->id == $id;
137         });
138         $user = $this->user->findOrFail($id);
139         return view('users/delete', ['user' => $user]);
140     }
141
142     /**
143      * Remove the specified user from storage.
144      *
145      * @param  int $id
146      * @return Response
147      */
148     public function destroy($id)
149     {
150         $this->checkPermissionOr('user-delete', function () use ($id) {
151             return $this->currentUser->id == $id;
152         });
153         $user = $this->user->findOrFail($id);
154         // Delete social accounts
155         $user->socialAccounts()->delete();
156         $user->delete();
157         return redirect('/users');
158     }
159 }