|
|
<?php |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
namespace think\console\output; |
|
|
|
|
|
class Question |
|
|
{ |
|
|
|
|
|
private $question; |
|
|
private $attempts; |
|
|
private $hidden = false; |
|
|
private $hiddenFallback = true; |
|
|
private $autocompleterValues; |
|
|
private $validator; |
|
|
private $default; |
|
|
private $normalizer; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function __construct($question, $default = null) |
|
|
{ |
|
|
$this->question = $question; |
|
|
$this->default = $default; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getQuestion() |
|
|
{ |
|
|
return $this->question; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getDefault() |
|
|
{ |
|
|
return $this->default; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function isHidden() |
|
|
{ |
|
|
return $this->hidden; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function setHidden($hidden) |
|
|
{ |
|
|
if ($this->autocompleterValues) { |
|
|
throw new \LogicException('A hidden question cannot use the autocompleter.'); |
|
|
} |
|
|
|
|
|
$this->hidden = (bool) $hidden; |
|
|
|
|
|
return $this; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function isHiddenFallback() |
|
|
{ |
|
|
return $this->hiddenFallback; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function setHiddenFallback($fallback) |
|
|
{ |
|
|
$this->hiddenFallback = (bool) $fallback; |
|
|
|
|
|
return $this; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getAutocompleterValues() |
|
|
{ |
|
|
return $this->autocompleterValues; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function setAutocompleterValues($values) |
|
|
{ |
|
|
if (is_array($values) && $this->isAssoc($values)) { |
|
|
$values = array_merge(array_keys($values), array_values($values)); |
|
|
} |
|
|
|
|
|
if (null !== $values && !is_array($values)) { |
|
|
if (!$values instanceof \Traversable || $values instanceof \Countable) { |
|
|
throw new \InvalidArgumentException('Autocompleter values can be either an array, `null` or an object implementing both `Countable` and `Traversable` interfaces.'); |
|
|
} |
|
|
} |
|
|
|
|
|
if ($this->hidden) { |
|
|
throw new \LogicException('A hidden question cannot use the autocompleter.'); |
|
|
} |
|
|
|
|
|
$this->autocompleterValues = $values; |
|
|
|
|
|
return $this; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function setValidator($validator) |
|
|
{ |
|
|
$this->validator = $validator; |
|
|
|
|
|
return $this; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getValidator() |
|
|
{ |
|
|
return $this->validator; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function setMaxAttempts($attempts) |
|
|
{ |
|
|
if (null !== $attempts && $attempts < 1) { |
|
|
throw new \InvalidArgumentException('Maximum number of attempts must be a positive value.'); |
|
|
} |
|
|
|
|
|
$this->attempts = $attempts; |
|
|
|
|
|
return $this; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getMaxAttempts() |
|
|
{ |
|
|
return $this->attempts; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function setNormalizer($normalizer) |
|
|
{ |
|
|
$this->normalizer = $normalizer; |
|
|
|
|
|
return $this; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getNormalizer() |
|
|
{ |
|
|
return $this->normalizer; |
|
|
} |
|
|
|
|
|
protected function isAssoc($array) |
|
|
{ |
|
|
return (bool) count(array_filter(array_keys($array), 'is_string')); |
|
|
} |
|
|
} |
|
|
|