Вход Регистрация
Файл: engine/classes/Validator.php
Строк: 146
<?php
    
/**
     * @class Validator
     * @author Patsifist
     * @version 0.1
     */

    
Class Validator
    
{
        public 
$attributes$errors$labels;

        
/**
         * @param array $attributes массив полей
         * @param array $labels массив названий полей
         */

        
public function __construct(array $attributes$labels = array())
        {
            
$this->attributes $attributes;
            
$this->labels $labels;
        }


        
/**
         * @param array $rules массив правил для проверки
         * @return bool Возаращает TRUE, если ошибок нет
         */

        
public function check(array $rules)
        {
            foreach (
$rules as $rule)
            {
                
call_user_func(
                    array(
$this'validator_'.$rule[1]), // вызов метода / $validator->validator_require и тд
                    
$rule[0], // название поля, которое проверяется
                    
(isset($this->attributes[$rule[0]]) ? $this->attributes[$rule[0]] : false), // содержимое  поля, которое проверяется
                    
(isset($rule[2]) ? $rule[2] : false// дополнительный параметр
                    
);
            }

            return empty(
$this->errors);
        }


        
/**
         * @param string $attribute поле для проверки
         * Можно указать несколько полей, указав их черех запятую: array('name, password', 'require');
         */

        
public function validator_require($attribute)
        {
            
$attributes explode(', '$attribute);
            foreach(
$attributes as $attr)
            {
                if (empty(
$this->attributes[$attr]))
                {
                    
$this->errors[] = 'Поле "'.$this->labels[$attr]. '" не заполнено';
                }
            }
        }



        
/**
         * @param string $attribute поле для проверки
         * @param string $value содержимое поля для проверки
         * @param string $var2 переменная для сравнения с $value, можно быть названием поля: array('password', 'compare', 'password3');
         * @return bool
         */

        
public function validator_compare($attribute$value$var2)
        {
            if (isset(
$this->attributes[$var2]))
            {
                if (
$value != $this->attributes[$var2])
                {
                    
$this->errors[] = $this->labels[$attribute] . ' и ' $this->labels[$var2] . ' должны быть одинаковыми';
                    return 
false;
                }
            }
            elseif (
$value != $var2)
            {
                
$this->errors[] = $this->labels[$attribute] . ' не соответствует ' $var2;
                return 
false;
            }
        }



        
/**
         * @param string $attribute поле для проверки
         * @param string $value содержимое поля для проверки
         * @param string $type Разрешенный тип данных: array('age', 'type', 'integer');
         * @return bool
         */

        
public function validator_type($attribute$value$type)
        {
            
$types = array('boolean' => 'булевая''integer' => 'число''array' => 'массив''string' => 'строка''float' => 'дробное число''object' => 'объект');
            switch(
$type)
            {
            default:
            case 
'string':
                
$func 'is_string';
                break;
            case 
'boolean':
                
$func 'is_bool';
                break;
            case 
'integer':
                
$func 'is_numeric';
                break;
            case 
'array':
                
$func 'is_array';
                break;
            case 
'float':
                
$func 'is_float';
                break;
            case 
'object':
                
$func 'is_object';
                break;
            }

            
$attributes explode(', '$attribute);
            foreach(
$attributes as $attr)
            {
                if (!
call_user_func($func$this->attributes[$attr]))//gettype($this->attributes[$attr]) != $type)
                
{
                    
$this->errors[] = $this->labels[$attr] . ' не ' $types[$type];
                    return 
false;
                }
            }
        }



        
/**
         * @param string $attribute поле для проверки
         * @param string $value содержимое поля для проверки
         * @param array $list список возможных значений: array('city', 'in_list', array('London', 'Paris'))
         * @return bool
         */

        
public function validator_in_list($attribute$value$list)
        {
            
/*
             * http://habrahabr.ru/post/216865/
             *
             * in_array($value, $list)
             */

            
$found false;

            foreach(
$list as $item)
            {
                if (
$value == $item)
                {
                        
$found true;
                    break;
                }
            }

            if (
$found == false)
            {
                
$this->errors[] = $this->labels[$attribute] . ' не найден в списке возможных вариантов';
            }

            return 
$found;
        }



        
/**
         * @param string $attribute поле для проверки
         * @param string $value содержимое поля для проверки
         * @param string $exts разрешенный расширения файлов, указывается через запятую
         * @return bool
         */

        
public function validator_file_ext($attribute$value$exts)
        {
            if (
$this->validator_in_list($attributepathinfo($valuePATHINFO_EXTENSION), explode(', '$exts)) == false)
            {
                
$this->errors[] = $this->labels[$attribute] . ' может быть одним из следующих форматов: '.$exts;
                return 
false;
            }
        }


        
/**
         * @param string $attribute поле для проверки
         * @param string $value содержимое поля для проверки
         * @param array $size array('name', 'length', array('min' => 2, 'max' => 19');
         */

        
public function validator_length($attribute$value$size)
        {
            if (isset(
$size['min']) && mb_strlen($value) < $size['min'])
            {
                
$this->errors[] = $this->labels[$attribute] . ' должен содержать более '.$size['min'] . ' символов';
            }

            if (isset(
$size['max']) && mb_strlen($value) > $size['max'])
            {
                
$this->errors[] = $this->labels[$attribute] . ' может содержать менее ' $size['max'] . ' символов';
            }
        }





        
/***
         * @param string $attribute поле для проверки
         * @param string $value содержимое поля для проверки
         * @return bool
         */

        
public function validator_captcha($attribute$value)
        {
            if (empty(
$_SESSION['captcha']) || trim(strtolower($value)) != $_SESSION['captcha'])
            {
                
$this->errors[] = 'Неверный проверочный код';
                return 
false;
            }
        }



        
/**
         * @param string $attribute поле для проверки
         * @param string $value содержимое поля для проверки
         * @param string $pattern регулярное выражение для проверки
         * @return bool
         */

        
public function validator_match($attribute$value$pattern)
        {
            if (!
preg_match($pattern$value))
            {
                
$this->errors[] =  $this->labels[$attribute] . ' не соответствует формату';
                return 
false;
            }

            
//return preg_match($pattern, $value);
        
}



        
/**
         * @param string $attribute поле для проверки
         * @param string $url URL ля проверки
         * @return bool
         */

        
public function validator_url($attribute$url)
        {
            if(
filter_var($urlFILTER_VALIDATE_URLFILTER_FLAG_PATH_REQUIRED) == false)
            {
                
$this->errors[] =  $this->labels[$attribute] . ' содержит не корректный URL';
                return 
false;
            }
        }



        
/**
         * @param string $attribute поле для проверки
         * @param string $value содержимое поля для проверки
         * @return bool
         */

        
public function validator_email($attribute$value)
        {
            if (
filter_var($valueFILTER_VALIDATE_EMAIL) == false)
            {
                
$this->errors[] = 'Проверьте правильность ввода e-mail';
                return 
false;
            }
        }



        
/**
         * @param string $attribute поле для проверки
         * @param string $value содержимое поля для проверки
         * @return bool
         */


        
public function validator_login($attribute$value)
        {

            if (
                
preg_match("#^[a-zа-яё][a-zа-яё0-9-_ ]{2,31}$#ui"$value) == false||
               (
preg_match("#[a-z]+#ui"$value) && preg_match("#[а-яё]+#ui"$value)))
            {
                
$this->errors[] = 'Проверьте правильность ввода логина';
                return 
false;
            }
        }


        
/**
         * @param string $attribute поле для проверки
         * @param string $value содержимое поля для проверки
         * @param array $search массив с названиям таблицы и поля для проверки: array('login', 'in_table', array('table' => 'user', 'row' => 'nick');
         * @return bool
         */

        
public function validator_in_table($attribute$value$search)
        {
            global 
$sql;
            if (
$sql->query('SELECT COUNT(*) FROM `'.$search['table'].'` WHERE `'.$search['row'].'` = "'.$sql->esc($value).'"')->result() == 0)
            {
                
$this->errors[] = $this->labels[$attribute] . ' не найден';
                return 
false;
            }
        }


        
/**
         * @param string $attribute поле для проверки
         * @param string $value содержимое поля для проверки
         * @param mixed $user_method пользовательская функция для проверки
         */

        
public function validator_user_method($attribute$value$user_method)
        {
            
$result call_user_func($user_method$value);
            if (!empty(
$result))
            {
                
$this->errors[] = $result;
            }
        }


        
/**
         * @param string $attribute поле для проверки
         * @param string $value содержимое поля для проверки
         * @param mixed $default_value значение по умолчанию
         */

        
public function validator_default($attribute, &$value$default_value)
        {
            if (empty(
$value))
            {
                
$value $default_value;
            }
        }


        
/**
         * @param string $attribute поле для проверки
         * @param string $value содержимое поля для проверки
         * @return bool
         */

        
public function validator_token($attribute$value)
        {
            if (!
CSRF::check($value$attribute))
            {
                
$this->errors[] = 'Ошибка при отправке сообщения, попробуйте заново. Если ошибка повторяется, сообщите администратору';
                return 
false;
            }
        }
    }
Онлайн: 1
Реклама