annotate vendor/symfony/console/Helper/SymfonyQuestionHelper.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children 1fec387a4317
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 /*
Chris@0 4 * This file is part of the Symfony package.
Chris@0 5 *
Chris@0 6 * (c) Fabien Potencier <fabien@symfony.com>
Chris@0 7 *
Chris@0 8 * For the full copyright and license information, please view the LICENSE
Chris@0 9 * file that was distributed with this source code.
Chris@0 10 */
Chris@0 11
Chris@0 12 namespace Symfony\Component\Console\Helper;
Chris@0 13
Chris@0 14 use Symfony\Component\Console\Exception\LogicException;
Chris@0 15 use Symfony\Component\Console\Input\InputInterface;
Chris@0 16 use Symfony\Component\Console\Output\OutputInterface;
Chris@0 17 use Symfony\Component\Console\Question\ChoiceQuestion;
Chris@0 18 use Symfony\Component\Console\Question\ConfirmationQuestion;
Chris@0 19 use Symfony\Component\Console\Question\Question;
Chris@0 20 use Symfony\Component\Console\Style\SymfonyStyle;
Chris@0 21 use Symfony\Component\Console\Formatter\OutputFormatter;
Chris@0 22
Chris@0 23 /**
Chris@0 24 * Symfony Style Guide compliant question helper.
Chris@0 25 *
Chris@0 26 * @author Kevin Bond <kevinbond@gmail.com>
Chris@0 27 */
Chris@0 28 class SymfonyQuestionHelper extends QuestionHelper
Chris@0 29 {
Chris@0 30 /**
Chris@0 31 * {@inheritdoc}
Chris@0 32 */
Chris@0 33 public function ask(InputInterface $input, OutputInterface $output, Question $question)
Chris@0 34 {
Chris@0 35 $validator = $question->getValidator();
Chris@0 36 $question->setValidator(function ($value) use ($validator) {
Chris@0 37 if (null !== $validator) {
Chris@0 38 $value = $validator($value);
Chris@0 39 } else {
Chris@0 40 // make required
Chris@0 41 if (!is_array($value) && !is_bool($value) && 0 === strlen($value)) {
Chris@0 42 throw new LogicException('A value is required.');
Chris@0 43 }
Chris@0 44 }
Chris@0 45
Chris@0 46 return $value;
Chris@0 47 });
Chris@0 48
Chris@0 49 return parent::ask($input, $output, $question);
Chris@0 50 }
Chris@0 51
Chris@0 52 /**
Chris@0 53 * {@inheritdoc}
Chris@0 54 */
Chris@0 55 protected function writePrompt(OutputInterface $output, Question $question)
Chris@0 56 {
Chris@0 57 $text = OutputFormatter::escapeTrailingBackslash($question->getQuestion());
Chris@0 58 $default = $question->getDefault();
Chris@0 59
Chris@0 60 switch (true) {
Chris@0 61 case null === $default:
Chris@0 62 $text = sprintf(' <info>%s</info>:', $text);
Chris@0 63
Chris@0 64 break;
Chris@0 65
Chris@0 66 case $question instanceof ConfirmationQuestion:
Chris@0 67 $text = sprintf(' <info>%s (yes/no)</info> [<comment>%s</comment>]:', $text, $default ? 'yes' : 'no');
Chris@0 68
Chris@0 69 break;
Chris@0 70
Chris@0 71 case $question instanceof ChoiceQuestion && $question->isMultiselect():
Chris@0 72 $choices = $question->getChoices();
Chris@0 73 $default = explode(',', $default);
Chris@0 74
Chris@0 75 foreach ($default as $key => $value) {
Chris@0 76 $default[$key] = $choices[trim($value)];
Chris@0 77 }
Chris@0 78
Chris@0 79 $text = sprintf(' <info>%s</info> [<comment>%s</comment>]:', $text, OutputFormatter::escape(implode(', ', $default)));
Chris@0 80
Chris@0 81 break;
Chris@0 82
Chris@0 83 case $question instanceof ChoiceQuestion:
Chris@0 84 $choices = $question->getChoices();
Chris@0 85 $text = sprintf(' <info>%s</info> [<comment>%s</comment>]:', $text, OutputFormatter::escape($choices[$default]));
Chris@0 86
Chris@0 87 break;
Chris@0 88
Chris@0 89 default:
Chris@0 90 $text = sprintf(' <info>%s</info> [<comment>%s</comment>]:', $text, OutputFormatter::escape($default));
Chris@0 91 }
Chris@0 92
Chris@0 93 $output->writeln($text);
Chris@0 94
Chris@0 95 if ($question instanceof ChoiceQuestion) {
Chris@0 96 $width = max(array_map('strlen', array_keys($question->getChoices())));
Chris@0 97
Chris@0 98 foreach ($question->getChoices() as $key => $value) {
Chris@0 99 $output->writeln(sprintf(" [<comment>%-${width}s</comment>] %s", $key, $value));
Chris@0 100 }
Chris@0 101 }
Chris@0 102
Chris@0 103 $output->write(' > ');
Chris@0 104 }
Chris@0 105
Chris@0 106 /**
Chris@0 107 * {@inheritdoc}
Chris@0 108 */
Chris@0 109 protected function writeError(OutputInterface $output, \Exception $error)
Chris@0 110 {
Chris@0 111 if ($output instanceof SymfonyStyle) {
Chris@0 112 $output->newLine();
Chris@0 113 $output->error($error->getMessage());
Chris@0 114
Chris@0 115 return;
Chris@0 116 }
Chris@0 117
Chris@0 118 parent::writeError($output, $error);
Chris@0 119 }
Chris@0 120 }