PaymentSettingsController::readConfigs()   B
last analyzed

Complexity

Conditions 11
Paths 44

Size

Total Lines 39
Code Lines 25

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 25
dl 0
loc 39
rs 7.3166
c 0
b 0
f 0
cc 11
nc 44
nop 0

How to fix   Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
namespace App\Http\Controllers\Common;
4
5
use App\Http\Controllers\Controller;
6
use App\Model\Plugin;
7
use Illuminate\Http\Request;
8
use Illuminate\Support\Collection;
9
10
class PaymentSettingsController extends Controller
11
{
12
    public function getPlugin()
13
    {
14
        $plugins = $this->fetchConfig();
15
16
        return \DataTables::of(new Collection($plugins))
17
                        // ->searchColumns('name')
18
                        ->addColumn('name', function ($model) {
19
                            return ucfirst($model['name']);
20
                        })
21
                        ->addColumn('description', function ($model) {
22
                            return $model['description'];
23
                        })
24
                        ->addColumn('author', function ($model) {
25
                            return ucfirst($model['author']);
26
                        })
27
                        ->addColumn('website', function ($model) {
28
                            return '<a href='.$model['website'].' target=_blank>'.$model['website'].'</a>';
29
                        })
30
                        ->addColumn('version', function ($model) {
31
                            return $model['version'];
32
                        })
33
                        ->addColumn('action', function ($model) {
34
                            if (array_has($model, 'path')) {
35
                                if ($model['status'] == 0) {
36
                                    $activate = '<form method="post" action='.url('plugin/status/'.$model['name']).'>'.'<input type="hidden" name="_token" value='.\Session::token().'>'.'
37
                                    <button type="submit" class="btn btn-secondary btn-sm btn-xs"'.tooltip('Activate').'<i class="fa fa-tasks" style="color:white;"></i></button></form>';
38
                                    $settings = ' ';
39
                                } else {
40
                                    $settings = '<a href='.url($model['settings']).' class="btn btn-secondary btn-sm btn-xs"'.tooltip('Settings').'<i class="nav-icon fa fa-fw fa-cogs" style="color:white;"></i></a>';
41
                                    $activate = '<form method="post" action='.url('plugin/status/'.$model['name']).'>'.'<input type="hidden" name="_token" value='.\Session::token().'>'.'
42
                                    <button type="submit" class="btn btn-secondary btn-sm btn-xs"'.tooltip('Deactivate').'<i class="fa fa-tasks" style="color:white;"></i></button></form>';
43
                                }
44
45
                                $delete = '<a href=  id=delete'.$model['name'].' class="btn btn-secondary btn-sm" data-toggle=modal data-target=#del'.$model['name']."><span style='color:white'><i class='fa fa-trash' style='color:white;'></i></span></a>"
46
                                        ."<div class='modal fade' id=del".$model['name'].">
47
                                            <div class='modal-dialog'>
48
                                                <div class=modal-content>  
49
                                                    <div class=modal-header>
50
                                                        <h4 class=modal-title>Delete</h4>
51
                                                    </div>
52
                                                    <div class=modal-body>
53
                                                       <p>Are you Sure ?</p>
54
55
                                                        <div class=modal-footer justify-content-between>
56
                                                            <button type=button class='btn btn-default pull-left' data-dismiss=modal id=dismis>".\Lang::get('lang.close').'</button>
57
                                                            <form method="delete" action='.url('plugin/delete/'.$model['name']).'>'.'<input type="hidden" name="_token" value='.\Session::token().'>'.'
58
                                    <button type="submit" class="btn btn-danger">Delete</button></form>
59
                                                            
60
61
                                                        </div>
62
63
64
                                                    </div>
65
                                                </div>
66
                                            </div>
67
                                        </div>';
68
                                $action = $settings.$activate;
69
                            } else {
70
                                $action = '';
71
                            }
72
73
                            return $action;
74
                        })
75
                      ->rawColumns(['name', 'description', 'author', 'website', 'version', 'action'])
76
                            ->make(true);
77
    }
78
79
    public function fetchConfig()
80
    {
81
        $configs = $this->readConfigs();
82
        //dd($configs);
83
        $plugs = new Plugin();
84
        $fields = [];
85
        $attributes = [];
86
        if ($configs != 'null') {
87
            foreach ($configs as $key => $config) {
88
                $fields[$key] = include $config;
89
            }
90
        }
91
        if (count($fields) > 0) {
92
            foreach ($fields as $key => $field) {
93
                $plug = $plugs->where('name', $field['name'])->select('path', 'status')->orderBy('name')->get()->toArray();
94
                if ($plug) {
95
                    foreach ($plug as $i => $value) {
96
                        $attributes[$key]['path'] = $plug[$i]['path'];
97
                        $attributes[$key]['status'] = $plug[$i]['status'];
98
                    }
99
                } else {
100
                    $attributes[$key]['path'] = $field['name'];
101
                    $attributes[$key]['status'] = 0;
102
                }
103
                $attributes[$key]['name'] = $field['name'];
104
                $attributes[$key]['settings'] = $field['settings'];
105
                $attributes[$key]['description'] = $field['description'];
106
                $attributes[$key]['website'] = $field['website'];
107
                $attributes[$key]['version'] = $field['version'];
108
                $attributes[$key]['author'] = $field['author'];
109
            }
110
        }
111
112
        return $attributes;
113
    }
114
115
    public function readConfigs()
116
    {
117
        $dir = app_path().DIRECTORY_SEPARATOR.'Plugins'.DIRECTORY_SEPARATOR;
118
        $directories = scandir($dir);
119
        $files = [];
120
        foreach ($directories as $key => $file) {
121
            if ($file === '.' or $file === '..') {
122
                continue;
123
            }
124
125
            if (is_dir($dir.DIRECTORY_SEPARATOR.$file)) {
126
                $files[$key] = $file;
127
            }
128
        }
129
        //dd($files);
130
        $config = [];
131
        $plugins = [];
132
        if (count($files) > 0) {
133
            foreach ($files as $key => $file) {
134
                $plugin = $dir.$file;
135
                $plugins[$key] = array_diff(scandir($plugin), ['.', '..', 'ServiceProvider.php']);
136
                $plugins[$key]['file'] = $plugin;
137
            }
138
            foreach ($plugins as $plugin) {
139
                $dir = $plugin['file'];
140
                //opendir($dir);
141
                if ($dh = opendir($dir)) {
142
                    while (($file = readdir($dh)) !== false) {
143
                        if ($file == 'config.php') {
144
                            $config[] = $dir.DIRECTORY_SEPARATOR.$file;
145
                        }
146
                    }
147
                    closedir($dh);
148
                }
149
            }
150
151
            return $config;
152
        } else {
153
            return 'null';
154
        }
155
    }
156
157
    public function statusPlugin($slug)
158
    {
159
        $plugs = new Plugin();
160
        $plug = $plugs->where('name', $slug)->first();
161
        if (! $plug) {
162
            $app = base_path().DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'app.php';
163
            $str = "\n'App\\Plugins\\$slug"."\\ServiceProvider',";
164
            $line_i_am_looking_for = 102;
165
            $lines = file($app, FILE_IGNORE_NEW_LINES);
166
            $lines[$line_i_am_looking_for] = $str;
167
            file_put_contents($app, implode("\n", $lines));
168
            $plugs->create(['name' => $slug, 'path' => $slug, 'status' => 1]);
169
170
            return redirect()->back()->with('success', 'Status has changed');
171
        }
172
        $status = $plug->status;
173
        if ($status == 0) {
174
            $plug->status = 1;
175
176
            $app = base_path().DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'app.php';
177
            $str = "\n'App\\Plugins\\$slug"."\\ServiceProvider',";
178
            $line_i_am_looking_for = 102;
179
            $lines = file($app, FILE_IGNORE_NEW_LINES);
180
            $lines[$line_i_am_looking_for] = $str;
181
            file_put_contents($app, implode("\n", $lines));
182
        }
183
        if ($status == 1) {
184
            $plug->status = 0;
185
            /*
186
             * remove service provider from app.php
187
             */
188
            $str = "\n'App\\Plugins\\$slug"."\\ServiceProvider',";
189
            $path_to_file = base_path().DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'app.php';
190
191
            $file_contents = file_get_contents($path_to_file);
192
            $file_contents = str_replace($str, '//', $file_contents);
193
            file_put_contents($path_to_file, $file_contents);
194
        }
195
        $plug->save();
196
197
        return redirect()->back()->with('success', 'Status has changed');
198
    }
199
200
    public function postPlugins(Request $request)
201
    {
202
        $v = $this->validate($request, ['plugin' => 'required|mimes:application/zip,zip,Zip']);
203
        $plug = new Plugin();
204
        $file = $request->file('plugin');
205
        //dd($file);
206
        $destination = app_path().DIRECTORY_SEPARATOR.'Plugins';
207
        $zipfile = $file->getRealPath();
208
        /*
209
         * get the file name and remove .zip
210
         */
211
        $filename2 = $file->getClientOriginalName();
212
        $filename2 = str_replace('.zip', '', $filename2);
213
        $filename1 = ucfirst($file->getClientOriginalName());
214
        $filename = str_replace('.zip', '', $filename1);
215
        mkdir($destination.DIRECTORY_SEPARATOR.$filename);
216
        /*
217
         * extract the zip file using zipper
218
         */
219
        \Zipper::make($zipfile)->folder($filename2)->extractTo($destination.DIRECTORY_SEPARATOR.$filename);
220
221
        $file = app_path().DIRECTORY_SEPARATOR.'Plugins'.DIRECTORY_SEPARATOR.$filename; // Plugin file path
222
223
        if (file_exists($file)) {
224
            $seviceporvider = $file.DIRECTORY_SEPARATOR.'ServiceProvider.php';
225
            $config = $file.DIRECTORY_SEPARATOR.'config.php';
226
            if (file_exists($seviceporvider) && file_exists($config)) {
227
                /*
228
                 * move to faveo config
229
                 */
230
                $faveoconfig = config_path().DIRECTORY_SEPARATOR.'plugins'.DIRECTORY_SEPARATOR.$filename.'.php';
231
                if ($faveoconfig) {
232
                    //copy($config, $faveoconfig);
233
                    /*
234
                     * write provider list in app.php line 128
235
                     */
236
                    $app = base_path().DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'app.php';
237
                    $str = "\n\n\t\t\t'App\\Plugins\\$filename"."\\ServiceProvider',";
238
                    $line_i_am_looking_for = 102;
239
                    $lines = file($app, FILE_IGNORE_NEW_LINES);
240
                    $lines[$line_i_am_looking_for] = $str;
241
                    file_put_contents($app, implode("\n", $lines));
242
                    $plug->create(['name' => $filename, 'path' => $filename, 'status' => 1]);
243
244
                    return redirect()->back()->with('success', 'Installed SuccessFully');
245
                } else {
246
                    /*
247
                     * delete if the plugin hasn't config.php and ServiceProvider.php
248
                     */
249
                    $this->deleteDirectory($file);
250
251
                    return redirect()->back()->with('fails', 'Their is no '.$file);
252
                }
253
            } else {
254
                /*
255
                 * delete if the plugin hasn't config.php and ServiceProvider.php
256
                 */
257
                $this->deleteDirectory($file);
258
259
                return redirect()->back()->with('fails', 'Their is no <b>config.php or ServiceProvider.php</b>  '.$file);
260
            }
261
        } else {
262
            /*
263
             * delete if the plugin Name is not equal to the folder name
264
             */
265
            $this->deleteDirectory($file);
266
267
            return redirect()->back()->with('fails', '<b>Plugin File Path is not exist</b>  '.$file);
268
        }
269
    }
270
271
    /**
272
     * Delete the directory.
273
     *
274
     * @param type $dir
275
     *
276
     * @return bool
277
     */
278
    public function deleteDirectory($dir)
279
    {
280
        if (! file_exists($dir)) {
281
            return true;
282
        }
283
        if (! is_dir($dir)) {
284
            return unlink($dir);
285
        }
286
        foreach (scandir($dir) as $item) {
287
            if ($item == '.' || $item == '..') {
288
                continue;
289
            }
290
            chmod($dir.DIRECTORY_SEPARATOR.$item, 0777);
291
            if (! $this->deleteDirectory($dir.DIRECTORY_SEPARATOR.$item)) {
292
                return false;
293
            }
294
        }
295
        chmod($dir, 0777);
296
297
        return rmdir($dir);
298
    }
299
300
    /**
301
     * Reading the Filedirectory.
302
     *
303
     * @return type
304
     */
305
    public function readPlugins()
306
    {
307
        $dir = app_path().DIRECTORY_SEPARATOR.'Plugins';
308
        $plugins = array_diff(scandir($dir), ['.', '..']);
309
310
        return $plugins;
311
    }
312
313
    public function deletePlugin($slug)
314
    {
315
        $dir = app_path().DIRECTORY_SEPARATOR.'Plugins'.DIRECTORY_SEPARATOR.$slug;
316
        $this->deleteDirectory($dir);
317
        /*
318
         * remove service provider from app.php
319
         */
320
        $str = "'App\\Plugins\\$slug"."\\ServiceProvider',";
321
        $path_to_file = base_path().DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'app.php';
322
        $file_contents = file_get_contents($path_to_file);
323
        $file_contents = str_replace($str, '//', $file_contents);
324
        file_put_contents($path_to_file, $file_contents);
325
        $plugin = new Plugin();
326
        $plugin = $plugin->where('path', $slug)->first();
327
        if ($plugin) {
328
            $plugin->delete();
329
        }
330
331
        return redirect()->back()->with('success', 'Deleted Successfully');
332
    }
333
}
334