PublishUserCommand   A
last analyzed

Complexity

Total Complexity 26

Size/Duplication

Total Lines 292
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
wmc 26
eloc 94
c 2
b 0
f 0
dl 0
loc 292
rs 10

14 Methods

Rating   Name   Duplication   Size   Complexity  
A handle() 0 11 2
A updateMenu() 0 11 1
A getOptions() 0 3 1
A getViews() 0 10 1
A updateRoutes() 0 12 1
A copyViews() 0 13 2
A publishCreateUserRequest() 0 19 3
A fillTemplate() 0 12 1
A fillLicense() 0 13 2
A createDirectories() 0 3 1
A publishUpdateUserRequest() 0 16 3
A publishUserRepository() 0 19 3
A publishUserController() 0 21 4
A getArguments() 0 3 1
1
<?php
2
3
namespace PWWEB\Artomator\Commands\Publish;
4
5
use InfyOm\Generator\Commands\Publish\PublishBaseCommand;
6
use InfyOm\Generator\Utils\FileUtil;
7
8
class PublishUserCommand extends PublishBaseCommand
9
{
10
    /**
11
     * ALL REFERENCES TO (get_template\(\')([a-z_\.]+)(', 'laravel-generator'\))
12
     * REPLACED WITH: get_artomator_template('$2').
13
     */
14
15
    /**
16
     * The console command name.
17
     *
18
     * @var string
19
     */
20
    protected $name = 'artomator.publish:user';
21
22
    /**
23
     * The console command description.
24
     *
25
     * @var string
26
     */
27
    protected $description = 'Publishes Users CRUD file';
28
29
    /**
30
     * Execute the command.
31
     *
32
     * @return void
33
     */
34
    public function handle()
35
    {
36
        $this->copyViews();
37
        $this->updateRoutes();
38
        $this->updateMenu();
39
        $this->publishUserController();
40
        if (true === config('infyom.laravel_generator.options.repository_pattern')) {
41
            $this->publishUserRepository();
42
        }
43
        $this->publishCreateUserRequest();
44
        $this->publishUpdateUserRequest();
45
    }
46
47
    /**
48
     * Copy Views.
49
     *
50
     * @return void
51
     */
52
    private function copyViews()
53
    {
54
        $viewsPath = config('infyom.laravel_generator.path.views', resource_path('views/'));
55
        $templateType = config('infyom.laravel_generator.templates', 'adminlte-templates');
56
57
        $this->createDirectories($viewsPath.'users');
58
59
        $files = $this->getViews();
60
61
        foreach ($files as $stub => $blade) {
62
            $sourceFile = get_template_file_path('scaffold/'.$stub, $templateType);
63
            $destinationFile = $viewsPath.$blade;
64
            $this->publishFile($sourceFile, $destinationFile, $blade);
65
        }
66
    }
67
68
    /**
69
     * Create Directories.
70
     *
71
     * @param string $dir Directory.
72
     *
73
     * @return void
74
     */
75
    private function createDirectories($dir)
76
    {
77
        FileUtil::createDirectoryIfNotExist($dir);
78
    }
79
80
    /**
81
     * Get Views.
82
     *
83
     * @return array
84
     */
85
    private function getViews()
86
    {
87
        return [
88
            'users/create'      => 'users/create.blade.php',
89
            'users/edit'        => 'users/edit.blade.php',
90
            'users/fields'      => 'users/fields.blade.php',
91
            'users/index'       => 'users/index.blade.php',
92
            'users/show'        => 'users/show.blade.php',
93
            'users/show_fields' => 'users/show_fields.blade.php',
94
            'users/table'       => 'users/table.blade.php',
95
        ];
96
    }
97
98
    /**
99
     * Update Routes.
100
     *
101
     * @return void
102
     */
103
    private function updateRoutes()
104
    {
105
        $path = config('infyom.laravel_generator.path.routes', base_path('routes/web.php'));
106
107
        $routeContents = file_get_contents($path);
108
109
        $routesTemplate = get_artomator_template('routes.user');
110
111
        $routeContents .= "\n\n".$routesTemplate;
112
113
        file_put_contents($path, $routeContents);
114
        $this->comment("\nUser route added");
115
    }
116
117
    /**
118
     * Update Menu.
119
     *
120
     * @return void
121
     */
122
    private function updateMenu()
123
    {
124
        $viewsPath = config('infyom.laravel_generator.path.views', resource_path('views/'));
125
        $templateType = config('infyom.laravel_generator.templates', 'adminlte-templates');
126
        $path = $viewsPath.'layouts/menu.blade.php';
127
        $menuContents = file_get_contents($path);
128
        $sourceFile = file_get_contents(get_template_file_path('scaffold/users/menu', $templateType));
129
        $menuContents .= "\n".$sourceFile;
130
131
        file_put_contents($path, $menuContents);
132
        $this->comment("\nUser Menu added");
133
    }
134
135
    /**
136
     * Publish User Controller.
137
     *
138
     * @return void
139
     */
140
    private function publishUserController()
141
    {
142
        $templateData = get_template('user/user_controller', 'laravel-generator');
143
        if (false === config('infyom.laravel_generator.options.repository_pattern')) {
144
            $templateData = get_template('user/user_controller_without_repository', 'laravel-generator');
145
            $templateData = $this->fillTemplate($templateData);
146
        }
147
148
        $templateData = $this->fillTemplate($templateData);
149
150
        $controllerPath = config('infyom.laravel_generator.path.controller', app_path('Http/Controllers/'));
151
152
        $fileName = 'UserController.php';
153
154
        if (true === file_exists($controllerPath.$fileName) && false === $this->confirmOverwrite($fileName)) {
155
            return;
156
        }
157
158
        FileUtil::createFile($controllerPath, $fileName, $templateData);
159
160
        $this->info('UserController created');
161
    }
162
163
    /**
164
     * Publish User Repository.
165
     *
166
     * @return void
167
     */
168
    private function publishUserRepository()
169
    {
170
        $templateData = get_template('user/user_repository', 'laravel-generator');
171
172
        $templateData = $this->fillTemplate($templateData);
173
174
        $repositoryPath = config('infyom.laravel_generator.path.repository', app_path('Repositories/'));
175
176
        $fileName = 'UserRepository.php';
177
178
        FileUtil::createDirectoryIfNotExist($repositoryPath);
179
180
        if (true === file_exists($repositoryPath.$fileName) && false === $this->confirmOverwrite($fileName)) {
181
            return;
182
        }
183
184
        FileUtil::createFile($repositoryPath, $fileName, $templateData);
185
186
        $this->info('UserRepository created');
187
    }
188
189
    /**
190
     * Publish Create User Request.
191
     *
192
     * @return void
193
     */
194
    private function publishCreateUserRequest()
195
    {
196
        $templateData = get_template('user/create_user_request', 'laravel-generator');
197
198
        $templateData = $this->fillTemplate($templateData);
199
200
        $requestPath = config('infyom.laravel_generator.path.request', app_path('Http/Requests/'));
201
202
        $fileName = 'CreateUserRequest.php';
203
204
        FileUtil::createDirectoryIfNotExist($requestPath);
205
206
        if (true === file_exists($requestPath.$fileName) && false === $this->confirmOverwrite($fileName)) {
207
            return;
208
        }
209
210
        FileUtil::createFile($requestPath, $fileName, $templateData);
211
212
        $this->info('CreateUserRequest created');
213
    }
214
215
    /**
216
     * Publish Update User Request.
217
     *
218
     * @return void
219
     */
220
    private function publishUpdateUserRequest()
221
    {
222
        $templateData = get_template('user/update_user_request', 'laravel-generator');
223
224
        $templateData = $this->fillTemplate($templateData);
225
226
        $requestPath = config('infyom.laravel_generator.path.request', app_path('Http/Requests/'));
227
228
        $fileName = 'UpdateUserRequest.php';
229
        if (true === file_exists($requestPath.$fileName) && false === $this->confirmOverwrite($fileName)) {
230
            return;
231
        }
232
233
        FileUtil::createFile($requestPath, $fileName, $templateData);
234
235
        $this->info('UpdateUserRequest created');
236
    }
237
238
    /**
239
     * Replaces dynamic variables of template.
240
     * THIS IS A NEW FUNCTION ADDED.
241
     *
242
     * @param string $templateData Template Data.
243
     *
244
     * @return string
245
     */
246
    private function fillLicense($templateData)
247
    {
248
        $replacements = [
249
            '$LICENSE_PACKAGE$' => config('pwweb.artomator.license.package', 'boo'),
250
            '$LICENSE_AUTHORS$' => license_authors(config('pwweb.artomator.license.authors')),
251
            '$LICENSE_COPYRIGHT$' => config('pwweb.artomator.license.copyright'),
252
            '$LICENSE$' => config('pwweb.artomator.license.license'),
253
        ];
254
        foreach ($replacements as $key => $replacement) {
255
            $templateData = str_replace($key, $replacement, $templateData);
256
        }
257
258
        return $templateData;
259
    }
260
261
    /**
262
     * Replaces dynamic variables of template.
263
     *
264
     * @param string $templateData Template Data.
265
     *
266
     * @return string
267
     */
268
    private function fillTemplate($templateData)
269
    {
270
        $templateData = str_replace('$NAMESPACE_CONTROLLER$', config('infyom.laravel_generator.namespace.controller'), $templateData);
271
272
        $templateData = str_replace('$NAMESPACE_REQUEST$', config('infyom.laravel_generator.namespace.request'), $templateData);
273
274
        $templateData = str_replace('$NAMESPACE_REPOSITORY$', config('infyom.laravel_generator.namespace.repository'), $templateData);
275
        $templateData = str_replace('$NAMESPACE_USER$', config('auth.providers.users.model'), $templateData);
276
277
        // return $templateData;
278
        // ADDED THE FOLLOWING LINE:
279
        return $this->fillLicense($templateData);
280
    }
281
282
    /**
283
     * Get the console command options.
284
     *
285
     * @return array
286
     */
287
    public function getOptions()
288
    {
289
        return [];
290
    }
291
292
    /**
293
     * Get the console command arguments.
294
     *
295
     * @return array
296
     */
297
    protected function getArguments()
298
    {
299
        return [];
300
    }
301
}
302