Passed
Pull Request — master (#228)
by
unknown
04:22
created

CrudController::getGenerator()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 0
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace App\Http\Controllers;
4
5
use Artisan;
6
use File;
7
use Illuminate\Http\Request;
8
use Redirect;
9
use Response;
10
use View;
11
12
class CrudController extends Controller
13
{
14
    /**
15
     * Display generator.
16
     *
17
     * @return Response
18
     */
19
    public function getGenerator()
20
    {
21
        return view('crudmanagement.add-crud');
0 ignored issues
show
Bug Best Practice introduced by
The expression return view('crudmanagement.add-crud') returns the type Illuminate\View\View which is incompatible with the documented return type Response.
Loading history...
22
    }
23
24
    /**
25
     * Process generator.
26
     *
27
     * @param Request $request
28
     *
29
     * @return mixed
30
     */
31
    public function postGenerator(Request $request)
32
    {
33
        $commandArg = [];
34
        $commandArg['name'] = $request->crud_name;
35
36
        // Make sure we do not already have this module
37
        $directories = glob(base_path().'/resources/views/*', GLOB_ONLYDIR);
38
        foreach ($directories as $dir) {
39
            $this_name = str_replace(base_path().'/resources/views/', '', $dir);
40
            $used_names[] = $this_name;
41
        }
42
43
        if (in_array(strtolower($request->crud_name), $used_names)) {
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $used_names seems to be defined by a foreach iteration on line 38. Are you sure the iterator is never empty, otherwise this variable is not defined?
Loading history...
44
            return Redirect::back()->withErrors(['Name Exists or Restricted']);
45
        }
46
47
        if ($request->has('fields')) {
48
            $fieldsArray = [];
49
            $validationsArray = [];
50
            $x = 0;
51
            foreach ($request->fields as $field) {
52
                if ($request->fields_required[$x] == 1) {
53
                    $validationsArray[] = $field;
54
                }
55
56
                $fieldsArray[] = $field.'#'.$request->fields_type[$x];
57
58
                $x++;
59
            }
60
61
            $commandArg['--fields'] = implode(';', $fieldsArray);
62
        }
63
64
        if (!empty($validationsArray)) {
65
            $commandArg['--validations'] = implode('#required;', $validationsArray).'#required';
66
        }
67
68
        if ($request->has('route')) {
69
            $commandArg['--route'] = $request->route;
70
        }
71
72
        if ($request->has('view_path')) {
73
            $commandArg['--view-path'] = $request->view_path;
74
        }
75
76
        if ($request->has('controller_namespace')) {
77
            $commandArg['--controller-namespace'] = $request->controller_namespace;
78
        }
79
80
        if ($request->has('model_namespace')) {
81
            $commandArg['--model-namespace'] = $request->model_namespace;
82
        }
83
84
        if ($request->has('route_group')) {
85
            $commandArg['--route-group'] = $request->route_group;
86
        }
87
88
        if ($request->has('relationships')) {
89
            $commandArg['--relationships'] = $request->relationships;
90
        }
91
92
        if ($request->has('form_helper')) {
93
            $commandArg['--form-helper'] = $request->form_helper;
94
        }
95
96
        if ($request->has('soft_deletes')) {
97
            $commandArg['--soft-deletes'] = $request->soft_deletes;
98
        }
99
100
        try {
101
            Artisan::call('crud:generate', $commandArg);
102
103
            $menus = json_decode(File::get(base_path('resources/laravel-admin/menus.json')));
104
105
            $name = $commandArg['name'];
106
            $routeName = ($commandArg['--route-group']) ? $commandArg['--route-group'].'/'.snake_case($name, '-') : snake_case($name, '-');
107
108
            $menus->menus = array_map(function ($menu) use ($name, $routeName) {
109
                if ($menu->section == 'Resources') {
110
                    array_push($menu->items, (object) [
111
                        'title' => $name,
112
                        'url'   => '/'.$routeName,
113
                    ]);
114
                }
115
116
                return $menu;
117
            }, $menus->menus);
118
119
            File::put(base_path('resources/laravel-admin/menus.json'), json_encode($menus));
120
121
            Artisan::call('migrate');
122
        } catch (\Exception $e) {
123
            return Response::make($e->getMessage(), 500);
124
        }
125
126
        return redirect('crud')->with('flash_message', 'Your CRUD has been generated. See on the menu.');
127
    }
128
}
129