4 * Contains \Drupal\Console\Core\Utils\ArgvInputReader.
7 namespace Drupal\Console\Core\Utils;
9 use Symfony\Component\Console\Input\ArgvInput;
12 * Class ArgvInputReader.
29 protected $originalArgvValues;
32 * ArgvInputReader constructor.
34 public function __construct()
36 $this->originalArgvValues = $_SERVER['argv'];
38 $this->setOptionsFromPlaceHolders();
39 $this->readArgvInputValues();
43 * @param array $targetConfig
45 public function setOptionsFromTargetConfiguration($targetConfig)
48 if (array_key_exists('root', $targetConfig)) {
49 $options['root'] = $targetConfig['root'];
51 if (array_key_exists('uri', $targetConfig)) {
52 $options['uri'] = $targetConfig['uri'];
55 if (array_key_exists('remote', $targetConfig)) {
56 $this->set('remote', true);
59 $this->setArgvOptions($options);
63 * @param array $options
65 public function setOptionsFromConfiguration($options)
67 $this->setArgvOptions($options);
73 private function setArgvOptions($options)
75 $argvInput = new ArgvInput();
76 foreach ($options as $key => $option) {
81 if (!$argvInput->hasParameterOption($key)) {
83 $_SERVER['argv'][] = sprintf('--%s', $key);
85 $_SERVER['argv'][] = sprintf('--%s=%s', $key, $option);
89 if ($key === 'root') {
92 $argvInput->getParameterOption(['--root'], null),
96 foreach ($_SERVER['argv'] as $argvKey => $argv) {
97 if (strpos($argv, '--'.$key) === 0) {
99 $_SERVER['argv'][$argvKey] = sprintf('--%s', $key);
101 $_SERVER['argv'][$argvKey] = sprintf(
111 $this->readArgvInputValues();
115 * setOptionsFromPlaceHolders.
117 private function setOptionsFromPlaceHolders()
119 if (count($_SERVER['argv']) > 2
120 && stripos($_SERVER['argv'][1], '@') === 0
121 && stripos($_SERVER['argv'][2], '@') === 0
123 $_SERVER['argv'][1] = sprintf(
125 substr($_SERVER['argv'][1], 1)
128 $_SERVER['argv'][2] = sprintf(
130 substr($_SERVER['argv'][2], 1)
136 if (count($_SERVER['argv']) > 1 && stripos($_SERVER['argv'][1], '@') === 0) {
137 $_SERVER['argv'][1] = sprintf(
139 substr($_SERVER['argv'][1], 1)
145 * ReadArgvInputValues.
147 private function readArgvInputValues()
149 $input = new ArgvInput();
151 $source = $input->getParameterOption(['--source', '-s'], null);
152 $target = $input->getParameterOption(['--target', '-t'], null);
153 $root = $input->getParameterOption(['--root'], null);
154 $debug = $input->getParameterOption(['--debug'], false);
155 $uri = $input->getParameterOption(['--uri', '-l']) ?: 'default';
156 if ($uri && !preg_match('/^(http|https):\/\//', $uri)) {
157 $uri = sprintf('http://%s', $uri);
160 $this->set('command', $input->getFirstArgument());
161 $this->set('root', $root);
162 $this->set('uri', $uri);
163 $this->set('debug', $debug);
164 $this->set('source', $source);
165 $this->set('target', $target);
172 private function set($option, $value)
175 $this->options[$option] = $value;
180 if (!array_key_exists($option, $this->options)) {
181 unset($this->options[$option]);
191 public function get($option, $value = null)
193 if (!array_key_exists($option, $this->options)) {
197 return $this->options[$option];
203 public function getAll()
205 return $this->options;
211 public function setOptionsAsArgv()
213 foreach ($this->options as $optionName => $optionValue) {
214 if ($optionName == 'command') {
217 $optionFound = false;
218 foreach ($_SERVER['argv'] as $key => $argv) {
219 if (strpos($argv, '--'.$optionName) === 0) {
220 $_SERVER['argv'][$key] = '--'.$optionName.'='.$optionValue;
226 $_SERVER['argv'][] = '--'.$optionName.'='.$optionValue;
234 public function restoreOriginalArgvValues()
236 return $_SERVER['argv'] = $this->originalArgvValues;