Files
kalsport.pl/modules/appagebuilder/controllers/admin/AdminApPageBuilderImages.php
2024-11-05 12:22:50 +01:00

365 lines
13 KiB
PHP

<?php
/**
* 2007-2015 Apollotheme
*
* NOTICE OF LICENSE
*
* ApPageBuilder is module help you can build content for your shop
*
* DISCLAIMER
*
* @author Apollotheme <apollotheme@gmail.com>
* @copyright 2007-2019 Apollotheme
* @license http://apollotheme.com - prestashop template provider
*/
if (!defined('_PS_VERSION_')) {
# module validation
exit;
}
require_once(_PS_MODULE_DIR_ . 'appagebuilder/classes/ApPageSetting.php');
class AdminApPageBuilderImagesController extends ModuleAdminController
{
protected $max_image_size = null;
public $theme_name;
public $module_name = 'appagebuilder';
public $img_path;
public $folder_name;
public $module_path;
public $tpl_path;
public $theme_dir;
public function __construct()
{
parent::__construct();
$this->theme_dir = apPageHelper::getConfigDir('_PS_THEME_DIR_');
$this->folder_name = Tools::getIsset('imgDir') ? Tools::getValue('imgDir') : 'images';
$this->bootstrap = true;
$this->max_image_size = (int) Configuration::get('PS_PRODUCT_PICTURE_MAX_SIZE');
$this->theme_name = apPageHelper::getThemeName();
$this->img_path = apPageHelper::getImgThemeDir($this->folder_name);
$this->img_url = apPageHelper::getImgThemeUrl($this->folder_name);
$this->className = 'ApPageBuilderImages';
$this->context = Context::getContext();
$this->module_path = __PS_BASE_URI__ . 'modules/' . $this->module_name . '/';
$this->tpl_path = _PS_ROOT_DIR_ . '/modules/' . $this->module_name . '/views/templates/admin';
# LIVE THEME EDITER
$leo_controller = Tools::getValue('leo_controller');
if ($leo_controller == 'live_theme_edit') {
$this->context->controller->addCss(apPageHelper::getCssAdminDir() . 'admin/images.css', 'all');
$this->img_path = _PS_ALL_THEMES_DIR_ . apPageHelper::getThemeName() . '/assets/img/patterns/';
$this->img_url = __PS_BASE_URI__ . 'themes/' . apPageHelper::getThemeName() . '/assets/img/patterns/';
$this->context->controller->addCss(apPageHelper::getCssAdminDir() . 'admin/images.css', 'all');
}
}
/**
* Action Live Theme Editor
*/
public function renderList()
{
$tpl = $this->createTemplate('imagemanager.tpl');
$sort_by = Tools::getValue('sortBy');
$images = $this->getImageList($sort_by);
$image_uploader = new HelperImageUploader('file');
$image_uploader->setSavePath($this->img_path);
$image_uploader->setMultiple(true)->setUseAjax(true)->setUrl(Context::getContext()->link->getAdminLink('AdminApPageBuilderImages') . '&ajax=1&action=addimage&leo_controller=live_theme_edit'); // url upload image
$tpl->assign(array(
'img_dir' => $this->folder_name,
'countImages' => count($images),
'images' => $images,
'max_image_size' => $this->max_image_size / 1024 / 1024,
'image_uploader' => $image_uploader->render(),
'imgManUrl' => Context::getContext()->link->getAdminLink('AdminApPageBuilderImages'),
'token' => $this->token,
'url_param' => '&leo_controller=live_theme_edit'
));
return $tpl->fetch();
}
/**
* Action Live Theme Editor
*/
public function ajaxProcessReloadBackground()
{
$sort_by = Tools::getValue('sortBy');
$tpl = $this->createTemplate('imagemanager.tpl');
$images = $this->getImageList($sort_by);
$tpl->assign(array(
'images' => $images,
'reloadBack' => 1
));
die(Tools::jsonEncode($tpl->fetch()));
}
public function getImageList($sortBy)
{
$path = $this->img_path;
# CACH 1 : lay cac file anh
$images = glob($path . '{*.jpeg,*.JPEG,*.jpg,*.JPG,*.gif,*.GIF,*.png,*.PNG}', GLOB_BRACE);
if ($images === null) {
# CACH 2 : lay cac file anh
$files = scandir($path);
$files = array_diff($files, array(
'..',
'.'
)); # insert code
$images = array();
foreach ($files as $key => $image) {
# validate module
unset($key);
$ext = Tools::substr($image, strrpos($image, '.') + 1);
if (in_array($ext, array(
'jpg',
'jpeg',
'png',
'gif',
'JPG',
'JPEG',
'PNG',
'GIF'
))) {
$images[] = $image;
}
}
}
if ($sortBy == 'name_desc') {
rsort($images);
}
if ($sortBy == 'date' || $sortBy == 'date_desc') {
ksort($images);
}
if ($sortBy == 'date_desc') {
rsort($images);
}
$result = array();
foreach ($images as &$file) {
$fileInfo = pathinfo($file);
$result[] = array(
'name' => $fileInfo['basename'],
'link' => $this->img_url . $fileInfo['basename']
);
}
return $result;
}
public function renderTemplate($tpl_name)
{
$path = '';
if (file_exists($this->theme_dir . 'modules/' . $this->module->name . '/views/templates/admin/' . $tpl_name) && $this->viewAccess()) {
$path = $this->theme_dir . 'modules/' . $this->module->name . '/views/templates/admin/' . $tpl_name;
} elseif (file_exists($this->getTemplatePath() . $this->override_folder . $tpl_name) && $this->viewAccess()) {
$path = $this->getTemplatePath() . $this->override_folder . $tpl_name;
}
$content = Context::getContext()->smarty->fetch($path);
return $content;
}
/**
* Action Manage Image
*/
public function ajaxProcessManageImage()
{
$smarty = Context::getContext()->smarty;
$sort_by = Tools::getValue('sortBy');
$images = $this->getImageList($sort_by);
$image_uploader = new HelperImageUploader('file');
$image_uploader->setSavePath($this->img_path);
$image_uploader->setTemplateDirectory($this->tpl_path . '/helpers/uploader');
$image_uploader->setTemplate('ajax.tpl');
$image_uploader->setMultiple(true)->setUseAjax(true)->setUrl(Context::getContext()->link->getAdminLink('AdminApPageBuilderImages') . '&ajax=1&action=addimage&imgDir=' . $this->folder_name);
$upload_html = $image_uploader->render();
$smarty->assign(array(
'img_dir' => $this->folder_name,
'widget' => Tools::getValue('widget'),
'countImages' => count($images),
'images' => $images,
'max_image_size' => $this->max_image_size / 1024 / 1024,
'image_uploader' => $upload_html,
'imgManUrl' => Context::getContext()->link->getAdminLink('AdminApPageBuilderImages'),
'token' => $this->token,
'link' => Context::getContext()->link
));
die($this->renderTemplate('imagemanager.tpl'));
}
/**
* Action Add Image
*/
public function ajaxProcessAddImage()
{
if (isset($_FILES['file'])) {
try {
$image_uploader = new HelperUploader('file');
if (!file_exists($this->img_path)) {
mkdir($this->img_path, 0755, true);
}
$image_uploader->setSavePath($this->img_path);
$image_uploader->setAcceptTypes(array(
'jpeg',
'gif',
'png',
'jpg'
))->setMaxSize($this->max_image_size);
$total_errors = array();
$files = $image_uploader->process();
foreach ($files as &$file) {
$errors = array();
// Evaluate the memory required to resize the image: ifit's too much, you can't resize it.
if (!ImageManager::checkImageMemoryLimit($file['save_path'])) {
$errors[] = Tools::displayError('Due to memory limit restrictions, this image cannot be loaded.
Please increase your memory_limit value via your server\'s configuration settings.');
}
if (count($errors)) {
$total_errors = array_merge($total_errors, $errors);
}
//unlink($file['save_path']);
//Necesary to prevent hacking
unset($file['save_path']);
//Add image preview and delete url
}
if (count($total_errors)) {
$this->context->controller->errors = array_merge($this->context->controller->errors, $total_errors);
}
$images = $this->getImageList('date');
$tpl = $this->createTemplate('imagemanager.tpl');
$tpl->assign(array(
'images' => $images,
'reloadSliderImage' => 1,
'link' => Context::getContext()->link
));
die(Tools::jsonEncode($tpl->fetch()));
} catch (Exception $ex) {
die("Error in ajaxProcessAddImage");
}
}
}
/**
* Action Sort Image
*/
public function ajaxProcessReLoadSliderImage()
{
$tpl = $this->createTemplate('imagemanager.tpl');
$sort_by = Tools::getValue('sortBy');
$images = $this->getImageList($sort_by);
$tpl->assign(array(
'images' => $images,
'reloadSliderImage' => 1,
'link' => Context::getContext()->link
));
die(Tools::jsonEncode($tpl->fetch()));
}
/**
* Action Delete Image
*/
public function ajaxProcessDeleteImage()
{
if (($img_name = Tools::getValue('imgName', false)) !== false) {
$link = $this->img_path;
$this->icon_path = $link = str_replace('modules/appagebuilder/images', 'modules/appagebuilder/icon', $link);
if (file_exists($link . $img_name)) {
unlink($link . $img_name);
$images = $this->getIconList('date');
} else if (file_exists($this->img_path . $img_name)) {
unlink($this->img_path . $img_name);
$images = $this->getImageList('date');
} else {
throw new PrestaShopException('Do not find' . $link . $img_name);
}
$tpl = $this->createTemplate('imagemanager.tpl');
$tpl->assign(array(
'images' => $images,
'reloadSliderImage' => 1,
'link' => Context::getContext()->link
));
die(Tools::jsonEncode($tpl->fetch()));
}
}
public function getIconList($sortBy)
{
$path = $this->icon_path;
$images = glob($path . '{*.jpeg,*.JPEG,*.jpg,*.JPG,*.gif,*.GIF,*.png,*.PNG}', GLOB_BRACE);
if ($images === null) {
# CACH 2 : lay cac file anh
$files = scandir($path);
$files = array_diff($files, array(
'..',
'.'
)); # insert code
$images = array();
foreach ($files as $key => $image) {
# validate module
unset($key);
$ext = Tools::substr($image, strrpos($image, '.') + 1);
if (in_array($ext, array(
'jpg',
'jpeg',
'png',
'gif',
'JPG',
'JPEG',
'PNG',
'GIF'
))) {
$images[] = $image;
}
}
}
if ($sortBy == 'name_desc') {
rsort($images);
}
if ($sortBy == 'date' || $sortBy == 'date_desc') {
ksort($images);
}
if ($sortBy == 'date_desc') {
rsort($images);
}
$result = array();
foreach ($images as &$file) {
$fileInfo = pathinfo($file);
$result[] = array(
'name' => $fileInfo['basename'],
'link' => str_replace(
'modules/appagebuilder/images',
'modules/appagebuilder/icon',
$this->img_url
) . $fileInfo['basename']
);
}
return $result;
}
public function viewAccess($disable = true)
{
// return $this->access('view', $disable);
unset($disable);
return true;
}
}