Files
AtomicOld/simpla/BannersAdmin.php
2026-02-14 19:34:54 +03:00

287 lines
11 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?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;
}
}
}
}
}
}