Merged in victorsl/processmaker (pull request #13)
ProcessMaker-MA "2184 Fields Validation Layer"
This commit is contained in:
@@ -0,0 +1,441 @@
|
|||||||
|
<?php
|
||||||
|
require_once (PATH_TRUNK . "workflow" . PATH_SEP . "engine" . PATH_SEP . "classes" . PATH_SEP . "class.fieldValidator.php");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unit test for class FieldValidator
|
||||||
|
*/
|
||||||
|
class classFieldValidatorTest extends PHPUnit_Framework_TestCase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var FieldValidator
|
||||||
|
*/
|
||||||
|
protected $object;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets up the fixture, for example, opens a network connection.
|
||||||
|
* This method is called before a test is executed.
|
||||||
|
*/
|
||||||
|
protected function setUp()
|
||||||
|
{
|
||||||
|
$this->object = new FieldValidator();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tears down the fixture, for example, closes a network connection.
|
||||||
|
* This method is called after a test is executed.
|
||||||
|
*/
|
||||||
|
protected function tearDown()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is the default method to test, if the class still having
|
||||||
|
* the same number of methods.
|
||||||
|
*/
|
||||||
|
public function testNumberOfMethodsInThisClass()
|
||||||
|
{
|
||||||
|
$methods = get_class_methods('FieldValidator');
|
||||||
|
$this->assertTrue( count($methods) == 7);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test all methods structure
|
||||||
|
*/
|
||||||
|
public function testAllMethodsStructure()
|
||||||
|
{
|
||||||
|
$methods = get_class_methods($this->object);
|
||||||
|
|
||||||
|
//isInt
|
||||||
|
$this->assertTrue( in_array('isInt', $methods ), 'exists method isInt' );
|
||||||
|
$r = new ReflectionMethod('FieldValidator', 'isInt');
|
||||||
|
$params = $r->getParameters();
|
||||||
|
$this->assertTrue( $params[0]->getName() == 'num');
|
||||||
|
$this->assertTrue( $params[0]->isArray() == false);
|
||||||
|
$this->assertTrue( $params[0]->isOptional () == false);
|
||||||
|
|
||||||
|
//isReal
|
||||||
|
$this->assertTrue( in_array('isReal', $methods ), 'exists method isReal' );
|
||||||
|
$r = new ReflectionMethod('FieldValidator', 'isReal');
|
||||||
|
$params = $r->getParameters();
|
||||||
|
$this->assertTrue( $params[0]->getName() == 'num');
|
||||||
|
$this->assertTrue( $params[0]->isArray() == false);
|
||||||
|
$this->assertTrue( $params[0]->isOptional () == false);
|
||||||
|
|
||||||
|
//isBool
|
||||||
|
$this->assertTrue( in_array('isBool', $methods ), 'exists method isBool' );
|
||||||
|
$r = new ReflectionMethod('FieldValidator', 'isBool');
|
||||||
|
$params = $r->getParameters();
|
||||||
|
$this->assertTrue( $params[0]->getName() == 'bool');
|
||||||
|
$this->assertTrue( $params[0]->isArray() == false);
|
||||||
|
$this->assertTrue( $params[0]->isOptional () == false);
|
||||||
|
|
||||||
|
//isUrl
|
||||||
|
$this->assertTrue( in_array('isUrl', $methods ), 'exists method isUrl' );
|
||||||
|
$r = new ReflectionMethod('FieldValidator', 'isUrl');
|
||||||
|
$params = $r->getParameters();
|
||||||
|
$this->assertTrue( $params[0]->getName() == 'url');
|
||||||
|
$this->assertTrue( $params[0]->isArray() == false);
|
||||||
|
$this->assertTrue( $params[0]->isOptional () == false);
|
||||||
|
|
||||||
|
//isEmail
|
||||||
|
$this->assertTrue( in_array('isEmail', $methods ), 'exists method isEmail' );
|
||||||
|
$r = new ReflectionMethod('FieldValidator', 'isEmail');
|
||||||
|
$params = $r->getParameters();
|
||||||
|
$this->assertTrue( $params[0]->getName() == 'email');
|
||||||
|
$this->assertTrue( $params[0]->isArray() == false);
|
||||||
|
$this->assertTrue( $params[0]->isOptional () == false);
|
||||||
|
|
||||||
|
//isIp
|
||||||
|
$this->assertTrue( in_array('isIp', $methods ), 'exists method isIp' );
|
||||||
|
$r = new ReflectionMethod('FieldValidator', 'isIp');
|
||||||
|
$params = $r->getParameters();
|
||||||
|
$this->assertTrue( $params[0]->getName() == 'ip');
|
||||||
|
$this->assertTrue( $params[0]->isArray() == false);
|
||||||
|
$this->assertTrue( $params[0]->isOptional () == false);
|
||||||
|
|
||||||
|
//validate
|
||||||
|
$this->assertTrue( in_array('validate', $methods ), 'exists method validate' );
|
||||||
|
$r = new ReflectionMethod('FieldValidator', 'validate');
|
||||||
|
$params = $r->getParameters();
|
||||||
|
$this->assertTrue( $params[0]->getName() == 'arrayData');
|
||||||
|
$this->assertTrue( $params[0]->isArray() == false);
|
||||||
|
$this->assertTrue( $params[0]->isOptional () == false);
|
||||||
|
$this->assertTrue( $params[1]->getName() == 'arrayDataValidators');
|
||||||
|
$this->assertTrue( $params[1]->isArray() == false);
|
||||||
|
$this->assertTrue( $params[1]->isOptional () == false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers FieldValidator::isInt
|
||||||
|
*/
|
||||||
|
public function testIsInt()
|
||||||
|
{
|
||||||
|
$this->assertTrue($this->object->isInt(0));
|
||||||
|
$this->assertTrue($this->object->isInt("0"));
|
||||||
|
$this->assertTrue($this->object->isInt(+0));
|
||||||
|
$this->assertTrue($this->object->isInt("+0"));
|
||||||
|
$this->assertTrue($this->object->isInt(-0));
|
||||||
|
$this->assertTrue($this->object->isInt("-0"));
|
||||||
|
|
||||||
|
$this->assertTrue($this->object->isInt(55));
|
||||||
|
$this->assertTrue($this->object->isInt("55"));
|
||||||
|
$this->assertTrue($this->object->isInt(+55));
|
||||||
|
$this->assertTrue($this->object->isInt("+55"));
|
||||||
|
$this->assertTrue($this->object->isInt(-55));
|
||||||
|
$this->assertTrue($this->object->isInt("-55"));
|
||||||
|
|
||||||
|
$this->assertFalse($this->object->isInt(""));
|
||||||
|
|
||||||
|
$this->assertFalse($this->object->isInt(55.5));
|
||||||
|
$this->assertFalse($this->object->isInt("55.5"));
|
||||||
|
$this->assertFalse($this->object->isInt(+55.5));
|
||||||
|
$this->assertFalse($this->object->isInt("+55.5"));
|
||||||
|
$this->assertFalse($this->object->isInt(-55.5));
|
||||||
|
$this->assertFalse($this->object->isInt("-55.5"));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers FieldValidator::isReal
|
||||||
|
*/
|
||||||
|
public function testIsReal()
|
||||||
|
{
|
||||||
|
$this->assertTrue($this->object->isReal(0));
|
||||||
|
$this->assertTrue($this->object->isReal("0"));
|
||||||
|
$this->assertTrue($this->object->isReal(+0));
|
||||||
|
$this->assertTrue($this->object->isReal("+0"));
|
||||||
|
$this->assertTrue($this->object->isReal(-0));
|
||||||
|
$this->assertTrue($this->object->isReal("-0"));
|
||||||
|
|
||||||
|
$this->assertTrue($this->object->isReal(55));
|
||||||
|
$this->assertTrue($this->object->isReal("55"));
|
||||||
|
$this->assertTrue($this->object->isReal(+55));
|
||||||
|
$this->assertTrue($this->object->isReal("+55"));
|
||||||
|
$this->assertTrue($this->object->isReal(-55));
|
||||||
|
$this->assertTrue($this->object->isReal("-55"));
|
||||||
|
|
||||||
|
$this->assertTrue($this->object->isReal(55.5));
|
||||||
|
$this->assertTrue($this->object->isReal("55.5"));
|
||||||
|
$this->assertTrue($this->object->isReal(+55.5));
|
||||||
|
$this->assertTrue($this->object->isReal("+55.5"));
|
||||||
|
$this->assertTrue($this->object->isReal(-55.5));
|
||||||
|
$this->assertTrue($this->object->isReal("-55.5"));
|
||||||
|
|
||||||
|
$this->assertFalse($this->object->isReal(""));
|
||||||
|
|
||||||
|
$this->assertFalse($this->object->isReal(".5"));
|
||||||
|
$this->assertFalse($this->object->isReal("a"));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers FieldValidator::isBool
|
||||||
|
*/
|
||||||
|
public function testIsBool()
|
||||||
|
{
|
||||||
|
$this->assertTrue($this->object->isBool(true));
|
||||||
|
$this->assertTrue($this->object->isBool(false));
|
||||||
|
|
||||||
|
$this->assertTrue($this->object->isBool("true"));
|
||||||
|
$this->assertTrue($this->object->isBool("false"));
|
||||||
|
|
||||||
|
$this->assertFalse($this->object->isBool(""));
|
||||||
|
|
||||||
|
$this->assertFalse($this->object->isBool(1));
|
||||||
|
$this->assertFalse($this->object->isBool(0));
|
||||||
|
$this->assertFalse($this->object->isBool("1"));
|
||||||
|
$this->assertFalse($this->object->isBool("0"));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers FieldValidator::isUrl
|
||||||
|
*/
|
||||||
|
public function testIsUrl()
|
||||||
|
{
|
||||||
|
$this->assertTrue($this->object->isUrl("http://www.myweb.com"));
|
||||||
|
$this->assertTrue($this->object->isUrl("http://www.myweb.com/"));
|
||||||
|
$this->assertTrue($this->object->isUrl("https://www.myweb.com"));
|
||||||
|
$this->assertTrue($this->object->isUrl("https://www.myweb.com/"));
|
||||||
|
$this->assertTrue($this->object->isUrl("https://www.myweb.com.bo"));
|
||||||
|
$this->assertTrue($this->object->isUrl("https://myweb.com"));
|
||||||
|
$this->assertTrue($this->object->isUrl("https://myweb.com.bo"));
|
||||||
|
$this->assertTrue($this->object->isUrl("http://192.168.10.58"));
|
||||||
|
$this->assertTrue($this->object->isUrl("https://192.168.10.58"));
|
||||||
|
$this->assertTrue($this->object->isUrl("http://192.168.10.58:8080"));
|
||||||
|
$this->assertTrue($this->object->isUrl("https://192.168.10.58:8080/"));
|
||||||
|
$this->assertTrue($this->object->isUrl("http://www.myweb.com/project/01/activity/01/steps"));
|
||||||
|
$this->assertTrue($this->object->isUrl("http://www.myweb.com/project/01/activity/01/steps.php"));
|
||||||
|
|
||||||
|
$this->assertFalse($this->object->isUrl(""));
|
||||||
|
|
||||||
|
$this->assertFalse($this->object->isUrl("www.myweb.com"));
|
||||||
|
$this->assertFalse($this->object->isUrl("www.myweb.com.bo"));
|
||||||
|
$this->assertFalse($this->object->isUrl("http ://www.myweb.com/"));
|
||||||
|
$this->assertFalse($this->object->isUrl("http://myweb"));
|
||||||
|
$this->assertFalse($this->object->isUrl("myweb"));
|
||||||
|
$this->assertFalse($this->object->isUrl("192.168.10.58"));
|
||||||
|
$this->assertFalse($this->object->isUrl("xttp://192.168.10.58"));
|
||||||
|
$this->assertFalse($this->object->isUrl("http:://192.168.10.58:8080/"));
|
||||||
|
$this->assertFalse($this->object->isUrl("http://"));
|
||||||
|
$this->assertFalse($this->object->isUrl("https://"));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers FieldValidator::isEmail
|
||||||
|
*/
|
||||||
|
public function testIsEmail()
|
||||||
|
{
|
||||||
|
$this->assertTrue($this->object->isEmail("my-email@myweb.com"));
|
||||||
|
$this->assertTrue($this->object->isEmail("my.email@myweb.com.bo"));
|
||||||
|
$this->assertTrue($this->object->isEmail("my-email.sample@myweb.com"));
|
||||||
|
$this->assertTrue($this->object->isEmail("my-email@my-web.com"));
|
||||||
|
$this->assertTrue($this->object->isEmail("my-2013-email@my-web.com"));
|
||||||
|
$this->assertTrue($this->object->isEmail("2013-my-email@my-web.com"));
|
||||||
|
|
||||||
|
$this->assertFalse($this->object->isEmail(""));
|
||||||
|
|
||||||
|
$this->assertFalse($this->object->isEmail(" @myweb.com"));
|
||||||
|
$this->assertFalse($this->object->isEmail("my@email@myweb.com.bo"));
|
||||||
|
$this->assertFalse($this->object->isEmail("my-2013-email"));
|
||||||
|
$this->assertFalse($this->object->isEmail("my-email@myweb"));
|
||||||
|
$this->assertFalse($this->object->isEmail(".@myweb.com"));
|
||||||
|
$this->assertFalse($this->object->isEmail("-@myweb.com"));
|
||||||
|
$this->assertFalse($this->object->isEmail("@myweb.com"));
|
||||||
|
$this->assertFalse($this->object->isEmail("sample@.com"));
|
||||||
|
$this->assertFalse($this->object->isEmail("sample.com"));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers FieldValidator::isIp
|
||||||
|
*/
|
||||||
|
public function testIsIp()
|
||||||
|
{
|
||||||
|
$this->assertTrue($this->object->isIp("255.255.255.255"));
|
||||||
|
$this->assertTrue($this->object->isIp("0.0.0.0"));
|
||||||
|
$this->assertTrue($this->object->isIp("127.0.0.1"));
|
||||||
|
|
||||||
|
$this->assertFalse($this->object->isIp(""));
|
||||||
|
|
||||||
|
$this->assertFalse($this->object->isIp("127.o.0.1"));
|
||||||
|
$this->assertFalse($this->object->isIp("127.0.0."));
|
||||||
|
$this->assertFalse($this->object->isIp("127.0.0"));
|
||||||
|
$this->assertFalse($this->object->isIp(".0.0.1"));
|
||||||
|
$this->assertFalse($this->object->isIp("127..0.1"));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers FieldValidator::validate
|
||||||
|
*/
|
||||||
|
public function testValidate()
|
||||||
|
{
|
||||||
|
//Data OK
|
||||||
|
$arrayField = array(
|
||||||
|
"name" => "peter",
|
||||||
|
"lastname" => "parker",
|
||||||
|
"age" => 33,
|
||||||
|
"weight" => 56.55,
|
||||||
|
"website" => "http://www.myweb.com/",
|
||||||
|
"email" => "spider-man@myweb.com",
|
||||||
|
"alive" => true
|
||||||
|
);
|
||||||
|
|
||||||
|
$arrayValidators = array(
|
||||||
|
"name" => array(
|
||||||
|
"type" => "string",
|
||||||
|
"required" => true,
|
||||||
|
"min_size" => 5
|
||||||
|
),
|
||||||
|
"lastname" => array(
|
||||||
|
"type" => "string",
|
||||||
|
"min_size" => 2
|
||||||
|
),
|
||||||
|
"age" => array(
|
||||||
|
"type" => "int",
|
||||||
|
"required" => true
|
||||||
|
),
|
||||||
|
"weight" => array(
|
||||||
|
"type" => "real",
|
||||||
|
"required" => true
|
||||||
|
),
|
||||||
|
"website" => array(
|
||||||
|
"validation" => "url"
|
||||||
|
),
|
||||||
|
"email" => array(
|
||||||
|
"type" => "string",
|
||||||
|
"required" => false,
|
||||||
|
"validation" => "email"
|
||||||
|
),
|
||||||
|
"alive" => array(
|
||||||
|
"type" => "boolean"
|
||||||
|
),
|
||||||
|
"ip" => array(
|
||||||
|
"validation" => "ip",
|
||||||
|
"required" => false
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
$result = $this->object->validate($arrayField, $arrayValidators);
|
||||||
|
|
||||||
|
$expectedSuccess = true;
|
||||||
|
$expectedErrors = array();
|
||||||
|
|
||||||
|
$this->assertEquals($result["success"], $expectedSuccess);
|
||||||
|
$this->assertEquals($result["errors"], $expectedErrors);
|
||||||
|
|
||||||
|
//Data failed
|
||||||
|
$arrayField = array(
|
||||||
|
"name" => "Dan",
|
||||||
|
"lastname" => "",
|
||||||
|
"age" => "hello",
|
||||||
|
"weight" => "",
|
||||||
|
"website" => "www.myweb.com",
|
||||||
|
"email" => "spider-man@myweb",
|
||||||
|
"alive" => 1
|
||||||
|
);
|
||||||
|
|
||||||
|
$arrayValidators = array(
|
||||||
|
"name" => array(
|
||||||
|
"type" => "string",
|
||||||
|
"required" => true,
|
||||||
|
"min_size" => 4
|
||||||
|
),
|
||||||
|
"lastname" => array(
|
||||||
|
"type" => "string",
|
||||||
|
"required" => true
|
||||||
|
),
|
||||||
|
"age" => array(
|
||||||
|
"type" => "int"
|
||||||
|
),
|
||||||
|
"weight" => array(
|
||||||
|
"type" => "real",
|
||||||
|
"required" => true
|
||||||
|
),
|
||||||
|
"website" => array(
|
||||||
|
"validation" => "url"
|
||||||
|
),
|
||||||
|
"email" => array(
|
||||||
|
"type" => "string",
|
||||||
|
"required" => false,
|
||||||
|
"validation" => "email"
|
||||||
|
),
|
||||||
|
"alive" => array(
|
||||||
|
"type" => "boolean"
|
||||||
|
),
|
||||||
|
"ip" => array(
|
||||||
|
"validation" => "ip",
|
||||||
|
"required" => false
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
$result = $this->object->validate($arrayField, $arrayValidators);
|
||||||
|
|
||||||
|
$expectedSuccess = false;
|
||||||
|
$expectedErrors = array(
|
||||||
|
"Field \"name\" should be min 4 chars, 3 given",
|
||||||
|
"Field \"lastname\" is required",
|
||||||
|
"Field \"age\" not is an integer number",
|
||||||
|
"Field \"weight\" not is an real number",
|
||||||
|
"Field \"weight\" is required",
|
||||||
|
"Field \"website\" have not an valid URL format",
|
||||||
|
"Field \"email\" have not an valid email format",
|
||||||
|
"Field \"alive\" not is an boolean"
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->assertEquals($result["success"], $expectedSuccess);
|
||||||
|
$this->assertEquals($result["errors"], $expectedErrors);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function dataProviderTestValidateExceptionCovers()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
array("", array(), false),
|
||||||
|
array(array(), "", false),
|
||||||
|
array(array(), array(1), false),
|
||||||
|
array(array(1), array(), false)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers FieldValidator::validate
|
||||||
|
* @dataProvider dataProviderTestValidateExceptionCovers
|
||||||
|
*/
|
||||||
|
public function testValidateExceptionCovers($arrayData, $arrayDataValidators, $success)
|
||||||
|
{
|
||||||
|
$result = $this->object->validate($arrayData, $arrayDataValidators);
|
||||||
|
|
||||||
|
$this->assertEquals($result["success"], $success);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function dataProviderTestValidateRemainingCovers()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
array(array("age" => 55.5), array("age" => array("type" => "int")), false),
|
||||||
|
array(array("pi" => "3_1416"), array("pi" => array("type" => "real")), false),
|
||||||
|
array(array("flag" => 1), array("flag" => array("type" => "bool")), false),
|
||||||
|
array(array("name" => "peter"), array("name" => array("type" => "string")), true),
|
||||||
|
|
||||||
|
array(array("email" => "my--email@myweb.com"), array("email" => array("validation" => "email")), false),
|
||||||
|
array(array("ip" => "127.0.0"), array("ip" => array("validation" => "ip")), false),
|
||||||
|
|
||||||
|
array(array("name" => "peter"), array("name" => array("min_size" => 6)), false),
|
||||||
|
|
||||||
|
array(array("name" => "peter"), array("firstname" => array("required" => true)), false)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers FieldValidator::validate
|
||||||
|
* @dataProvider dataProviderTestValidateRemainingCovers
|
||||||
|
*/
|
||||||
|
public function testValidateRemainingCovers($arrayData, $arrayDataValidators, $success)
|
||||||
|
{
|
||||||
|
$result = $this->object->validate($arrayData, $arrayDataValidators);
|
||||||
|
|
||||||
|
$this->assertEquals($result["success"], $success);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
243
workflow/engine/classes/class.fieldValidator.php
Normal file
243
workflow/engine/classes/class.fieldValidator.php
Normal file
@@ -0,0 +1,243 @@
|
|||||||
|
<?php
|
||||||
|
class FieldValidator
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Checks if value of an variable is integer number
|
||||||
|
*
|
||||||
|
* @param int $num The variable being evaluated
|
||||||
|
*
|
||||||
|
* @return bool Returns true if $num is an integer, false otherwise
|
||||||
|
*/
|
||||||
|
public static function isInt($num)
|
||||||
|
{
|
||||||
|
$num = $num . "";
|
||||||
|
|
||||||
|
return (preg_match("/^[\+\-]?(?:0|[1-9]\d*)$/", $num))? true : false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if value of an variable is real number
|
||||||
|
*
|
||||||
|
* @param float $num The variable being evaluated
|
||||||
|
*
|
||||||
|
* @return bool Returns true if $num is an real, false otherwise
|
||||||
|
*/
|
||||||
|
public static function isReal($num)
|
||||||
|
{
|
||||||
|
$num = $num . "";
|
||||||
|
|
||||||
|
return (preg_match("/^[\+\-]?(?:0|[1-9]\d*)(?:\.\d+)?$/", $num))? true : false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if value of an variable is boolean
|
||||||
|
*
|
||||||
|
* @param bool $bool The variable being evaluated
|
||||||
|
*
|
||||||
|
* @return bool Returns true if $bool is an boolean, false otherwise
|
||||||
|
*/
|
||||||
|
public static function isBool($bool)
|
||||||
|
{
|
||||||
|
if (is_bool($bool) === true) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
$bool = $bool . "";
|
||||||
|
|
||||||
|
return (preg_match("/^(?:true|false)$/i", $bool))? true : false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if value of an variable have valid URL format
|
||||||
|
*
|
||||||
|
* @param string $url The variable being evaluated
|
||||||
|
*
|
||||||
|
* @return bool Returns true if $bool have valid URL format, false otherwise
|
||||||
|
*/
|
||||||
|
public static function isUrl($url)
|
||||||
|
{
|
||||||
|
return (preg_match("/(((^https?)|(^ftp)):\/\/([\-\w]+\.)+\w{2,3}(\/[%\-\w]+(\.\w{2,})?)*(([\w\-\.\?\/+\\@&#;`~=%!]*)(\.\w{2,})?)*\/?)/i", $url))? true : false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if value of an variable have valid email format
|
||||||
|
*
|
||||||
|
* @param string $email The variable being evaluated
|
||||||
|
*
|
||||||
|
* @return bool Returns true if $bool have valid email format, false otherwise
|
||||||
|
*/
|
||||||
|
public static function isEmail($email)
|
||||||
|
{
|
||||||
|
return (preg_match("/^(\w+)([\-+.\'][\w]+)*@(\w[\-\w]*\.){1,5}([A-Za-z]){2,6}$/", $email))? true : false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if value of an variable have valid IP format
|
||||||
|
*
|
||||||
|
* @param string $ip The variable being evaluated
|
||||||
|
*
|
||||||
|
* @return bool Returns true if $bool have valid IP format, false otherwise
|
||||||
|
*/
|
||||||
|
public static function isIp($ip)
|
||||||
|
{
|
||||||
|
return (preg_match("/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/", $ip))? true : false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validate fields
|
||||||
|
*
|
||||||
|
* @param array $arrayData Fields to be validate
|
||||||
|
* @param array $arrayDataValidators Validator for each field
|
||||||
|
*
|
||||||
|
* @return array Returns an array with key "succes" in true or false
|
||||||
|
*/
|
||||||
|
public static function validate($arrayData, $arrayDataValidators)
|
||||||
|
{
|
||||||
|
$result = array();
|
||||||
|
$arrayError = array();
|
||||||
|
|
||||||
|
$result["success"] = true;
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (!is_array($arrayData)) {
|
||||||
|
throw (new Exception("Fields no is array"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!is_array($arrayDataValidators)) {
|
||||||
|
throw (new Exception("Validators no is array"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (count($arrayData) == 0) {
|
||||||
|
throw (new Exception("Fields is empty"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (count($arrayDataValidators) == 0) {
|
||||||
|
throw (new Exception("Validators is empty"));
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($arrayDataValidators as $key1 => $value1) {
|
||||||
|
$field = $key1;
|
||||||
|
$arrayValidators = $value1;
|
||||||
|
|
||||||
|
if (is_array($arrayValidators) && count($arrayValidators) > 0) {
|
||||||
|
if (isset($arrayValidators["type"])) {
|
||||||
|
if (isset($arrayData[$field])) {
|
||||||
|
switch ($arrayValidators["type"]) {
|
||||||
|
case "int":
|
||||||
|
if (!self::isInt($arrayData[$field])) {
|
||||||
|
$result["success"] = false;
|
||||||
|
|
||||||
|
$arrayError[] = str_replace(
|
||||||
|
array("{0}"),
|
||||||
|
array($field),
|
||||||
|
"Field \"{0}\" not is an integer number"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "real":
|
||||||
|
if (!self::isReal($arrayData[$field])) {
|
||||||
|
$result["success"] = false;
|
||||||
|
|
||||||
|
$arrayError[] = str_replace(
|
||||||
|
array("{0}"),
|
||||||
|
array($field),
|
||||||
|
"Field \"{0}\" not is an real number"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "bool":
|
||||||
|
case "boolean":
|
||||||
|
if (!self::isBool($arrayData[$field])) {
|
||||||
|
$result["success"] = false;
|
||||||
|
|
||||||
|
$arrayError[] = str_replace(
|
||||||
|
array("{0}"),
|
||||||
|
array($field),
|
||||||
|
"Field \"{0}\" not is an boolean"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
//string
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($arrayValidators["validation"])) {
|
||||||
|
if (isset($arrayData[$field])) {
|
||||||
|
switch ($arrayValidators["validation"]) {
|
||||||
|
case "url":
|
||||||
|
if (!self::isUrl($arrayData[$field])) {
|
||||||
|
$result["success"] = false;
|
||||||
|
|
||||||
|
$arrayError[] = str_replace(
|
||||||
|
array("{0}"),
|
||||||
|
array($field),
|
||||||
|
"Field \"{0}\" have not an valid URL format"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "email":
|
||||||
|
if (!self::isEmail($arrayData[$field])) {
|
||||||
|
$result["success"] = false;
|
||||||
|
|
||||||
|
$arrayError[] = str_replace(
|
||||||
|
array("{0}"),
|
||||||
|
array($field),
|
||||||
|
"Field \"{0}\" have not an valid email format"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "ip":
|
||||||
|
if (!self::isIp($arrayData[$field])) {
|
||||||
|
$result["success"] = false;
|
||||||
|
|
||||||
|
$arrayError[] = str_replace(
|
||||||
|
array("{0}"),
|
||||||
|
array($field),
|
||||||
|
"Field \"{0}\" have not an valid IP format"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($arrayValidators["min_size"])) {
|
||||||
|
if (isset($arrayData[$field]) && !(strlen($arrayData[$field] . "") >= (int)($arrayValidators["min_size"]))) {
|
||||||
|
$result["success"] = false;
|
||||||
|
|
||||||
|
$arrayError[] = str_replace(
|
||||||
|
array("{0}", "{1}", "{2}"),
|
||||||
|
array($field, $arrayValidators["min_size"], strlen($arrayData[$field] . "")),
|
||||||
|
"Field \"{0}\" should be min {1} chars, {2} given"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($arrayValidators["required"])) {
|
||||||
|
if ($arrayValidators["required"] && (!isset($arrayData[$field]) || (isset($arrayData[$field]) && $arrayData[$field] . "" == ""))) {
|
||||||
|
$result["success"] = false;
|
||||||
|
|
||||||
|
$arrayError[] = str_replace(
|
||||||
|
array("{0}"),
|
||||||
|
array($field),
|
||||||
|
"Field \"{0}\" is required"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception $e) {
|
||||||
|
$arrayError[] = $e->getMessage();
|
||||||
|
|
||||||
|
$result["success"] = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$result["errors"] = $arrayError;
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Reference in New Issue
Block a user