CreateRouteCommand::configure()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 21
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 16
dl 0
loc 21
rs 9.7333
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
3
namespace HotRodCli\Commands\Xml;
4
5
use HotRodCli\Commands\BaseCommand;
6
use HotRodCli\Jobs\Filesystem\CopyFile;
7
use HotRodCli\Jobs\Module\ReplaceText;
8
use HotRodCli\Jobs\Xml\AddRoute;
9
use Symfony\Component\Console\Input\InputInterface;
10
use Symfony\Component\Console\Output\OutputInterface;
11
use Symfony\Component\Console\Input\InputArgument;
12
use Symfony\Component\Filesystem\Filesystem;
13
14
class CreateRouteCommand extends BaseCommand
15
{
16
    protected $jobs = [
17
        CopyFile::class => null,
18
        ReplaceText::class => null,
19
        AddRoute::class => null
20
    ];
21
22
    public function configure()
23
    {
24
        $this->setName('create:route')
25
            ->setDescription('Creates a router')
26
            ->addArgument(
27
                'namespace',
28
                InputArgument::REQUIRED,
29
                'What is the namespace on the module'
30
            )
31
            ->addArgument(
32
                'route-name',
33
                InputArgument::REQUIRED,
34
                'route name'
35
            )
36
            ->addOption(
37
                'admin',
38
                null,
39
                InputArgument::OPTIONAL,
40
                'Is this route for admin part?'
41
            )
42
            ->setHelp('creates a new controller file or adds a route to existing one');
43
    }
44
45
    public function execute(InputInterface $input, OutputInterface $output)
46
    {
47
        $this->setJobs();
48
        $jobs = $this->jobs;
49
        $namespace = explode('_', $input->getArgument('namespace'));
50
        $routeName = $input->getArgument('route-name');
51
        $scope = $input->getOption('admin') ? 'adminhtml' : 'frontend';
52
        $app = $this->appContainer;
53
        /** @var Filesystem $filesystem */
54
        $filesystem = $app->resolve(Filesystem::class);
55
56
        if ($filesystem->exists($app->get('app_dir') . '/app/code/' . $namespace[0] . '/' . $namespace[1] . '/etc/' . $scope . '/routes.xml')) {
57
            $jobs[AddRoute::class]->handle(
58
                $this->appContainer->get('app_dir')
59
                . '/app/code/' . $namespace[0] . '/' . $namespace[1]
60
                . '/etc/' . $scope . '/routes.xml',
61
                [
62
                    'frontName' => strtolower($routeName),
63
                    'id' => strtolower($routeName),
64
                    'moduleName' => ucwords($namespace[0]) . '_' . ucwords($namespace[1]),
65
                ]
66
            );
67
68
            $output->writeln('<info>'
69
                . strtolower($routeName) . ' route was successfully added</info>');
70
        } else {
71
            $jobs[CopyFile::class]->handle(
72
                $app->get('resource_dir') . '/xml/routes.xml',
73
                $this->appContainer->get('app_dir')
74
                . '/app/code/' . $namespace[0] . '/' . $namespace[1]
75
                . '/etc/' . $scope . '/routes.xml'
76
            );
77
78
            $jobs[ReplaceText::class]->handle(
79
                '{{name}}',
80
                strtolower($routeName),
81
                $app->get('app_dir') . '/app/code/' . $namespace[0] . '/' . $namespace[1] . '/etc/' . $scope . ''
82
            );
83
84
            $jobs[ReplaceText::class]->handle(
85
                '{{module_name}}',
86
                ucwords($namespace[0]) . '_' . ucwords($namespace[1]),
87
                $app->get('app_dir') . '/app/code/' . $namespace[0] . '/' . $namespace[1] . '/etc/' . $scope . ''
88
            );
89
90
            $output->writeln('<info>'
91
                . $namespace[0] . '/'
92
                . $namespace[1] . '/etc/' . $scope . '/routes.xml was successfully created</info>');
93
        }
94
    }
95
}
96