comparison vendor/symfony/console/Question/Question.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children 1fec387a4317
comparison
equal deleted inserted replaced
-1:000000000000 0:4c8ae668cc8c
1 <?php
2
3 /*
4 * This file is part of the Symfony package.
5 *
6 * (c) Fabien Potencier <fabien@symfony.com>
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11
12 namespace Symfony\Component\Console\Question;
13
14 use Symfony\Component\Console\Exception\InvalidArgumentException;
15 use Symfony\Component\Console\Exception\LogicException;
16
17 /**
18 * Represents a Question.
19 *
20 * @author Fabien Potencier <fabien@symfony.com>
21 */
22 class Question
23 {
24 private $question;
25 private $attempts;
26 private $hidden = false;
27 private $hiddenFallback = true;
28 private $autocompleterValues;
29 private $validator;
30 private $default;
31 private $normalizer;
32
33 /**
34 * Constructor.
35 *
36 * @param string $question The question to ask to the user
37 * @param mixed $default The default answer to return if the user enters nothing
38 */
39 public function __construct($question, $default = null)
40 {
41 $this->question = $question;
42 $this->default = $default;
43 }
44
45 /**
46 * Returns the question.
47 *
48 * @return string
49 */
50 public function getQuestion()
51 {
52 return $this->question;
53 }
54
55 /**
56 * Returns the default answer.
57 *
58 * @return mixed
59 */
60 public function getDefault()
61 {
62 return $this->default;
63 }
64
65 /**
66 * Returns whether the user response must be hidden.
67 *
68 * @return bool
69 */
70 public function isHidden()
71 {
72 return $this->hidden;
73 }
74
75 /**
76 * Sets whether the user response must be hidden or not.
77 *
78 * @param bool $hidden
79 *
80 * @return $this
81 *
82 * @throws LogicException In case the autocompleter is also used
83 */
84 public function setHidden($hidden)
85 {
86 if ($this->autocompleterValues) {
87 throw new LogicException('A hidden question cannot use the autocompleter.');
88 }
89
90 $this->hidden = (bool) $hidden;
91
92 return $this;
93 }
94
95 /**
96 * In case the response can not be hidden, whether to fallback on non-hidden question or not.
97 *
98 * @return bool
99 */
100 public function isHiddenFallback()
101 {
102 return $this->hiddenFallback;
103 }
104
105 /**
106 * Sets whether to fallback on non-hidden question if the response can not be hidden.
107 *
108 * @param bool $fallback
109 *
110 * @return $this
111 */
112 public function setHiddenFallback($fallback)
113 {
114 $this->hiddenFallback = (bool) $fallback;
115
116 return $this;
117 }
118
119 /**
120 * Gets values for the autocompleter.
121 *
122 * @return null|array|\Traversable
123 */
124 public function getAutocompleterValues()
125 {
126 return $this->autocompleterValues;
127 }
128
129 /**
130 * Sets values for the autocompleter.
131 *
132 * @param null|array|\Traversable $values
133 *
134 * @return $this
135 *
136 * @throws InvalidArgumentException
137 * @throws LogicException
138 */
139 public function setAutocompleterValues($values)
140 {
141 if (is_array($values)) {
142 $values = $this->isAssoc($values) ? array_merge(array_keys($values), array_values($values)) : array_values($values);
143 }
144
145 if (null !== $values && !is_array($values)) {
146 if (!$values instanceof \Traversable || !$values instanceof \Countable) {
147 throw new InvalidArgumentException('Autocompleter values can be either an array, `null` or an object implementing both `Countable` and `Traversable` interfaces.');
148 }
149 }
150
151 if ($this->hidden) {
152 throw new LogicException('A hidden question cannot use the autocompleter.');
153 }
154
155 $this->autocompleterValues = $values;
156
157 return $this;
158 }
159
160 /**
161 * Sets a validator for the question.
162 *
163 * @param null|callable $validator
164 *
165 * @return $this
166 */
167 public function setValidator(callable $validator = null)
168 {
169 $this->validator = $validator;
170
171 return $this;
172 }
173
174 /**
175 * Gets the validator for the question.
176 *
177 * @return null|callable
178 */
179 public function getValidator()
180 {
181 return $this->validator;
182 }
183
184 /**
185 * Sets the maximum number of attempts.
186 *
187 * Null means an unlimited number of attempts.
188 *
189 * @param null|int $attempts
190 *
191 * @return $this
192 *
193 * @throws InvalidArgumentException In case the number of attempts is invalid.
194 */
195 public function setMaxAttempts($attempts)
196 {
197 if (null !== $attempts && $attempts < 1) {
198 throw new InvalidArgumentException('Maximum number of attempts must be a positive value.');
199 }
200
201 $this->attempts = $attempts;
202
203 return $this;
204 }
205
206 /**
207 * Gets the maximum number of attempts.
208 *
209 * Null means an unlimited number of attempts.
210 *
211 * @return null|int
212 */
213 public function getMaxAttempts()
214 {
215 return $this->attempts;
216 }
217
218 /**
219 * Sets a normalizer for the response.
220 *
221 * The normalizer can be a callable (a string), a closure or a class implementing __invoke.
222 *
223 * @param callable $normalizer
224 *
225 * @return $this
226 */
227 public function setNormalizer(callable $normalizer)
228 {
229 $this->normalizer = $normalizer;
230
231 return $this;
232 }
233
234 /**
235 * Gets the normalizer for the response.
236 *
237 * The normalizer can ba a callable (a string), a closure or a class implementing __invoke.
238 *
239 * @return callable
240 */
241 public function getNormalizer()
242 {
243 return $this->normalizer;
244 }
245
246 protected function isAssoc($array)
247 {
248 return (bool) count(array_filter(array_keys($array), 'is_string'));
249 }
250 }