]> BookStack Code Mirror - bookstack/blob - app/Http/Controllers/UserController.php
Made social accounts attachable
[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 = Hash::make($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             //dd('cat');
122             $password = $request->get('password');
123             $user->password = Hash::make($password);
124         }
125         $user->save();
126         return redirect('/users');
127     }
128
129     /**
130      * Show the user delete page.
131      * @param $id
132      * @return \Illuminate\View\View
133      */
134     public function delete($id)
135     {
136         $this->checkPermissionOr('user-delete', function () use ($id) {
137             return $this->currentUser->id == $id;
138         });
139         $user = $this->user->findOrFail($id);
140         return view('users/delete', ['user' => $user]);
141     }
142
143     /**
144      * Remove the specified user from storage.
145      *
146      * @param  int $id
147      * @return Response
148      */
149     public function destroy($id)
150     {
151         $this->checkPermissionOr('user-delete', function () use ($id) {
152             return $this->currentUser->id == $id;
153         });
154         $user = $this->user->findOrFail($id);
155         $user->delete();
156         return redirect('/users');
157     }
158 }