ACC SHELL

Path : /srv/www/vhosts/agroing/web/helpers/form_h/
File Upload :
Current File : /srv/www/vhosts/agroing/web/helpers/form_h/validators.php

<?php
/*
 * FormValidators je objekt volaný z Form
 *
 * Method names are validators or filtres used in your application
 */

class FormValidators
{
    public $emsg = array(  // erorové hlášky
        'empty' => "Musíte vyplnit všechny povinné pole",
        'is_empty' => "Musíte vyplnit všechny povinné pole",
		'emptyCaptcha' => "Musíte správně opsat kontrolní text",

        'emptyEmail' => "Email musí být vyplněn", // hláška co přetíží required protože v názvu obsahuje "empty"
		'emptyPodminky' => "Musíte souhlasit s licenčními podmínkami",
		'emptyDoprava' => "Musíte vybrat způsob dopravy",

        'password' => "Špatně vyplněný login nebo heslo",
		'email' => "Chybně vyplněný E-mail",
        'tel' => "Chybně vyplněný Telefon",
		'psc' => "Chybně vyplněné PSČ",
		'ico' => "Chybně vyplněné IČO",
		'dic' => "Chybně vyplněné DIČ",
        'mobil' => "Chybně vyplněný Mobil",
		'date' => "Chybně vyplněné Datum",
		'www' => "Chybně vyplněná www adresa",
		'pohlavi' => "Musíte vybrat pohlaví",
		'rePasswordEmpty' => "Špatně opsané heslo", //using $_POST['password']
		'delkaHesla' => "Minimální délka hesla je 6 znaků",
		'oldPassword' => "Zadali jste špatně staré heslo",
		'ks' => "počet kusů musí být číslo",
		'emptyks' => "musíte vyplnit počet kusů",
		'cena' => "cena musí být číslo",
		'order' => "pořadí musí být číslo",
		'emptyadmin' => "pro pokračování musíte zaškrtnout políčko administrátor",

        'emptyFile' => "Musíte vložit soubor(y)",
        'fileError' => "Vložení souboru se nezdařilo (pravděpodobně moc velký soubor)",
        'imageFile' => "Vkládaný obrázek musí končit: .jpg/.gif/.png",
		'xlsFile' => "Vkládaný soubor musí mít příponu .xls",
        'fileSize' => "Vkládaný soubor může mít maximálně 2Mb",

		'jmeno' => "Jméno musí obsahovat minimálně 4 znaky a být jednoslovné"
    );

//// * VALIDATORS * ////

	public function password ($value){
		return UsersModel::check($value, $_POST['login']);
	}

	public function emptyadmin ($value){
		return $value;
	}

	public function cena ($value){
		return is_numeric($value);
	}

	public function is_empty ($value){
		return $value;
	}

	public function order ($value){
		return is_numeric($value);
	}

	public function ks ($value){
		return is_numeric($value);
	}

	public function jmeno ($value){
		if(strlen($value)<4) return false;
		if(strpos(trim($value)," ")) return false;
		return true;
	}

    public function _email($value){
		$value = trim($value);
        return preg_match('/^([a-z0-9])(([-a-z0-9._])*([a-z0-9]))*\@([a-z0-9])' .
'(([a-z0-9-])*([a-z0-9]))+' . '(\.([a-z0-9])([-a-z0-9_-])?([a-z0-9])+)+$/i',$value);
    }

	public function email (&$value){
		$this->emailFilter($value);
		return $this->_email($value);
	}

	public function _www($value){
		$value = trim($value);
        return preg_match('/^(https?:\/\/)?[^(\/\/)]*\..+.+$/i',$value);
    }

	public function www(&$value){ // filtruje i validuje...
		$this->wwwFilter($value);
        return $this->_www($value);
    }

    public function tel($value){
        $chyba = false;
        $this->telFilter13($value);
        if(strlen($value)!=13) $chyba = true;
        if(!preg_match('/^\+[0-9]*$/i',$value)) $chyba = true;
        return !$chyba;
    }
	public function psc(&$value){
		$v = str_replace(" ","",$value);
		if(strlen($v)!=5) return false;
		if(!is_numeric($v)) return false;
		$value = substr($v,0,3)." ".substr($v,3);
		return true;
	}
	public function ico($value){
		$value = preg_replace('#\s+#', '', $value);
		if (!preg_match('#^\d{8}$#', $value)) {
			return FALSE;
		}
		$a = 0;
		for ($i = 0; $i < 7; $i++) {
			$a += $value[$i] * (8 - $i);
		}
		$a = $a % 11;
		if ($a === 0) $c = 1;
		elseif ($a === 10) $c = 1;
		elseif ($a === 1) $c = 0;
		else $c = 11 - $a;
		return (int) $value[7] === $c;
	}
	public function dic($value){
		// todo
		return true;
	}

    public function mobil($value){ // přejatá funkce tel, jen pozměněna error hláška
        return $this->tel($value);
    }

	public function _date ($value){ // validní jsou formaty 2000-01-01 nebo 2000-01-01 10:10:01 nebo 2000-01-01 1:10
		if(strlen($value)==10){
			$e = explode("-",$value);
			return checkdate($e[1],$e[2],$e[0]);
		}elseif(strlen($value)>14 && strlen($value)<19){
			$e1 = explode(" ",$value);
			$time = $e1[1];

			$e = explode("-",$e1[0]);
			$result1 = checkdate(@$e[1],@$e[2],@$e[0]);
			$result2 = preg_match('/^((23)|(22)|(21)|(20)|([0-1]?[0-9])):([0-5][0-9])(:([0-5][0-9]))?$/i',$time);
			return ($result1 && $result2);
		}else{
			return false;
		}
	}

	public function date(&$value,$other){ // filtruje i validuje...
		$this->dateFilter($value);
		$result = $this->_date($value);
		if(isset($other['ajax']) && $other['ajax']){
			$this->dateFilterHuman($value);
		}
        return $result;
    }

	public function pohlavi ($value){
        return $value!=0;
    }

	public function delkaHesla ($value){
        return strlen($value)>5;
    }

	public function rePasswordEmpty(&$value,$options){ // Empty je v nazvu, aby se kontolovalo i nevyplnene
		$result = true;
        if(isset($_POST['password'])) $result = $value==$_POST['password'];
		if(!$result && (!isset($options['ajax']) || !$options['ajax'])) $value = "";
        return $result;
    }

	public function oldPassword($value,$options){
		if($options['ajax']){ //var_dump($options);
			return true;
		}else{
			return (md5($_POST['password_old']) == $options['old']);
		}
	}

	public function emptyCaptcha($value){
        return (trim($value)==$_SESSION['captcha_str'] && trim($value));
    }

	// FILE validators
    public function imageFile ($value){ // kontroluje jesli value obsahuje jpg/png/gif
        return (($value["type"] == "image/gif") || ($value["type"] == "image/jpeg") || ($value["type"] == "image/pjpeg"));
    }
	public function xlsFile ($value){ // kontroluje jesli value obsahuje slx
        return ($value["type"] == "application/vnd.ms-excel");
    }
    public function fileSize ($value){
        return ($value["size"] <= 2000000);
    }

//// * empty VALIDATORS * ////
    // speciální validátory s "empty" v názvu se provedou i když je odeslaná hodnota prázdná a přetíží required (fungujou i filtry s empty)
    public function emptyEmail ($value){
        return trim($value)!="";
    }
	public function emptyks ($value){
        return trim($value)!="";
    }
	public function emptyPodminky ($value){
        return $value != false;
    }
	public function emptyDoprava ($value){
        return $value != false;
    }

//// * FILTERS * ////
// je potřeba hodnotu předávat odkazem !!
// a vracet true !!

    public function strtolower(&$value){ // pozor kurví české znaky
       $value = strtolower($value);
       return true;
    }

    public function trim(&$value){
       $value = trim($value);
       return true;
    }

	public function diakritikaFilter(&$value){
		if (is_string($value)){
			$prevodni_tabulka = Array( 'ä'=>'a',' '=>'_','Ä'=>'A',		  'á'=>'a',		  'Á'=>'A',		  'à'=>'a',		  'À'=>'A',		  'ã'=>'a',		  'Ã'=>'A',		  'â'=>'a',		  'Â'=>'A',	  'č'=>'c',		  'Č'=>'C',		  'ć'=>'c',		  'Ć'=>'C',		  'ď'=>'d',		  'Ď'=>'D',		  'ě'=>'e',		  'Ě'=>'E',		  'é'=>'e',		  'É'=>'E',		  'ë'=>'e',		  'Ë'=>'E',		  'è'=>'e',		  'È'=>'E',		  'ê'=>'e',		  'Ê'=>'E',		  'í'=>'i',		  'Í'=>'I',		  'ï'=>'i',		  'Ï'=>'I',		  'ì'=>'i',		  'Ì'=>'I',		  'î'=>'i',		  'Î'=>'I',		  'ľ'=>'l',		  'Ľ'=>'L',		  'ĺ'=>'l',		  'Ĺ'=>'L',		  'ń'=>'n',		  'Ń'=>'N',		  'ň'=>'n',		  'Ň'=>'N',		  'ñ'=>'n',		  'Ñ'=>'N',		  'ó'=>'o',		  'Ó'=>'O',		  'ö'=>'o',		  'Ö'=>'O',		  'ô'=>'o',		  'Ô'=>'O',		  'ò'=>'o',		  'Ò'=>'O',		  'õ'=>'o',		  'Õ'=>'O',		  'ő'=>'o',		  'Ő'=>'O',		  'ř'=>'r',		  'Ř'=>'R',		  'ŕ'=>'r',		  'Ŕ'=>'R',		  'š'=>'s',		  'Š'=>'S',		  'ś'=>'s',		  'Ś'=>'S',		  'ť'=>'t',		  'Ť'=>'T',		  'ú'=>'u',		  'Ú'=>'U',		  'ů'=>'u',		  'Ů'=>'U',		  'ü'=>'u',		  'Ü'=>'U',		  'ù'=>'u',		  'Ù'=>'U',		  'ũ'=>'u',		  'Ũ'=>'U',		  'û'=>'u',		  'Û'=>'U',		  'ý'=>'y',		  'Ý'=>'Y',		  'ž'=>'z',		  'Ž'=>'Z',		  'ź'=>'z',		  'Ź'=>'Z'		);
			$value = strtr($value, $prevodni_tabulka);
		}
		return true;
	}

    public function emailFilter(&$value){ // trim & strtolower
	   $this->diakritikaFilter($value);
       $this->strtolower($value);
       $this->trim($value);
       return true;
    }

	public function dateFilter(&$value){ // 1.1.2000 -> 2000-01-01
		$up = trim($value);
		$middle = @strpos($up," ",8);
		if($middle){ // 1.1.2000 1:1
			$date = substr($up, 0, $middle);
			$time = substr($up, $middle+1 );
		}else{
			$date = $up;
		}
		$date = str_replace(" ","",$date);
		$date = str_replace(array(",","/","-"),".",$date);
		$e = explode(".",$date);
		if(@checkdate($e[1],$e[2],$e[0] && $e[0]>1970)){
			$date = sprintf('%1$04d-%2$02d-%3$02d',$e[0],$e[1],$e[2]);
		}elseif(@checkdate($e[1],$e[0],$e[2]) && $e[2]>1970){
			$date = sprintf('%1$04d-%2$02d-%3$02d',$e[2],$e[1],$e[0]);
			//$date = date("Y-m-d",mktime(0,0,0,$e[1],$e[0],$e[2]));
		}elseif(@checkdate($e[1],$e[0],date('Y'))){
			$date = sprintf('%1$04d-%2$02d-%3$02d',date('Y'),$e[1],$e[0]);
		}else{
			$date = false;
		}
		if(!empty($time)){
			$time = str_replace(" ","",$time);
			$time = str_replace(array(".","/","-"),":",$time);
			if(preg_match('/^([0-9]?[0-9]):([0-9]?[0-9])(:([0-9]?[0-9]))?$/i',$time)){
				$e[2] = 0;
				$e = explode(":",$time);
				for($i=0;$i<=2;$i++)  settype($e[$i],"int");
				if($e[0]>23 || $e[1]>59 || $e[2]>59){
					$time = false;
				}else{
					//$time = sprintf('%1$02d:%2$02d:%3$02d',$e[0],$e[1],$e[2]);
					$time = sprintf('%1$d:%2$02d',$e[0],$e[1]);
				}
			}else{
				$time = false;
			}
		}
		if($date && !isset($time)){
			$value = $date;
		}elseif($date && isset($time) && $time){
			$value = $date." ".$time;
		}
		return true;
    }

	public function wwwFilter(&$value){
		if($this->_www($value)){
			$this->diakritikaFilter($value);
			if(strpos($value,"http://")===false && strpos($value,"https://")===false){
				$value = "http://" . $value;
			}
		}
		return true;
	}

	public function dateFilterHuman(&$value){
		if($this->_date($value)){
			$date = substr($value,0,10);
			$time = @substr($value,10);
			$value = date("j.n.Y",strtotime($date)) . $time;
		}
		return true;
	}

    public function telFilter13(&$value){ // přefiltruje číslo na třinástimístné (s plusem)
        $value_up = str_replace(array(' ','+'), '', $value);
        if(is_numeric($value_up)){
            if(strlen($value_up)==9){
                $value = '+420'.$value_up;
            }elseif(strlen($value_up)==12){
                $value = '+'.$value_up;
            }elseif(strlen($value_up)==14 && $value_up[0]=='0' && $value_up[1]=='0'){
				$value = '+'.substr($value_up,2);
			}
        }
        return true;
    }

    public function telFilter9(&$value){ // čísla bez nebo s předvolbou +420 vrátí devítimístné bez mezer
       $this->telFilter13($value);
        if($this->tel($value)){
            $value = str_replace('+420', '', $value);
        }
        return true;
    }
}

 ////   testing validators
/*$value = "1.1.20";
$a =  new FormValidators();
$a->dateFilter($value);
echo $value;*/


?>

ACC SHELL 2018