<?php
/**
* Zend Framework (http://framework.zend.com/)
*
* @link http://github.com/zendframework/zf2 for the canonical source repository
* @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
namespace Zend\Console\Prompt;
use Zend\Console\Exception;
class Select extends Char
{
/**
* @var string
*/
protected $promptText = 'Please select an option';
/**
* @var bool
*/
protected $ignoreCase = true;
/**
* @var array
*/
protected $options = array();
/**
* Ask the user to select one of pre-defined options
*
* @param string $promptText The prompt text to display in console
* @param array $options Allowed options
* @param bool $allowEmpty Allow empty (no) selection?
* @param bool $echo True to display selected option?
* @throws Exception\BadMethodCallException if no options available
*/
public function __construct(
$promptText = 'Please select one option',
$options = array(),
$allowEmpty = false,
$echo = false
) {
if ($promptText !== null) {
$this->setPromptText($promptText);
}
if (!count($options)) {
throw new Exception\BadMethodCallException(
'Cannot construct a "select" prompt without any options'
);
}
$this->setOptions($options);
if ($allowEmpty !== null) {
$this->setAllowEmpty($allowEmpty);
}
if ($echo !== null) {
$this->setEcho($echo);
}
}
/**
* Show a list of options and prompt the user to select one of them.
*
* @return string Selected option
*/
public function show()
{
// Show prompt text and available options
$console = $this->getConsole();
$console->writeLine($this->promptText);
foreach ($this->options as $k => $v) {
$console->writeLine(' ' . $k . ') ' . $v);
}
// Prepare mask
$mask = implode("", array_keys($this->options));
if ($this->allowEmpty) {
$mask .= "\r\n";
}
// Prepare other params for parent class
$this->setAllowedChars($mask);
$oldPrompt = $this->promptText;
$oldEcho = $this->echo;
$this->echo = false;
$this->promptText = null;
// Retrieve a single character
$response = parent::show();
// Restore old params
$this->promptText = $oldPrompt;
$this->echo = $oldEcho;
// Display selected option if echo is enabled
if ($this->echo) {
if (isset($this->options[$response])) {
$console->writeLine($this->options[$response]);
} else {
$console->writeLine();
}
}
$this->lastResponse = $response;
return $response;
}
/**
* Set allowed options
*
* @param array|\Traversable $options
* @throws Exception\BadMethodCallException
*/
public function setOptions($options)
{
if (!is_array($options) && !$options instanceof \Traversable) {
throw new Exception\BadMethodCallException(
'Please specify an array or Traversable object as options'
);
}
if (!is_array($options)) {
$this->options = array();
foreach ($options as $k => $v) {
$this->options[$k] = $v;
}
} else {
$this->options = $options;
}
}
/**
* @return array
*/
public function getOptions()
{
return $this->options;
}
}
# |
Change |
User |
Description |
Committed |
|
#1
|
18334 |
Liz Lam |
initial add of jambox |
|
|