Completed
Pull Request — master (#228)
by
unknown
05:30
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
    /**
26
     * Process generator.
27
     * @param Request $request
28
     * @return mixed
29
     */
30
    public function postGenerator(Request $request)
31
    {
32
        $commandArg = [];
33
        $commandArg['name'] = $request->crud_name;
34
35
        // Make sure we do not already have this module
36
        $directories = glob(base_path().'/resources/views/*', GLOB_ONLYDIR);
37
        foreach ($directories as $dir) {
38
            $this_name = str_replace(base_path().'/resources/views/', '', $dir);
39
            $used_names[] = $this_name;
40
        }
41
42
        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 37. Are you sure the iterator is never empty, otherwise this variable is not defined?
Loading history...
43
            return Redirect::back()->withErrors(['Name Exists or Restricted']);
44
        }
45
46
        if ($request->has('fields')) {
47
            $fieldsArray = [];
48
            $validationsArray = [];
49
            $x = 0;
50
            foreach ($request->fields as $field) {
51
                if ($request->fields_required[$x] == 1) {
52
                    $validationsArray[] = $field;
53
                }
54
55
                $fieldsArray[] = $field.'#'.$request->fields_type[$x];
56
57
                $x++;
58
            }
59
60
            $commandArg['--fields'] = implode(';', $fieldsArray);
61
        }
62
63
        if (!empty($validationsArray)) {
64
            $commandArg['--validations'] = implode('#required;', $validationsArray).'#required';
65
        }
66
67
        if ($request->has('route')) {
68
            $commandArg['--route'] = $request->route;
69
        }
70
71
        if ($request->has('view_path')) {
72
            $commandArg['--view-path'] = $request->view_path;
73
        }
74
75
        if ($request->has('controller_namespace')) {
76
            $commandArg['--controller-namespace'] = $request->controller_namespace;
77
        }
78
79
        if ($request->has('model_namespace')) {
80
            $commandArg['--model-namespace'] = $request->model_namespace;
81
        }
82
83
        if ($request->has('route_group')) {
84
            $commandArg['--route-group'] = $request->route_group;
85
        }
86
87
        if ($request->has('relationships')) {
88
            $commandArg['--relationships'] = $request->relationships;
89
        }
90
91
        if ($request->has('form_helper')) {
92
            $commandArg['--form-helper'] = $request->form_helper;
93
        }
94
95
        if ($request->has('soft_deletes')) {
96
            $commandArg['--soft-deletes'] = $request->soft_deletes;
97
        }
98
99
        try {
100
            Artisan::call('crud:generate', $commandArg);
101
102
            $menus = json_decode(File::get(base_path('resources/laravel-admin/menus.json')));
103
104
            $name = $commandArg['name'];
105
            $routeName = ($commandArg['--route-group']) ? $commandArg['--route-group'].'/'.snake_case($name, '-') : snake_case($name, '-');
106
107
            $menus->menus = array_map(function($menu) use ($name, $routeName) {
108
                if ($menu->section == 'Resources') {
109
                    array_push($menu->items, (object) [
110
                        'title' => $name,
111
                        'url'   => '/'.$routeName,
112
                    ]);
113
                }
114
115
                return $menu;
116
            }, $menus->menus);
117
118
            File::put(base_path('resources/laravel-admin/menus.json'), json_encode($menus));
119
120
            Artisan::call('migrate');
121
        } catch (\Exception $e) {
122
            return Response::make($e->getMessage(), 500);
123
        }
124
125
        return redirect('crud')->with('flash_message', 'Your CRUD has been generated. See on the menu.');
126
    }
127
}
128