ApplicationCommand   A
last analyzed

Complexity

Total Complexity 10

Size/Duplication

Total Lines 110
Duplicated Lines 0 %

Importance

Changes 3
Bugs 0 Features 0
Metric Value
eloc 36
c 3
b 0
f 0
dl 0
loc 110
rs 10
wmc 10

5 Methods

Rating   Name   Duplication   Size   Complexity  
A configure() 0 3 1
A __construct() 0 13 3
A getConfigurationFile() 0 19 4
A execute() 0 3 1
A runAnotherCommand() 0 13 1
1
<?php
2
/**
3
 * Created by PhpStorm.
4
 * User: nicolas
5
 * Date: 22/12/17
6
 * Time: 14:34
7
 */
8
9
namespace Devgiants\Model;
10
11
12
use Devgiants\Exception\MissingConfigurationFileException;
13
use Devgiants\Service\LiveboxTools;
14
use Monolog\Logger;
15
use Pimple\Container;
16
use Symfony\Component\Console\Command\Command;
17
use Symfony\Component\Console\Input\ArrayInput;
18
use Symfony\Component\Console\Input\InputInterface;
19
use Symfony\Component\Console\Input\InputOption;
20
use Symfony\Component\Console\Output\OutputInterface;
21
use Symfony\Component\Console\Output\BufferedOutput;
22
use Symfony\Component\Finder\Finder;
23
24
abstract class ApplicationCommand extends Command {
25
26
27
	const FILE_OPTION = 'file';
28
29
	/**
30
	 * @var Container
31
	 */
32
	protected $container;
33
34
	/**
35
	 * @var Logger
36
	 */
37
	protected $log;
38
39
	/**
40
	 * @var LiveboxTools
41
	 */
42
	protected $tools;
43
44
	/**
45
	 * @var string $host
46
	 */
47
	protected $host;
48
49
	/**
50
	 * ApplicationCommand constructor.
51
	 *
52
	 * @param null|string $name
53
	 * @param Container $container
54
	 */
55
	public function __construct( $name, Container $container ) {
56
		$this->container = $container;
57
		parent::__construct( $name );
58
59
		// Initiates logging
60
		$this->log = $this->container['main_logger'];
61
		if ( ! $this->log instanceof Logger ) {
62
			throw new \InvalidArgumentException( "Container main_logger entry must be Logger type" );
63
		}
64
65
		$this->tools = $this->container['tools'];
66
		if ( ! $this->tools instanceof LiveboxTools ) {
67
			throw new \InvalidArgumentException( "Container tools entry must be LiveboxTools type" );
68
		}
69
	}
70
71
	/**
72
	 * @inheritdoc
73
	 */
74
	protected function configure() {
75
		$this
76
			->addOption( self::FILE_OPTION, "f", InputOption::VALUE_OPTIONAL, "The YML configuration file" );
77
	}
78
79
	/**
80
	 * @param InputInterface $input
81
	 *
82
	 * @return string
83
	 * @throws MissingConfigurationFileException
84
	 */
85
	public function getConfigurationFile( InputInterface $input ) {
86
		$ymlFile = $input->getOption( self::FILE_OPTION );
87
		if ( $ymlFile === NULL ) {
88
			$finder = new Finder();
89
			$finder
90
				->in( $this->container['app_dir'] )
91
				->files()
92
				->name( '*.yml' );
93
94
			if ( $finder->count() === 1 ) {
95
				foreach ( $finder as $file ) {
96
					$ymlFile = $file->getRealPath();
97
				}
98
			} else {
99
				throw new MissingConfigurationFileException();
100
			}
101
		}
102
103
		return $ymlFile;
104
	}
105
106
	/**
107
	 * @inheritdoc
108
	 */
109
	protected function execute( InputInterface $input, OutputInterface $output ) {
110
	    # TODO use host given in configuration file
111
		$this->tools->logout( '192.168.1.1' );
112
	}
113
114
	/**
115
	 * Run command and return the output in the current command
116
	 *
117
	 * @param InputInterface $commandToRunInput
118
	 * @param InputInterface $initalCommandInput
119
	 * @return string
120
	 */
121
	protected function runAnotherCommand (InputInterface $commandToRunInput, InputInterface $initalCommandInput) : string {
0 ignored issues
show
Unused Code introduced by
The parameter $initalCommandInput is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

121
	protected function runAnotherCommand (InputInterface $commandToRunInput, /** @scrutinizer ignore-unused */ InputInterface $initalCommandInput) : string {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
122
//	    var_dump($commandToRunInput->getOptions());
123
//	    die();
124
//        if ($initalCommandInput->hasOption('file')) {
125
//            $commandToRunInput->setOption('file', $initalCommandInput->getOption('file'));
126
//        }
127
//        die('OK');
128
		$application = $this->getApplication();
129
		$application->setAutoExit(false);
130
		$output = new BufferedOutput();
131
		$application->run($commandToRunInput, $output);
132
		$application->setAutoExit(true);
133
		return $output->fetch();
134
	}
135
}