PHP

Небольшой ajax оброботчик


<?php
class SaveCategory {
    private $Sql;
    
    private $categoryId;
    private $oldCategoryArray;
    private $newCategoryArray;
    
    public $status=true;
    public $message;
    public $errorArray;
    
    //Максимальное количество символов FALSE не проверять
    private $simbolsMax=array(
        'url'   =>false,
        'name'  =>false,
        'title' =>80,
        'meta_d'=>200,
        'meta_k'=>250
        
    );
    
    //минимальное количество символов FALSE не проверять
    private $simbolsMin=array(
        'url'   =>3,
        'name'  =>3,
        'title' =>3,
        'meta_d'=>false,
        'meta_k'=>false
        
    );
    
    //Допустимые элементы для карты сайта
    private $xmlSytemapChangefreqs=array('always','hourly','daily','weekly','monthly','yearly','never');
     
    
    public 
    function __construct(){
        $this->Sql= new SqlInc();
        $this->categoryId = (int)$_POST['id'];
        if(!$this->categoryId){ $this->error('Не удалось определить идентификатор раздела'); return;}
        //Загружаем оригинальный раздел
        if($this->loadOldCategory()){
            //Получаем получение и первичная обработка данных
            $this->postDate();
            //Проверяем на валидность
            if($this->validate()){
                //генерируем bufer url
                if($this->newCategoryArray['sweat_category']){
                   $this->newCategoryArray['bufer_url'] = $this->genBuferUrl($this->newCategoryArray['sweat_category'],$this->newCategoryArray['url']);
                }else{
                    //Если раздел родительский то указываем просто url
                    $this->newCategoryArray['bufer_url']=$this->newCategoryArray['url'];
                }
                //Сохроняем категорию
                $this->categoryUpdate();
            }
        }

        
    }
    
    private 
    function categoryUpdate(){
        $result = $this->Sql->query("
        UPDATE `category` SET
            `url`='".$this->Sql->real_escape_string($this->newCategoryArray['url'])."',
            `bufer_url`='".$this->Sql->real_escape_string($this->newCategoryArray['bufer_url'])."',
            `name`='".$this->Sql->real_escape_string($this->newCategoryArray['name'])."',
            `title`='".$this->Sql->real_escape_string($this->newCategoryArray['title'])."',
            `meta_d`='".$this->Sql->real_escape_string($this->newCategoryArray['meta_d'])."',
            `meta_k`='".$this->Sql->real_escape_string($this->newCategoryArray['meta_k'])."',
            `text`='".$this->Sql->real_escape_string($this->newCategoryArray['text'])."',
            `category_typ`='".$this->Sql->real_escape_string($this->newCategoryArray['category_typ'])."',
            `sys`='".$this->newCategoryArray['sys']."',
            `xml_sm_action`='".$this->newCategoryArray['xmlSitemap']['category']['status']."',
            `xml_sm_changefred`='".$this->newCategoryArray['xmlSitemap']['category']['changefreq']."',
            `xml_sm_priority`='".$this->newCategoryArray['xmlSitemap']['category']['priority']."',
            `page_xml_sm_action`='".$this->newCategoryArray['xmlSitemap']['page']['status']."',
            `page_xml_sm_changefreq`='".$this->newCategoryArray['xmlSitemap']['page']['changefreq']."',
            `page_xml_sm_priority`='".$this->newCategoryArray['xmlSitemap']['page']['priority']."',
            `action`='".$this->newCategoryArray['action']."'
                WHERE 
                    `id`='".$this->categoryId."'
        ");
        if($result){
            $this->message="Раздел сохранён";
        }else{
            $this->error('По неизвестной причине не удалось приминить изменения');
        }
        
    }
    
    //Получение и обрработка данных
    private
    function postDate(){
        $this->newCategoryArray=array(
            'url'       =>translit(trim($_POST['url'])),
            'name'      =>trim(strip_tags($_POST['name'])),
            'title'     =>trim(strip_tags($_POST['title'])),
            'meta_d'    =>trim(strip_tags($_POST['meta_d'])),
            'meta_k'    =>trim(strip_tags($_POST['meta_k'])),
            'text'      =>trim($_POST['text']),
            'action'    =>$_POST['action']?1:0,
            'system'    =>$_POST['system']?1:0,
            'category_typ'  =>(int)$_POST['category_typ'],
            'sweat_category'=>(int)$_POST['sweat_category'],
            'xmlSitemap'=>array(
                'category'=>array(
                    'status'    =>$_POST['xmlSitemap']['cateory']['status']?1:0,
                    'priority'  =>(float) $_POST['xmlSitemap']['cateory']['priority'],
                    'changefreq'=>trim(strip_tags($_POST['xmlSitemap']['cateory']['changefreq']))
                ),
                'page'=>array(
                    'status'    =>$_POST['xmlSitemap']['page']['status']?1:0,
                    'priority'  =>(float)$_POST['xmlSitemap']['page']['priority'],
                    'changefreq'=>trim(strip_tags($_POST['xmlSitemap']['page']['changefreq']))
                )
                
            )
        );
    }
    
    //Загружаем оригинал раздела
    private 
    function loadOldCategory(){
        $myrow = $this->Sql->query("SELECT * FROM `category` WHERE `id`='".$this->categoryId."' LIMIT 1");
        if($myrow->num_rows){
            $result = $myrow->fetch_assoc();
            $this->oldCategoryArray = array_map("stripslashes",$result);
            return true;
        }else{
            $this->error('resultText','Ошибка: Данной катигории не существует');
            return FALSE;
        }
    }
    
    //Валидацмя данных
    private 
    function validate(){
        //Проверяем всели объязательные элементы указаны
        if(empty($this->newCategoryArray['url']))   {$this->error('Поле Ссылка не может быть пустым');}
        if(empty($this->newCategoryArray['name']))  {$this->error('Поле Название не может быть пустым');}
        if(empty($this->newCategoryArray['title'])) {$this->error('Поле title не может быть пустым');}
        //Проверяем длину элементов
        if($this->simbolsMin['url'] && mb_strlen($this->newCategoryArray['url'],'utf-8') < $this->simbolsMin['url']){
            $this->error('Ссылка слишком короткая, минимум "'.$this->simbolsMin['url'].'" символов');
        }elseif($this->simbolsMax['url'] && mb_strlen($this->newCategoryArray['url'],'utf-8') > $this->simbolsMax['url']){
            $this->error('Ссылка слишком длиная, максимум "'.$this->simbolsMax['url'].'" символов');
        }
        if($this->simbolsMin['name'] && mb_strlen($this->newCategoryArray['name'],'utf-8') < $this->simbolsMin['name']){
            $this->error('Название слишком короткое, минимум "'.$this->simbolsMin['name'].'" символов');
        }elseif($this->simbolsMax['name'] && mb_strlen($this->newCategoryArray['name'],'utf-8') > $this->simbolsMax['name']){
            $this->error('Название слишком длиное, максимум "'.$this->simbolsMax['name'].'" символов');
        }
        if($this->simbolsMin['title'] && mb_strlen($this->newCategoryArray['title'],'utf-8') < $this->simbolsMin['title']){
            $this->error('title слишком кароткий, минимум "'.$this->simbolsMin['title'].'" символов');
        }elseif($this->simbolsMax['title'] && mb_strlen($this->newCategoryArray['title'],'utf-8') > $this->simbolsMax['title']){
            $this->error('title слишком длиный, максимум "'.$this->simbolsMax['title'].'" символов');
        }
        if($this->simbolsMin['meta_d'] && mb_strlen($this->newCategoryArray['meta_d'],'utf-8') < $this->simbolsMin['meta_d']){
            $this->error('meta_d слишком кароткий, минимум "'.$this->simbolsMin['meta_d'].'" символов');
        }elseif($this->simbolsMax['meta_d'] && mb_strlen($this->newCategoryArray['meta_d'],'utf-8') > $this->simbolsMax['meta_d']){
            $this->error('meta_d слишком длиный, максимум "'.$this->simbolsMax['meta_d'].'" символов');
        }
        if($this->simbolsMin['meta_k'] && mb_strlen($this->newCategoryArray['meta_k'],'utf-8') < $this->simbolsMin['meta_k']){
            $this->error('meta_k слишком кароткий, минимум "'.$this->simbolsMin['meta_k'].'" символов');
        }elseif($this->simbolsMax['meta_k'] && mb_strlen($this->newCategoryArray['meta_k'],'utf-8') > $this->simbolsMax['meta_k']){
            $this->error('meta_k слишком длиный, максимум "'.$this->simbolsMax['meta_k'].'" символов');
        }
        //Проверяем параметры настроек карты сайта
        if($this->newCategoryArray['xmlSitemap']['category']['status']){
            //проверяем диапазон катигории
            if($this->newCategoryArray['xmlSitemap']['category']['priority'] < 0.01 ||
               $this->newCategoryArray['xmlSitemap']['category']['priority'] > 1.00){
                $this->error('Не правильный диапозон катигории для карты сайта, Диапазон от 1.00 до 0.01');
               }
            //проверяем допустимость частоты обновления
            if(!in_array($this->newCategoryArray['xmlSitemap']['category']['changefreq'],$this->xmlSytemapChangefreqs)){
                $this->error('Неправильный параметр для карты сайта катирогии "Частота"');
            }
            //Проверка для страниц
            if($this->newCategoryArray['xmlSitemap']['page']['status']){
                //проверяем диапазон катигории
                if($this->newCategoryArray['xmlSitemap']['page']['priority'] < 0.01 ||
                   $this->newCategoryArray['xmlSitemap']['page']['priority'] > 1.00){
                    $this->error('Не правильный диапозон содержимого раздела для карты сайта, Диапазон от 1.00 до 0.01');
                   }
                //проверяем допустимость частоты обновления
                if(!in_array($this->newCategoryArray['xmlSitemap']['page']['changefreq'],$this->xmlSytemapChangefreqs)){
                    $this->error('Неправильный параметр для карты сайта содержимого раздела "Частота"');
                }
            }
            
        }
        //Проверяем существует ли пот катигория
        if($this->newCategoryArray['sweat_category']){
            $myrow = $this->Sql->query("SELECT `id` FROM `category` WHERE `id`='".$this->newCategoryArray['sweat_category']."' LIMIT 1");
            if(!$myrow->num_rows){
                $this->error('Подраздел не существует');
            }
        }
        //Проверяем свободноли url
        if($this->status){
            if($this->newCategoryArray['sweat_category']){$and =" AND `sweat_category='".$this->newCategoryArray['sweat_category']."'`";}
            $myrow = $this->Sql->query("SELECT `name` FROM `category` WHERE `id`!='".$this->categoryId."' AND `url`='".$this->Sql->real_escape_string($this->newCategoryArray['url'])."' ".$and." LIMIT 1");
            if($myrow->num_rows){
                $this->error('Сылка уже занята другим разделом');
            }else{
                return true;
            }
        }
        
    }
    
    //Генератор buferUrl
    private 
    function genBuferUrl($sweatId=0,$url){
        $myrow = $this->Sql->query("SELECT `url`,`sweat_category` FROM `category` WHERE `id`='".$sweatId."' LIMIT 1");
        if($myrow->num_rows){
            $result = $myrow->fetch_assoc();
            $url =$result['url'].'/'.$url;
            if($result['sweat_category']){
                return $this->genBuferUrl($result['sweat_category'],$url);
            }
        }
        
        return $url;
    }
    
    private 
    function error($text){
        $this->status = false;
        $this->errorArray[]=$text;
    }
}

?>
Добавлено: 11 Декабря 2013 03:10:58 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...