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