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