<?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;
}
}
?>