Файл: concrete5.7.5.6/concrete/vendor/zendframework/zend-validator/src/Explode.php
Строк: 176
<?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 ZendValidator;
use Traversable;
use ZendStdlibArrayUtils;
class Explode extends AbstractValidator implements ValidatorPluginManagerAwareInterface
{
    const INVALID = 'explodeInvalid';
    protected $pluginManager;
    /**
     * @var array
     */
    protected $messageTemplates = array(
        self::INVALID => "Invalid type given",
    );
    /**
     * @var array
     */
    protected $messageVariables = array();
    /**
     * @var string
     */
    protected $valueDelimiter = ',';
    /**
     * @var ValidatorInterface
     */
    protected $validator;
    /**
     * @var bool
     */
    protected $breakOnFirstFailure = false;
    /**
     * Sets the delimiter string that the values will be split upon
     *
     * @param string $delimiter
     * @return Explode
     */
    public function setValueDelimiter($delimiter)
    {
        $this->valueDelimiter = $delimiter;
        return $this;
    }
    /**
     * Returns the delimiter string that the values will be split upon
     *
     * @return string
     */
    public function getValueDelimiter()
    {
        return $this->valueDelimiter;
    }
    /**
     * Set validator plugin manager
     *
     * @param ValidatorPluginManager $pluginManager
     */
    public function setValidatorPluginManager(ValidatorPluginManager $pluginManager)
    {
        $this->pluginManager = $pluginManager;
    }
    /**
     * Get validator plugin manager
     *
     * @return ValidatorPluginManager
     */
    public function getValidatorPluginManager()
    {
        if (!$this->pluginManager) {
            $this->setValidatorPluginManager(new ValidatorPluginManager());
        }
        return $this->pluginManager;
    }
    /**
     * Sets the Validator for validating each value
     *
     * @param ValidatorInterface|array $validator
     * @throws ExceptionRuntimeException
     * @return Explode
     */
    public function setValidator($validator)
    {
        if (is_array($validator)) {
            if (!isset($validator['name'])) {
                throw new ExceptionRuntimeException(
                    'Invalid validator specification provided; does not include "name" key'
                );
            }
            $name = $validator['name'];
            $options = isset($validator['options']) ? $validator['options'] : array();
            $validator = $this->getValidatorPluginManager()->get($name, $options);
        }
        if (!$validator instanceof ValidatorInterface) {
            throw new ExceptionRuntimeException(
                'Invalid validator given'
            );
        }
        $this->validator = $validator;
        return $this;
    }
    /**
     * Gets the Validator for validating each value
     *
     * @return ValidatorInterface
     */
    public function getValidator()
    {
        return $this->validator;
    }
    /**
     * Set break on first failure setting
     *
     * @param  bool $break
     * @return Explode
     */
    public function setBreakOnFirstFailure($break)
    {
        $this->breakOnFirstFailure = (bool) $break;
        return $this;
    }
    /**
     * Get break on first failure setting
     *
     * @return bool
     */
    public function isBreakOnFirstFailure()
    {
        return $this->breakOnFirstFailure;
    }
    /**
     * Defined by ZendValidatorValidatorInterface
     *
     * Returns true if all values validate true
     *
     * @param  mixed $value
     * @return bool
     * @throws ExceptionRuntimeException
     */
    public function isValid($value)
    {
        $this->setValue($value);
        if ($value instanceof Traversable) {
            $value = ArrayUtils::iteratorToArray($value);
        }
        if (is_array($value)) {
            $values = $value;
        } elseif (is_string($value)) {
            $delimiter = $this->getValueDelimiter();
            // Skip explode if delimiter is null,
            // used when value is expected to be either an
            // array when multiple values and a string for
            // single values (ie. MultiCheckbox form behavior)
            $values = (null !== $delimiter)
                      ? explode($this->valueDelimiter, $value)
                      : array($value);
        } else {
            $values = array($value);
        }
        $retval    = true;
        $messages  = array();
        $validator = $this->getValidator();
        if (!$validator) {
            throw new ExceptionRuntimeException(sprintf(
                '%s expects a validator to be set; none given',
                __METHOD__
            ));
        }
        foreach ($values as $value) {
            if (!$validator->isValid($value)) {
                $messages[] = $validator->getMessages();
                $retval = false;
                if ($this->isBreakOnFirstFailure()) {
                    break;
                }
            }
        }
        $this->abstractOptions['messages'] = $messages;
        return $retval;
    }
}