diff options
Diffstat (limited to 'libs/Zend/Validate/Barcode.php')
-rw-r--r-- | libs/Zend/Validate/Barcode.php | 182 |
1 files changed, 152 insertions, 30 deletions
diff --git a/libs/Zend/Validate/Barcode.php b/libs/Zend/Validate/Barcode.php index 374a9e5449..111010880e 100644 --- a/libs/Zend/Validate/Barcode.php +++ b/libs/Zend/Validate/Barcode.php @@ -14,70 +14,164 @@ * * @category Zend * @package Zend_Validate - * @copyright Copyright (c) 2005-2009 Zend Technologies USA Inc. (http://www.zend.com) + * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License - * @version $Id: Barcode.php 16223 2009-06-21 20:04:53Z thomas $ + * @version $Id: Barcode.php 21748 2010-04-03 10:29:56Z thomas $ */ /** * @see Zend_Validate_Abstract */ -require_once 'Zend/Validate/Abstract.php'; +// require_once 'Zend/Validate/Abstract.php'; + +/** + * @see Zend_Loader + */ +// require_once 'Zend/Loader.php'; /** * @category Zend * @package Zend_Validate - * @copyright Copyright (c) 2005-2009 Zend Technologies USA Inc. (http://www.zend.com) + * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License */ class Zend_Validate_Barcode extends Zend_Validate_Abstract { + const INVALID = 'barcodeInvalid'; + const FAILED = 'barcodeFailed'; + const INVALID_CHARS = 'barcodeInvalidChars'; + const INVALID_LENGTH = 'barcodeInvalidLength'; + + protected $_messageTemplates = array( + self::FAILED => "'%value%' failed checksum validation", + self::INVALID_CHARS => "'%value%' contains invalid characters", + self::INVALID_LENGTH => "'%value%' should have a length of %length% characters", + self::INVALID => "Invalid type given, value should be string", + ); + + /** + * Additional variables available for validation failure messages + * + * @var array + */ + protected $_messageVariables = array( + 'length' => '_length' + ); + + /** + * Length for the set subtype + * + * @var integer + */ + protected $_length; + /** - * Barcode validator + * Barcode adapter * - * @var Zend_Validate_Abstract + * @var Zend_Validate_Barcode_BarcodeAdapter */ - protected $_barcodeValidator; + protected $_adapter; /** * Generates the standard validator object * - * @param string $barcodeType - Barcode validator to use + * @param string|Zend_Config| + * Zend_Validate_Barcode_BarcodeAdapter $adapter Barcode adapter to use * @return void * @throws Zend_Validate_Exception */ - public function __construct($barcodeType) + public function __construct($adapter) + { + if ($adapter instanceof Zend_Config) { + $adapter = $adapter->toArray(); + } + + $options = null; + $checksum = null; + if (is_array($adapter)) { + if (array_key_exists('options', $adapter)) { + $options = $adapter['options']; + } + + if (array_key_exists('checksum', $adapter)) { + $checksum = $adapter['checksum']; + } + + if (array_key_exists('adapter', $adapter)) { + $adapter = $adapter['adapter']; + } else { + // require_once 'Zend/Validate/Exception.php'; + throw new Zend_Validate_Exception("Missing option 'adapter'"); + } + } + + $this->setAdapter($adapter, $options); + if ($checksum !== null) { + $this->setChecksum($checksum); + } + } + + /** + * Returns the set adapter + * + * @return Zend_Validate_Barcode_BarcodeAdapter + */ + public function getAdapter() { - $this->setType($barcodeType); + return $this->_adapter; } /** - * Sets a new barcode validator + * Sets a new barcode adapter * - * @param string $barcodeType - Barcode validator to use + * @param string|Zend_Validate_Barcode $adapter Barcode adapter to use + * @param array $options Options for this adapter * @return void * @throws Zend_Validate_Exception */ - public function setType($barcodeType) + public function setAdapter($adapter, $options = null) { - switch (strtolower($barcodeType)) { - case 'upc': - case 'upc-a': - require_once 'Zend/Validate/Barcode/UpcA.php'; - $class = 'Zend_Validate_Barcode_UpcA'; - break; - case 'ean13': - case 'ean-13': - require_once 'Zend/Validate/Barcode/Ean13.php'; - $class = 'Zend_Validate_Barcode_Ean13'; - break; - default: - require_once 'Zend/Validate/Exception.php'; - throw new Zend_Validate_Exception("Barcode type '$barcodeType' is not supported'"); - break; + $adapter = ucfirst(strtolower($adapter)); + // require_once 'Zend/Loader.php'; + if (Zend_Loader::isReadable('Zend/Validate/Barcode/' . $adapter. '.php')) { + $adapter = 'Zend_Validate_Barcode_' . $adapter; + } + + // if (!class_exists($adapter)) { + // Zend_Loader::loadClass($adapter); + // } + + $this->_adapter = new $adapter($options); + if (!$this->_adapter instanceof Zend_Validate_Barcode_AdapterInterface) { + // require_once 'Zend/Validate/Exception.php'; + throw new Zend_Validate_Exception( + "Adapter " . $adapter . " does not implement Zend_Validate_Barcode_AdapterInterface" + ); } - $this->_barcodeValidator = new $class; + return $this; + } + + /** + * Returns the checksum option + * + * @return boolean + */ + public function getChecksum() + { + return $this->getAdapter()->getCheck(); + } + + /** + * Sets the checksum option + * + * @param boolean $checksum + * @return Zend_Validate_Barcode + */ + public function setChecksum($checksum) + { + $this->getAdapter()->setCheck($checksum); + return $this; } /** @@ -90,6 +184,34 @@ class Zend_Validate_Barcode extends Zend_Validate_Abstract */ public function isValid($value) { - return call_user_func(array($this->_barcodeValidator, 'isValid'), $value); + if (!is_string($value)) { + $this->_error(self::INVALID); + return false; + } + + $this->_setValue($value); + $adapter = $this->getAdapter(); + $this->_length = $adapter->getLength(); + $result = $adapter->checkLength($value); + if (!$result) { + $this->_error(self::INVALID_LENGTH); + return false; + } + + $result = $adapter->checkChars($value); + if (!$result) { + $this->_error(self::INVALID_CHARS); + return false; + } + + if ($this->getChecksum()) { + $result = $adapter->checksum($value); + if (!$result) { + $this->_error(self::FAILED); + return false; + } + } + + return true; } } |