<?php 
// Class Defination starts here. 
//include('connection.php');
// above class include for connect datbase connection


class validator{
		
	var $array_to_validate = "";
	var $email = "";
	var $required = "";
	var $numeric = "";
	var $positive_numeric = "";
	var $positive_integer = "";
	var $url = "";
	var $alpha = "";
	var $alphanumeric = "";
	var $unique_from_table = "";
	var $compare = "";
	var $min_character_limit = "";
	var $max_character_limit = "";
	var $photo = "";
	var $upload="";
	
	// Error Array. 
	var $error_array = array();
		
		
	// INITIALIZER
	function initialize( $params = array() )
	{
		if (count($params) > 0)
		{
			foreach ($params as $key => $val)
			{
				if (isset($this->$key))
				{
					$this->$key = $val;
				}
			}
		}
	}

	// CONSTRUCTOR
	function validator( $params = array() )
	{
		
		if (count($params) > 0)
		{
			$this->initialize($params);
		
		}
	}
	
	// REQUIRED FIELD
	function validate_for_required()
	{
		$required_array = array();
		if(trim($this->required)!="")
		{
			$required_array = explode(',',$this->required);
		}
	
		foreach($required_array as $required_element)
		{	
			if(trim($required_element)!='')
			{
				$value_to_check = mysql_real_escape_string(trim($this->array_to_validate[trim($required_element)]));
				if(trim($value_to_check)=="")
				{
					$this->error_array[] = array(
									'error_field'	=> trim($required_element),
									'error' 		=> "Field should not be empty"
								); 
				}
			}
		}
	}
	
	
	// EMAIL VALIDATION
	function validate_for_email()
	{
		$required_array = array();
		if(trim($this->email)!="")
		{
			$required_array = explode(',',$this->email);
		}
		foreach($required_array as $required_element)
		{
			if(trim($required_element)!='')
			{
				$value_to_check =mysql_real_escape_string(trim($this->array_to_validate[trim($required_element)])); 
				if($value_to_check!='')
				{
					if(!filter_var($value_to_check, FILTER_VALIDATE_EMAIL))
					{
						$this->error_array[] = array(
										'error_field'	=> trim($required_element),
										'error' 		=> "Field should be an valid email"
									); 
					}
				}
			}
		}
	}
	
	
	// NUMERIC FIELD VALIDATION
	function validate_for_numeric()
	{
		$required_array = array();
		if(trim($this->numeric)!="")
		{
			$required_array = explode(',',$this->numeric);
		}
		foreach($required_array as $required_element)
		{
			if(trim($required_element)!='')
			{
				$value_to_check = mysql_real_escape_string(trim($this->array_to_validate[trim($required_element)]));
				if($value_to_check!='')
				{
					if(!is_numeric($value_to_check))
					{ 
						$this->error_array[] = array(
										'error_field'	=> trim($required_element),
										'error' 		=> "Field should be numeric"
									);
					}
				}
			}
		}
	}
	
	// POSITIVE INTEGER FIELD VALIDATION
	function validate_for_positive_integer()
	{
		$required_array = array();
		if(trim($this->positive_integer)!="")
		{
			$required_array = explode(',',$this->positive_integer);
		}
		foreach($required_array as $required_element)
		{
			if(trim($required_element)!='')
			{
				$value_to_check = mysql_real_escape_string(trim($this->array_to_validate[trim($required_element)]));
				if($value_to_check!='')
				{
					//check number for float
					if($value_to_check != round($value_to_check))
					{ 
						$this->error_array[] = array(
							'error_field'	=> trim($required_element),
							'error' 		=> "Field should be integer number"
						);
					}
				}
			}
		}
	}

	// POSITIVE NUMERIC FIELD VALIDATION
	function validate_for_positive_numeric()
	{
		$required_array = array();
		if(trim($this->positive_numeric)!="")
		{
			$required_array = explode(',',$this->positive_numeric);
		}
		
		foreach($required_array as $required_element)
		{
			if(trim($required_element)!='')
			{
				$value_to_check = mysql_real_escape_string(trim($this->array_to_validate[trim($required_element)]));
				if($value_to_check!='')
				{
					if($value_to_check<0)
					{ 
						$this->error_array[] = array(
							'error_field'	=> trim($required_element),
							'error' 		=> "Field should be positive number"
						);
					}
				}
			}
		}
	}
	
	// URL VALIDATION
	function validate_for_url()
	{
		$required_array = array();
		if(trim($this->url)!="")
		{
			$required_array = explode(',',$this->url);
		}

		foreach($required_array as $required_element)
		{
			if(trim($required_element)!='')
			{
				$value_to_check =$this->array_to_validate[trim($required_element)];
				if($value_to_check!='')
				{
					if(!preg_match('/((((?:http|https|ftp):\/\/)|(www\.))(?:[A-Z0-9][A-Z0-9_-]*(?:\.[A-Z0-9][A-Z0-9_-]*)+):?(\d+)?\/?[^\s\"\']+)/i',$value_to_check))
					{
						$this->error_array[] = array(
										'error_field'	=> trim($required_element),
										'error' 		=> "Field should be URL"
									);
					}
				}
			}
		}
	}
	
	
	// ALPHA VALIDATION FOR LETTERS ONLY
	function validate_for_alpha()
	{
		$required_array = array();
			if(trim($this->alpha)!="")
		{
				$required_array = explode(',',$this->alpha);
		}

	
		foreach($required_array as $required_element)
		{
			if(trim($required_element)!='')
			{
				$value_to_check = mysql_real_escape_string(trim($this->array_to_validate[trim($required_element)]));
				if($value_to_check!='')
				{
					if(!preg_match("/^[a-zA-Z ]+$/",$value_to_check))
					{
						$this->error_array[] = array(
										'error_field'	=> trim($required_element),
										'error' 		=> "Please use only letters (a-z)"
									);
					}
				}
			}
		}
	}
	
	
	// ALPHANUMERIC VALIDATION FOR LETTERS,NUMBERS AND PERIODS ONLY
	function validate_for_alphanumeric()
	{
		$required_array = array();
	
		if(trim($this->alphanumeric)!="")
		{
			$required_array = explode(',',$this->alphanumeric);
		}
		
		foreach($required_array as $required_element)
		{
			if(trim($required_element)!='')
			{
				$value_to_check = mysql_real_escape_string(trim($this->array_to_validate[trim($required_element)]));
				if($value_to_check!='')
				{
					if(!preg_match('/^[a-zA-Z0-9]+$/',$value_to_check))
					{
						$this->error_array[] = array(
										'error_field'	=> trim($required_element),
										'error' 		=> "Please use alphanumeric"
									);
					}
				}
			}
		}
	}
	
	
	// UNIQUE FROM TABLE
	function validate_for_unique_from_table()
	{
		$required_array = array();
		
		if(!empty($this->unique_from_table))
		{
			$required_array = $this->unique_from_table;
		}
		
		foreach($required_array as $unique)
			{	
				$table_name = $unique['table_name'];
				$table_field = $unique['table_field'];
				$field_name = $unique['field_name'];
				$extra_field_name = isset($unique['extra_field_name'])?$unique['extra_field_name']:"";
				$extra_field_name_edit = isset($unique['extra_field_name_edit'])?$unique['extra_field_name_edit']:"";
				$extra_table_field = isset($unique['extra_table_field'])?$unique['extra_table_field']:"";
				$value_to_check = mysql_real_escape_string(trim($this->array_to_validate[$unique['field_name']]));
				$value_to_check_alt = isset($unique['extra_field_name'])?mysql_real_escape_string(trim($this->array_to_validate[$unique['extra_field_name']])):"";
				$value_to_check_alt_edit = isset($unique['extra_field_name_edit'])?mysql_real_escape_string(trim($this->array_to_validate[$unique['extra_field_name_edit']])):"";

				if($value_to_check!='')
				{	
					if($extra_field_name=='')
					{
						$query = mysql_query("select * from $table_name where $table_field ='$value_to_check'") or die(mysql_error());
						if( mysql_num_rows($query) )
						{
							$this->error_array[] = array(
								'error_field'	=> trim($field_name),
								'error' 		=> ucfirst(str_replace("_",' ',trim($field_name)))." Already Exist."
							); 						
						}
					}
					else
					{
						if($value_to_check_alt_edit=='')
						{
							$query = mysql_query("select * from $table_name where $table_field ='$value_to_check' and $extra_table_field = '$value_to_check_alt'") or die(mysql_error());
							if( mysql_num_rows($query) )
							{
								$this->error_array[] = array(
									'error_field'	=> trim($field_name),
									'error' 		=> ucfirst(str_replace("_",' ',trim($field_name)))." Already Exist."
								); 						
							}
						}
						else
						{
							$query = mysql_query("select * from $table_name where $table_field ='$value_to_check' and $extra_table_field = '$value_to_check_alt' and $extra_field_name_edit!='$value_to_check_alt_edit'") or die(mysql_error());
							if( mysql_num_rows($query) )
							{
								$this->error_array[] = array(
									'error_field'	=> trim($field_name),
									'error' 		=> ucfirst(str_replace("_",' ',trim($field_name)))." Already Exist."
								); 						
							}
						}
					}
				}
			}	
	}
	
	
	// COMPARE FIELDS
	function validate_for_compare()
	{
		$required_array = array();
		if(!empty($this->compare))
		{
			$required_array = $this->compare;
		}
		
		foreach($required_array as $required_element)
		{
			if(!empty($required_element))
			{
				$field_name = $required_element['field_name'];
				$compare_field_name = $required_element['compare_field_name'];
				$value_to_check = trim($this->array_to_validate[$field_name]); 
				if($value_to_check!='')
				{
					$compare_value_to_check = trim($this->array_to_validate[$compare_field_name]);
					
					if($value_to_check != $compare_value_to_check)
					{
						$this->error_array[] = array(
										'error_field'	=> trim($compare_field_name),
										'error' 		=> "Does not match with '".ucfirst(str_replace("_",' ',trim($field_name)))."' field"
									);
					}
				}
			}
		}
	}
	
	// LIMIT THE NO OF CHARACTER FIELDS
	function min_character_limit()
	{
		$required_array = array();
		if(!empty($this->min_character_limit))
		{
			$required_array = $this->min_character_limit;
		}
		
		foreach($required_array as $required_element)
		{
			if(!empty($required_element))
			{
				$field_name = $required_element['field_name'];
				$no_of_character = trim($required_element['no_of_character']);
				$value_to_check = trim($this->array_to_validate[$field_name]); 
				if($value_to_check!='')
				{	
					$no_of_character_value = $no_of_character;
					if(strlen($value_to_check) < $no_of_character_value)
					{
						$this->error_array[] = array(
										'error_field'	=> trim($field_name),
										'error' 		=> "Minimum of ".$no_of_character_value." characters required."
									);
					}
				}
			}
		}
	}
	
	
	// LIMIT THE MAX NO OF CHARACTER FIELDS
	function max_character_limit()
	{
		$required_array = array();
		if(!empty($this->max_character_limit))
		{
			$required_array = $this->max_character_limit;
		}
		
		foreach($required_array as $required_element)
		{
			if(!empty($required_element))
			{
				$field_name = $required_element['field_name'];
				$no_of_character = trim($required_element['no_of_character']);
				$value_to_check = trim($this->array_to_validate[$field_name]); 
				if($value_to_check!='')
				{	
					$no_of_character_value = $no_of_character;
					if(strlen($value_to_check) > $no_of_character_value)
					{
						$this->error_array[] = array(
										'error_field'	=> trim($field_name),
										'error' 		=> "Character Limit Exceeded.</n><br> You can enter only ".$no_of_character_value." characters."
									);
					}
				}
			}
		}
	}

	
	// REQUIRED FIELD
	function validate_for_photo()
	{
		$required_array = array();
		if(trim($this->photo)!="")
		{
			$required_array = explode(',',$this->photo);	
		}
	
		foreach($required_array as $required_element)
		{	
			if(trim($required_element)!='')
			{
				$value_to_check = mysql_real_escape_string(trim($this->array_to_validate[trim($required_element)]));
				if($value_to_check!='')
				{
					$path_parts = pathinfo(strtolower($value_to_check));
					if(!($path_parts['extension']=='jpg' || $path_parts['extension']=='jpeg' || $path_parts['extension']=='gif' || $path_parts['extension']=='png'))
					{
						$this->error_array[] = array(
										'error_field'	=> trim($required_element),
										'error' 		=> "Field should be jpg,jpeg,gif,png."
									); 
					}
				}
			}
		}
	}
	
	
	function validate_for_upload()
	{
		$required_array = array();
		if(!empty($this->upload))
		{
			$required_array = $this->upload;
		}
	
		foreach($required_array as $required_element)
		{	
			$field_name = $required_element['field_name'];
			if(!empty($required_element['extensions']))
			{
				$extensions_field = $required_element['extensions'];
				$extensions = explode(',',$extensions_field);	
			}
			$file_name = mysql_real_escape_string(trim($this->array_to_validate[trim($field_name)]));
			if($file_name!='')
			{
				$path_parts = pathinfo(strtolower($file_name));

				if(!isset($path_parts['extension']) || !in_array($path_parts['extension'],$extensions))
				{
					$this->error_array[] = array(
						'error_field'	=> trim($field_name),
						'error' 		=> 'Field should be '.$extensions_field.'.',
					); 
				}
			}
		}
	}
	
	function process_validation()
	{
		$this->validate_for_required();
		$this->validate_for_email();
		$this->validate_for_numeric();
		$this->validate_for_positive_numeric();
		$this->validate_for_positive_integer();
		$this->validate_for_url();
		$this->validate_for_alpha();
		$this->validate_for_alphanumeric();
		$this->validate_for_unique_from_table();
		$this->validate_for_compare();
		$this->validate_for_upload();
		$this->min_character_limit();
		$this->max_character_limit();
		$this->validate_for_photo();
		if(count($this->error_array))
		{
			return $this->error_array;
		}
		else
		{
			return false;
		}
	
	}

}


	
	

/* 	
$config = array();
$config['array_to_validate'] 	= $_GET;
$config['email'] 				= "account_email,alternative_email";
$config['required']				= "username,lastname";
$config['numeric']				= "mobile";
$config['url']					= "url";
$config['alpha']				= "firstname";
$config['alphanumeric']			= "password";
$config['unique_from_table']	= array(
										array(
											'field_name' =>'',
											'table_name' =>'vt_users',
											'table_field'=>'username'
										),
										array(
											'field_name' =>'',
											'table_name' =>'vt_users',
											'table_field'=>'username'
										),
									);
$config['compare']					= array(
										array(
											'field_name' =>'username',
											'compare_field_name' =>'firstname',
										),
										array(
											'field_name' =>'lastname',
											'compare_field_name' =>'firstname'
										)
									);
$my_validator = new validator($config);
$error = $my_validator->process_validation();

if( $error == false )
{
	echo "No Error Found";
}
else
{
	echo "<pre>";
			print_r($error);
	echo "</pre>";
		
}   */
?>