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