Completed
Push — master ( ffa824...36bc47 )
by Dmitrij
01:42
created

CreatePreferenceCommand   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 52
Duplicated Lines 0 %

Importance

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

2 Methods

Rating   Name   Duplication   Size   Complexity  
A execute() 0 16 3
B configure() 0 26 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 function configure()
23
    {
24
        $this->setName('create:preference')
25
            ->setDescription('Creates an override preference')
26
            ->addArgument(
27
                'namespace',
28
                InputArgument::REQUIRED,
29
                'What is the namespace on the module'
30
            )
31
            ->addArgument(
32
                'for',
33
                InputArgument::REQUIRED,
34
                'What class do you want to override'
35
            )
36
            ->addArgument(
37
                'type',
38
                InputArgument::REQUIRED,
39
                'What is your class'
40
            )
41
            ->addOption(
42
                'scope',
43
                null,
44
                InputArgument::OPTIONAL,
45
                'Is this di for admin or frontend part?'
46
            )
47
            ->setHelp('creates an override preference in a given namespace');
48
    }
49
50
    protected function execute(InputInterface $input, OutputInterface $output)
51
    {
52
        $this->setJobs();
53
        $jobs = $this->jobs;
54
        $namespace = explode('_', $input->getArgument('namespace'));
55
        $scope = $input->getOption('scope');
56
        $filename = in_array($scope, ['frontend', 'adminhtml']) ? $scope . '/di.xml' : 'di.xml';
57
        $filename = $this->appContainer->get('app_dir') . '/app/code/' . $namespace[0] . '/' . $namespace[1] . '/etc/' . $filename;
58
59
        $jobs[IsModuleExists::class]->handle($input->getArgument('namespace'), $output);
60
61
        if (!$this->appContainer->get(Filesystem::class)->exists($filename)) {
62
            $jobs[CopyFile::class]->handle($this->appContainer->get('resource_dir') . '/xml/di.xml', $filename);
63
        }
64
65
        $jobs[AddPreference::class]->handle($filename, ['for' => $input->getArgument('for'), 'type' => $input->getArgument('type')]);
66
    }
67
}
68