Source for file jDatatype.class.php
Documentation is available at jDatatype.class.php
- <?php
- /**
- * @package jelix
- * @subpackage utils
- * @author Laurent Jouanneau
- * @contributor Julien Issler, Hadrien Lanneau
- * @copyright 2006-2009 Laurent Jouanneau
- * @copyright 2008 Julien Issler, 2011 Hadrien Lanneau
- * @link http://www.jelix.org
- * @licence http://www.gnu.org/licenses/lgpl.html GNU Lesser General Public Licence, see LICENCE file
- */
- /**
- * interface for datatypes which can filter value
- * @package jelix
- * @subpackage utils
- * @since 1.1
- */
- interface jIFilteredDatatype {
- /**
- * return the value on which filters are applied
- * should be call after a call of check() method
- */
- public function getFilteredValue();
- }
- /**
- *
- * @package jelix
- * @subpackage utils
- */
- abstract class jDatatype {
-
- protected $hasFacets= false;
- protected $facets = array();
-
- /**
- * call it to add restriction on possible values
- * @param string $type
- * @param string $value
- */
- public function addFacet($type,$value=null){
- if(in_array($type, $this->facets)){
- $this->hasFacets = true;
- $this->_addFacet($type,$value);
- }
- }
-
- /**
- * get a restriction value
- * @param string $type
- * @return mixed the value
- * @since 1.0
- */
- public function getFacet($type){
- if(in_array($type, $this->facets)){
- return $this->$type;
- }
- return null;
- }
-
- protected function _addFacet($type,$value){
- $this->$type = $value;
- }
-
- /**
- * verify a value : it should correspond to the datatype
- * @param string $value
- * @return boolean true if the value is ok
- */
- public function check($value){
- return true;
- }
- }
-
- /**
- * Datatype String.
- *
- * Possible facets are: 'length','minLength','maxLength', 'pattern'
- * @package jelix
- * @subpackage utils
- */
- class jDatatypeString extends jDatatype {
- protected $length=null;
- protected $minLength=null;
- protected $maxLength=null;
- protected $pattern=null;
- protected $facets = array('length','minLength','maxLength', 'pattern');
-
- public function check($value){
- if($this->hasFacets){
- $len = iconv_strlen(
- trim(preg_replace( '@\s+@', ' ', $value)),
- $GLOBALS['gJConfig']->charset
- );
- if($this->length !== null && $len != $this->length)
- return false;
- if($this->minLength !== null && $len < $this->minLength)
- return false;
- if($this->maxLength !== null && $len > $this->maxLength)
- return false;
- if($this->pattern !== null && !preg_match($this->pattern,$value))
- return false;
- }
- return true;
- }
- }
-
- /**
- * Datatype HTML String.
- *
- * Possible facets are: 'length','minLength','maxLength'
- * @package jelix
- * @subpackage utils
- * @since 1.1
- */
- class jDatatypeHtml extends jDatatype implements jIFilteredDatatype {
- protected $length=null;
- protected $minLength=null;
- protected $maxLength=null;
- protected $facets = array('length','minLength','maxLength');
- public $outputXhtml = false;
- public $fromWysiwyg = false;
-
- protected $newValue;
-
- public function __construct($aOutputXhtml = false, $fromWysiwyg = false) {
- $this->outputXhtml = $aOutputXhtml;
- $this->fromWysiwyg = $fromWysiwyg;
- }
-
- public function check($value){
- if($this->hasFacets){
- if ($this->fromWysiwyg)
- $len = iconv_strlen(strip_tags($value,'<img><img/><object><embed><video><video/><svg>'), $GLOBALS['gJConfig']->charset);
- else
- $len = iconv_strlen($value, $GLOBALS['gJConfig']->charset);
- if($this->length !== null && $len != $this->length)
- return false;
- if($this->minLength !== null && $len < $this->minLength)
- return false;
- if($this->maxLength !== null && $len > $this->maxLength)
- return false;
- }
- $this->newValue = jFilter::cleanHtml($value, $this->outputXhtml);
- return is_string($this->newValue);
- }
-
- public function getFilteredValue() {
- return $this->newValue;
- }
- }
-
- /**
- * Datatype Booléen
- * @package jelix
- * @subpackage utils
- */
- class jDatatypeBoolean extends jDatatype {
- public function check($value) { return jFilter::isBool($value); }
- }
-
- /**
- * Datatype Decimal
- *
- * Possible facets are: 'maxValue', 'minValue'
- * @package jelix
- * @subpackage utils
- */
- class jDatatypeDecimal extends jDatatype {
- // xxxx.yyyyy
- protected $maxValue=null;
- protected $minValue=null;
- protected $facets = array('maxValue', 'minValue');
- public function check($value) { return jFilter::isFloat($value, $this->minValue, $this->maxValue); }
- protected function _addFacet($type,$value){
- if($type == 'maxValue' || $type == 'minValue'){
- $this->$type = floatval($value);
- }
- }
- }
-
- /**
- * Datatype Integer
- * @package jelix
- * @subpackage utils
- */
- class jDatatypeInteger extends jDatatypeDecimal {
- public function check($value) { return jFilter::isInt($value, $this->minValue, $this->maxValue); }
- protected function _addFacet($type,$value){
- if($type == 'maxValue' || $type == 'minValue'){
- $this->$type = intval($value);
- }
- }
- }
-
-
- /**
- * Datatype Hexa
- * @package jelix
- * @subpackage utils
- */
- class jDatatypeHexadecimal extends jDatatypeDecimal {
- public function check($value) {
- if(substr($value,0,2) != '0x') $value='0x'.$value;
- return jFilter::isHexInt($value, $this->minValue, $this->maxValue);
- }
- protected function _addFacet($type,$value){
- if($type == 'maxValue' || $type == 'minValue'){
- $this->$type = intval($value,16);
- }
- }
- }
-
-
- /**
- * Datatype datetime
- *
- * Possible facets are: 'maxValue', 'minValue'
- * @package jelix
- * @subpackage utils
- */
- class jDatatypeDateTime extends jDatatype {
- protected $facets = array('maxValue', 'minValue');
- protected $maxValue;
- protected $minValue;
- private $dt;
- protected $format=21;
- protected $_date_format = 'Y-m-d H:i:s';
- public function check($value) {
- $this->dt = new jDateTime();
- if(!$this->dt->setFromString($value,$this->format)) return false;
- if($this->maxValue !== null){
- if($this->dt->compareTo($this->maxValue) == 1) return false;
- }
- if($this->minValue !== null){
- if($this->dt->compareTo($this->minValue) == -1) return false;
- }
- return true;
- }
-
- protected function _addFacet($type,$value){
- if($type == 'maxValue' || $type == 'minValue'){
- if(!preg_match('#^\d{4}-\d{2}-\d{2} (\d{2}:\d{2}(:\d{2})?)?$#',$value))
- $value = date($this->_date_format,strtotime($value));
- $this->$type = new jDateTime();
- $this->$type->setFromString($value,$this->format);
- }
- else
- parent::_addFacet($type,$value);
- }
- /**
- * @since 1.0
- */
- public function getFormat() { return $this->format; }
- }
-
- /**
- * Datatype time
- * @package jelix
- * @subpackage utils
- */
- class jDatatypeTime extends jDatatypeDateTime {
- protected $format=22;
- }
- /**
- * Datatype date
- * @package jelix
- * @subpackage utils
- */
- class jDatatypeDate extends jDatatypeDateTime {
- protected $format=20;
- protected $_date_format = 'Y-m-d';
- }
-
- /**
- * Datatype localedatetime
- * @package jelix
- * @subpackage utils
- */
- class jDatatypeLocaleDateTime extends jDatatypeDateTime {
- protected $format=11;
- }
-
- /**
- * Datatype localedate
- * @package jelix
- * @subpackage utils
- */
- class jDatatypeLocaleDate extends jDatatypeDateTime {
- protected $format=10;
- }
-
- /**
- * Datatype localetime
- * @package jelix
- * @subpackage utils
- */
- class jDatatypeLocaleTime extends jDatatypeDateTime {
- protected $format=12;
- }
-
-
- /**
- * Datatype url
- *
- * Possible facets are: 'schemeRequired','hostRequired','pathRequired', 'queryRequired'.
- * all are booleans.
- * @package jelix
- * @subpackage utils
- */
- class jDatatypeUrl extends jDatatype {
- protected $schemeRequired=true;
- protected $hostRequired=true;
- protected $pathRequired=null;
- protected $queryRequired=null;
-
- protected $facets = array('schemeRequired','hostRequired','pathRequired', 'queryRequired');
-
- public function check($value){
- return jFilter::isUrl($value, $this->schemeRequired, $this->hostRequired, $this->pathRequired, $this->queryRequired);
- }
- }
-
- /**
- * Datatype ipv4
- * @package jelix
- * @subpackage utils
- */
- class jDatatypeIPv4 extends jDatatype {
- public function check($value){
- return jFilter::isIPv4($value);
- }
- }
-
- /**
- * Datatype ipv6
- * @package jelix
- * @subpackage utils
- */
- class jDatatypeIPv6 extends jDatatype {
- public function check($value){
- return jFilter::isIPv6($value);
- }
- }
-
- /**
- * Datatype mail
- * @package jelix
- * @subpackage utils
- */
- class jDatatypeEmail extends jDatatype {
- public function check($value){
- return jFilter::isEmail($value);
- }
- }
Documentation generated on Mon, 19 Sep 2011 14:12:21 +0200 by phpDocumentor 1.4.3