Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 93
0.00% covered (danger)
0.00%
0 / 7
CRAP
0.00% covered (danger)
0.00%
0 / 1
Menus
0.00% covered (danger)
0.00%
0 / 93
0.00% covered (danger)
0.00%
0 / 7
756
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 list_menu
0.00% covered (danger)
0.00%
0 / 18
0.00% covered (danger)
0.00%
0 / 1
20
 get_user_menu
0.00% covered (danger)
0.00%
0 / 10
0.00% covered (danger)
0.00%
0 / 1
6
 menu
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 1
20
 recursive_sub_items
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 1
20
 update_user_menu
0.00% covered (danger)
0.00%
0 / 25
0.00% covered (danger)
0.00%
0 / 1
42
 add_user_menu
0.00% covered (danger)
0.00%
0 / 20
0.00% covered (danger)
0.00%
0 / 1
42
1<?php
2
3namespace App\Http\Controllers;
4
5use App\Models\TblMenusUsers;
6use App\Models\TblUsersPermissions;
7use Illuminate\Http\Request;
8use Illuminate\Support\Facades\Cache;
9use Illuminate\Support\Facades\DB;
10
11class Menus extends Controller
12{
13    private $menus = [];
14
15    public function __construct()
16    {
17        ini_set('memory_limit', -1);
18        set_time_limit(0);
19    }
20
21    public function list_menu($userId)
22    {
23
24        try {
25
26            $userId = intval($userId);
27
28            $query = 'SELECT 
29                    a.permission_id, 
30                    a.module, 
31                    a.name label, 
32                    a.link,
33                    a.icon,
34                    a.parent_id parentId, 
35                    b.default,
36                    CASE WHEN b.user_id IS NULL THEN NULL ELSE a.permission END permission 
37                FROM 
38                    tbl_permissions a 
39                    LEFT JOIN tbl_users_permissions b ON a.permission_id = b.permission_id 
40                    AND b.user_id = ?
41                WHERE 
42                    a.parent_id IS NULL
43                ';
44
45            $result = DB::select($query, [$userId]);
46
47            for ($i = 0; $i < count($result); $i++) {
48                $subItems = $this->recursive_sub_items($userId, $result[$i]->permission_id, false);
49
50                if (count($subItems) > 0) {
51                    $result[$i]->subItems = $subItems;
52                }
53            }
54
55            $this->menus = $result;
56
57            return response([
58                'message' => 'OK',
59                'memory_usage' => memory_get_usage(true),
60                'data' => $this->menus,
61            ]);
62
63        } catch (\Exception $e) {
64            /** @disregard P1014 */
65            $e->exceptionCode = 'LIST_MENU_EXCEPTION';
66            report($e);
67
68            return response(['message' => 'KO', 'error' => $e->getMessage()]);
69        }
70
71    }
72
73    public function get_user_menu($userId)
74    {
75
76        try {
77
78            $this->menu($userId);
79
80            return response([
81                'message' => 'OK',
82                'memory_usage' => memory_get_usage(true),
83                'data' => $this->menus,
84            ]);
85
86        } catch (\Exception $e) {
87            /** @disregard P1014 */
88            $e->exceptionCode = 'GET_USER_MENU_EXCEPTION';
89            report($e);
90
91            return response(['message' => 'KO', 'error' => $e->getMessage()]);
92        }
93
94    }
95
96    public function menu($userId = null)
97    {
98
99        $userIdVal = $userId !== null ? intval($userId) : null;
100
101        $query = 'SELECT 
102                    a.permission_id, 
103                    a.module, 
104                    a.name label, 
105                    a.link,
106                    a.icon,
107                    a.parent_id parentId, 
108                    b.default,
109                    CASE WHEN b.user_id IS NULL THEN NULL ELSE a.permission END permission 
110                FROM 
111                    tbl_permissions a 
112                    LEFT JOIN tbl_users_permissions b ON a.permission_id = b.permission_id 
113                    AND b.user_id = ?
114                WHERE 
115                    a.parent_id IS NULL
116                ';
117
118        $result = DB::select($query, [$userIdVal]);
119
120        for ($i = 0; $i < count($result); $i++) {
121            $subItems = $this->recursive_sub_items($userId, $result[$i]->permission_id, true);
122            if (count($subItems) > 0) {
123                $result[$i]->subItems = $subItems;
124            }
125        }
126
127        $this->menus = $result;
128    }
129
130    public function recursive_sub_items($userId, $permissionId, $isRecusive)
131    {
132
133        $query = 'SELECT 
134                    a.permission_id, 
135                    a.module, 
136                    a.name label, 
137                    a.link,
138                    a.icon,
139                    a.parent_id parentId, 
140                    b.default,
141                    CASE WHEN b.user_id IS NULL THEN NULL ELSE a.permission END permission 
142                FROM 
143                    tbl_permissions a 
144                    LEFT JOIN tbl_users_permissions b ON a.permission_id = b.permission_id 
145                    AND b.user_id = ?
146                WHERE 
147                    a.parent_id = ?
148                ORDER BY a.order ASC';
149
150        $result = DB::select($query, [intval($userId), intval($permissionId)]);
151
152        if ($isRecusive) {
153            for ($i = 0; $i < count($result); $i++) {
154                $subItems = $this->recursive_sub_items($userId, $result[$i]->permission_id, true);
155
156                if (count($subItems) > 0) {
157                    $result[$i]->subItems = $subItems;
158                }
159            }
160        }
161
162        return $result;
163    }
164
165    public function update_user_menu(Request $request, $userId)
166    {
167
168        try {
169
170            $data = $request->all();
171            $userId = intval($userId);
172
173            if (count($data) > 0) {
174                TblUsersPermissions::where('user_id', $userId)->update(['default' => 0]);
175                for ($i = 0; $i < count($data); $i++) {
176                    TblUsersPermissions::where('permission_id', $data[$i]['permission_id'])->where('user_id', $userId)->delete();
177                    if ($data[$i]['checked'] == true) {
178                        TblUsersPermissions::create(
179                            [
180                                'permission_id' => $data[$i]['permission_id'],
181                                'user_id' => $userId,
182                                'default' => ($data[$i]['default'] == true) ? 1 : 0,
183                            ]
184                        );
185                    }
186                }
187            }
188
189            $this->menu($userId);
190            Cache::forget('products');
191
192            return response([
193                'message' => 'OK',
194                'memory_usage' => memory_get_usage(true),
195                'data' => $this->menus,
196            ]);
197
198        } catch (\Exception $e) {
199            /** @disregard P1014 */
200            $e->exceptionCode = 'UPDATE_USER_MENU_EXCEPTION';
201            report($e);
202
203            return response(['message' => 'KO', 'error' => $e->getMessage()]);
204        }
205
206    }
207
208    public function add_user_menu(Request $request, $userId)
209    {
210
211        try {
212
213            $data = $request->all();
214            $userId = intval($userId);
215
216            if (count($data) > 0) {
217                for ($i = 0; $i < count($data); $i++) {
218                    if ($data[$i]['id'] == null && $data[$i]['user_id'] != null) {
219                        TblMenusUsers::create([
220                            'menu_id' => $data[$i]['menu_id'],
221                            'user_id' => $userId,
222                        ]
223                        );
224                    }
225                }
226            }
227
228            $this->menu($userId);
229
230            return response([
231                'message' => 'OK',
232                'memory_usage' => memory_get_usage(true),
233                'data' => $this->menus,
234            ]);
235
236        } catch (\Exception $e) {
237            /** @disregard P1014 */
238            $e->exceptionCode = 'ADD_USER_MENU_EXCEPTION';
239            report($e);
240
241            return response(['message' => 'KO', 'error' => $e->getMessage()]);
242        }
243
244    }
245}