| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 | <?php/** * * PHP Pro Bid $Id$ CIRslYEf3mfCjDYVWa6h00QEiY+aTS/CqM7LtuIw6fY= * * @link        http://www.phpprobid.com * @copyright   Copyright (c) 2016 Online Ventures Software & CodeCube SRL * @license     http://www.phpprobid.com/license Commercial License * * @version     7.8 *//** * stock levels field validator class */namespace Ppb\Validate;use Cube\Validate\AbstractValidate,    Ppb\Form\Element\StockLevels as StockLevelsElement;class StockLevels extends AbstractValidate{    const NO_STOCK = 1;    const QUANTITY_NOT_NUMERIC = 2;    const PRICE_NOT_NUMERIC = 3;    protected $_messages = array(        self::NO_STOCK             => "'%s' is required and cannot be empty.",        self::QUANTITY_NOT_NUMERIC => "'%s': the quantity fields only accept positive integer values.",        self::PRICE_NOT_NUMERIC    => "'%s': the price fields only accept numeric values.",    );    /**     *     * checks if at least one stock option has been entered and     * if the price fields contain numeric values     *     * @return bool          return true if the validation is successful     */    public function isValid()    {        $value = $this->getValue();        $array = array();        if (is_array($value)) {            foreach ($value as $k => $v) {                $array[StockLevelsElement::FIELD_OPTIONS][] = $v[StockLevelsElement::FIELD_OPTIONS];                $array[StockLevelsElement::FIELD_PRICE][] = $v[StockLevelsElement::FIELD_PRICE];                $array[StockLevelsElement::FIELD_QUANTITY][] = $v[StockLevelsElement::FIELD_QUANTITY];            }            $value = $array;            if (isset($value[StockLevelsElement::FIELD_OPTIONS])) {                $values = array_filter($value[StockLevelsElement::FIELD_OPTIONS]);                if (count($values) > 0) {                    $prices = array_filter($value[StockLevelsElement::FIELD_PRICE]);                    foreach ($prices as $price) {                        if (!is_numeric($price)) {                            $this->setMessage($this->_messages[self::PRICE_NOT_NUMERIC]);                            return false;                        }                    }                    $quantities = array_filter($value[StockLevelsElement::FIELD_QUANTITY], function($val) {                        return ($val !== null && $val !== false && $val !== '');                    });                    foreach ($quantities as $quantity) {                        if (!preg_match('#^[0-9]+$#', $quantity)) {                            $this->setMessage($this->_messages[self::QUANTITY_NOT_NUMERIC]);                            return false;                        }                    }                    if (count($quantities) > 0) {                        return true;                    }                }                $this->setMessage($this->_messages[self::NO_STOCK]);                return false;            }        }        return true;    }}
 |