* array( * 'yes' => 'y', * 'no' => 'n', * '1' => 'y', * '0' => 'n' * ) * * While the corresponding collection of valid answers would look like * this: * * array( * 'y', 'n' * ) * * If the answer 'yes' is received by the validator, it is mapped to 'y', * therefore considered valid and 'y' is returned as the received value. * * @package ConsoleTools * @version 1.6rc1 * * @property array(string) $collection * The collection of valid answers. * @property mixed $default * Default value. * @property int $conversion * ezcConsoleDialogValidator::CONVERT_NONE (default) or * ezcConsoleDialogValidator::CONVERT_LOWER or * ezcConsoleDialogValidator::CONVERT_UPPER. * @property array(string=>string) $map * Mapping of answers to valid answers (e.g. array('yes' => 'y') to * map 'yes' to 'y' while 'y' must be in $collection). */ class ezcConsoleQuestionDialogMappingValidator extends ezcConsoleQuestionDialogCollectionValidator { /** * Creates a new question dialog mapping validator. * Creates a new question dialog mapping validator, which validates the * result specified by the user against an array of valid results * ($collection). If not value is provided by the user a possibly set * $default value is used instead. The $conversion parameter can optionally * define a conversion to be performed on the result before validating it. * Valid conversions are defined by the CONVERT_* constants in this class. * * While this functionality is already provided by {@link * ezcConsoleQuestionDialogCollectionValidator}, the additional $map * paramater allows the sepcification of a map of result values. These * mapping is then checked for matches, before a received answer is * validated against the collection. * * @param array(string) $collection The collection of valid results. * @param mixed $default Optional default value. * @param int $conversion CONVERT_* constant. * @param array(string=>string) $map * @return void */ public function __construct( array $collection, $default = null, $conversion = self::CONVERT_NONE, array $map = array() ) { // Initialize additional property $this->properties['map'] = $map; parent::__construct( $collection, $default, $conversion ); } /** * Returns a fixed version of the result, if possible. * Converts the given result according to the conversion defined in the * $conversion property. * * @param mixed $result The received result. * @return mixed The manipulated result. */ public function fixup( $result ) { if ( $result === "" && $this->default !== null ) { return $this->default; } switch ( $this->conversion ) { case self::CONVERT_UPPER: $result = strtoupper( $result ); break; case self::CONVERT_LOWER: $result = strtolower( $result ); break; } return ( isset( $this->map[$result] ) ? $this->map[$result] : $result ); } /** * Property write access. * * @param string $propertyName Name of the property. * @param mixed $propertyValue The value for the property. * * @throws ezcBasePropertyNotFoundException * If a the value for the property options is not an instance of * @throws ezcBaseValueException * If a the value for a property is out of range. * @ignore */ public function __set( $propertyName, $propertyValue ) { switch ( $propertyName ) { case "map": if ( is_array( $propertyValue ) === false ) { throw new ezcBaseValueException( $propertyName, $propertyValue, "array" ); } break; default: return parent::__set( $propertyName, $propertyValue ); } $this->properties[$propertyName] = $propertyValue; } } ?>