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