Subversion Repositories Applications.papyrus

Rev

Rev 320 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
320 jpm 1
<?php
2
/* vim: set expandtab tabstop=4 shiftwidth=4: */
3
// +----------------------------------------------------------------------+
4
// | PHP version 4.0                                                      |
5
// +----------------------------------------------------------------------+
6
// | Copyright (c) 1997-2003 The PHP Group                                |
7
// +----------------------------------------------------------------------+
8
// | This source file is subject to version 2.0 of the PHP license,       |
9
// | that is bundled with this package in the file LICENSE, and is        |
10
// | available at through the world-wide-web at                           |
11
// | http://www.php.net/license/2_02.txt.                                 |
12
// | If you did not receive a copy of the PHP license and are unable to   |
13
// | obtain it through the world-wide-web, please send a note to          |
14
// | license@php.net so we can mail you a copy immediately.               |
15
// +----------------------------------------------------------------------+
16
// | Author: Alexey Borzov <avb@php.net>                                  |
17
// +----------------------------------------------------------------------+
18
//
443 ddelon 19
// $Id: Compare.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $
320 jpm 20
 
21
require_once 'HTML/QuickForm/Rule.php';
22
 
23
/**
24
 * Rule to compare two form fields
25
 *
26
 * The most common usage for this is to ensure that the password
27
 * confirmation field matches the password field
28
 *
29
 * @access public
30
 * @package HTML_QuickForm
443 ddelon 31
 * @version $Revision: 1.2 $
320 jpm 32
 */
33
class HTML_QuickForm_Rule_Compare extends HTML_QuickForm_Rule
34
{
35
   /**
36
    * Possible operators to use
37
    * @var array
38
    * @access private
39
    */
40
    var $_operators = array(
41
        'eq'  => '==',
42
        'neq' => '!=',
43
        'gt'  => '>',
44
        'gte' => '>=',
45
        'lt'  => '<',
46
        'lte' => '<='
47
    );
48
 
49
 
50
   /**
51
    * Returns the operator to use for comparing the values
52
    *
53
    * @access private
54
    * @param  string     operator name
55
    * @return string     operator to use for validation
56
    */
57
    function _findOperator($name)
58
    {
59
        if (empty($name)) {
60
            return '==';
61
        } elseif (isset($this->_operators[$name])) {
62
            return $this->_operators[$name];
63
        } elseif (in_array($name, $this->_operators)) {
64
            return $name;
65
        } else {
66
            return '==';
67
        }
68
    }
69
 
70
 
71
    function validate($values, $operator = null)
72
    {
73
        $operator = $this->_findOperator($operator);
74
        if ('==' != $operator && '!=' != $operator) {
75
            $compareFn = create_function('$a, $b', 'return floatval($a) ' . $operator . ' floatval($b);');
76
        } else {
77
            $compareFn = create_function('$a, $b', 'return $a ' . $operator . ' $b;');
78
        }
79
 
80
        return $compareFn($values[0], $values[1]);
81
    }
82
 
83
 
84
    function getValidationScript($operator = null)
85
    {
86
        $operator = $this->_findOperator($operator);
87
        if ('==' != $operator && '!=' != $operator) {
88
            $check = "!(Number({jsVar}[0]) {$operator} Number({jsVar}[1]))";
89
        } else {
90
            $check = "!({jsVar}[0] {$operator} {jsVar}[1])";
91
        }
92
        return array('', "'' != {jsVar}[0] && {$check}");
93
    }
94
}
95
?>