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> %s',
$style,
$prefix,
$style,
$message
);
} else {
$message = sprintf(
'%s %s',
$prefix,
$message
);
}
parent::text($message);
if ($newLine) {
parent::newLine();
}
}
}