<?php /** * Zend Framework * * LICENSE * * This source file is subject to the new BSD license that is bundled * with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://framework.zend.com/license/new-bsd * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to [email protected] so we can send you a copy immediately. * * @category Zend * @package Zend_Validate * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License * @version $Id$ */ /** * @see Zend_Validate_Abstract */ require_once 'Zend/Validate/Abstract.php'; /** * @category Zend * @package Zend_Validate * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License */ class Zend_Validate_InArray extends Zend_Validate_Abstract { const NOT_IN_ARRAY = 'notInArray'; /** * @var array */ protected $_messageTemplates = array( self::NOT_IN_ARRAY => "'%value%' was not found in the haystack", ); /** * Haystack of possible values * * @var array */ protected $_haystack; /** * Whether a strict in_array() invocation is used * * @var boolean */ protected $_strict = false; /** * Whether a recursive search should be done * * @var boolean */ protected $_recursive = false; /** * Sets validator options * * @param array|Zend_Config $haystack * @return void */ public function __construct($options) { if ($options instanceof Zend_Config) { $options = $options->toArray(); } else if (!is_array($options)) { require_once 'Zend/Validate/Exception.php'; throw new Zend_Validate_Exception('Array expected as parameter'); } else { $count = func_num_args(); $temp = array(); if ($count > 1) { $temp['haystack'] = func_get_arg(0); $temp['strict'] = func_get_arg(1); $options = $temp; } else { $temp = func_get_arg(0); if (!array_key_exists('haystack', $options)) { $options = array(); $options['haystack'] = $temp; } else { $options = $temp; } } } $this->setHaystack($options['haystack']); if (array_key_exists('strict', $options)) { $this->setStrict($options['strict']); } if (array_key_exists('recursive', $options)) { $this->setRecursive($options['recursive']); } } /** * Returns the haystack option * * @return mixed */ public function getHaystack() { return $this->_haystack; } /** * Sets the haystack option * * @param mixed $haystack * @return Zend_Validate_InArray Provides a fluent interface */ public function setHaystack(array $haystack) { $this->_haystack = $haystack; return $this; } /** * Returns the strict option * * @return boolean */ public function getStrict() { return $this->_strict; } /** * Sets the strict option * * @param boolean $strict * @return Zend_Validate_InArray Provides a fluent interface */ public function setStrict($strict) { $this->_strict = (boolean) $strict; return $this; } /** * Returns the recursive option * * @return boolean */ public function getRecursive() { return $this->_recursive; } /** * Sets the recursive option * * @param boolean $recursive * @return Zend_Validate_InArray Provides a fluent interface */ public function setRecursive($recursive) { $this->_recursive = (boolean) $recursive; return $this; } /** * Defined by Zend_Validate_Interface * * Returns true if and only if $value is contained in the haystack option. If the strict * option is true, then the type of $value is also checked. * * @param mixed $value * @return boolean */ public function isValid($value) { $this->_setValue($value); if ($this->getRecursive()) { $iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($this->_haystack)); foreach($iterator as $element) { if ($this->_strict) { if ($element === $value) { return true; } } else if ($element == $value) { return true; } } } else { if (in_array($value, $this->_haystack, $this->_strict)) { return true; } } $this->_error(self::NOT_IN_ARRAY); return false; } }