1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
namespace Pratiksh\Adminetic\Services; |
4
|
|
|
|
5
|
|
|
use Illuminate\Support\Str; |
6
|
|
|
use Illuminate\Support\Facades\Artisan; |
7
|
|
|
use Pratiksh\Adminetic\Services\Helper\CommandHelper; |
8
|
|
|
|
9
|
|
|
class CRUDGeneratorService extends CommandHelper |
10
|
|
|
{ |
11
|
|
|
public static function makeCRUD($name, $console) |
12
|
|
|
{ |
13
|
|
|
self::makeController($name, $console); |
14
|
|
|
self::makeModel($name, $console); |
15
|
|
|
self::makeViews($name, $console); |
16
|
|
|
self::makeOthers($name, $console); |
17
|
|
|
self::addFileContent($name, $console); |
18
|
|
|
} |
19
|
|
|
|
20
|
|
|
// Make Controller |
21
|
|
|
protected static function makeController($name, $console) |
22
|
|
|
{ |
23
|
|
|
if (!file_exists($path = app_path('/Http/Controllers/Admin'))) { |
24
|
|
|
mkdir($path, 0777, true); |
25
|
|
|
} |
26
|
|
|
$controllerTemplate = str_replace( |
27
|
|
|
[ |
28
|
|
|
'{{modelName}}', |
29
|
|
|
'{{modelNamePluralLowerCase}}', |
30
|
|
|
'{{modelNameSingularLowerCase}}', |
31
|
|
|
], |
32
|
|
|
[ |
33
|
|
|
$name, |
34
|
|
|
strtolower(Str::plural($name)), |
35
|
|
|
strtolower($name), |
36
|
|
|
], |
37
|
|
|
self::getStub('Controller') |
38
|
|
|
); |
39
|
|
|
$file = app_path("/Http/Controllers/Admin/{$name}Controller.php"); |
40
|
|
|
file_put_contents(app_path("/Http/Controllers/Admin/{$name}Controller.php"), $controllerTemplate); |
41
|
|
|
self::fileMadeSuccess($console, $file, 'Controller'); |
42
|
|
|
} |
43
|
|
|
|
44
|
|
|
// Make Model |
45
|
|
|
protected static function makeModel($name, $console) |
46
|
|
|
{ |
47
|
|
|
if (!file_exists($path = app_path('/Models/Admin'))) { |
48
|
|
|
mkdir($path, 0777, true); |
49
|
|
|
} |
50
|
|
|
$modelTemplate = str_replace( |
51
|
|
|
[ |
52
|
|
|
'{{modelName}}', |
53
|
|
|
'{{modelNamePluralLowerCase}}', |
54
|
|
|
'{{modelNameSingularLowerCase}}', |
55
|
|
|
], |
56
|
|
|
[ |
57
|
|
|
$name, |
58
|
|
|
strtolower(Str::plural($name)), |
59
|
|
|
strtolower($name), |
60
|
|
|
], |
61
|
|
|
self::getStub('Model') |
62
|
|
|
); |
63
|
|
|
$file = app_path("/Models/Admin/{$name}.php"); |
64
|
|
|
file_put_contents(app_path("/Models/Admin/{$name}.php"), $modelTemplate); |
65
|
|
|
self::fileMadeSuccess($console, $file, 'Model'); |
66
|
|
|
} |
67
|
|
|
|
68
|
|
|
// Make View |
69
|
|
|
protected static function makeViews($name, $console) |
70
|
|
|
{ |
71
|
|
|
$lowername = strtolower($name); |
72
|
|
|
if (!file_exists($path = resource_path('views/admin/' . $lowername))) { |
73
|
|
|
mkdir($path, 0777, true); |
74
|
|
|
} |
75
|
|
|
|
76
|
|
|
if (!file_exists($path = resource_path('views/admin/layouts/modules/' . $lowername))) { |
77
|
|
|
mkdir($path, 0777, true); |
78
|
|
|
} |
79
|
|
|
|
80
|
|
|
self::makeIndexView($name, $lowername, $console); |
81
|
|
|
self::makeCreateView($name, $lowername, $console); |
82
|
|
|
self::makeEditView($name, $lowername, $console); |
83
|
|
|
self::makeShowView($name, $lowername, $console); |
84
|
|
|
self::createLayoutBlades($lowername, $console); |
85
|
|
|
} |
86
|
|
|
|
87
|
|
|
// Make Index View |
88
|
|
|
protected static function makeIndexView($name, $lowername, $console) |
89
|
|
|
{ |
90
|
|
|
$modelTemplate = str_replace( |
91
|
|
|
[ |
92
|
|
|
'{{modelNameSinglularLowerCase}}', |
93
|
|
|
'{{modelNamePluralLowerCase}}', |
94
|
|
|
], |
95
|
|
|
[ |
96
|
|
|
strtolower($name), |
97
|
|
|
strtolower(Str::plural($name)), |
98
|
|
|
], |
99
|
|
|
self::getStub('CRUD/IndexView') |
100
|
|
|
); |
101
|
|
|
$file = resource_path("views/admin/{$lowername}/index.blade.php"); |
102
|
|
|
file_put_contents(resource_path("views/admin/{$lowername}/index.blade.php"), $modelTemplate); |
103
|
|
|
self::fileMadeSuccess($console, $file, 'Index file'); |
104
|
|
|
} |
105
|
|
|
|
106
|
|
|
// Make Create View |
107
|
|
|
protected static function makeCreateView($name, $lowername, $console) |
108
|
|
|
{ |
109
|
|
|
$modelTemplate = str_replace( |
110
|
|
|
[ |
111
|
|
|
'{{modelNameSinglularLowerCase}}', |
112
|
|
|
], |
113
|
|
|
[ |
114
|
|
|
strtolower($name), |
115
|
|
|
], |
116
|
|
|
self::getStub('CRUD/CreateView') |
117
|
|
|
); |
118
|
|
|
|
119
|
|
|
$file = resource_path("views/admin/{$lowername}/create.blade.php"); |
120
|
|
|
file_put_contents(resource_path("views/admin/{$lowername}/create.blade.php"), $modelTemplate); |
121
|
|
|
self::fileMadeSuccess($console, $file, 'Create file'); |
122
|
|
|
} |
123
|
|
|
|
124
|
|
|
// Make Edit View |
125
|
|
|
protected static function makeEditView($name, $lowername, $console) |
126
|
|
|
{ |
127
|
|
|
$modelTemplate = str_replace( |
128
|
|
|
[ |
129
|
|
|
'{{modelNameSinglularLowerCase}}', |
130
|
|
|
], |
131
|
|
|
[ |
132
|
|
|
strtolower($name), |
133
|
|
|
], |
134
|
|
|
self::getStub('CRUD/EditView') |
135
|
|
|
); |
136
|
|
|
|
137
|
|
|
$file = resource_path("views/admin/{$lowername}/edit.blade.php"); |
138
|
|
|
file_put_contents(resource_path("views/admin/{$lowername}/edit.blade.php"), $modelTemplate); |
139
|
|
|
self::fileMadeSuccess($console, $file, 'Edit file'); |
140
|
|
|
} |
141
|
|
|
|
142
|
|
|
// Make Show View |
143
|
|
|
protected static function makeShowView($name, $lowername, $console) |
144
|
|
|
{ |
145
|
|
|
$modelTemplate = str_replace( |
146
|
|
|
[ |
147
|
|
|
'{{modelNameSinglularLowerCase}}', |
148
|
|
|
], |
149
|
|
|
[ |
150
|
|
|
strtolower($name), |
151
|
|
|
], |
152
|
|
|
self::getStub('CRUD/ShowView') |
153
|
|
|
); |
154
|
|
|
|
155
|
|
|
$file = resource_path("views/admin/{$lowername}/show.blade.php"); |
156
|
|
|
file_put_contents(resource_path("views/admin/{$lowername}/show.blade.php"), $modelTemplate); |
157
|
|
|
self::fileMadeSuccess($console, $file, 'Show file'); |
158
|
|
|
} |
159
|
|
|
|
160
|
|
|
// Make Layout Blades |
161
|
|
|
protected static function createLayoutBlades($lowername, $console) |
162
|
|
|
{ |
163
|
|
|
$form_file = resource_path("views/admin/layouts/modules/{$lowername}/form.blade.php"); |
164
|
|
|
file_put_contents(resource_path("views/admin/layouts/modules/{$lowername}/form.blade.php"), ''); |
165
|
|
|
self::fileMadeSuccess($console, $form_file, 'Edit add extended file'); |
166
|
|
|
|
167
|
|
|
$script_file = resource_path("views/admin/layouts/modules/{$lowername}/scripts.blade.php"); |
168
|
|
|
file_put_contents(resource_path("views/admin/layouts/modules/{$lowername}/scripts.blade.php"), ''); |
169
|
|
|
self::fileMadeSuccess($console, $script_file, 'Script file'); |
170
|
|
|
} |
171
|
|
|
|
172
|
|
|
// Make Other neccesary CRUD files |
173
|
|
|
protected static function makeOthers($name, $console) |
174
|
|
|
{ |
175
|
|
|
Artisan::call('make:migration create_' . strtolower(Str::plural($name)) . '_table --create=' . strtolower(Str::plural($name))); |
176
|
|
|
$console->info('Migration file created named create_' . strtolower(Str::plural($name)) . '_table ... ✅'); |
177
|
|
|
|
178
|
|
|
Artisan::call('make:seeder ' . $name . 'Seeder'); |
179
|
|
|
$console->info('Seeder file created ... ✅'); |
180
|
|
|
|
181
|
|
|
Artisan::call('make:repo ' . $name); |
182
|
|
|
$console->info('Repository and Interface created ... ✅'); |
183
|
|
|
|
184
|
|
|
Artisan::call('make:request ' . $name . 'Request'); |
185
|
|
|
$console->info('Request file created ... ✅'); |
186
|
|
|
} |
187
|
|
|
// Make Other Necessary CRUD Files |
188
|
|
|
protected static function addFileContent($name, $console) |
189
|
|
|
{ |
190
|
|
|
// Adding Route |
191
|
|
|
$lowercased_name = strtolower($name); |
192
|
|
|
$route = "Route::resource('admin/{$lowercased_name}',\App\Http\Controllers\Admin\\{$name}Controller::class);"; |
193
|
|
|
file_put_contents('routes/web.php', "\n", FILE_APPEND | LOCK_EX); |
194
|
|
|
file_put_contents('routes/web.php', $route, FILE_APPEND | LOCK_EX); |
195
|
|
|
|
196
|
|
|
$console->info('Route added to web.php ... ✅'); |
197
|
|
|
|
198
|
|
|
// Adding Route Interface Binding |
199
|
|
|
$repository_interface_binding = '$this->app->bind(\App\Contracts\\' . $name . 'RepositoryInterface::class, \App\Repositories\\' . $name . 'Repository::class);'; |
200
|
|
|
$provider_path = app_path('Providers/AdminServiceProvider.php'); |
201
|
|
|
putContentToClassFunction($provider_path, 'protected function repos', $repository_interface_binding); |
202
|
|
|
|
203
|
|
|
// Adding Module To Menu |
204
|
|
|
$menu_content = "],[\n" . |
205
|
|
|
"'type' => 'menu',\n" . |
206
|
|
|
"'name' => '$name',\n" . |
207
|
|
|
"'icon' => 'fa fa-wrench',\n" . |
208
|
|
|
"'is_active' => request()->routeIs('$lowercased_name*') ? 'active' : '',\n" . |
209
|
|
|
"'conditions' => [\n" . |
210
|
|
|
"[\n" . |
211
|
|
|
"'type' => 'or',\n" . |
212
|
|
|
"'condition' => auth()->user()->can('view-any', \App\Models\Admin\\" . $name . "::class),\n" . |
213
|
|
|
"],\n" . |
214
|
|
|
"[\n" . |
215
|
|
|
"'type' => 'or',\n" . |
216
|
|
|
"'condition' => auth()->user()->can('create', \App\Models\Admin\\" . $name . "::class),\n" . |
217
|
|
|
"],\n" . |
218
|
|
|
"],\n"; |
219
|
|
|
$menu_content = $menu_content . '"children" => $this->indexCreateChildren("' . $lowercased_name . '", \App\Models\Admin\\' . $name . '::class),'; |
220
|
|
|
$menu_content = "\n" . $menu_content . "\n"; |
221
|
|
|
$menu_path = app_path("Services/MyMenu.php"); |
222
|
|
|
putContentToClassFunction($menu_path, 'return [', $menu_content, ']'); |
223
|
|
|
|
224
|
|
|
$console->info('Menu added to Menu.php ... ✅'); |
225
|
|
|
} |
226
|
|
|
|
227
|
|
|
protected static function fileMadeSuccess($console, $file, $type) |
228
|
|
|
{ |
229
|
|
|
if (file_exists($file)) { |
230
|
|
|
$console->info($type . ' created successfully ... ✅'); |
231
|
|
|
} else { |
232
|
|
|
$console->error('Failed to create ' . $type . ' ...'); |
233
|
|
|
} |
234
|
|
|
} |
235
|
|
|
} |
236
|
|
|
|