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\Question;
|
Chris@0
|
13
|
Chris@0
|
14 /**
|
Chris@0
|
15 * Represents a yes/no question.
|
Chris@0
|
16 *
|
Chris@0
|
17 * @author Fabien Potencier <fabien@symfony.com>
|
Chris@0
|
18 */
|
Chris@0
|
19 class ConfirmationQuestion extends Question
|
Chris@0
|
20 {
|
Chris@0
|
21 private $trueAnswerRegex;
|
Chris@0
|
22
|
Chris@0
|
23 /**
|
Chris@0
|
24 * @param string $question The question to ask to the user
|
Chris@0
|
25 * @param bool $default The default answer to return, true or false
|
Chris@0
|
26 * @param string $trueAnswerRegex A regex to match the "yes" answer
|
Chris@0
|
27 */
|
Chris@0
|
28 public function __construct($question, $default = true, $trueAnswerRegex = '/^y/i')
|
Chris@0
|
29 {
|
Chris@0
|
30 parent::__construct($question, (bool) $default);
|
Chris@0
|
31
|
Chris@0
|
32 $this->trueAnswerRegex = $trueAnswerRegex;
|
Chris@0
|
33 $this->setNormalizer($this->getDefaultNormalizer());
|
Chris@0
|
34 }
|
Chris@0
|
35
|
Chris@0
|
36 /**
|
Chris@0
|
37 * Returns the default answer normalizer.
|
Chris@0
|
38 *
|
Chris@0
|
39 * @return callable
|
Chris@0
|
40 */
|
Chris@0
|
41 private function getDefaultNormalizer()
|
Chris@0
|
42 {
|
Chris@0
|
43 $default = $this->getDefault();
|
Chris@0
|
44 $regex = $this->trueAnswerRegex;
|
Chris@0
|
45
|
Chris@0
|
46 return function ($answer) use ($default, $regex) {
|
Chris@17
|
47 if (\is_bool($answer)) {
|
Chris@0
|
48 return $answer;
|
Chris@0
|
49 }
|
Chris@0
|
50
|
Chris@0
|
51 $answerIsTrue = (bool) preg_match($regex, $answer);
|
Chris@0
|
52 if (false === $default) {
|
Chris@0
|
53 return $answer && $answerIsTrue;
|
Chris@0
|
54 }
|
Chris@0
|
55
|
Chris@17
|
56 return '' === $answer || $answerIsTrue;
|
Chris@0
|
57 };
|
Chris@0
|
58 }
|
Chris@0
|
59 }
|