CreateTemplateCommand::execute()   A
last analyzed

Complexity

Conditions 3
Paths 8

Size

Total Lines 22
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 15
dl 0
loc 22
rs 9.7666
c 0
b 0
f 0
cc 3
nc 8
nop 2
1
<?php
2
3
namespace HotRodCli\Commands\Frontend;
4
5
use HotRodCli\Commands\BaseCommand;
6
use HotRodCli\Jobs\Filesystem\CopyFile;
7
use HotRodCli\Jobs\Module\IsModuleExists;
8
use Symfony\Component\Console\Input\InputInterface;
9
use Symfony\Component\Console\Output\OutputInterface;
10
use Symfony\Component\Console\Input\InputArgument;
11
12
class CreateTemplateCommand extends BaseCommand
13
{
14
    protected $jobs = [
15
        CopyFile::class => null,
16
        IsModuleExists::class => null
17
    ];
18
19
    protected function configure()
20
    {
21
        $this->setName('create:template')
22
            ->setDescription('Creates a new template')
23
            ->addArgument(
24
                'namespace',
25
                InputArgument::REQUIRED,
26
                'What is the namespace on the module'
27
            )
28
            ->addArgument(
29
                'template-name',
30
                InputArgument::REQUIRED,
31
                'block\'s class name'
32
            )
33
            ->addOption(
34
                'admin',
35
                null,
36
                InputArgument::OPTIONAL,
37
                'is this template for admin'
38
            )
39
            ->setHelp('creates a new template in a given namespace with a given name');
40
    }
41
42
    protected function execute(InputInterface $input, OutputInterface $output)
43
    {
44
        $this->setJobs();
45
        $namespace = explode('_', $input->getArgument('namespace'));
46
        $name = $input->getArgument('template-name');
47
        $scope = $input->getOption('admin') ? 'adminhtml' : 'frontend';
48
49
        try {
50
            $this->jobs[IsModuleExists::class]->handle(
51
                $input->getArgument('namespace'),
52
                $output
53
            );
54
55
            $this->jobs[CopyFile::class]->handle(
56
                $this->appContainer->get('resource_dir') . '/frontend/template.phtml',
57
                $this->appContainer->get('app_dir') . '/app/code/' . $namespace[0] . '/' . $namespace[1] .
58
                    '/view/' . $scope . '/templates/' . $name . '.phtml'
59
            );
60
61
            $output->writeln('<info>Template ' . $input->getArgument('template-name') . ' was successfully created</info>');
62
        } catch (\Throwable $e) {
63
            $output->writeln('<error>' . $e->getMessage() . '</error>');
64
        }
65
    }
66
}
67