Passed
Push — master ( fb3f67...19112d )
by Dmitrij
03:04
created

CreatePreferenceCommand   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 60
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 4
dl 0
loc 60
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A execute() 0 16 3
A configure() 0 3 1
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\IsModuleExists;
8
use HotRodCli\Jobs\Xml\AddPreference;
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 CreatePreferenceCommand extends BaseCommand
15
{
16
    protected $jobs = [
17
        IsModuleExists::class => null,
18
        CopyFile::class => null,
19
        AddPreference::class => null
20
    ];
21
22
    protected $configs = [
23
        'arguments' => [
24
            [
25
                'name' => 'namespace',
26
                'mode' => InputArgument::REQUIRED,
27
                'description' => 'What is the namespace on the module'
28
            ],
29
            [
30
                'name' => 'for',
31
                'mode' => InputArgument::REQUIRED,
32
                'description' => 'What class do you want to override'
33
            ],
34
            [
35
                'name' => 'type',
36
                'mode' => InputArgument::REQUIRED,
37
                'description' => 'What is your class'
38
            ]
39
        ],
40
        'options' => [
41
            [
42
                'name' => 'scope',
43
                'shortcut' => null,
44
                'mode' => InputArgument::OPTIONAL,
45
                'description' => 'Is this di for admin or frontend part?'
46
            ]
47
        ],
48
        'description' => 'Creates an override preference',
49
        'name' => 'create:preference',
50
        'help' => 'creates an override preference in a given namespace'
51
    ];
52
53
    protected function configure()
54
    {
55
        $this->config($this);
56
    }
57
58
    protected function execute(InputInterface $input, OutputInterface $output)
59
    {
60
        $this->setJobs();
61
        $jobs = $this->jobs;
62
        $namespace = explode('_', $input->getArgument('namespace'));
63
        $scope = $input->getOption('scope');
64
        $filename = in_array($scope, ['frontend', 'adminhtml']) ? $scope . '/di.xml' : 'di.xml';
65
        $filename = $this->appContainer->get('app_dir') . '/app/code/' . $namespace[0] . '/' . $namespace[1] . '/etc/' . $filename;
66
67
        $jobs[IsModuleExists::class]->handle($input->getArgument('namespace'), $output);
68
69
        if (!$this->appContainer->get(Filesystem::class)->exists($filename)) {
70
            $jobs[CopyFile::class]->handle($this->appContainer->get('resource_dir') . '/xml/di.xml', $filename);
71
        }
72
73
        $jobs[AddPreference::class]->handle($filename, ['for' => $input->getArgument('for'), 'type' => $input->getArgument('type')]);
74
    }
75
}
76