input = $input; parent::__construct($input, $output); } /** * @param string $question * @param array $choices * @param mixed $default * @param bool $allowEmpty * * @return string */ public function choiceNoList($question, array $choices, $default = null, $allowEmpty = false) { if ($allowEmpty) { $default = ' '; } if (is_null($default)) { $default = current($choices); } if (!in_array($default, $choices)) { $choices[] = $default; } if (null !== $default) { $values = array_flip($choices); $default = $values[$default]; } return trim($this->askChoiceQuestion(new ChoiceQuestion($question, $choices, $default))); } /** * @param string $question * @param array $choices * @param null $default * @param bool $multiple * * @return string */ public function choice($question, array $choices, $default = null, $multiple = false) { if (null !== $default) { $values = array_flip($choices); $default = $values[$default]; } $choiceQuestion = new ChoiceQuestion($question, $choices, $default); $choiceQuestion->setMultiselect($multiple); return $this->askQuestion($choiceQuestion); } /** * @param ChoiceQuestion $question * * @return string */ public function askChoiceQuestion(ChoiceQuestion $question) { $questionHelper = new DrupalChoiceQuestionHelper(); $answer = $questionHelper->ask($this->input, $this, $question); return $answer; } /** * @param $question * * @return string */ public function askHiddenEmpty($question) { $question = new Question($question, ' '); $question->setHidden(true); return trim($this->askQuestion($question)); } /** * @param string $question * @param null|callable $validator * * @return string */ public function askEmpty($question, $validator = null) { $question = new Question($question, ' '); $question->setValidator($validator); return trim($this->askQuestion($question)); } /** * @param $message * @param bool $newLine */ public function info($message, $newLine = true) { $message = sprintf(' %s', $message); if ($newLine) { $this->writeln($message); } else { $this->write($message); } } /** * @param array|string $message * @param bool $newLine */ public function comment($message, $newLine = true) { $message = sprintf(' %s', $message); if ($newLine) { $this->writeln($message); } else { $this->write($message); } } /** * @param $message */ public function commentBlock($message) { $this->block( $message, null, 'bg=yellow;fg=black', ' ', true ); } /** * @param array $headers * @param array $rows * @param string $style */ public function table(array $headers, array $rows, $style = 'symfony-style-guide') { $headers = array_map( function ($value) { return sprintf('%s', $value); }, $headers ); if (!is_array(current($rows))) { $rows = array_map( function ($row) { return [$row]; }, $rows ); } $table = new Table($this); $table->setHeaders($headers); $table->setRows($rows); $table->setStyle($style); $table->render(); $this->newLine(); } /** * @param $message * @param bool $newLine */ public function simple($message, $newLine = true) { $message = sprintf(' %s', $message); if ($newLine) { $this->writeln($message); } else { $this->write($message); } } /** * @param array|string $message */ public function text($message) { $message = sprintf('// %s', $message); parent::text($message); } public function successLite($message, $newLine = false) { $message = sprintf(' %s', $message); parent::text($message); if ($newLine) { parent::newLine(); } } public function errorLite($message, $newLine = false) { $message = sprintf('✘ %s', $message); parent::text($message); if ($newLine) { parent::newLine(); } } public function warningLite($message, $newLine = false) { $message = sprintf('! %s', $message); parent::text($message); if ($newLine) { parent::newLine(); } } public function customLite($message, $prefix = '*', $style = '', $newLine = false) { if ($style) { $message = sprintf( '<%s>%s %s', $style, $prefix, $style, $message ); } else { $message = sprintf( '%s %s', $prefix, $message ); } parent::text($message); if ($newLine) { parent::newLine(); } } }