Source for file Compare.php
Documentation is available at Compare.php
* Rule comparing the value of the field with some other value
* Copyright (c) 2006, 2007, Alexey Borzov <avb@php.net>,
* Bertrand Mansion <golgote@mamasam.com>
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * The names of the authors may not be used to endorse or promote products
* derived from this software without specific prior written permission.
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* @package HTML_QuickForm2
* @author Alexey Borzov <avb@php.net>
* @author Bertrand Mansion <golgote@mamasam.com>
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version CVS: $Id: Compare.php,v 1.2 2007/10/13 16:18:22 avb Exp $
* @link http://pear.php.net/package/HTML_QuickForm2
* Base class for HTML_QuickForm2 rules
require_once 'HTML/QuickForm2/Rule.php';
* Rule comparing the value of the field with some other value
* The Rule needs two configuration parameters for its work
* - comparison operator (defaults to equality)
* - operand to compare with; this can be either a constant or another form
* element (its value will be used)
* Parameters can be passed to {@link HTML_QuickForm2_Rule::setOptions() setOptions()} in
* either of the following formats
* - array([operator, ]operand)
* - array(['operator' => operator, ]['operand' => operand])
* and also may be passed to {@link HTML_QuickForm2_Factory::registerRule()} in
* either of the following formats
* - array(operator[, operand])
* - array(['operator' => operator, ]['operand' => operand])
* global config registered with the Factory overrides options set for the
* particular Rule instance.
* Note that 'less than [or equal]' and 'greater than [or equal]' operators
* compare the operands numerically, since this is considered as more useful
* approach by the authors.
* For convenience, this Rule is already registered in the Factory with the
* names 'eq', 'neq', 'lt', 'gt', 'lte', 'gte' corresponding to the relevant
* $password->addRule('eq', 'Passwords do not match', $passwordRepeat);
* $orderQty->addRule('lte', 'Should not order more than 10 of these', 10);
* @package HTML_QuickForm2
* @author Alexey Borzov <avb@php.net>
* @author Bertrand Mansion <golgote@mamasam.com>
* @version Release: 0.2.0
* Possible comparison operators
protected $operators = array ('==', '!=', '===', '!==', '<', '<=', '>', '>=');
* Validates the element's value
* @return bool whether (element_value operator operand) expression is true
* @throws HTML_QuickForm2_InvalidArgumentException if a bogus $registeredType
* was passed to constructor or a bogus comparison operator is used
* @throws HTML_QuickForm2_Exception if an operand to compare with is missing
if (!in_array($operator, array ('===', '!=='))) {
$compareFn = create_function('$a, $b', 'return floatval($a) ' . $operator . ' floatval($b);');
$compareFn = create_function('$a, $b', 'return strval($a) ' . $operator . ' strval($b);');
$operand->getValue (): $operand);
* Finds a comparison operator to use in global config and Rule's options
* @param mixed config returned by {@link HTML_QuickForm2_Factory::getRuleConfig()},
* @return string operator to use, defaults to '==='
* @throws HTML_QuickForm2_InvalidArgumentException if a bogus comparison
* operator is used for configuration
if (!empty ($globalConfig)) {
$operator = $globalConfig;
} elseif (isset ($globalConfig['operator'])) {
$operator = $globalConfig['operator'];
$operator = $this->options['operator'];
'Compare Rule requires a valid comparison operator, ' .
if (in_array($operator, array ('==', '!='))) {
* Finds an operand to compare element's value with in global config and Rule's options
* @param mixed config returned by {@link HTML_QuickForm2_Factory::getRuleConfig()},
* @return mixed an operand to compare with
* @throws HTML_QuickForm2_Exception if an operand is missing
if (count($globalConfig) > 1 ) {
if (isset ($globalConfig['operand'])) {
return $globalConfig['operand'];
return end($globalConfig);
'Compare Rule requires an argument to compare with'
} elseif (isset ($this->options['operand'])) {
Documentation generated on Mon, 22 Oct 2007 12:30:11 -0400 by phpDocumentor 1.4.0. PEAR Logo Copyright © PHP Group 2004.
|