Completed
Push — EZP-30722 ( 18f3bc )
by André
20:10
created

Application::doRun()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 28

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
nc 2
nop 2
dl 0
loc 28
rs 9.472
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * File containing the Application class.
5
 *
6
 * @copyright Copyright (C) eZ Systems AS. All rights reserved.
7
 * @license For full copyright and license information view LICENSE file distributed with this source code.
8
 */
9
namespace eZ\Bundle\EzPublishCoreBundle\Console;
10
11
use eZ\Publish\Core\MVC\Exception\InvalidSiteAccessException as InvalidSiteAccess;
12
use eZ\Publish\Core\MVC\Symfony\Event\ScopeChangeEvent;
13
use eZ\Publish\Core\MVC\Symfony\MVCEvents;
14
use Symfony\Bundle\FrameworkBundle\Console\Application as BaseApplication;
15
use Symfony\Component\Console\Input\InputInterface;
16
use Symfony\Component\Console\Input\InputOption;
17
use Symfony\Component\Console\Output\OutputInterface;
18
use Symfony\Component\HttpKernel\KernelInterface;
19
20
/**
21
 * eZ Publish console application.
22
 * Adds options specific to an eZ Publish environment, such as the siteaccess to use.
23
 */
24
class Application extends BaseApplication
25
{
26
    // See doRun()
27
    private $kernel;
0 ignored issues
show
Comprehensibility introduced by
Consider using a different property name as you override a private property of the parent class.
Loading history...
28
29
    public function __construct(KernelInterface $kernel)
30
    {
31
        $this->kernel = $kernel;
32
        parent::__construct($kernel);
33
        $this->getDefinition()->addOption(
34
            new InputOption('--siteaccess', null, InputOption::VALUE_OPTIONAL, 'SiteAccess to use for operations. If not provided, default siteaccess will be used')
35
        );
36
    }
37
38
    public function doRun(InputInterface $input, OutputInterface $output)
39
    {
40
        // boot() will be re-executed by parent, but kernel only boots once regardlessly
41
        // @todo Contribute a console.init event to Symfony 4 in order to rather use that in v3
42
        $this->kernel->boot();
43
44
        $container = $this->kernel->getContainer();
45
        $siteAccess = $container->get('ezpublish.siteaccess');
46
        $siteAccessList = $container->getParameter('ezpublish.siteaccess.list');
47
48
        $siteAccess->matchingType = 'cli';
49
        $siteAccess->name = $input->getParameterOption(
50
            '--siteaccess',
51
            $container->getParameter('ezpublish.siteaccess.default')
52
        );
53
54
55
        if (!in_array($siteAccess->name, $siteAccessList)) {
56
            throw new InvalidSiteAccess($siteAccess->name, $siteAccessList, $siteAccess->matchingType, true);
57
        }
58
59
        $container->get('event_dispatcher')->dispatch(
60
            MVCEvents::CONFIG_SCOPE_CHANGE,
61
            new ScopeChangeEvent($siteAccess)
62
        );
63
64
        return parent::doRun($input, $output);
65
    }
66
}
67