First commit
This commit is contained in:
commit
c6e2478c40
13918 changed files with 2303184 additions and 0 deletions
454
sites/all/modules/civicrm/packages/DB/Table/Valid.php
Normal file
454
sites/all/modules/civicrm/packages/DB/Table/Valid.php
Normal file
|
@ -0,0 +1,454 @@
|
|||
<?php
|
||||
|
||||
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||
|
||||
/**
|
||||
* DB_Table_Valid validates values against DB_Table column types.
|
||||
*
|
||||
* PHP versions 4 and 5
|
||||
*
|
||||
* LICENSE:
|
||||
*
|
||||
* Copyright (c) 1997-2007, Paul M. Jones <pmjones@php.net>
|
||||
* David C. Morse <morse@php.net>
|
||||
* Mark Wiesemann <wiesemann@php.net>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* * 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.
|
||||
*
|
||||
* @category Database
|
||||
* @package DB_Table
|
||||
* @author Paul M. Jones <pmjones@php.net>
|
||||
* @author David C. Morse <morse@php.net>
|
||||
* @author Mark Wiesemann <wiesemann@php.net>
|
||||
* @license http://opensource.org/licenses/bsd-license.php New BSD License
|
||||
* @version CVS: $Id: Valid.php,v 1.10 2007/12/13 16:52:15 wiesemann Exp $
|
||||
* @link http://pear.php.net/package/DB_Table
|
||||
*/
|
||||
|
||||
/**
|
||||
* DB_Table class for constants and other globals.
|
||||
*/
|
||||
require_once 'DB/Table.php';
|
||||
|
||||
|
||||
/**
|
||||
* validation ranges for integers
|
||||
*/
|
||||
if (! isset($GLOBALS['_DB_TABLE']['valid'])) {
|
||||
$GLOBALS['_DB_TABLE']['valid'] = array(
|
||||
'smallint' => array(pow(-2, 15), pow(+2, 15) - 1),
|
||||
'integer' => array(pow(-2, 31), pow(+2, 31) - 1),
|
||||
'bigint' => array(pow(-2, 63), pow(+2, 63) - 1)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* DB_Table_Valid validates values against DB_Table column types.
|
||||
*
|
||||
* @category Database
|
||||
* @package DB_Table
|
||||
* @author Paul M. Jones <pmjones@php.net>
|
||||
* @author David C. Morse <morse@php.net>
|
||||
* @author Mark Wiesemann <wiesemann@php.net>
|
||||
* @version Release: 1.5.6
|
||||
* @link http://pear.php.net/package/DB_Table
|
||||
*/
|
||||
|
||||
class DB_Table_Valid {
|
||||
|
||||
/**
|
||||
*
|
||||
* Check if a value validates against the 'boolean' data type.
|
||||
*
|
||||
* @static
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param mixed $value The value to validate.
|
||||
*
|
||||
* @return boolean True if the value is valid for the data type, false
|
||||
* if not.
|
||||
*
|
||||
*/
|
||||
|
||||
function isBoolean($value)
|
||||
{
|
||||
if ($value === true || $value === false) {
|
||||
return true;
|
||||
} elseif (is_numeric($value) && ($value == 0 || $value == 1)) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Check if a value validates against the 'char' and 'varchar' data type.
|
||||
*
|
||||
* We allow most anything here, only checking that the length is in range.
|
||||
*
|
||||
* @static
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param mixed $value The value to validate.
|
||||
*
|
||||
* @return boolean True if the value is valid for the data type, false
|
||||
* if not.
|
||||
*
|
||||
*/
|
||||
|
||||
function isChar($value, $colsize)
|
||||
{
|
||||
$is_scalar = (! is_array($value) && ! is_object($value));
|
||||
$in_range = (strlen($value) <= $colsize);
|
||||
return $is_scalar && $in_range;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Check if a value validates against the 'smallint' data type.
|
||||
*
|
||||
* @static
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param mixed $value The value to validate.
|
||||
*
|
||||
* @return boolean True if the value is valid for the data type, false
|
||||
* if not.
|
||||
*
|
||||
*/
|
||||
|
||||
function isSmallint($value)
|
||||
{
|
||||
return is_integer($value) &&
|
||||
($value >= $GLOBALS['_DB_TABLE']['valid']['smallint'][0]) &&
|
||||
($value <= $GLOBALS['_DB_TABLE']['valid']['smallint'][1]);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Check if a value validates against the 'integer' data type.
|
||||
*
|
||||
* @static
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param mixed $value The value to validate.
|
||||
*
|
||||
* @return boolean True if the value is valid for the data type, false
|
||||
* if not.
|
||||
*
|
||||
*/
|
||||
|
||||
function isInteger($value)
|
||||
{
|
||||
return is_integer($value) &&
|
||||
($value >= $GLOBALS['_DB_TABLE']['valid']['integer'][0]) &&
|
||||
($value <= $GLOBALS['_DB_TABLE']['valid']['integer'][1]);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Check if a value validates against the 'bigint' data type.
|
||||
*
|
||||
* @static
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param mixed $value The value to validate.
|
||||
*
|
||||
* @return boolean True if the value is valid for the data type, false
|
||||
* if not.
|
||||
*
|
||||
*/
|
||||
|
||||
function isBigint($value)
|
||||
{
|
||||
return is_integer($value) &&
|
||||
($value >= $GLOBALS['_DB_TABLE']['valid']['bigint'][0]) &&
|
||||
($value <= $GLOBALS['_DB_TABLE']['valid']['bigint'][1]);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Check if a value validates against the 'decimal' data type.
|
||||
*
|
||||
* For the column defined "DECIMAL(5,2)" standard SQL requires that
|
||||
* the column be able to store any value with 5 digits and 2
|
||||
* decimals. In this case, therefore, the range of values that can be
|
||||
* stored in the column is from -999.99 to 999.99. DB_Table attempts
|
||||
* to enforce this behavior regardless of the RDBMS backend behavior.
|
||||
*
|
||||
* @static
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param mixed $value The value to validate.
|
||||
*
|
||||
* @param string $colsize The 'size' to use for validation (to make
|
||||
* sure of min/max and decimal places).
|
||||
*
|
||||
* @param string $colscope The 'scope' to use for validation (to make
|
||||
* sure of min/max and decimal places).
|
||||
*
|
||||
* @return boolean True if the value is valid for the data type, false
|
||||
* if not.
|
||||
*
|
||||
*/
|
||||
|
||||
function isDecimal($value, $colsize, $colscope)
|
||||
{
|
||||
if (! is_numeric($value)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// maximum number of digits allowed to the left
|
||||
// and right of the decimal point.
|
||||
$right_max = $colscope;
|
||||
$left_max = $colsize - $colscope;
|
||||
|
||||
// ignore negative signs in all validation
|
||||
$value = str_replace('-', '', $value);
|
||||
|
||||
// find the decimal point, then get the left
|
||||
// and right portions.
|
||||
$pos = strpos($value, '.');
|
||||
if ($pos === false) {
|
||||
$left = $value;
|
||||
$right = '';
|
||||
} else {
|
||||
$left = substr($value, 0, $pos);
|
||||
$right = substr($value, $pos+1);
|
||||
}
|
||||
|
||||
// how long are the left and right portions?
|
||||
$left_len = strlen($left);
|
||||
$right_len = strlen($right);
|
||||
|
||||
// do the portions exceed their maxes?
|
||||
if ($left_len > $left_max ||
|
||||
$right_len > $right_max) {
|
||||
// one or the other exceeds the max lengths
|
||||
return false;
|
||||
} else {
|
||||
// both are within parameters
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Check if a value validates against the 'single' data type.
|
||||
*
|
||||
* @static
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param mixed $value The value to validate.
|
||||
*
|
||||
* @return boolean True if the value is valid for the data type, false
|
||||
* if not.
|
||||
*
|
||||
*/
|
||||
|
||||
function isSingle($value)
|
||||
{
|
||||
return is_float($value);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Check if a value validates against the 'double' data type.
|
||||
*
|
||||
* @static
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param mixed $value The value to validate.
|
||||
*
|
||||
* @return boolean True if the value is valid for the data type, false
|
||||
* if not.
|
||||
*
|
||||
*/
|
||||
|
||||
function isDouble($value)
|
||||
{
|
||||
return is_float($value);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Check if a value validates against the 'time' data type.
|
||||
*
|
||||
* @static
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param mixed $value The value to validate.
|
||||
*
|
||||
* @return boolean True if the value is valid for the data type, false
|
||||
* if not.
|
||||
*
|
||||
*/
|
||||
|
||||
function isTime($value)
|
||||
{
|
||||
// hh:ii:ss
|
||||
// 01234567
|
||||
$h = substr($value, 0, 2);
|
||||
$s1 = substr($value, 2, 1);
|
||||
$i = substr($value, 3, 2);
|
||||
$s2 = substr($value, 5, 1);
|
||||
$s = substr($value, 6, 2);
|
||||
|
||||
// time check
|
||||
if (strlen($value) != 8 ||
|
||||
! is_numeric($h) || $h < 0 || $h > 23 ||
|
||||
$s1 != ':' ||
|
||||
! is_numeric($i) || $i < 0 || $i > 59 ||
|
||||
$s2 != ':' ||
|
||||
! is_numeric($s) || $s < 0 || $s > 59) {
|
||||
|
||||
return false;
|
||||
|
||||
} else {
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Check if a value validates against the 'date' data type.
|
||||
*
|
||||
* @static
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param mixed $value The value to validate.
|
||||
*
|
||||
* @return boolean True if the value is valid for the data type, false
|
||||
* if not.
|
||||
*
|
||||
*/
|
||||
|
||||
function isDate($value)
|
||||
{
|
||||
// yyyy-mm-dd
|
||||
// 0123456789
|
||||
$y = substr($value, 0, 4);
|
||||
$s1 = substr($value, 4, 1);
|
||||
$m = substr($value, 5, 2);
|
||||
$s2 = substr($value, 7, 1);
|
||||
$d = substr($value, 8, 2);
|
||||
|
||||
// date check
|
||||
if (strlen($value) != 10 || $s1 != '-' || $s2 != '-' ||
|
||||
! checkdate($m, $d, $y)) {
|
||||
|
||||
return false;
|
||||
|
||||
} else {
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Check if a value validates against the 'timestamp' data type.
|
||||
*
|
||||
* @static
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param mixed $value The value to validate.
|
||||
*
|
||||
* @return boolean True if the value is valid for the data type, false
|
||||
* if not.
|
||||
*
|
||||
*/
|
||||
|
||||
function isTimestamp($value)
|
||||
{
|
||||
// yyyy-mm-dd hh:ii:ss
|
||||
// 0123456789012345678
|
||||
$date = substr($value, 0, 10);
|
||||
$sep = substr($value, 10, 1);
|
||||
$time = substr($value, 11, 8);
|
||||
|
||||
if (strlen($value) != 19 || $sep != ' ' ||
|
||||
! DB_Table_Valid::isDate($date) ||
|
||||
! DB_Table_Valid::isTime($time)) {
|
||||
|
||||
return false;
|
||||
|
||||
} else {
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Check if a value validates against the 'clob' data type.
|
||||
*
|
||||
* @static
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param mixed $value The value to validate.
|
||||
*
|
||||
* @return boolean True if the value is valid for the data type, false
|
||||
* if not.
|
||||
*
|
||||
*/
|
||||
|
||||
function isClob($value)
|
||||
{
|
||||
return is_string($value);
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
Loading…
Add table
Add a link
Reference in a new issue