protected function execute(InputInterface $input, OutputInterface $output)
{
$files = $this->getScripts();
if ($input->getArgument('script') == null && $input->isInteractive()) {
$question = array();
$i = 0;
foreach ($files as $file) {
$files[$i] = $file;
$question[] = '<comment>[' . ($i + 1) . ']</comment> ' . $file['fileinfo']->getFilename() . PHP_EOL;
$i++;
}
$question[] = '<question>Please select a script file: </question>';
$selectedFile = $this->getHelper('dialog')->askAndValidate($output, $question, function ($typeInput) use($files) {
if (!isset($files[$typeInput - 1])) {
throw new InvalidArgumentException('Invalid file');
}
return $files[$typeInput - 1]['fileinfo']->getPathname();
});
} else {
$script = $input->getArgument('script');
if (substr($script, -strlen(self::MAGERUN_EXTENSION)) !== self::MAGERUN_EXTENSION) {
$script .= self::MAGERUN_EXTENSION;
}
if (!isset($files[$script])) {
throw new InvalidArgumentException('Invalid script');
}
$selectedFile = $files[$script]['fileinfo']->getPathname();
}
$scriptArray = array('command' => 'script', 'filename' => $selectedFile);
foreach ($input->getOption('define') as $define) {
$scriptArray['--define'][] = $define;
}
if ($input->getOption('stop-on-error')) {
$scriptArray['--stop-on-error'] = true;
}
$input = new ArrayInput($scriptArray);
$this->getApplication()->run($input, $output);
}