/** * @see Command */ protected function execute(InputInterface $input, OutputInterface $output) { $options = $input->getOptions(); $ask = function ($what, $default = null, $values = array()) { while (true) { $q = "\n" . $what; if ($default !== null) { $q .= " [{$default}]: "; } else { $q .= ": "; } $v = readline($q); if (!empty($values)) { if (in_array($v, $values)) { return $v; } } else { if ($v !== '') { return $v; } } if ($default !== null) { return $default; } } }; foreach ($options as $key => &$value) { if (!$value) { switch ($key) { case 'ip': $ip = $this->application->getController()->findFreeIp(); if (!$ip) { throw new \Exception('No free ip left'); } $options[$key] = $ask('IP', $ip); break; case 'template': $default = $this->application->getController()->getConfig('general', 'default_template'); $templates = $this->application->getController()->getTemplates(); $templates_rev = array_flip($templates); $what = "Select template\n"; foreach ($templates as $key => $value) { $what .= " {$key}) {$value}\n"; } $what .= 'Template'; $default_idx = isset($templates_rev[$default]) ? $templates_rev[$default] : null; $i = (int) $ask($what, $default_idx, $templates_rev); $options[$key] = $templates[$i]; break; case 'name': $options[$key] = $ask('Name'); break; default: break; } } } $this->application->getController()->create($options, function ($message) { echo \Console_Color::convert(" %g>>%n ") . $message . "\n"; }); }