Files
AtomicOld/simpla/BannersAdmin.php

287 lines
11 KiB
PHP
Raw Normal View History

2026-02-14 19:34:54 +03:00
<?PHP
require_once('api/Simpla.php');
error_reporting(7);
class BannersAdmin extends Simpla
{
private $BannerOfPage = 10; //Количество выводимых по умолчанию баннеров
private $allowed_image_extentions = array('png', 'gif', 'jpg', 'jpeg', 'ico');//Разрешенные расширения файлов для загрузки
function fetch()
{
/*******
Вывод групп баннеров
********************/
if(!$this->request->get('do') || $this->request->get('do') == 'groups')
{
if($this->request->get('action'))//Если есть действие "Добавить/изменить группу"
{
if($this->request->get('action') == 'edit' && $this->request->get('id'))//Если действие "изменить" подгружаем данные
{
$group = $this->banners->get_group((int)$this->request->get('id'));
}
if($this->request->post('session_id'))//Если получаем данные POST
{
if($this->request->post('name') && trim($this->request->post('name')) != '')
{
$group->name = $this->request->post('name');
if($this->request->get('action') == 'edit' && $this->request->get('id'))
{
$this->banners->update_group((int)$this->request->get('id'),array('name'=>$this->request->post('name')));
$this->design->assign('message_success', 'updated');
}
elseif($this->request->get('action') == 'add')
{
$this->db->query($this->db->placehold("INSERT INTO __banners_groups SET ?%", array('name'=>$this->request->post('name'))));
$this->design->assign('message_success', 'added');
}
}
else
{
$this->design->assign('message_error', 'empty_name');
}
}
$this->design->assign('group', $group);
$this->design->assign('action', $this->request->get('action'));
return $this->body = $this->design->fetch('banners.groups.add.edit.tpl');
}
if($this->request->post('session_id')) $this->post_update(); //Если отправили данные с действием "удалить"
list($groups,$groups_count) = $this->banners->get_groups();
foreach($groups as $key=>$value)
{
list($banner,$banner_count) = $this->banners->get_banners(ARRAY("BannerOfPage"=>10000,"group"=>$groups[$key]->id));
$groups[$key]->banner = $banner[0];
$groups[$key]->banner_count = $banner_count;
}
$this->design->assign('groups',$groups);
return $this->body = $this->design->fetch('banners.groups.tpl');
}
/*******
Вывод баннеров
********************/
elseif($this->request->get('do') == 'banners')
{
if($this->request->get('action')) //Добавление или редактирование баннера
{
$categories = $this->categories->get_categories_tree();
$brands = $this->brands->get_brands();
$pages = $this->pages->get_pages();
//Если была POST отправка данных формы добавления/редактирования
if($this->request->post('session_id'))
{
$banner->name = $this->request->post('name');
$banner->url = $this->request->post('url');
$banner->description = $this->request->post('description');
$banner->show_all_pages = (int)$this->request->post('show_all_pages');
$banner->visible = (int)$this->request->post('visible');
$banner->categories = implode(",",$this->request->post('categories'));
$banner->brands = implode(",",$this->request->post('brands'));
$banner->pages = implode(",",$this->request->post('pages'));
$banner->id_group = $this->request->get('group');
//Если есть ошибки
$upload_file = $this->request->files('image');
if($upload_file['name']=='' AND !$this->request->post('image_exist')) $error = 'not_image';
if(empty($banner->url) AND $banner->url=="") $error = 'empty_url';
if(empty($banner->name) AND $banner->name=="") $error = 'empty_name';
if($error)$this->design->assign('message_error', $error);
if(!$error && $this->request->get('action') == "add" && $this->add_banner($banner))//Если добавление баннера
{
//Если данные успешно добавлены и успешно загружено изображение баннера, выводим сообщение
$this->design->assign('message_success', 'added');
return $this->body = $this->design->fetch('banners.add.edit.tpl');
}elseif(!$error //Если реактирование баннера
AND $this->request->get('action') == "edit"
AND $this->request->get('id')
AND $this->banners->update_banner($this->request->get('id'),Array(
'name'=>$banner->name,
'url'=>$banner->url,
'description'=>$banner->description,
'visible'=>(int)$banner->visible,
'show_all_pages'=>$banner->show_all_pages,
'categories'=>$banner->categories,
'brands'=>$banner->brands,
'pages'=>$banner->pages
))
AND $this->upload_image($this->request->get('id'),TRUE))
{
//Если данные успешно обновлены, и успешно загружено изображение баннера, выводим сообщение
$this->design->assign('banners_group', $this->banners->get_group($this->request->get('group')));
$this->design->assign('message_success', 'updated');
return $this->body = $this->design->fetch('banners.add.edit.tpl');
}
$banner->category_selected = $this->request->post('categories');
$banner->brand_selected = $this->request->post('brands');
$banner->page_selected = $this->request->post('pages');
}elseif($this->request->get('action') == "edit" && $this->request->get('id')) // если это редактирование баннера, получаем информацию из БД
{
$banner = $this->banners->get_banner($this->request->get('id'));
$banner->image = $banner->image;
$banner->category_selected = explode(",",$banner->categories);//Создаем массив категорий
$banner->brand_selected = explode(",",$banner->brands);//Создаем массив брендов
$banner->page_selected = explode(",",$banner->pages);//Создаем массив страниц
}
if(!isset($banner->visible)) $banner->visible = 1;
$this->design->assign('banners_group', $this->banners->get_group($this->request->get('group')));
$this->design->assign('categories', $categories);
$this->design->assign('banner', $banner);
$this->design->assign('brands', $brands);
$this->design->assign('pages', $pages);
return $this->body = $this->design->fetch('banners.add.edit.tpl');
}
/*******
Вывод уже существующих баннеров
***************/
if($this->request->post('session_id')) $this->post_update(); //Если отправили данные с действием "Включить/выключить/удалить"
list($banners,$banners_count) = $this->banners->get_banners(ARRAY("BannerOfPage"=>10000,"group"=>$this->request->get('group')));
$current_page = max(1, $this->request->get('page', 'integer'));
$pages_count = (int)($banners_count/$this->BannerOfPage);
foreach($banners as $key=>$value){
$banners[$key]->categories_count = ($banners[$key]->categories !=0)?(int)mb_substr_count($banners[$key]->categories,",","UTF-8")+1:0;
$banners[$key]->brands_count = ($banners[$key]->brands != 0)?(int)mb_substr_count($banners[$key]->brands,",","UTF-8")+1:0;
$banners[$key]->pages_count = ($banners[$key]->pages!=0)?(int)mb_substr_count($banners[$key]->pages,",","UTF-8")+1:0;
}
$this->design->assign('banners_group', $this->banners->get_group($this->request->get('group')));
$this->design->assign('banners_count', $banners_count);
$this->design->assign('banners_images_dir', $this->config->banners_images_dir);
$this->design->assign('pages_count', $pages_count);
$this->design->assign('current_page', $current_page);
$this->design->assign('banners', $banners);
return $this->body = $this->design->fetch('banners.show.list.tpl');
}
}
/****
Функция добавления баннера
****/
function add_banner($banner)
{
$query = $this->db->placehold("INSERT INTO __banners SET ?%", $banner);
//exit($query);
$this->db->query($query);
return $this->upload_image($this->db->insert_id())?true:false;
}
/****
Функция загрузки изображения баннера
****/
function upload_image($idBanner,$deleteOldImageBanner = FALSE)
{
// Загрузка изображения
$image = $this->request->files('image');
$image = preg_replace("/\s+/", '_', $this->request->files('image'));
$imageFilename = "";
if(isset($image['name']) && in_array(strtolower(pathinfo($image['name'], PATHINFO_EXTENSION)), $this->allowed_image_extentions))
{
if($deleteOldImageBanner)
{
$banner = $this->banners->get_banner($idBanner);
$this->banners->delete_image($banner->image);
}
$imageFilename = $idBanner.'-'.$image['name'];
if(!move_uploaded_file($image['tmp_name'], $this->config->root_dir.$this->config->banners_images_dir.$imageFilename))
{
$this->design->assign('message_error', 'error_uploading_image');
return false;
}
$query = $this->db->placehold("UPDATE __banners SET position=id, image=? WHERE id=? LIMIT 1", $imageFilename ,$idBanner);
return $this->db->query($query)?true:false;
}
return true;
}
/****
Функция обновления баннера, а именно: показать/скрыть/удалить баннер
****/
function post_update()
{
if($this->request->get('do') == 'groups')
{
// Действия с выбранными
$ids = $this->request->post('check');
if(!empty($ids))
{
switch($this->request->post('action'))
{
case 'delete':
{
foreach($ids as $id)
$this->banners->delete_group($id);
break;
}
}
}
}
elseif($this->request->get('do') == 'banners')
{
// Сортировка
$positions = $this->request->post('positions');
$ids = array_keys($positions);
sort($positions);
foreach($positions as $i=>$position)
{
$this->banners->update_banner($ids[$i], array('position'=>$position));
}
// Действия с выбранными
$ids = $this->request->post('check');
if(!empty($ids))
{
switch($this->request->post('action'))
{
case 'disable':
{
$this->banners->update_banner($ids, array('visible'=>0));
break;
}
case 'enable':
{
$this->banners->update_banner($ids, array('visible'=>1));
break;
}
case 'delete':
{
foreach($ids as $id)
$this->banners->delete_banner($id);
break;
}
}
}
}
}
}