Mercurial > hg > isophonics-drupal-site
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 } |