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