3249 lines
149 KiB
PHP
3249 lines
149 KiB
PHP
<?php
|
|
/**
|
|
* 2007-2015 Leotheme
|
|
*
|
|
* NOTICE OF LICENSE
|
|
*
|
|
* Adds image, text or video to your homepage.
|
|
*
|
|
* DISCLAIMER
|
|
*
|
|
* @author leotheme <leotheme@gmail.com>
|
|
* @copyright 2007-2015 Leotheme
|
|
* @license http://leotheme.com - prestashop template provider
|
|
*/
|
|
|
|
if (!defined('_PS_VERSION_')) {
|
|
# module validation
|
|
exit;
|
|
}
|
|
|
|
include_once(_PS_MODULE_DIR_.'leoslideshow/classes/LeoSlideshowConfig.php');
|
|
include_once(_PS_MODULE_DIR_.'leoslideshow/classes/LeoSlideshowGroup.php');
|
|
include_once(_PS_MODULE_DIR_.'leoslideshow/classes/LeoSlideshowSlide.php');
|
|
include_once(_PS_MODULE_DIR_.'leoslideshow/classes/LeoSlideshowStatus.php');
|
|
include_once(_PS_MODULE_DIR_.'leoslideshow/libs/Helper.php');
|
|
|
|
class LeoSlideshow extends Module
|
|
{
|
|
private $html = '';
|
|
private $current_group = array('id_group' => 0, 'title' => '');
|
|
public $group_data = array(
|
|
'id_leoslideshow_groups' => '',
|
|
'title' => '',
|
|
'id_shop' => '',
|
|
'hook' => '',
|
|
'active' => '',
|
|
'auto_play' => '1',
|
|
'delay' => '9000',
|
|
'fullwidth' => '',
|
|
'width' => '960',
|
|
'height' => '350',
|
|
'md_width' => '12',
|
|
'sm_width' => '12',
|
|
'xs_width' => '12',
|
|
'touch_mobile' => '1',
|
|
'stop_on_hover' => '1',
|
|
'shuffle_mode' => '0',
|
|
'image_cropping' => '0',
|
|
'shadow_type' => '2',
|
|
'show_time_line' => '1',
|
|
'time_line_position' => 'top',
|
|
'background_color' => '#d9d9d9',
|
|
'margin' => '0px 0px 18px',
|
|
'padding' => '5px 5px',
|
|
'background_image' => '1',
|
|
'background_url' => '',
|
|
'navigator_type' => 'none',
|
|
'navigator_arrows' => 'verticalcentered',
|
|
'navigation_style' => 'round',
|
|
'offset_horizontal' => '0',
|
|
'offset_vertical' => '20',
|
|
'show_navigator' => '0',
|
|
'hide_navigator_after' => '200',
|
|
'thumbnail_width' => '100',
|
|
'thumbnail_height' => '50',
|
|
#'thumbnail_amount' => '5',
|
|
'group_class' => '',
|
|
'start_with_slide' => '1',
|
|
'timer_show' => LeoSlideshowConfig::TIMER_SHOW_AUTO,
|
|
'timer' => '',
|
|
'tooltipX' => '5',
|
|
'tooltipY' => '-5',
|
|
'controlNav' => '1',
|
|
'controlNavTooltip' => '1',
|
|
'nav_thumbnail_width' => '',
|
|
'nav_thumbnail_height' => '',
|
|
'controlNavHoverOpacity' => '0.6',
|
|
'directionNav' => '1',
|
|
'directionNavHoverOpacity' => '0.6',
|
|
'keyboardNav' => '1',
|
|
'timerPosition' => 'top-right',
|
|
'timerX' => '10',
|
|
'timerY' => '10',
|
|
'timerOpacity' => '0.5',
|
|
'timerBg' => '#000',
|
|
'timerColor' => '#EEE',
|
|
'timerDiameter' => '30',
|
|
'timerPadding' => '4',
|
|
'timerStroke' => '3',
|
|
'timerBarStroke' => '1',
|
|
'timerBarStrokeColor' => '#EEE',
|
|
'blockCols' => '10',
|
|
'timerBarStrokeStyle' => 'solid',
|
|
'captionOpacity' => '1',
|
|
'fx' => 'random',
|
|
'animationSpeed' => '500',
|
|
'strips' => '20',
|
|
'blockRows' => '5',
|
|
'captionSpeed' => '500',
|
|
'enable_custom_html_bullet' => '0',
|
|
);
|
|
private $hook_support = array(
|
|
'displayTop',
|
|
'displayNav1',
|
|
'displayNav2',
|
|
'displayNavFullWidth',
|
|
'displayHome',
|
|
'displayLeftColumn',
|
|
'displayRightColumn',
|
|
'displayFooterProduct',
|
|
'displayFooterBefore',
|
|
'displayFooter',
|
|
'displayFooterAfter',
|
|
'displayLeftColumnProduct',
|
|
'displayRightColumnProduct',
|
|
'displayProductButtons',
|
|
'displayReassurance',
|
|
);
|
|
private $mod_current_slide = array();
|
|
public $slider_data = array(
|
|
'transition' => 'random',
|
|
'slot' => 7,
|
|
'rotation' => 0,
|
|
'duration' => 300,
|
|
'delay' => '5000',
|
|
'enable_link' => 1,
|
|
'target' => '',
|
|
'start_date_time' => '',
|
|
'end_date_time' => '',
|
|
'bullet_class' => '',
|
|
);
|
|
public $theme_name;
|
|
public $img_path;
|
|
public $img_url;
|
|
public $error_text = '';
|
|
|
|
public function __construct()
|
|
{
|
|
$this->name = 'leoslideshow';
|
|
$this->tab = 'front_office_features';
|
|
$this->version = '1.0.6';
|
|
$this->author = 'LeoTheme';
|
|
$this->need_instance = 0;
|
|
$this->secure_key = Tools::encrypt($this->name);
|
|
$this->bootstrap = true;
|
|
|
|
parent::__construct();
|
|
|
|
$this->displayName = $this->l('Leo Slideshow for your homepage');
|
|
$this->description = $this->l('Adds image, text or video to your homepage.');
|
|
$this->theme_name = LeoSlideshowHelper::getThemeName();
|
|
$this->img_path = LeoSlideshowHelper::getImgThemeDir();
|
|
$this->img_url = LeoSlideshowHelper::getImgThemeUrl();
|
|
// Db::getInstance()->execute('ALTER TABLE `'._DB_PREFIX_.'leoslideshow_groups` MODIFY `hook` varchar(64) DEFAULT NULL');
|
|
// Db::getInstance()->execute('ALTER TABLE `'._DB_PREFIX_.'leoslideshow_groups` ADD `active_ap` tinyint(1) DEFAULT NULL');
|
|
// Configuration::updateValue('LEOSLIDESHOW_GROUP_DEFAULTTAB', '#fieldset_0');
|
|
}
|
|
|
|
/**
|
|
* @see Module::install()
|
|
*/
|
|
public function install()
|
|
{
|
|
// Prepare tab
|
|
$tab = new Tab();
|
|
$tab->active = 1;
|
|
$tab->class_name = 'AdminLeoSlideshow';
|
|
$tab->name = array();
|
|
foreach (Language::getLanguages(false) as $lang) {
|
|
$tab->name[$lang['id_lang']] = 'LeoSlideShow';
|
|
}
|
|
$tab->id_parent = -1;
|
|
$tab->module = $this->name;
|
|
$tab->add();
|
|
|
|
$tab1 = new Tab();
|
|
$tab1->active = 1;
|
|
$tab1->class_name = 'AdminLeoSlideshowMenuModule';
|
|
$tab1->name = array();
|
|
foreach (Language::getLanguages(false) as $lang) {
|
|
$tab1->name[$lang['id_lang']] = 'Leo Slideshow Configuration';
|
|
}
|
|
$tab1->id_parent = Tab::getIdFromClassName('AdminParentModulesSf');
|
|
$tab1->module = $this->name;
|
|
$tab1->add();
|
|
|
|
Configuration::updateValue('AP_INSTALLED_LEOSLIDESHOW', '1');
|
|
/* Adds Module */
|
|
if (parent::install() && Configuration::updateValue('LEOSLIDESHOW_GROUP_DE', '1') && Configuration::updateValue('LEOSLIDESHOW_GROUP_DEFAULTTAB', '#fieldset_0')) {
|
|
$res = true;
|
|
|
|
/* Sets up configuration */
|
|
$res &= $this->registerLeoHook();
|
|
/* Creates tables */
|
|
$res &= $this->createTables();
|
|
|
|
return (bool)$res;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Adds samples
|
|
*/
|
|
private function installSamples()
|
|
{
|
|
if ($this->checkExistAnyGroup()) {
|
|
return true;
|
|
}
|
|
|
|
# CHANGE POSITION HOOK DISPLAYHOME TO 1
|
|
foreach (Shop::getContextListShopID() as $shop_id) {
|
|
$sql = 'UPDATE `' . _DB_PREFIX_ . 'hook_module`
|
|
SET `position`=' . 1 . '
|
|
WHERE `id_module` = ' . (int)$this->id . '
|
|
AND `id_hook` = ' . (int) Hook::getIdByName('displayHome'). ' AND `id_shop` = ' . $shop_id;
|
|
Db::getInstance()->execute($sql);
|
|
}
|
|
|
|
//insearch demo for group slider
|
|
$mod_group = new LeoSlideshowGroup();
|
|
$context = Context::getContext();
|
|
//sample for group
|
|
$mod_group->title = 'Sample Group';
|
|
$mod_group->hook = 'displayHome';
|
|
$mod_group->id_shop = $context->shop->id;
|
|
$mod_group->active = 1;
|
|
$mod_group->params = 'eyJkZWxheSI6IjkwMDAiLCJzdGFydF93aXRoX3NsaWRlIjoiMSIsInRpbWVyX3Nob3ciOiIzIiwic3RvcF9vbl9ob3ZlciI6IjEiLCJzaHVmZmxlX21vZGUiOiIwIiwiZnVsbHdpZHRoIjoiZnVsbHdpZHRoIiwibWRfd2lkdGgiOiIxMiIsInNtX3dpZHRoIjoiMTIiLCJ4c193aWR0aCI6IjEyIiwiaW1hZ2VfY3JvcHBpbmciOiIwIiwid2lkdGgiOiIxMDkwIiwiaGVpZ2h0IjoiNTQwIiwibWFyZ2luIjoiMHB4IDBweCAxOHB4IiwicGFkZGluZyI6IjVweCA1cHgiLCJiYWNrZ3JvdW5kX2ltYWdlIjoiMSIsImJhY2tncm91bmRfdXJsIjoiIiwiYmFja2dyb3VuZF9jb2xvciI6IiNkOWQ5ZDkiLCJncm91cF9jbGFzcyI6IiIsImNvbnRyb2xOYXYiOiIxIiwibmF2aWdhdG9yX3R5cGUiOiJidWxsZXQiLCJlbmFibGVfY3VzdG9tX2h0bWxfYnVsbGV0IjoiMCIsImNvbnRyb2xOYXZUb29sdGlwIjoiMCIsInRvb2x0aXBYIjoiNSIsInRvb2x0aXBZIjoiLTUiLCJuYXZfdGh1bWJuYWlsX3dpZHRoIjoiIiwibmF2X3RodW1ibmFpbF9oZWlnaHQiOiIiLCJjb250cm9sTmF2SG92ZXJPcGFjaXR5IjoiMC42IiwiZGlyZWN0aW9uTmF2IjoiMSIsImRpcmVjdGlvbk5hdkhvdmVyT3BhY2l0eSI6IjAuNiIsImtleWJvYXJkTmF2IjoiMSIsInRpbWVyIjoiMzYwQmFyIiwidGltZXJQb3NpdGlvbiI6InRvcC1yaWdodCIsInRpbWVyWCI6IjEwIiwidGltZXJZIjoiMTAiLCJ0aW1lck9wYWNpdHkiOiIwLjUiLCJ0aW1lckJnIjoiIzAwMCIsInRpbWVyQ29sb3IiOiIjRUVFIiwidGltZXJEaWFtZXRlciI6IjMwIiwidGltZXJQYWRkaW5nIjoiNCIsInRpbWVyU3Ryb2tlIjoiMyIsInRpbWVyQmFyU3Ryb2tlIjoiMSIsInRpbWVyQmFyU3Ryb2tlQ29sb3IiOiIjRUVFIiwidGltZXJCYXJTdHJva2VTdHlsZSI6InNvbGlkIiwiZngiOiJyYW5kb20iLCJhbmltYXRpb25TcGVlZCI6IjUwMCIsInN0cmlwcyI6IjIwIiwiYmxvY2tDb2xzIjoiMTAiLCJibG9ja1Jvd3MiOiI1IiwiY2FwdGlvblNwZWVkIjoiNTAwIiwiY2FwdGlvbk9wYWNpdHkiOiIxIn0=';
|
|
$mod_group->active_ap = '0';
|
|
$mod_group->randkey = '1a9436d12827c870d10cc0d9b19b2c00';
|
|
$mod_group->add();
|
|
|
|
//sample for slider
|
|
$languages = Language::getLanguages(false);
|
|
|
|
$mod_slide = new LeoSlideshowSlide();
|
|
$mod_slide->id_group = $mod_group->id;
|
|
$mod_slide->position = 0;
|
|
$mod_slide->active = 1;
|
|
$mod_slide->params = 'eyJkZWxheSI6IjUwMDAiLCJncm91cF9pZCI6IjEiLCJlbmFibGVfbGluayI6IjEiLCJ0YXJnZXQiOiJzYW1lIiwic3RhcnRfZGF0ZV90aW1lIjoiIiwiZW5kX2RhdGVfdGltZSI6IiIsImJ1bGxldF9jbGFzcyI6IiJ9';
|
|
# 1
|
|
foreach ($languages as $language) {
|
|
$mod_slide->title[$language['id_lang']] = 'Sample slider 1';
|
|
$mod_slide->link[$language['id_lang']] = '';
|
|
$mod_slide->image[$language['id_lang']] = 'sample_slider_1.png';
|
|
$mod_slide->thumbnail[$language['id_lang']] = '';
|
|
$mod_slide->video[$language['id_lang']] = 'eyJ1c2V2aWRlbyI6IjAiLCJ2aWRlb2lkIjoiIiwidmlkZW9hdXRvIjoiMCIsImJhY2tncm91bmRfY29sb3IiOiIiLCJidWxsZXRfZGVzY3JpcHRpb24iOiIifQ==';
|
|
$mod_slide->layersparams[$language['id_lang']] = 'W3sibGF5ZXJfdmlkZW9fdHlwZSI6InlvdXR1YmUiLCJsYXllcl92aWRlb19pZCI6IiIsImxheWVyX3ZpZGVvX2hlaWdodCI6IjIwMCIsImxheWVyX3ZpZGVvX3dpZHRoIjoiMzAwIiwibGF5ZXJfdmlkZW9fdGh1bWIiOiIiLCJsYXllcl9pZCI6IjFfMSIsImxheWVyX2NvbnRlbnQiOiIiLCJsYXllcl90eXBlIjoidGV4dCIsImxheWVyX3N0YXR1cyI6IjEiLCJsYXllcl9jbGFzcyI6ImxhcmdlX3RleHQiLCJsYXllcl9jYXB0aW9uIjoiRnVsbHkgUmVzcG9uc2l2ZSBTb2x1dGlvbiIsImxheWVyX2ZvbnRfc2l6ZSI6IiIsImxheWVyX2JhY2tncm91bmRfY29sb3IiOiIiLCJsYXllcl9jb2xvciI6IiIsImxheWVyX2xpbmsiOiIiLCJsYXllcl90YXJnZXQiOiJzYW1lIiwibGF5ZXJfdG9wIjoiMTY5IiwibGF5ZXJfbGVmdCI6IjAiLCJsYXllcl90cmFuc2l0aW9uIjoid2lwZWxlZnQiLCJ0aW1lX3N0YXJ0IjpudWxsfSx7ImxheWVyX3ZpZGVvX3R5cGUiOiJ5b3V0dWJlIiwibGF5ZXJfdmlkZW9faWQiOiIiLCJsYXllcl92aWRlb19oZWlnaHQiOiIyMDAiLCJsYXllcl92aWRlb193aWR0aCI6IjMwMCIsImxheWVyX3ZpZGVvX3RodW1iIjoiIiwibGF5ZXJfaWQiOiIxXzIiLCJsYXllcl9jb250ZW50IjoiIiwibGF5ZXJfdHlwZSI6InRleHQiLCJsYXllcl9zdGF0dXMiOiIxIiwibGF5ZXJfY2xhc3MiOiJzbWFsbF90ZXh0IiwibGF5ZXJfY2FwdGlvbiI6IldvcmtzIG9uIERlc2t0b3BzLCBOb3RlYm9va3MsIFRhYmxldHMgX0FTTV8gU21hcnRwaG9uZXMiLCJsYXllcl9mb250X3NpemUiOiIiLCJsYXllcl9iYWNrZ3JvdW5kX2NvbG9yIjoiIiwibGF5ZXJfY29sb3IiOiIiLCJsYXllcl9saW5rIjoiIiwibGF5ZXJfdGFyZ2V0Ijoic2FtZSIsImxheWVyX3RvcCI6IjIyOSIsImxheWVyX2xlZnQiOiIwIiwibGF5ZXJfdHJhbnNpdGlvbiI6IndpcGVyaWdodCIsInRpbWVfc3RhcnQiOm51bGx9LHsibGF5ZXJfdmlkZW9fdHlwZSI6InlvdXR1YmUiLCJsYXllcl92aWRlb19pZCI6IiIsImxheWVyX3ZpZGVvX2hlaWdodCI6IjIwMCIsImxheWVyX3ZpZGVvX3dpZHRoIjoiMzAwIiwibGF5ZXJfdmlkZW9fdGh1bWIiOiIiLCJsYXllcl9pZCI6IjFfMyIsImxheWVyX2NvbnRlbnQiOiIiLCJsYXllcl90eXBlIjoidGV4dCIsImxheWVyX3N0YXR1cyI6IjEiLCJsYXllcl9jbGFzcyI6ImJpZ19ibGFjayIsImxheWVyX2NhcHRpb24iOiJTaG93IG5vdyIsImxheWVyX2ZvbnRfc2l6ZSI6IiIsImxheWVyX2JhY2tncm91bmRfY29sb3IiOiIiLCJsYXllcl9jb2xvciI6IiIsImxheWVyX2xpbmsiOiIiLCJsYXllcl90YXJnZXQiOiJzYW1lIiwibGF5ZXJfdG9wIjoiMjk3IiwibGF5ZXJfbGVmdCI6IjAiLCJsYXllcl90cmFuc2l0aW9uIjoid2lwZWRvd24iLCJ0aW1lX3N0YXJ0IjpudWxsfV0=';
|
|
}
|
|
$mod_slide->add();
|
|
|
|
#2
|
|
$mod_slide = new LeoSlideshowSlide();
|
|
$mod_slide->id_group = $mod_group->id;
|
|
$mod_slide->position = 0;
|
|
$mod_slide->active = 1;
|
|
$mod_slide->params = 'eyJkZWxheSI6IjUwMDAiLCJncm91cF9pZCI6IjEiLCJlbmFibGVfbGluayI6IjEiLCJ0YXJnZXQiOiJzYW1lIiwic3RhcnRfZGF0ZV90aW1lIjoiIiwiZW5kX2RhdGVfdGltZSI6IiIsImJ1bGxldF9jbGFzcyI6IiJ9';
|
|
|
|
foreach ($languages as $language) {
|
|
$mod_slide->title[$language['id_lang']] = 'Sample slider 2';
|
|
$mod_slide->link[$language['id_lang']] = '';
|
|
$mod_slide->image[$language['id_lang']] = 'sample_slider_2.jpg';
|
|
$mod_slide->thumbnail[$language['id_lang']] = '';
|
|
$mod_slide->video[$language['id_lang']] = 'eyJ1c2V2aWRlbyI6IjAiLCJ2aWRlb2lkIjoiIiwidmlkZW9hdXRvIjoiMCIsImJhY2tncm91bmRfY29sb3IiOiIiLCJidWxsZXRfZGVzY3JpcHRpb24iOiIifQ==';
|
|
$mod_slide->layersparams[$language['id_lang']] = 'W3sibGF5ZXJfdmlkZW9fdHlwZSI6InlvdXR1YmUiLCJsYXllcl92aWRlb19pZCI6IiIsImxheWVyX3ZpZGVvX2hlaWdodCI6IjIwMCIsImxheWVyX3ZpZGVvX3dpZHRoIjoiMzAwIiwibGF5ZXJfdmlkZW9fdGh1bWIiOiIiLCJsYXllcl9pZCI6IjFfMSIsImxheWVyX2NvbnRlbnQiOiIiLCJsYXllcl90eXBlIjoidGV4dCIsImxheWVyX3N0YXR1cyI6IjEiLCJsYXllcl9jbGFzcyI6ImxhcmdlX3RleHQiLCJsYXllcl9jYXB0aW9uIjoiU2xpZGVzaG93IiwibGF5ZXJfZm9udF9zaXplIjoiIiwibGF5ZXJfYmFja2dyb3VuZF9jb2xvciI6IiIsImxheWVyX2NvbG9yIjoiIiwibGF5ZXJfbGluayI6IiIsImxheWVyX3RhcmdldCI6InNhbWUiLCJsYXllcl90b3AiOiIxNTgiLCJsYXllcl9sZWZ0IjoiMCIsImxheWVyX3RyYW5zaXRpb24iOiJ3aXBlbGVmdCIsInRpbWVfc3RhcnQiOm51bGx9LHsibGF5ZXJfdmlkZW9fdHlwZSI6InlvdXR1YmUiLCJsYXllcl92aWRlb19pZCI6IiIsImxheWVyX3ZpZGVvX2hlaWdodCI6IjIwMCIsImxheWVyX3ZpZGVvX3dpZHRoIjoiMzAwIiwibGF5ZXJfdmlkZW9fdGh1bWIiOiIiLCJsYXllcl9pZCI6IjFfMiIsImxheWVyX2NvbnRlbnQiOiIiLCJsYXllcl90eXBlIjoidGV4dCIsImxheWVyX3N0YXR1cyI6IjEiLCJsYXllcl9jbGFzcyI6InNtYWxsX3RleHQiLCJsYXllcl9jYXB0aW9uIjoiVGV4dCwgSW1hZ2UsIFZpZGVvLCBTaG9ydGNvZGUsIEhUTUwgQ29udGVudCBMYXllcnMiLCJsYXllcl9mb250X3NpemUiOiIiLCJsYXllcl9iYWNrZ3JvdW5kX2NvbG9yIjoiIiwibGF5ZXJfY29sb3IiOiIiLCJsYXllcl9saW5rIjoiIiwibGF5ZXJfdGFyZ2V0Ijoic2FtZSIsImxheWVyX3RvcCI6IjIxOSIsImxheWVyX2xlZnQiOiIwIiwibGF5ZXJfdHJhbnNpdGlvbiI6IndpcGVyaWdodCIsInRpbWVfc3RhcnQiOm51bGx9LHsibGF5ZXJfdmlkZW9fdHlwZSI6InlvdXR1YmUiLCJsYXllcl92aWRlb19pZCI6IiIsImxheWVyX3ZpZGVvX2hlaWdodCI6IjIwMCIsImxheWVyX3ZpZGVvX3dpZHRoIjoiMzAwIiwibGF5ZXJfdmlkZW9fdGh1bWIiOiIiLCJsYXllcl9pZCI6IjFfMyIsImxheWVyX2NvbnRlbnQiOiIiLCJsYXllcl90eXBlIjoidGV4dCIsImxheWVyX3N0YXR1cyI6IjEiLCJsYXllcl9jbGFzcyI6ImJpZ19ibGFjayIsImxheWVyX2NhcHRpb24iOiJTaG93IG5vdyIsImxheWVyX2ZvbnRfc2l6ZSI6IiIsImxheWVyX2JhY2tncm91bmRfY29sb3IiOiIiLCJsYXllcl9jb2xvciI6IiIsImxheWVyX2xpbmsiOiIiLCJsYXllcl90YXJnZXQiOiJzYW1lIiwibGF5ZXJfdG9wIjoiMjcyIiwibGF5ZXJfbGVmdCI6IjAiLCJsYXllcl90cmFuc2l0aW9uIjoid2lwZXVwIiwidGltZV9zdGFydCI6bnVsbH1d';
|
|
}
|
|
$mod_slide->add();
|
|
|
|
#3
|
|
$mod_slide = new LeoSlideshowSlide();
|
|
$mod_slide->id_group = $mod_group->id;
|
|
$mod_slide->position = 0;
|
|
$mod_slide->active = 1;
|
|
$mod_slide->params = 'eyJkZWxheSI6IjUwMDAiLCJncm91cF9pZCI6IjEiLCJlbmFibGVfbGluayI6IjEiLCJ0YXJnZXQiOiJzYW1lIiwic3RhcnRfZGF0ZV90aW1lIjoiIiwiZW5kX2RhdGVfdGltZSI6IiIsImJ1bGxldF9jbGFzcyI6IiJ9';
|
|
|
|
foreach ($languages as $language) {
|
|
$mod_slide->title[$language['id_lang']] = 'Sample slider 3';
|
|
$mod_slide->link[$language['id_lang']] = '';
|
|
$mod_slide->image[$language['id_lang']] = 'sample_slider_3.png';
|
|
$mod_slide->thumbnail[$language['id_lang']] = '';
|
|
$mod_slide->video[$language['id_lang']] = 'eyJ1c2V2aWRlbyI6IjAiLCJ2aWRlb2lkIjoiIiwidmlkZW9hdXRvIjoiMCIsImJhY2tncm91bmRfY29sb3IiOiIiLCJidWxsZXRfZGVzY3JpcHRpb24iOiIifQ==';
|
|
$mod_slide->layersparams[$language['id_lang']] = 'W3sibGF5ZXJfdmlkZW9fdHlwZSI6InlvdXR1YmUiLCJsYXllcl92aWRlb19pZCI6IiIsImxheWVyX3ZpZGVvX2hlaWdodCI6IjIwMCIsImxheWVyX3ZpZGVvX3dpZHRoIjoiMzAwIiwibGF5ZXJfdmlkZW9fdGh1bWIiOiIiLCJsYXllcl9pZCI6IjFfMSIsImxheWVyX2NvbnRlbnQiOiIiLCJsYXllcl90eXBlIjoidGV4dCIsImxheWVyX3N0YXR1cyI6IjEiLCJsYXllcl9jbGFzcyI6ImxhcmdlX3RleHQiLCJsYXllcl9jYXB0aW9uIjoiVHJ1ZSBNdWx0aS1NZWRpYSBDb250ZW50IiwibGF5ZXJfZm9udF9zaXplIjoiIiwibGF5ZXJfYmFja2dyb3VuZF9jb2xvciI6IiIsImxheWVyX2NvbG9yIjoiIiwibGF5ZXJfbGluayI6IiIsImxheWVyX3RhcmdldCI6InNhbWUiLCJsYXllcl90b3AiOiIxNTQiLCJsYXllcl9sZWZ0IjoiMCIsImxheWVyX3RyYW5zaXRpb24iOiJ3aXBlbGVmdCIsInRpbWVfc3RhcnQiOm51bGx9LHsibGF5ZXJfdmlkZW9fdHlwZSI6InlvdXR1YmUiLCJsYXllcl92aWRlb19pZCI6IiIsImxheWVyX3ZpZGVvX2hlaWdodCI6IjIwMCIsImxheWVyX3ZpZGVvX3dpZHRoIjoiMzAwIiwibGF5ZXJfdmlkZW9fdGh1bWIiOiIiLCJsYXllcl9pZCI6IjFfMiIsImxheWVyX2NvbnRlbnQiOiIiLCJsYXllcl90eXBlIjoidGV4dCIsImxheWVyX3N0YXR1cyI6IjEiLCJsYXllcl9jbGFzcyI6InNtYWxsX3RleHQiLCJsYXllcl9jYXB0aW9uIjoiSFRNTCA1LCBZb3V0dWJlIF9BU01fIFZpbWVvIFZpZGVvIFN1cHBvcnQiLCJsYXllcl9mb250X3NpemUiOiIiLCJsYXllcl9iYWNrZ3JvdW5kX2NvbG9yIjoiIiwibGF5ZXJfY29sb3IiOiIiLCJsYXllcl9saW5rIjoiIiwibGF5ZXJfdGFyZ2V0Ijoic2FtZSIsImxheWVyX3RvcCI6IjIwOCIsImxheWVyX2xlZnQiOiIwIiwibGF5ZXJfdHJhbnNpdGlvbiI6IndpcGVyaWdodCIsInRpbWVfc3RhcnQiOm51bGx9LHsibGF5ZXJfdmlkZW9fdHlwZSI6InlvdXR1YmUiLCJsYXllcl92aWRlb19pZCI6IiIsImxheWVyX3ZpZGVvX2hlaWdodCI6IjIwMCIsImxheWVyX3ZpZGVvX3dpZHRoIjoiMzAwIiwibGF5ZXJfdmlkZW9fdGh1bWIiOiIiLCJsYXllcl9pZCI6IjFfMyIsImxheWVyX2NvbnRlbnQiOiIiLCJsYXllcl90eXBlIjoidGV4dCIsImxheWVyX3N0YXR1cyI6IjEiLCJsYXllcl9jbGFzcyI6ImJpZ19ibGFjayIsImxheWVyX2NhcHRpb24iOiJTaG93IG5vdyIsImxheWVyX2ZvbnRfc2l6ZSI6IiIsImxheWVyX2JhY2tncm91bmRfY29sb3IiOiIiLCJsYXllcl9jb2xvciI6IiIsImxheWVyX2xpbmsiOiIiLCJsYXllcl90YXJnZXQiOiJzYW1lIiwibGF5ZXJfdG9wIjoiMjYzIiwibGF5ZXJfbGVmdCI6IjAiLCJsYXllcl90cmFuc2l0aW9uIjoid2lwZWxlZnQiLCJ0aW1lX3N0YXJ0IjpudWxsfV0=';
|
|
}
|
|
$mod_slide->add();
|
|
|
|
#COPY IMAGE TO THEME
|
|
if (!is_dir(LeoSlideshowHelper::getImgThemeDir())) {
|
|
mkdir(LeoSlideshowHelper::getImgThemeDir(), 0755, true);
|
|
}
|
|
$theme_dir = _PS_ROOT_DIR_.'/themes/'.LeoSlideshowHelper::getThemeName().'/';
|
|
$module_dir = _PS_MODULE_DIR_.'leoslideshow/';
|
|
include_once(_PS_MODULE_DIR_.'leoslideshow/libs/phpcopy.php');
|
|
PhpCopy::safeCopy($module_dir.'views/img/demo/', $theme_dir.'assets/img/modules/leoslideshow');
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* @see Module::uninstall()
|
|
*/
|
|
public function uninstall()
|
|
{
|
|
$id_tab = (int)Tab::getIdFromClassName('AdminLeoSlideshow');
|
|
if ($id_tab) {
|
|
$tab = new Tab($id_tab);
|
|
$tab->delete();
|
|
}
|
|
$id_tab = (int)Tab::getIdFromClassName('AdminLeoSlideshowMenuModule');
|
|
if ($id_tab) {
|
|
$tab = new Tab($id_tab);
|
|
$tab->delete();
|
|
}
|
|
|
|
Configuration::deleteByName('LEOSLIDESHOW_GROUP_DEFAULTTAB');
|
|
Configuration::deleteByName('LEOSLIDESHOW_GROUP_DE');
|
|
|
|
/* Deletes Module */
|
|
if (parent::uninstall() && $this->unregisterLeoHook()) {
|
|
/* Deletes tables */
|
|
$res = $this->deleteTables();
|
|
return $res;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Creates tables
|
|
*/
|
|
protected function createTables()
|
|
{
|
|
if ($this->_installDataSample()) {
|
|
return true;
|
|
}
|
|
/* Group */
|
|
$res = (bool)Db::getInstance()->execute('
|
|
CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.$this->name.'_groups` (
|
|
`id_'.$this->name.'_groups` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
|
`title` varchar(255) NOT NULL,
|
|
`id_shop` int(10) unsigned NOT NULL,
|
|
`hook` varchar(64) DEFAULT NULL,
|
|
`active` tinyint(1) unsigned NOT NULL DEFAULT \'1\',
|
|
`params` text NOT NULL,
|
|
`active_ap` tinyint(1) DEFAULT NULL,
|
|
`randkey` varchar(255) DEFAULT NULL,
|
|
PRIMARY KEY (`id_'.$this->name.'_groups`, `id_shop`)
|
|
) ENGINE='._MYSQL_ENGINE_.' DEFAULT CHARSET=UTF8;
|
|
');
|
|
|
|
/* Slides configuration */
|
|
$res &= Db::getInstance()->execute('
|
|
CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.$this->name.'_slides` (
|
|
`id_'.$this->name.'_slides` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
|
`id_group` int(11) NOT NULL,
|
|
`position` int(10) unsigned NOT NULL DEFAULT \'0\',
|
|
`active` tinyint(1) unsigned NOT NULL DEFAULT \'1\',
|
|
`params` text NOT NULL,
|
|
PRIMARY KEY (`id_'.$this->name.'_slides`)
|
|
) ENGINE='._MYSQL_ENGINE_.' DEFAULT CHARSET=UTF8;
|
|
');
|
|
|
|
/* Slides lang configuration */
|
|
$res &= Db::getInstance()->execute('
|
|
CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.$this->name.'_slides_lang` (
|
|
`id_'.$this->name.'_slides` int(10) unsigned NOT NULL,
|
|
`id_lang` int(10) unsigned NOT NULL,
|
|
`title` varchar(255) NOT NULL,
|
|
`link` varchar(255) NOT NULL,
|
|
`image` varchar(255) NOT NULL,
|
|
`thumbnail` varchar(255) NOT NULL,
|
|
`video` text,
|
|
`layersparams` text,
|
|
PRIMARY KEY (`id_'.$this->name.'_slides`,`id_lang`)
|
|
) ENGINE='._MYSQL_ENGINE_.' DEFAULT CHARSET=UTF8;
|
|
');
|
|
$res &= $this->installSamples();
|
|
return $res;
|
|
}
|
|
|
|
private function _installDataSample()
|
|
{
|
|
if (!file_exists(_PS_MODULE_DIR_.'appagebuilder/libs/LeoDataSample.php')) {
|
|
return false;
|
|
}
|
|
require_once(_PS_MODULE_DIR_.'appagebuilder/libs/LeoDataSample.php');
|
|
|
|
$data_sample_class = 'Datasample';
|
|
|
|
$sample = new $data_sample_class(1);
|
|
return $sample->processImport($this->name);
|
|
}
|
|
|
|
/**
|
|
* deletes tables
|
|
*/
|
|
protected function deleteTables()
|
|
{
|
|
//return true;
|
|
return Db::getInstance()->execute('
|
|
DROP TABLE IF EXISTS `'._DB_PREFIX_.$this->name.'_groups`, `'._DB_PREFIX_.$this->name.'_slides`, `'._DB_PREFIX_.$this->name.'_slides_lang`;
|
|
');
|
|
}
|
|
|
|
public function postProcess()
|
|
{
|
|
if (count($this->errors) > 0) {
|
|
$this->ajax = Tools::getValue('ajax') || Tools::isSubmit('ajax');
|
|
if ($this->ajax) {
|
|
$array = array('hasError' => true, 'errors' => $this->errors[0]);
|
|
die(Tools::jsonEncode($array));
|
|
}
|
|
return;
|
|
}
|
|
|
|
if (Tools::isSubmit('importGroup')) {
|
|
$this->importGroup();
|
|
}
|
|
|
|
if (Tools::getIsset('leoajax') && Tools::getValue('leoajax') == 1) {
|
|
$this->slideProcessAjax();
|
|
}
|
|
|
|
if (Tools::getIsset('correctGroup') && Tools::getValue('correctGroup')) {
|
|
$this->correctDataGroup();
|
|
}
|
|
|
|
if (Tools::getIsset('copylang') && Tools::getValue('copylang')) {
|
|
$this->copyLang();
|
|
}
|
|
|
|
// Copy js, css, image, tpl
|
|
if (Tools::getIsset('leo_copy_lib_to_theme') && Tools::getValue('leo_copy_lib_to_theme') == 1) {
|
|
LeoSlideshowHelper::copyToTheme();
|
|
}
|
|
|
|
//action for group
|
|
if (Tools::isSubmit('editgroup') || Tools::isSubmit('submitGroup') || Tools::isSubmit('deletegroup') || Tools::isSubmit('addNewGroup') || Tools::isSubmit('exportgroup') || Tools::isSubmit('changeGStatus')) {
|
|
if (Tools::isSubmit('submitGroup') || Tools::isSubmit('deletegroup') || Tools::isSubmit('changeGStatus')) {
|
|
if ($this->postValidation()) {
|
|
$this->_postProcess();
|
|
}
|
|
}
|
|
//save group id in config to edit in next time when open module
|
|
if (Tools::isSubmit('submitGroup') || Tools::isSubmit('editgroup') || Tools::isSubmit('changeGStatus')) {
|
|
Configuration::updateValue('LEOSLIDESHOW_GROUP_DE', (int)Tools::getValue('id_group'));
|
|
}
|
|
} elseif (Tools::isSubmit('showsliders') || Tools::isSubmit('submitSlider') || Tools::isSubmit('editSlider') || Tools::isSubmit('deleteSlider') || Tools::isSubmit('addNewSlider') || Tools::isSubmit('changeStatus')) {
|
|
# Add new Slide
|
|
if (Tools::isSubmit('submitSlider') || Tools::isSubmit('deleteSlider') || Tools::isSubmit('changeStatus') || Tools::getValue('duplicateSlider')) {
|
|
if ($this->postValidation()) {
|
|
$this->_postProcess();
|
|
}
|
|
}
|
|
}
|
|
|
|
//export process
|
|
if (Tools::getValue('exportGroup')) {
|
|
$this->exportGroup();
|
|
}
|
|
}
|
|
|
|
public function getContent()
|
|
{
|
|
|
|
$this->errors = array();
|
|
if (!$this->access('configure')) {
|
|
$this->errors[] = $this->trans('You do not have permission to configure this.', array(), 'Admin.Notifications.Error');
|
|
$this->html .= $this->displayError($this->trans('You do not have permission to configure this.', array(), 'Admin.Notifications.Error'));
|
|
}
|
|
|
|
$this->postProcess();
|
|
|
|
$media_dir = $this->getMediaDir();
|
|
$this->context->controller->addJS(__PS_BASE_URI__.$media_dir.'js/jquery-validation-1.9.0/jquery.validate.js');
|
|
$this->context->controller->addJS(__PS_BASE_URI__.$media_dir.'js/admin/show.js');
|
|
$this->context->controller->addCSS(__PS_BASE_URI__.$media_dir.'css/jquery-validation-1.9.0/screen.css');
|
|
|
|
$this->html .= $this->headerHTML();
|
|
if (Tools::isSubmit('submitUpdateModule')) {
|
|
$id_tab = (int)Tab::getIdFromClassName('AdminLeoSlideshow');
|
|
if ($id_tab) {
|
|
$tab = new Tab($id_tab);
|
|
$tab->delete();
|
|
}
|
|
//display manage image in left menu
|
|
$tab = new Tab();
|
|
$tab->active = 1;
|
|
$tab->class_name = 'AdminLeoSlideshow';
|
|
$tab->name = array();
|
|
foreach (Language::getLanguages(false) as $lang) {
|
|
$tab->name[$lang['id_lang']] = 'LeoSlideShow';
|
|
}
|
|
$tab->id_parent = -1;
|
|
$tab->module = $this->name;
|
|
$tab->add();
|
|
|
|
$this->_confirmations[] = 'Update and Correct Module is successful';
|
|
}
|
|
|
|
//action for group
|
|
if (Tools::isSubmit('editgroup') || Tools::isSubmit('submitGroup') || Tools::isSubmit('deletegroup') || Tools::isSubmit('addNewGroup') || Tools::isSubmit('exportgroup') || Tools::isSubmit('changeGStatus')) {
|
|
$this->html .= $this->renderGroupList();
|
|
$this->html .= $this->renderGroupConfig();
|
|
} elseif (Tools::isSubmit('showsliders') || Tools::isSubmit('submitSlider') || Tools::isSubmit('editSlider') || Tools::isSubmit('deleteSlider') || Tools::isSubmit('addNewSlider') || Tools::isSubmit('changeStatus')) {
|
|
# Add new Slide
|
|
$this->html .= $this->renderList();
|
|
$this->html .= $this->renderConfig();
|
|
$this->html .= $this->renderSliderForm();
|
|
} else {
|
|
# Action for slideshow
|
|
$this->html .= $this->renderGroupList();
|
|
$this->html .= $this->renderGroupConfig();
|
|
}
|
|
|
|
return $this->html;
|
|
}
|
|
|
|
public function getAllSlides()
|
|
{
|
|
$this->context = Context::getContext();
|
|
$id_shop = $this->context->shop->id;
|
|
$sql = 'SELECT *
|
|
FROM '._DB_PREFIX_.'leoslideshow_groups gr
|
|
WHERE gr.id_shop = '.(int)$id_shop.' AND gr.randkey IS NOT NULL AND gr.randkey != "" '
|
|
. 'ORDER BY gr.id_leoslideshow_groups AND gr.randkey IS NOT NULL';
|
|
|
|
return Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
|
|
}
|
|
|
|
/**
|
|
* this function is only for developer of leotheme.com
|
|
* to correct data for group + slider
|
|
*/
|
|
public function correctDataGroup()
|
|
{
|
|
$id_group = Tools::getValue('id_group');
|
|
if ($id_group) {
|
|
$mod_group = new LeoSlideshowGroup($id_group);
|
|
|
|
if (Validate::isLoadedObject($mod_group)) {
|
|
//correct group data
|
|
$params = Tools::unSerialize($mod_group->params);
|
|
if ($params) {
|
|
$mod_group->params = LeoSlideshowSlide::base64Encode(Tools::jsonEncode($params));
|
|
$mod_group->save();
|
|
}
|
|
|
|
//correct slider
|
|
$sliders = $this->getSlides($mod_group->id);
|
|
foreach ($sliders as $slider) {
|
|
$mod_slide = new LeoSlideshowSlide($slider['id_slide']);
|
|
if (Validate::isLoadedObject($mod_slide)) {
|
|
$tmp = Tools::unSerialize($mod_slide->params);
|
|
if ($tmp) {
|
|
$mod_slide->params = LeoSlideshowSlide::base64Encode(Tools::jsonEncode($tmp));
|
|
}
|
|
|
|
$tmp_slide = array();
|
|
foreach ($mod_slide->video as $key => $value) {
|
|
$tmp = Tools::unSerialize($value);
|
|
if ($tmp) {
|
|
$tmp_slide[$key] = LeoSlideshowSlide::base64Encode(Tools::jsonEncode($tmp));
|
|
}
|
|
}
|
|
if ($tmp_slide) {
|
|
$mod_slide->video = $tmp_slide;
|
|
}
|
|
|
|
$tmp_slide = array();
|
|
foreach ($mod_slide->layersparams as $key => $value) {
|
|
$tmp = Tools::unSerialize($value);
|
|
if ($tmp) {
|
|
$tmp_slide[$key] = LeoSlideshowSlide::base64Encode(Tools::jsonEncode($tmp));
|
|
}
|
|
}
|
|
if ($tmp_slide) {
|
|
$mod_slide->layersparams = $tmp_slide;
|
|
}
|
|
//print_r($sliderObj);die;
|
|
$mod_slide->save();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public function copyLang()
|
|
{
|
|
$id_group = Tools::getValue('id_group');
|
|
if ($id_group) {
|
|
$sliders = $this->getSlides($id_group);
|
|
$mod_slide = new LeoSlideshowSlide();
|
|
$defined = $mod_slide->getDefinition($mod_slide);
|
|
$defined = $defined['fields'];
|
|
|
|
foreach ($sliders as $slider) {
|
|
$mod_slide = new LeoSlideshowSlide($slider['id_slide']);
|
|
if ($mod_slide->id) {
|
|
$languages = Language::getLanguages(false);
|
|
$default_lang = (int)Configuration::get('PS_LANG_DEFAULT');
|
|
|
|
$tmp = array();
|
|
foreach ($languages as $language) {
|
|
if ($language['id_lang'] == $default_lang) {
|
|
# module validation
|
|
foreach ($defined as $key => $val) {
|
|
# module validation
|
|
if (isset($val['lang']) && $val['lang'] == 1) {
|
|
# module validation
|
|
$tmp[$key] = $mod_slide->{$key}[$default_lang];
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
foreach ($languages as $language) {
|
|
if ($language['id_lang'] != $default_lang) {
|
|
foreach ($tmp as $key => $val) {
|
|
if ($key == 'layersparams') {
|
|
$layers_params = Tools::jsonDecode(LeoSlideshowSlide::base64Decode($val), true);
|
|
if (is_array($layers_params)) {
|
|
// PARAMS IS VALID : NOT NULL, NOT EMPTY
|
|
foreach ($layers_params as &$layer) {
|
|
# module validation
|
|
$layer['layer_id'] = str_replace($default_lang.'_', $language['id_lang'].'_', $layer['layer_id']);
|
|
}
|
|
$mod_slide->layersparams[$language['id_lang']] = LeoSlideshowSlide::base64Encode(Tools::jsonEncode($layers_params));
|
|
}
|
|
} else {
|
|
# module validation
|
|
$mod_slide->{$key}[$language['id_lang']] = $val;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
$mod_slide->update();
|
|
}
|
|
}
|
|
}
|
|
$this->html .= $this->displayConfirmation($this->l('Copy language was successful'));
|
|
}
|
|
|
|
public function importGroup()
|
|
{
|
|
include_once(_PS_MODULE_DIR_.'leoslideshow/controllers/admin/AdminLeoSlideshow.php');
|
|
$controller_slide = new AdminLeoSlideshowController();
|
|
$res = $controller_slide->importGroup();
|
|
if (!$res) {
|
|
# module validation
|
|
$this->html .= $this->displayError('The file could not be import.');
|
|
} else {
|
|
# module validation
|
|
$this->html .= $this->displayConfirmation($this->l('Importing was successful'));
|
|
}
|
|
}
|
|
|
|
public function renderList()
|
|
{
|
|
//get curent slider data
|
|
if (Tools::isSubmit('id_slide') && $this->slideExists((int)Tools::getValue('id_slide'))) {
|
|
# module validation
|
|
$this->mod_current_slide = new LeoSlideshowSlide((int)Tools::getValue('id_slide'));
|
|
} else {
|
|
# module validation
|
|
$this->mod_current_slide = new LeoSlideshowSlide();
|
|
}
|
|
|
|
$slides = $this->getSlides(Tools::getValue('id_group'));
|
|
foreach ($slides as $key => $slide) {
|
|
$slides[$key]['status'] = $this->displayStatus($slide['id_slide'], $slide['active'], $slide['id_group'], $slide);
|
|
}
|
|
|
|
$mod_group = new LeoSlideshowGroup((int)Tools::getValue('id_group'));
|
|
$id_shop = $this->context->shop->id;
|
|
|
|
if ($id_shop != $mod_group->id_shop) {
|
|
Tools::redirectAdmin(AdminController::$currentIndex.'&configure='.$this->name.'&token='.Tools::getAdminTokenLite('AdminModules'));
|
|
}
|
|
$this->group_data = array_merge($this->group_data, Tools::jsonDecode(LeoSlideshowSlide::base64Decode($mod_group->params), true));
|
|
// $arrayParam['secure_key'] = $this->secure_key;
|
|
|
|
$this->context->smarty->assign(array(
|
|
'link' => $this->context->link,
|
|
'slides' => $slides,
|
|
'id_group' => Tools::getValue('id_group'),
|
|
'group_title' => $mod_group->title,
|
|
'languages' => $this->context->controller->getLanguages(),
|
|
'previewLink' => Context::getContext()->link->getModuleLink($this->name, 'preview', array('secure_key' => $this->secure_key)),
|
|
'msecure_key' => $this->secure_key,
|
|
'currentSliderID' => $this->mod_current_slide->id,
|
|
'leo_slider_list_link' => $this->context->link->getAdminLink('AdminModules').'&configure='.$this->name.'&leoajax=1',
|
|
));
|
|
|
|
return $this->display(__FILE__, 'slide_list.tpl');
|
|
}
|
|
|
|
/**
|
|
* return group config form
|
|
*/
|
|
public function renderConfig()
|
|
{
|
|
$description = $this->l('Add New Slider');
|
|
|
|
if (!Tools::isSubmit('deleteSlider') && !Tools::isSubmit('addNewSlider') && !Tools::isSubmit('showsliders')) {
|
|
$description = $this->l('You are editting slider:').' '.$this->mod_current_slide->title[$this->context->language->id];
|
|
}
|
|
|
|
|
|
//$fullWidthVideo = array(array('id'=>0,'name'=>$this->l('No')),array('id'=>'youtube','name'=>'Youtube'),array('id'=>'vimeo','name'=>'Vimeo'));
|
|
//general config
|
|
$fields_form = array(
|
|
'form' => array(
|
|
'legend' => array(
|
|
'title' => $description,
|
|
'icon' => 'icon-cogs'
|
|
),
|
|
//'description' =>$description,
|
|
'input' => array(
|
|
array(
|
|
'type' => 'slider_button',
|
|
'name' => 'slider_button',
|
|
'lang' => false,
|
|
),
|
|
array(
|
|
'type' => 'text',
|
|
'label' => $this->l('Slider Title'),
|
|
'name' => 'title',
|
|
'class' => 'slider-title',
|
|
'required' => 1,
|
|
'lang' => true,
|
|
),
|
|
array(
|
|
'type' => 'switch',
|
|
'label' => $this->l('Enable'),
|
|
'name' => 'active_slide',
|
|
'is_bool' => true,
|
|
'values' => $this->getSwitchValue('active'),
|
|
),
|
|
array(
|
|
'type' => 'text',
|
|
'label' => $this->l('Delay'),
|
|
'name' => 'slider[delay]',
|
|
'class' => 'fixed-width-xl digits',
|
|
),
|
|
array(
|
|
'type' => 'select',
|
|
'label' => $this->l('Group'),
|
|
'name' => 'slider[group_id]',
|
|
'options' => array(
|
|
'query' => LeoSlideshowGroup::getGroupOption(),
|
|
'id' => 'id',
|
|
'name' => 'name',
|
|
)
|
|
),
|
|
array(
|
|
'type' => 'switch',
|
|
'label' => $this->l('Enable Link'),
|
|
'name' => 'slider[enable_link]',
|
|
'is_bool' => true,
|
|
'lang' => true,
|
|
'values' => $this->getSwitchValue('enable_link'),
|
|
),
|
|
array(
|
|
'type' => 'text',
|
|
'label' => $this->l('Link'),
|
|
'name' => 'link',
|
|
'lang' => true,
|
|
),
|
|
array(
|
|
'type' => 'select',
|
|
'label' => $this->l('Link Open in'),
|
|
'name' => 'slider[target]',
|
|
'options' => array(
|
|
'query' => LeoSlideshowStatus::getInstance()->getSliderTargetOption(),
|
|
'id' => 'id',
|
|
'name' => 'name',
|
|
)
|
|
),
|
|
array(
|
|
'type' => 'datetime',
|
|
'label' => $this->l('Start Date Time'),
|
|
'name' => 'slider[start_date_time]',
|
|
'lang' => false,
|
|
),
|
|
array(
|
|
'type' => 'datetime',
|
|
'label' => $this->l('Start End Time'),
|
|
'name' => 'slider[end_date_time]',
|
|
'lang' => false,
|
|
),
|
|
array(
|
|
'type' => 'text',
|
|
'label' => $this->l('Bullet Number Class'),
|
|
'name' => 'slider[bullet_class]',
|
|
'lang' => false,
|
|
'desc' => $this->l('Setting CSS Class for bullet, and must be enabled "Custom HTML Enable" in Group.'),
|
|
'class' => 'fixed-width-xl',
|
|
),
|
|
array(
|
|
'type' => 'textarea',
|
|
'label' => $this->l('Bullet Description'),
|
|
'name' => 'bullet_description',
|
|
'rows' => 5,
|
|
'cols' => 60,
|
|
'lang' => true,
|
|
'desc' => $this->l('Showing Custom HTML in bullet, and must be enabled "Custom HTML Enable" in Group.'),
|
|
),
|
|
//thumb + main image
|
|
array(
|
|
'type' => 'file_lang',
|
|
'label' => $this->l('Thumbnail'),
|
|
'name' => 'thumbnail',
|
|
'lang' => true,
|
|
),
|
|
array(
|
|
'type' => 'video_config',
|
|
'label' => $this->l('Video'),
|
|
'name' => 'slider[video]',
|
|
'lang' => true,
|
|
)
|
|
)
|
|
),
|
|
);
|
|
|
|
if (Tools::getValue('id_slide') && $this->slideExists((int)Tools::getValue('id_slide'))) {
|
|
$fields_form['form']['input'][] = array('type' => 'hidden', 'name' => 'id_slide');
|
|
}
|
|
|
|
$fields_form['form']['input'][] = array('type' => 'hidden', 'name' => 'id_group');
|
|
|
|
|
|
$helper = new HelperForm();
|
|
$helper->show_toolbar = false;
|
|
$helper->table = $this->table;
|
|
$helper->module = $this;
|
|
$helper->name_controller = 'slideshow';
|
|
$id_langs = Language::getIDs(false);
|
|
$lang = new Language($id_langs['0']);
|
|
$helper->default_form_language = $lang->id;
|
|
$helper->allow_employee_form_lang = Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') ? Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') : 0;
|
|
$this->fields_form = array();
|
|
|
|
$helper->identifier = $this->identifier;
|
|
$helper->submit_action = 'submitSlider';
|
|
$helper->currentIndex = $this->context->link->getAdminLink('AdminModules', false).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name;
|
|
$helper->token = Tools::getAdminTokenLite('AdminModules');
|
|
|
|
$fields_value = $this->getSliderFieldsValues();
|
|
# Image External Link
|
|
if(isset($fields_value['thumbnail']) && $fields_value['thumbnail']){
|
|
foreach ($this->context->controller->getLanguages() as $lang) {
|
|
$id_lang = $lang['id_lang'];
|
|
if ((!(Tools::substr($fields_value['thumbnail'][$id_lang], 0, 7) == 'http://')) && (!(Tools::substr($fields_value['thumbnail'][$id_lang], 0, 8) == 'https://'))) {
|
|
|
|
$fields_value['thumbnail'][$id_lang] = $this->img_url . $fields_value['thumbnail'][$id_lang];
|
|
}
|
|
}
|
|
}
|
|
|
|
$helper->tpl_vars = array(
|
|
'fields_value' => $this->getSliderFieldsValues(),
|
|
'languages' => $this->context->controller->getLanguages(),
|
|
'id_language' => $this->context->language->id,
|
|
'sliderGroup' => $this->group_data,
|
|
'psBaseModuleUri' => $this->img_url,
|
|
'color' => true
|
|
);
|
|
|
|
return $helper->generateForm(array($fields_form));
|
|
}
|
|
|
|
/**
|
|
* generate data
|
|
*/
|
|
public function getSliderFieldsValues()
|
|
{
|
|
$fields = array();
|
|
$slide = $this->mod_current_slide;
|
|
|
|
if (isset($this->mod_current_slide->id) && $this->mod_current_slide->id) {
|
|
$fields['id_slide'] = (int)$this->mod_current_slide->id;
|
|
$slide = $this->mod_current_slide;
|
|
$this->slider_data = array_merge($this->slider_data, Tools::jsonDecode(LeoSlideshowSlide::base64Decode($slide->params), true));
|
|
}
|
|
|
|
$fields['active_slide'] = Tools::getValue('active_slide', $slide->active);
|
|
$fields['has_picture'] = true;
|
|
$fields['id_group'] = Tools::getValue('id_group', $slide->id_group);
|
|
|
|
$languages = Language::getLanguages(false);
|
|
|
|
foreach ($languages as $lang) {
|
|
$fields['image'][$lang['id_lang']] = Tools::getValue('image_'.(int)$lang['id_lang'], $slide->image[$lang['id_lang']]);
|
|
$fields['thumbnail'][$lang['id_lang']] = Tools::getValue('thumbnail_'.(int)$lang['id_lang'], $slide->thumbnail[$lang['id_lang']]);
|
|
$fields['title'][$lang['id_lang']] = Tools::getValue('title_'.(int)$lang['id_lang'], $slide->title[$lang['id_lang']]);
|
|
$fields['link'][$lang['id_lang']] = Tools::getValue('link_'.(int)$lang['id_lang'], $slide->link[$lang['id_lang']]);
|
|
if ($slide->video) {
|
|
if ($slide->video[(int)$lang['id_lang']]) {
|
|
foreach (Tools::jsonDecode(LeoSlideshowSlide::base64Decode($slide->video[(int)$lang['id_lang']]), true) as $key => $value) {
|
|
$fields[$key][$lang['id_lang']] = Tools::getValue($key.'_.'.(int)$lang['id_lang'], $value);
|
|
}
|
|
}
|
|
} else {
|
|
$fields['usevideo'][$lang['id_lang']] = 0;
|
|
$fields['videoid'][$lang['id_lang']] = '';
|
|
$fields['videoauto'][$lang['id_lang']] = 0;
|
|
$fields['background_color'][$lang['id_lang']] = '';
|
|
$fields['bullet_description'][$lang['id_lang']] = '';
|
|
}
|
|
}
|
|
//slider no lang
|
|
foreach ($this->slider_data as $key => $value) {
|
|
$fields['slider['.$key.']'] = Tools::getValue('slider['.$key.']', $value);
|
|
}
|
|
|
|
//DONGND:: fix id group with data import or duplicate
|
|
$fields['slider[group_id]'] = Tools::getValue('id_group', $slide->id_group);
|
|
|
|
//slider with lang
|
|
return $fields;
|
|
}
|
|
|
|
/**
|
|
* slider Editor
|
|
*/
|
|
public function renderSliderForm()
|
|
{
|
|
$layer_animation = array(array('id' => 'fade', 'name' => $this->l('Fade')), array('id' => 'sft', 'name' => $this->l('Short from Top')), array('id' => 'sfb', 'name' => $this->l('Short from Bottom')),
|
|
array('id' => 'sfr', 'name' => $this->l('Short from Right')), array('id' => 'sfl', 'name' => $this->l('Short from Left')), array('id' => 'lft', 'name' => $this->l('Long from Top')),
|
|
array('id' => 'lfb', 'name' => $this->l('Long from Bottom')), array('id' => 'lfr', 'name' => $this->l('Long from Right')), array('id' => 'lfl', 'name' => $this->l('Long from Left')),
|
|
array('id' => 'randomrotate', 'name' => $this->l('Random Rotate')));
|
|
$layers = array();
|
|
if ($this->mod_current_slide->layersparams) {
|
|
$layers = array();
|
|
//echo "<pre>";print_r($this->_currentSlider->layersparams);die;
|
|
|
|
foreach ($this->mod_current_slide->layersparams as $key => $val) {
|
|
$layer = Tools::jsonDecode(LeoSlideshowSlide::base64Decode($val), true);
|
|
//$layer = $std->layers;
|
|
if ($layer) {
|
|
// foreach ($layer as $k => &$l) {
|
|
foreach ($layer as $k => &$l) {
|
|
if (isset($l['layer_caption'])) {
|
|
$l['layer_caption'] = addslashes(str_replace("'", ''', html_entity_decode(str_replace(array('\n', '\r', '\t'), '', utf8_decode($l['layer_caption'])), ENT_QUOTES, 'UTF-8')));
|
|
}
|
|
|
|
//DONGND:: fix data when add new language
|
|
if (isset($l['layer_id']) && $l['layer_id'] != ($key.'_'.($k+1))) {
|
|
// echo 'test';
|
|
$l['layer_id'] = $key.'_'.($k+1);
|
|
}
|
|
}
|
|
}
|
|
|
|
$content = Tools::jsonEncode($layer);
|
|
$content = str_replace('\r\n', '', $content);
|
|
$layers[] = array('langID' => $key, 'content' => $content);
|
|
}
|
|
}
|
|
//echo "<pre>";print_r($layers);die;
|
|
$slide_img = $this->mod_current_slide->image;
|
|
$slide_back = array();
|
|
if ($this->mod_current_slide->video) {
|
|
foreach ($this->mod_current_slide->video as $key => $val) {
|
|
$video = Tools::jsonDecode(LeoSlideshowSlide::base64Decode($val), true);
|
|
$slide_back[$key] = '';
|
|
if (isset($video['background_color'])) {
|
|
$slide_back[$key] = $video['background_color'];
|
|
}
|
|
}
|
|
}
|
|
//echo "<pre>";print_r($sliderBack);die;
|
|
// unset($layers['1']);
|
|
// unset($layers['3']);
|
|
|
|
# Image External Link
|
|
if($slide_img){
|
|
foreach ($this->context->controller->getLanguages() as $lang) {
|
|
$id_lang = $lang['id_lang'];
|
|
if ((!(Tools::substr($slide_img[$id_lang], 0, 7) == 'http://')) && (!(Tools::substr($slide_img[$id_lang], 0, 8) == 'https://')) && (!(Tools::substr($slide_img[$id_lang], 0, 10) == 'data:image')) ) {
|
|
$slide_img[$id_lang] = $this->img_url . $slide_img[$id_lang];
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
$this->context->smarty->assign(array(
|
|
'link' => $this->context->link,
|
|
// 'leo_admin_module_link' => AdminController::$currentIndex.'&token='.Tools::getAdminTokenLite('AdminModules'),
|
|
'leo_admin_module_link' => $this->context->link->getAdminLink('AdminModules'),
|
|
'slideImg' => $slide_img,
|
|
'sliderBack' => $slide_back,
|
|
'languages' => $this->context->controller->getLanguages(),
|
|
'id_language' => $this->context->language->id,
|
|
'layerAnimation' => $layer_animation,
|
|
'sliderGroup' => $this->group_data,
|
|
'layers' => $layers,
|
|
'ajaxfilelink' => Context::getContext()->link->getAdminLink('AdminLeoSlideshow'),
|
|
'formLink' => _MODULE_DIR_.$this->name.'/ajax_'.$this->name.'.php?secure_key='.$this->secure_key.'&action=submitslider',
|
|
'psBaseModuleUri' => $this->img_url,
|
|
'previewLink' => Context::getContext()->link->getModuleLink($this->name, 'preview', array('secure_key' => $this->secure_key)),
|
|
'msecure_key' => $this->secure_key,
|
|
'id_group' => Tools::getValue('id_group'),
|
|
'id_slide' => $this->mod_current_slide->id,
|
|
'delay' => LeoSlideshowSlide::showDelay((int)Tools::getValue('id_slide'), $this->slider_data['delay'], $this->group_data['delay']),
|
|
));
|
|
|
|
return $this->display(__FILE__, 'slider_editor.tpl');
|
|
}
|
|
|
|
public function checkExistAnyGroup()
|
|
{
|
|
$this->context = Context::getContext();
|
|
$id_shop = $this->context->shop->id;
|
|
return Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('SELECT * FROM '._DB_PREFIX_.'leoslideshow_groups gr WHERE gr.id_shop = '.(int)$id_shop);
|
|
}
|
|
|
|
/**
|
|
* get all slider data
|
|
*/
|
|
public function getSlides($id_group, $active = null)
|
|
{
|
|
$this->context = Context::getContext();
|
|
$id_lang = $this->context->language->id;
|
|
|
|
$sql = 'SELECT lsl.`id_leoslideshow_slides` as id_slide, lsl.*,lsll.*
|
|
FROM '._DB_PREFIX_.'leoslideshow_slides lsl
|
|
LEFT JOIN '._DB_PREFIX_.'leoslideshow_slides_lang lsll ON (lsl.id_leoslideshow_slides = lsll.id_leoslideshow_slides)
|
|
WHERE lsl.id_group = '.(int)$id_group.'
|
|
AND lsll.id_lang = '.(int)$id_lang.($active ? ' AND lsl.`active` = 1' : ' ').'
|
|
ORDER BY lsl.position';
|
|
return Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
|
|
}
|
|
|
|
/**
|
|
* return list group
|
|
*/
|
|
public function renderGroupList()
|
|
{
|
|
$mod_group = new LeoSlideshowGroup();
|
|
$id_shop = $this->context->shop->id;
|
|
$groups = $mod_group->getGroups(null, $id_shop);
|
|
|
|
foreach ($groups as $key => $group) {
|
|
if ($group['id_leoslideshow_groups'] == Tools::getValue('id_group') || (!Tools::getValue('id_group') && !Tools::isSubmit('addNewGroup') && $group['id_leoslideshow_groups'] == Configuration::get('LEOSLIDESHOW_GROUP_DE'))) {
|
|
$this->current_group['id_group'] = $group['id_leoslideshow_groups'];
|
|
$this->current_group['title'] = $group['title'];
|
|
|
|
$params = Tools::jsonDecode(LeoSlideshowSlide::base64Decode($group['params']), true);
|
|
if ($params) {
|
|
$group_result = array();
|
|
}
|
|
foreach ($params as $k => $v) {
|
|
$group_result[$k] = $v;
|
|
}
|
|
|
|
$group_result['title'] = $group['title'];
|
|
$group_result['id_leoslideshow_groups'] = $group['id_leoslideshow_groups'];
|
|
$group_result['id_shop'] = $group['id_shop'];
|
|
$group_result['hook'] = $group['hook'];
|
|
$group_result['active'] = $group['active'];
|
|
|
|
if ($group_result) {
|
|
$this->group_data = array_merge($this->group_data, $group_result);
|
|
}
|
|
}
|
|
|
|
$groups[$key]['status'] = $this->displayGStatus($group['id_leoslideshow_groups'], $group['active']);
|
|
}
|
|
$this->context->smarty->assign(array(
|
|
'link' => $this->context->link,
|
|
'groups' => $groups,
|
|
'curentGroup' => $this->current_group['id_group'],
|
|
'languages' => $this->context->controller->getLanguages(),
|
|
// 'exportLink' => Context::getContext()->link->getAdminLink('AdminLeoSlideshow').'&ajax=1&exportGroup=1',
|
|
'previewLink' => Context::getContext()->link->getModuleLink($this->name, 'preview', array('secure_key' => $this->secure_key)),
|
|
'msecure_key' => $this->secure_key
|
|
));
|
|
|
|
return $this->display(__FILE__, 'group_list.tpl');
|
|
}
|
|
|
|
/**
|
|
* return group config form
|
|
*/
|
|
public function renderGroupConfig()
|
|
{
|
|
$description = $this->l('Add New Group');
|
|
if (!Tools::isSubmit('deletegroup') && !Tools::isSubmit('addNewGroup') && $this->current_group['id_group']) {
|
|
$description = $this->l('You are editting group:').' '.$this->current_group['title'];
|
|
}
|
|
|
|
$select_hook = array();
|
|
$select_hook[] = array('id' => '', 'name' => '');
|
|
foreach ($this->hook_support as $value) {
|
|
$select_hook[] = array('id' => $value, 'name' => $value);
|
|
}
|
|
|
|
$full_width = array(array('id' => '', 'name' => $this->l('Boxed')),
|
|
array('id' => 'fullwidth', 'name' => $this->l('Fullwidth')));
|
|
|
|
$arr_col = array('12', '10', '9-6', '9', '8', '7-2', '6', '4-8', '4', '3', '2-4', '2');
|
|
|
|
$hidden_config = array('hidden-lg-down' => $this->l('Hidden in Large devices'), 'hidden-md-down' => $this->l('Hidden in Medium devices'),
|
|
'hidden-sm-down' => $this->l('Hidden in Small devices'), 'hidden-xs-down' => $this->l('Hidden in Extra small devices'), 'hidden-sp' => $this->l('Hidden in Smart Phone'));
|
|
|
|
$fields_form = array();
|
|
$fields_form[0]['form'] = array(
|
|
|
|
// 'legend' => array(
|
|
// 'title' => $description,
|
|
// 'icon' => 'icon-cogs'
|
|
// ),
|
|
|
|
'input' => array(
|
|
array(
|
|
'type' => 'hidden',
|
|
'name' => 'LEOSLIDESHOW_GROUP_DEFAULTTAB',
|
|
'default' => '',
|
|
),
|
|
array(
|
|
'type' => 'group_button',
|
|
'id_group' => $this->current_group['id_group'],
|
|
'name' => 'group_button',
|
|
'lang' => false,
|
|
),
|
|
// array(
|
|
// 'type' => 'sperator_form',
|
|
// 'text' => $this->l('General Setting'),
|
|
// 'name' => 'sperator_form',
|
|
// 'show_button' => 1,
|
|
// 'lang' => false,
|
|
// ),
|
|
array(
|
|
'type' => 'text',
|
|
'label' => $this->l('Group Title'),
|
|
'name' => 'title_group',
|
|
'lang' => false,
|
|
'required' => 1
|
|
),
|
|
array(
|
|
'type' => 'select',
|
|
'label' => $this->l('Show in Hook'),
|
|
'name' => 'hook_group',
|
|
'options' => array(
|
|
'query' => $select_hook,
|
|
'id' => 'id',
|
|
'name' => 'name',
|
|
)
|
|
),
|
|
array(
|
|
'type' => 'text',
|
|
'label' => $this->l('Delay'),
|
|
'name' => 'group[delay]',
|
|
'class' => 'fixed-width-xl digits',
|
|
'desc' => $this->l('Enter Time(miniseconds) to show each slide. Default 5000'),
|
|
),
|
|
array(
|
|
'type' => 'text',
|
|
'label' => $this->l('Starting Slide'),
|
|
'name' => 'group[start_with_slide]',
|
|
'class' => 'fixed-width-xl digits',
|
|
'desc' => $this->l('"Random Starting Slide" must be NO. The value is equal or greater than 0.'),
|
|
'lang' => false,
|
|
),
|
|
array(
|
|
'type' => 'select',
|
|
'label' => $this->l('Timer Autorun '),
|
|
'name' => 'group[timer_show]',
|
|
'options' => array(
|
|
'query' => LeoSlideshowConfig::getTimerOption(),
|
|
'id' => 'id',
|
|
'name' => 'name',
|
|
),
|
|
),
|
|
array(
|
|
'type' => 'switch',
|
|
'label' => $this->l('Timer Stop On Hover'),
|
|
'name' => 'group[stop_on_hover]',
|
|
'is_bool' => true,
|
|
'values' => $this->getSwitchValue('stop_on_hover'),
|
|
),
|
|
array(
|
|
'type' => 'switch',
|
|
'label' => $this->l('Random Starting Slide'),
|
|
'name' => 'group[shuffle_mode]',
|
|
'is_bool' => true,
|
|
'values' => $this->getSwitchValue('shuffle_mode'),
|
|
'desc' => $this->l('This override "Starting Slide" input'),
|
|
),
|
|
array(
|
|
'type' => 'switch',
|
|
'label' => $this->l('Enable'),
|
|
'name' => 'active_group',
|
|
'is_bool' => true,
|
|
'values' => $this->getSwitchValue('active'),
|
|
),
|
|
array(
|
|
'type' => 'select',
|
|
'label' => $this->l('Slideshow Width Mode'),
|
|
'name' => 'group[fullwidth]',
|
|
'class' => 'slideshow-mode',
|
|
'options' => array(
|
|
'query' => $full_width,
|
|
'id' => 'id',
|
|
'name' => 'name',
|
|
)
|
|
),
|
|
array(
|
|
'type' => 'col_width',
|
|
'label' => $this->l('Medium and Large Desktops Width'),
|
|
'name' => 'group[md_width]',
|
|
'class' => 'mode-width mode-',
|
|
'lang' => false
|
|
),
|
|
array(
|
|
'type' => 'col_width',
|
|
'label' => $this->l('Small devices Tablets Width'),
|
|
'name' => 'group[sm_width]',
|
|
'class' => 'mode-width mode-',
|
|
'arrayVal' => $arr_col,
|
|
'lang' => false
|
|
),
|
|
array(
|
|
'type' => 'col_width',
|
|
'label' => $this->l('Extra small devices Phones'),
|
|
'name' => 'group[xs_width]',
|
|
'class' => 'mode-width mode-',
|
|
'arrayVal' => $arr_col,
|
|
'lang' => false
|
|
),
|
|
array(
|
|
'type' => 'sperator_form',
|
|
'text' => $this->l('Mode Boxed: You can config width of slideshow. It will display float with other module'),
|
|
'class' => 'alert alert-warning mode-width mode-',
|
|
'name' => 'sperator_form',
|
|
'lang' => false,
|
|
),
|
|
array(
|
|
'type' => 'sperator_form',
|
|
'text' => $this->l('Mode FullWidth: The slideshow will show 100% in container of hook_slideshow. You have to config width of other module in hook_slideshow'),
|
|
'class' => 'alert alert-warning mode-width mode-fullwidth',
|
|
'name' => 'sperator_form',
|
|
'lang' => false,
|
|
),
|
|
),
|
|
'submit' => array(
|
|
'title' => $this->l('Save'),
|
|
'class' => 'btn btn-default')
|
|
);
|
|
//DONGND:: image setting
|
|
$fields_form[1]['form'] = array(
|
|
'input' => array(
|
|
array(
|
|
'type' => 'group_button',
|
|
'id_group' => $this->current_group['id_group'],
|
|
'name' => 'group_button',
|
|
'lang' => false,
|
|
),
|
|
// array(
|
|
// 'type' => 'sperator_form',
|
|
// 'text' => $this->l('Image Setting'),
|
|
// 'name' => 'sperator_form',
|
|
// 'lang' => false,
|
|
// ),
|
|
array(
|
|
'type' => 'switch',
|
|
'label' => $this->l('Image Cropping'),
|
|
'name' => 'group[image_cropping]',
|
|
'is_bool' => true,
|
|
'desc' => $this->l('Auto turn off is you use mode "Boxed" for slideshow'),
|
|
'values' => $this->getSwitchValue('image_cropping'),
|
|
),
|
|
array(
|
|
'type' => 'text',
|
|
'label' => $this->l('Image Width'),
|
|
'name' => 'group[width]',
|
|
'lang' => false,
|
|
'desc' => $this->l('Use for resize image and Max-Height')
|
|
),
|
|
array(
|
|
'type' => 'text',
|
|
'label' => $this->l('Image Height'),
|
|
'name' => 'group[height]',
|
|
'lang' => false,
|
|
'desc' => $this->l('Use for resize image and Max-Height')
|
|
),
|
|
),
|
|
'submit' => array(
|
|
'title' => $this->l('Save'),
|
|
'class' => 'btn btn-default')
|
|
);
|
|
//DONGND:: css setting
|
|
$fields_form[2]['form'] = array(
|
|
'input' => array(
|
|
# CSS SETTING
|
|
array(
|
|
'type' => 'group_button',
|
|
'id_group' => $this->current_group['id_group'],
|
|
'name' => 'group_button',
|
|
'lang' => false,
|
|
),
|
|
// array(
|
|
// 'type' => 'sperator_form',
|
|
// 'text' => $this->l('CSS Setting'),
|
|
// 'name' => 'sperator_form',
|
|
// 'lang' => false,
|
|
// ),
|
|
array(
|
|
'type' => 'text',
|
|
'label' => $this->l('Margin'),
|
|
'name' => 'group[margin]',
|
|
'lang' => false,
|
|
),
|
|
array(
|
|
'type' => 'text',
|
|
'label' => $this->l('Padding(border)'),
|
|
'name' => 'group[padding]',
|
|
'lang' => false,
|
|
),
|
|
array(
|
|
'type' => 'switch',
|
|
'label' => $this->l('Show Background Image'),
|
|
'name' => 'group[background_image]',
|
|
'is_bool' => true,
|
|
'values' => $this->getSwitchValue('background_image'),
|
|
'desc' => $this->l('Yes, Frontend will show background image. No, Frontend will show background color. '),
|
|
),
|
|
array(
|
|
'type' => 'group_background',
|
|
'label' => $this->l('Background Image'),
|
|
'name' => 'group[background_url]',
|
|
'id' => 'background_url',
|
|
'lang' => false
|
|
),
|
|
array(
|
|
'type' => 'color',
|
|
'label' => $this->l('Background Color'),
|
|
'name' => 'group[background_color]',
|
|
'lang' => false,
|
|
),
|
|
array(
|
|
'type' => 'group_class',
|
|
'label' => $this->l('Group Class'),
|
|
'name' => 'group[group_class]'
|
|
),
|
|
),
|
|
'submit' => array(
|
|
'title' => $this->l('Save'),
|
|
'class' => 'btn btn-default')
|
|
);
|
|
|
|
//DONGND:: navigatior and direction
|
|
$fields_form[3]['form'] = array(
|
|
'input' => array(
|
|
# Navigator
|
|
array(
|
|
'type' => 'group_button',
|
|
'id_group' => $this->current_group['id_group'],
|
|
'name' => 'group_button',
|
|
'lang' => false,
|
|
),
|
|
// array(
|
|
// 'type' => 'sperator_form',
|
|
// 'text' => $this->l('Navigator and Direction'),
|
|
// 'name' => 'sperator_form',
|
|
// 'lang' => false,
|
|
// ),
|
|
array(
|
|
'type' => 'switch',
|
|
'label' => $this->l('Enable Navigator'),
|
|
'name' => 'group[controlNav]',
|
|
'is_bool' => true,
|
|
'values' => $this->getSwitchValue('controlNav'),
|
|
),
|
|
array(
|
|
'type' => 'select',
|
|
'label' => $this->l('Navigator Type'),
|
|
'name' => 'group[navigator_type]',
|
|
'options' => array(
|
|
'query' => LeoSlideshowConfig::getNavigatorType(),
|
|
'id' => 'id',
|
|
'name' => 'name',
|
|
),
|
|
'class' => 'form-action',
|
|
),
|
|
array(
|
|
'type' => 'leo_switch',
|
|
'label' => $this->l('Custom HTML Enable'),
|
|
'name' => 'group[enable_custom_html_bullet]',
|
|
'is_bool' => true,
|
|
'values' => $this->getSwitchValue('controlNavTooltipp'),
|
|
'leo_desc' => $this->l('Showing custom HTML for bullets, and changing Custom HTML in editing slide.'),
|
|
'class' => 'groupnavigator_type_sub groupnavigator_type-'.LeoSlideshowConfig::IVIEW_NAV_BULLET,
|
|
),
|
|
array(
|
|
'type' => 'leo_switch',
|
|
'label' => $this->l('Tooltip Thumbnai'),
|
|
'name' => 'group[controlNavTooltip]',
|
|
'is_bool' => true,
|
|
'values' => $this->getSwitchValue('controlNavTooltip'),
|
|
'leo_desc' => $this->l('Show Thumbnail Tooltip when hover over Bullet ( only with Background is Image )'),
|
|
'class' => 'groupnavigator_type_sub groupnavigator_type-'.LeoSlideshowConfig::IVIEW_NAV_BULLET,
|
|
),
|
|
array(
|
|
'type' => 'text',
|
|
'label' => $this->l('X position threshold'),
|
|
'name' => 'group[tooltipX]',
|
|
'class' => 'fixed-width-xl number groupnavigator_type_sub groupnavigator_type-'.LeoSlideshowConfig::IVIEW_NAV_BULLET,
|
|
'lang' => false,
|
|
'desc' => $this->l('Set Left for Tooltip Thumbnail in pixel'),
|
|
),
|
|
array(
|
|
'type' => 'text',
|
|
'label' => $this->l('Y position threshold'),
|
|
'name' => 'group[tooltipY]',
|
|
'class' => 'fixed-width-xl number groupnavigator_type_sub groupnavigator_type-'.LeoSlideshowConfig::IVIEW_NAV_BULLET,
|
|
'lang' => false,
|
|
'desc' => $this->l('Set Top Tooltip Thumbnail in pixel'),
|
|
),
|
|
array(
|
|
'type' => 'text',
|
|
'label' => $this->l('Thumbnail Width'),
|
|
'name' => 'group[nav_thumbnail_width]',
|
|
'lang' => false,
|
|
'class' => 'fixed-width-xl digits',
|
|
),
|
|
array(
|
|
'type' => 'text',
|
|
'label' => $this->l('Thumbnail Height'),
|
|
'name' => 'group[nav_thumbnail_height]',
|
|
'lang' => false,
|
|
'class' => 'fixed-width-xl digits',
|
|
),
|
|
array(
|
|
'type' => 'text',
|
|
'label' => $this->l('Opacity'),
|
|
'name' => 'group[controlNavHoverOpacity]',
|
|
'class' => 'fixed-width-xl number',
|
|
'desc' => $this->l('Set opacity for Navigator. Value from 0 to 1. Ex 0.6'),
|
|
),
|
|
array(
|
|
'type' => 'switch',
|
|
'label' => $this->l('Enable Direction'),
|
|
'name' => 'group[directionNav]',
|
|
'is_bool' => true,
|
|
'values' => $this->getSwitchValue('directionNav'),
|
|
),
|
|
array(
|
|
'type' => 'text',
|
|
'label' => $this->l('Opacity'),
|
|
'name' => 'group[directionNavHoverOpacity]',
|
|
'class' => 'fixed-width-xl number',
|
|
'desc' => $this->l('Set opacity for Direction. Value from 0 to 1. Ex 0.6'),
|
|
),
|
|
array(
|
|
'type' => 'switch',
|
|
'label' => $this->l('Key board'),
|
|
'name' => 'group[keyboardNav]',
|
|
'is_bool' => true,
|
|
'values' => $this->getSwitchValue('keyboardNav'),
|
|
),
|
|
),
|
|
'submit' => array(
|
|
'title' => $this->l('Save'),
|
|
'class' => 'btn btn-default')
|
|
);
|
|
|
|
//DONGND:: timer options
|
|
$fields_form[4]['form'] = array(
|
|
'input' => array(
|
|
# TIMER OPTIONS
|
|
array(
|
|
'type' => 'group_button',
|
|
'id_group' => $this->current_group['id_group'],
|
|
'name' => 'group_button',
|
|
'lang' => false,
|
|
),
|
|
// array(
|
|
// 'type' => 'sperator_form',
|
|
// 'text' => $this->l('Timer Options'),
|
|
// 'name' => 'timer_option',
|
|
// 'lang' => false,
|
|
// 'class' => 'alert alert-info sperator_form',
|
|
// ),
|
|
array(
|
|
'type' => 'select',
|
|
'label' => $this->l('Timer Style'),
|
|
'name' => 'group[timer]',
|
|
'options' => array(
|
|
'query' => LeoSlideshowConfig::getTimerStyle(),
|
|
'id' => 'id',
|
|
'name' => 'name',
|
|
),
|
|
'class' => 'form-action timer_option_sub',
|
|
),
|
|
array(
|
|
'type' => 'select',
|
|
'label' => $this->l('Position'),
|
|
'name' => 'group[timerPosition]',
|
|
'options' => array(
|
|
'query' => LeoSlideshowConfig::getTimerPosition(),
|
|
'id' => 'id',
|
|
'name' => 'name',
|
|
),
|
|
'class' => 'timer_option_sub',
|
|
),
|
|
array(
|
|
'type' => 'text',
|
|
'label' => $this->l('X position threshold'),
|
|
'name' => 'group[timerX]',
|
|
'class' => 'fixed-width-xl digits timer_option_sub',
|
|
'lang' => false,
|
|
'desc' => $this->l('Enter digits to set Left or Right for Timer.'),
|
|
),
|
|
array(
|
|
'type' => 'text',
|
|
'label' => $this->l('Y position threshold'),
|
|
'name' => 'group[timerY]',
|
|
'class' => 'fixed-width-xl digits timer_option_sub',
|
|
'lang' => false,
|
|
'desc' => $this->l('Enter digits to set Top or Bottom for Timer.'),
|
|
),
|
|
array(
|
|
'type' => 'text',
|
|
'label' => $this->l('Opacity'),
|
|
'name' => 'group[timerOpacity]',
|
|
'class' => 'fixed-width-xl number timer_option_sub',
|
|
'desc' => $this->l('Set opacity for Timer in pixel. Value is 0 to 1. Ex 0.6'),
|
|
'lang' => false,
|
|
),
|
|
array(
|
|
'type' => 'color',
|
|
'label' => $this->l('Background'),
|
|
'name' => 'group[timerBg]',
|
|
'class' => 'fixed-width-xl timer_option_sub',
|
|
'form_group_class' => 'form_sub',
|
|
'lang' => false,
|
|
),
|
|
array(
|
|
'type' => 'color',
|
|
'label' => $this->l('Timer Color'),
|
|
'name' => 'group[timerColor]',
|
|
'class' => 'fixed-width-xl timer_option_sub',
|
|
'form_group_class' => 'form_sub',
|
|
'lang' => false,
|
|
),
|
|
array(
|
|
'type' => 'text',
|
|
'label' => $this->l('Timer Diameter'),
|
|
'name' => 'group[timerDiameter]',
|
|
'class' => 'fixed-width-xl digits timer_option_sub',
|
|
'desc' => $this->l('Length of Running Line. Ex 360Bar is 30, Bar is 120, Pie 30.'),
|
|
'lang' => false,
|
|
),
|
|
array(
|
|
'type' => 'text',
|
|
'label' => $this->l('Timer Padding'),
|
|
'name' => 'group[timerPadding]',
|
|
'class' => 'fixed-width-xl digits timer_option_sub',
|
|
'desc' => $this->l('Height of background. Ex 360Bar is 2, Bar is 4, Pie 4.'),
|
|
'lang' => false,
|
|
),
|
|
array(
|
|
'type' => 'text',
|
|
'label' => $this->l('Timer Stroke'),
|
|
'name' => 'group[timerStroke]',
|
|
'class' => 'fixed-width-xl digits timer_option_sub grouptimer_sub grouptimer-'.LeoSlideshowConfig::IVIEW_TIMER_360BAR.' grouptimer-'.LeoSlideshowConfig::IVIEW_TIMER_BAR,
|
|
'desc' => $this->l('Height of Running Line. Ex 360Bar is 4, Bar is 4'),
|
|
'lang' => false,
|
|
),
|
|
array(
|
|
'type' => 'text',
|
|
'label' => $this->l('Border'),
|
|
'name' => 'group[timerBarStroke]',
|
|
'class' => 'fixed-width-xl digits timer_option_sub fixed-width-xl grouptimer_sub grouptimer-Bar',
|
|
'desc' => $this->l('Border of Bar Timer'),
|
|
'lang' => false,
|
|
),
|
|
array(
|
|
'type' => 'color',
|
|
'label' => $this->l('Border Color'),
|
|
'name' => 'group[timerBarStrokeColor]',
|
|
'form_group_class' => 'form_sub',
|
|
'class' => 'fixed-width-xl timer_option_sub grouptimer_sub grouptimer-Bar',
|
|
'desc' => $this->l("Color of Bar Timer's border"),
|
|
'lang' => false,
|
|
),
|
|
array(
|
|
'type' => 'select',
|
|
'label' => $this->l('Border Style'),
|
|
'name' => 'group[timerBarStrokeStyle]',
|
|
'options' => array(
|
|
'query' => LeoSlideshowConfig::getTimerBarStrokeStyle(),
|
|
'id' => 'id',
|
|
'name' => 'name',
|
|
),
|
|
'desc' => $this->l("Style of Bar Timer's border"),
|
|
'class' => 'fixed-width-xl timer_option_sub grouptimer_sub grouptimer-Bar',
|
|
),
|
|
),
|
|
'submit' => array(
|
|
'title' => $this->l('Save'),
|
|
'class' => 'btn btn-default')
|
|
);
|
|
|
|
//DONGND:: animation
|
|
$fields_form[5]['form'] = array(
|
|
'input' => array(
|
|
array(
|
|
'type' => 'group_button',
|
|
'id_group' => $this->current_group['id_group'],
|
|
'name' => 'group_button',
|
|
'lang' => false,
|
|
),
|
|
// array(
|
|
// 'type' => 'sperator_form',
|
|
// 'text' => $this->l('Animation'),
|
|
// 'name' => 'sperator_form',
|
|
// 'lang' => false,
|
|
// ),
|
|
array(
|
|
'type' => 'select',
|
|
'label' => $this->l('Animation'),
|
|
'name' => 'group[fx]',
|
|
'options' => array(
|
|
'query' => LeoSlideshowConfig::getFx(),
|
|
'id' => 'id',
|
|
'name' => 'name',
|
|
),
|
|
),
|
|
array(
|
|
'type' => 'text',
|
|
'label' => $this->l('Speed to change slide'),
|
|
'name' => 'group[animationSpeed]',
|
|
'class' => 'fixed-width-xl digits',
|
|
'desc' => $this->l('Enter Time(miniseconds) to change each slide. Ex 500'),
|
|
),
|
|
array(
|
|
'type' => 'text',
|
|
'label' => $this->l('Slide Strips'),
|
|
'name' => 'group[strips]',
|
|
'class' => 'fixed-width-xl digits',
|
|
'desc' => $this->l('Total number of strips in slide. Strip is bigger when enter small number. Ex 20'),
|
|
),
|
|
array(
|
|
'type' => 'text',
|
|
'label' => $this->l('Slide Column'),
|
|
'name' => 'group[blockCols]',
|
|
'class' => 'fixed-width-xl digits',
|
|
'desc' => $this->l('Number of columns in slide. Ex 10'),
|
|
),
|
|
array(
|
|
'type' => 'text',
|
|
'label' => $this->l('Slide Row'),
|
|
'name' => 'group[blockRows]',
|
|
'class' => 'fixed-width-xl digits',
|
|
'desc' => $this->l('Number of rows in slide. Ex 5'),
|
|
),
|
|
array(
|
|
'type' => 'text',
|
|
'label' => $this->l('Caption Speed'),
|
|
'name' => 'group[captionSpeed]',
|
|
'class' => 'fixed-width-xl digits',
|
|
'desc' => $this->l('Enter Time(miniseconds) to show caption. Ex 500'),
|
|
),
|
|
array(
|
|
'type' => 'text',
|
|
'label' => $this->l('Caption Opacity'),
|
|
'name' => 'group[captionOpacity]',
|
|
'class' => 'fixed-width-xl number',
|
|
'desc' => $this->l('Set opacity for Caption. Value form 0 to 1. Ex 0.6'),
|
|
),
|
|
),
|
|
'submit' => array(
|
|
'title' => $this->l('Save'),
|
|
'class' => 'btn btn-default')
|
|
);
|
|
|
|
if (Tools::isSubmit('id_group') && LeoSlideshowGroup::groupExists((int)Tools::getValue('id_group'))) {
|
|
$fields_form[5]['form']['input'][] = array('type' => 'hidden', 'name' => 'id_group');
|
|
} else if ($this->current_group['id_group'] && LeoSlideshowGroup::groupExists($this->current_group['id_group'])) {
|
|
$fields_form[5]['form']['input'][] = array('type' => 'hidden', 'name' => 'id_group');
|
|
}
|
|
|
|
$helper = new HelperForm();
|
|
$helper->show_toolbar = false;
|
|
$helper->table = $this->table;
|
|
$helper->module = $this;
|
|
$helper->name_controller = 'slideshow';
|
|
$lang = new Language((int)Configuration::get('PS_LANG_DEFAULT'));
|
|
$helper->default_form_language = $lang->id;
|
|
$helper->allow_employee_form_lang = Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') ? Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') : 0;
|
|
$this->fields_form = array();
|
|
|
|
$helper->identifier = $this->identifier;
|
|
$helper->submit_action = 'submitGroup';
|
|
$helper->currentIndex = $this->context->link->getAdminLink('AdminModules', false).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name;
|
|
$helper->token = Tools::getAdminTokenLite('AdminModules');
|
|
$helper->tpl_vars = array(
|
|
'fields_value' => $this->getGroupFieldsValues(),
|
|
'languages' => $this->context->controller->getLanguages(),
|
|
'id_language' => $this->context->language->id,
|
|
// 'exportLink' => Context::getContext()->link->getAdminLink('AdminLeoSlideshow').'&exportGroup=1',
|
|
'psBaseModuleUri' => $this->img_url,
|
|
'ajaxfilelink' => Context::getContext()->link->getAdminLink('AdminLeoSlideshow'),
|
|
'leo_width' => $arr_col,
|
|
'hidden_config' => $hidden_config
|
|
);
|
|
|
|
$globalform = $helper->generateForm($fields_form);
|
|
//DONGND::
|
|
$this->context->smarty->assign(array(
|
|
'globalform' => $globalform,
|
|
'description' => $description,
|
|
'default_tab' => Configuration::get('LEOSLIDESHOW_GROUP_DEFAULTTAB')
|
|
// 'id_group' => Tools::getValue('id_group'),
|
|
// 'group_title' => $mod_group->title,
|
|
// 'languages' => $this->context->controller->getLanguages(),
|
|
// 'previewLink' => Context::getContext()->link->getModuleLink($this->name, 'preview', array('secure_key' => $this->secure_key)),
|
|
// 'msecure_key' => $this->secure_key,
|
|
// 'currentSliderID' => $this->mod_current_slide->id
|
|
));
|
|
return $this->display(__FILE__, 'panel.tpl');
|
|
}
|
|
|
|
public function getSwitchValue($id)
|
|
{
|
|
return array(array('id' => $id.'_on', 'value' => 1, 'label' => $this->l('Yes')),
|
|
array('id' => $id.'_off', 'value' => 0, 'label' => $this->l('No')));
|
|
}
|
|
|
|
public function getGroupFieldsValues()
|
|
{
|
|
$group = array();
|
|
$field = array('id_leoslideshow_groups', 'title', 'id_shop', 'hook', 'active');
|
|
|
|
foreach ($this->group_data as $key => $value) {
|
|
if (in_array($key, $field)) {
|
|
if ($key == 'id_leoslideshow_groups') {
|
|
# module validation
|
|
$group['id_group'] = $value;
|
|
} else {
|
|
# module validation
|
|
$group[$key.'_group'] = $value;
|
|
}
|
|
continue;
|
|
}
|
|
$group['group['.$key.']'] = $value;
|
|
}
|
|
|
|
$group['LEOSLIDESHOW_GROUP_DEFAULTTAB'] = Tools::getValue('LEOSLIDESHOW_GROUP_DEFAULTTAB', Configuration::get('LEOSLIDESHOW_GROUP_DEFAULTTAB'));
|
|
// echo '<pre>';
|
|
// print_r($group);die();
|
|
return $group;
|
|
}
|
|
|
|
public function postValidation()
|
|
{
|
|
$errors = array();
|
|
|
|
if (Tools::isSubmit('submitGroup')) {
|
|
if (Tools::isSubmit('id_group')) {
|
|
if (!Validate::isInt(Tools::getValue('id_group')) && !LeoSlideshowGroup::groupExists(Tools::getValue('id_group'))) {
|
|
$errors[] = $this->l('Invalid id_group');
|
|
}
|
|
}
|
|
$group_value = Tools::getValue('group');
|
|
$arr_int = array(
|
|
'delay' => $this->l('Invalid Delay value'),
|
|
'width' => $this->l('Invalid Width value'),
|
|
'height' => $this->l('Invalid Height value'),
|
|
);
|
|
|
|
foreach ($arr_int as $key => $value) {
|
|
if (!Validate::isInt($group_value[$key]) && $group_value[$key] != '') {
|
|
$errors[] = $value;
|
|
}
|
|
}
|
|
if (!Validate::isColor(Tools::getValue('background_color'))) {
|
|
$errors[] = $this->l('Invalid Background color value');
|
|
}
|
|
|
|
if (LeoSlideshowConfig::getPermission() == false) {
|
|
# CHECK VERSION
|
|
if (Tools::isSubmit('id_group') == false) {
|
|
// Add new Group
|
|
$mod_group = new LeoSlideshowGroup();
|
|
$number_group = $mod_group->count();
|
|
|
|
if ($number_group >= 1) {
|
|
$errors[] = $this->l("I'm so sorry, you are using free version of Leo slideshow module, could you please update module to pro version to use this function");
|
|
$errors[] = $this->display(__FILE__, 'error_freemodule.tpl');
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* Display errors if needed */
|
|
if (count($errors)) {
|
|
$this->error_text .= implode('<br>', $errors);
|
|
$this->html .= $this->displayError(implode('<br />', $errors));
|
|
return false;
|
|
}
|
|
|
|
/* Returns if validation is ok */
|
|
return true;
|
|
}
|
|
|
|
public function getErrorLog()
|
|
{
|
|
return $this->error_text;
|
|
}
|
|
|
|
private function _postProcess()
|
|
{
|
|
$errors = array();
|
|
if (Tools::isSubmit('submitGroup')) {
|
|
# ACTION - add,edit for GROUP
|
|
/* Sets ID if needed */
|
|
if (Tools::getValue('id_group')) {
|
|
$mod_group = new LeoSlideshowGroup((int)Tools::getValue('id_group'));
|
|
if (!Validate::isLoadedObject($mod_group)) {
|
|
$this->html .= $this->displayError($this->l('Invalid id_group'));
|
|
return;
|
|
}
|
|
} else {
|
|
$mod_group = new LeoSlideshowGroup();
|
|
}
|
|
|
|
/* Sets position */
|
|
$mod_group->title = Tools::getValue('title_group');
|
|
/* Sets active */
|
|
$mod_group->active = (int)Tools::getValue('active_group');
|
|
$context = Context::getContext();
|
|
$mod_group->id_shop = $context->shop->id;
|
|
$mod_group->hook = Tools::getValue('hook_group');
|
|
|
|
$params = Tools::getValue('group');
|
|
$mod_group->params = LeoSlideshowSlide::base64Encode(Tools::jsonEncode($params));
|
|
|
|
// print_r(Tools::getValue('LEOSLIDESHOW_GROUP_DEFAULTTAB'));die();
|
|
Configuration::updateValue('LEOSLIDESHOW_GROUP_DEFAULTTAB', Tools::getValue('LEOSLIDESHOW_GROUP_DEFAULTTAB'));
|
|
|
|
# TODO REMOVE CODE DEVELOPER
|
|
if (property_exists('LeoSlideshowGroup', 'randkey') && empty($mod_group->randkey)) {
|
|
$mod_group->randkey = LeoSlideshowHelper::genKey();
|
|
}
|
|
|
|
/* Adds */
|
|
if (!Tools::getValue('id_group')) {
|
|
if (!$mod_group->add()) {
|
|
$errors[] = $this->displayError($this->l('The group could not be added.'));
|
|
} else {
|
|
$this->clearCache();
|
|
Tools::redirectAdmin(AdminController::$currentIndex.'&configure='.$this->name.'&token='.Tools::getAdminTokenLite('AdminModules').'&editgroup=1&id_group='.$mod_group->id.'&conf=3');
|
|
}
|
|
} else {
|
|
# Update
|
|
if (!$mod_group->update()) {
|
|
$errors[] = $this->displayError($this->l('The group could not be updated.'));
|
|
} else {
|
|
$this->clearCache();
|
|
Tools::redirectAdmin(AdminController::$currentIndex.'&configure='.$this->name.'&token='.Tools::getAdminTokenLite('AdminModules').'&editgroup=1&id_group='.$mod_group->id.'&conf=4');
|
|
}
|
|
}
|
|
# Save in config to edit next time
|
|
$this->clearCache();
|
|
} elseif (Tools::isSubmit('changeGStatus') && Tools::isSubmit('id_group')) {
|
|
# ACTION - Change status for GROUP : enable or disable a group
|
|
$mod_group = new LeoSlideshowGroup((int)Tools::getValue('id_group'));
|
|
$change_status = Tools::getValue('changeGStatus');
|
|
$mod_group->update_flag = false;
|
|
|
|
if ($change_status == LeoSlideshowStatus::GROUP_STATUS_DISABLE && $mod_group->active != $change_status) {
|
|
$mod_group->active = LeoSlideshowStatus::GROUP_STATUS_DISABLE;
|
|
$mod_group->update_flag = true;
|
|
} elseif ($change_status == LeoSlideshowStatus::GROUP_STATUS_ENABLE && $mod_group->active != $change_status) {
|
|
$mod_group->active = LeoSlideshowStatus::GROUP_STATUS_ENABLE;
|
|
$mod_group->update_flag = true;
|
|
}
|
|
|
|
if (true == $mod_group->update_flag) {
|
|
$res = $mod_group->update();
|
|
$this->clearCache();
|
|
$this->html .= ($res ? $this->displayConfirmation($this->l('Change status of group was successful')) : $this->displayError($this->l('The configuration could not be updated.')));
|
|
}
|
|
} elseif (Tools::isSubmit('deletegroup')) {
|
|
$mod_group = new LeoSlideshowGroup((int)Tools::getValue('id_group'));
|
|
# Delete slider of group
|
|
$slider = $this->getSlides((int)Tools::getValue('id_group'));
|
|
|
|
foreach ($slider as $value) {
|
|
$mod_slide = new LeoSlideshowSlide($value['id_leoslideshow_slides']);
|
|
$mod_slide->delete();
|
|
}
|
|
|
|
$res = $mod_group->delete();
|
|
|
|
|
|
$this->clearCache();
|
|
if (!$res) {
|
|
$this->html .= $this->displayError('Could not delete');
|
|
} else {
|
|
$this->html .= $this->displayConfirmation($this->l('Group deleted'));
|
|
}
|
|
|
|
Tools::redirectAdmin('index.php?controller=AdminModules&token='.Tools::getAdminTokenLite('AdminModules').'&configure=leoslideshow&tab_module=leotheme&module_name=leoslideshow&conf=1');
|
|
} elseif (Tools::isSubmit('changeStatus')) {
|
|
# ACTION - Change status for SLIDE : enable or disable a slide
|
|
$mod_slide = new LeoSlideshowSlide((int)Tools::getValue('sslider'));
|
|
|
|
$change_status = Tools::getValue('changeStatus');
|
|
$mod_slide->update_flag = false;
|
|
if ($change_status === LeoSlideshowStatus::SLIDER_STATUS_DISABLE && $mod_slide->active != $change_status) {
|
|
$mod_slide->active = LeoSlideshowStatus::SLIDER_STATUS_DISABLE;
|
|
$mod_slide->update_flag = true;
|
|
} elseif ($change_status === LeoSlideshowStatus::SLIDER_STATUS_ENABLE && $mod_slide->active != $change_status) {
|
|
$mod_slide->active = LeoSlideshowStatus::SLIDER_STATUS_ENABLE;
|
|
$mod_slide->update_flag = true;
|
|
}
|
|
|
|
if (true == $mod_slide->update_flag) {
|
|
$res = $mod_slide->update();
|
|
$this->clearCache();
|
|
$this->html .= ($res ? $this->displayConfirmation($this->l('Change status of slide was successful')) : $this->displayError($this->l('The configuration could not be updated.')));
|
|
}
|
|
}
|
|
|
|
/* Display errors if needed */
|
|
if (count($errors)) {
|
|
$this->html .= $this->displayError(implode('<br />', $errors));
|
|
} elseif (Tools::isSubmit('submitGroup')) {
|
|
$this->html .= $this->displayConfirmation($this->l('Slide added'));
|
|
} elseif (Tools::isSubmit('submitGroup')) {
|
|
$this->html .= $this->displayConfirmation($this->l('Slide added'));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* The function prepareHookForApPageBuilder duplicated logic from this function
|
|
*/
|
|
private function _prepareHook($hook_name)
|
|
{
|
|
if ($this->isCached('module:leoslideshow/views/templates/front/leoslideshow.tpl', $this->getCacheId($hook_name.'_'.$this->name))) {
|
|
return true;
|
|
}
|
|
|
|
if (!is_dir(_PS_ROOT_DIR_.'/cache/'.$this->name)) {
|
|
mkdir(_PS_ROOT_DIR_.'/cache/'.$this->name, 0755, true);
|
|
}
|
|
|
|
//get slider via hookname
|
|
$group = LeoSlideshowGroup::getActiveGroupByHook($hook_name);
|
|
if (!$group) {
|
|
return false;
|
|
}
|
|
$sliders = $this->getSlides($group['id_leoslideshow_groups'], 1);
|
|
$sliders = LeoSlideshowSlide::filterSlider($sliders, $this->slider_data);
|
|
if (!$sliders) {
|
|
return false;
|
|
}
|
|
|
|
$slider_params = Tools::jsonDecode(LeoSlideshowSlide::base64Decode($group['params']), true);
|
|
// echo '<pre>';
|
|
// print_r($slider_params);die();
|
|
$slider_params = array_merge($group, $slider_params);
|
|
$slider_params = array_merge($this->group_data, $slider_params);
|
|
$mod_group = new LeoSlideshowGroup();
|
|
$mod_group->setModule($this);
|
|
$slider_params = $mod_group->setData($slider_params)->beforeLoad()->loadFrontEnd();
|
|
|
|
if (isset($slider_params['fullwidth']) && (!empty($slider_params['fullwidth']) || $slider_params['fullwidth'] == 'boxed')) {
|
|
$slider_params['image_cropping'] = false;
|
|
}
|
|
|
|
$slider_params['hide_navigator_after'] = $slider_params['show_navigator'] ? 0 : $slider_params['hide_navigator_after'];
|
|
$slider_params['slider_class'] = trim(isset($slider_params['fullwidth']) && !empty($slider_params['fullwidth']) ? $slider_params['fullwidth'] : 'boxed');
|
|
$slider_fullwidth = $slider_params['slider_class'] == 'boxed' ? 'off' : 'on';
|
|
|
|
// generate back-ground
|
|
if ($slider_params['background_image'] && $slider_params['background_url'] && file_exists($this->img_path.$slider_params['background_url'])) {
|
|
$slider_params['background'] = 'background: url('.$this->img_url.$slider_params['background_url'].') no-repeat scroll left 0 '.$slider_params['background_color'].';';
|
|
} else {
|
|
$slider_params['background'] = 'background-color:'.$slider_params['background_color'];
|
|
}
|
|
|
|
//include library genimage
|
|
if (!class_exists('PhpThumbFactory')) {
|
|
require_once _PS_MODULE_DIR_.'leoslideshow/libs/phpthumb/ThumbLib.inc.php';
|
|
}
|
|
|
|
$white_main_img = __PS_BASE_URI__.'modules/'.$this->name.'/views/img/white50.png';
|
|
|
|
//process slider
|
|
foreach ($sliders as $key => $slider) {
|
|
$slider['layers'] = array();
|
|
$slider['params'] = array_merge($this->slider_data, Tools::jsonDecode(LeoSlideshowSlide::base64Decode($slider['params']), true));
|
|
$slider['layersparams'] = Tools::jsonDecode(LeoSlideshowSlide::base64Decode($slider['layersparams']), true);
|
|
$slider['video'] = Tools::jsonDecode(LeoSlideshowSlide::base64Decode($slider['video']), true);
|
|
|
|
$slider['data_link'] = '';
|
|
if ($slider['params']['enable_link'] && $slider['link']) {
|
|
// $slider['data_link'] = 'data-link="'.$slider['link'].'"';
|
|
// $slider['data_target'] = 'data-target="'.LeoSlideshowSlide::renderTarget($slider['params']['target']).'"';
|
|
$slider['data_link'] = $slider['link'];
|
|
$slider['data_target'] = LeoSlideshowSlide::renderTarget($slider['params']['target']);
|
|
} else {
|
|
$slider['data_target'] = '';
|
|
}
|
|
|
|
$slider['data_delay'] = (int)$slider['params']['delay'];
|
|
|
|
//videoURL
|
|
$slider['videoURL'] = '';
|
|
$slider['video']['active'] = '0';
|
|
if ($slider['video']['usevideo'] == 'youtube' || $slider['video']['usevideo'] == 'vimeo') {
|
|
$slider['video']['active'] = '1';
|
|
$slider['video']['videoURL'] = Tools::getCurrentUrlProtocolPrefix() . 'player.vimeo.com/video/'.$slider['video']['videoid'].'/';
|
|
if ($slider['video']['usevideo'] == 'youtube') {
|
|
$slider['video']['videoURL'] = Tools::getCurrentUrlProtocolPrefix() . 'www.youtube.com/embed/'.$slider['video']['videoid'].'/';
|
|
}
|
|
}
|
|
|
|
if ($slider['video']['videoauto'] == 1) {
|
|
$slider['video']['videoauto'] = 'autoplay=1';
|
|
} else {
|
|
$slider['video']['videoauto'] = 'autoplay=0';
|
|
}
|
|
|
|
$slider['background_color'] = '';
|
|
if (isset($slider_params['background_color']) && $slider_params['background_color']) {
|
|
$slider['background_color'] = $slider_params['background_color'];
|
|
}
|
|
if (isset($slider['video']['background_color']) && $slider['video']['background_color']) {
|
|
$slider['background_color'] = $slider['video']['background_color'];
|
|
}
|
|
|
|
LeoSlideshowSlide::getBackground($slider_params, $slider);
|
|
|
|
if ($slider['image'] == '') {
|
|
$slider['image'] = 'views/img/blank.gif';
|
|
}
|
|
|
|
if ($slider_params['image_cropping']) {
|
|
//gender main_image
|
|
if ($slider['image'] && file_exists($this->img_path.$slider['image'])) {
|
|
$slider['main_image'] = $this->renderThumb($slider['image'], $slider_params['width'], $slider_params['height']);
|
|
} else {
|
|
$slider['main_image'] = $white_main_img;
|
|
}
|
|
|
|
if ($slider['thumbnail'] && file_exists($this->img_path.$slider['thumbnail'])) {
|
|
# module validation
|
|
//$slider['thumbnail'] = $this->renderThumb($slider['thumbnail'], $sliderParams['thumbnail_width'], $sliderParams['thumbnail_height']);
|
|
} else if ($slider['image'] && file_exists($this->img_path.$slider['image'])) {
|
|
# module validation
|
|
//$slider['thumbnail'] = $this->renderThumb($slider['image'], $sliderParams['thumbnail_width'], $sliderParams['thumbnail_height']);
|
|
} else {
|
|
$slider['thumbnail'] = $white_main_img;
|
|
}
|
|
} else {
|
|
$slider['main_image'] = __PS_BASE_URI__.'modules/leoslideshow'.'/views/img/blank.gif';
|
|
|
|
if ($slider['image'] && file_exists($this->img_path.$slider['image'])) {
|
|
$slider['main_image'] = $this->img_url.$slider['image'];
|
|
}
|
|
|
|
if ($slider['thumbnail'] && file_exists($this->img_path.$slider['thumbnail'])) {
|
|
$slider['thumbnail'] = $this->img_url.$slider['thumbnail'];
|
|
} else if ($slider['image'] && file_exists($this->img_path.$slider['image'])) {
|
|
$slider['thumbnail'] = $slider['main_image'];
|
|
} else {
|
|
$slider['thumbnail'] = $white_main_img;
|
|
}
|
|
}
|
|
|
|
if (isset($slider['layersparams']) && $slider['layersparams']) {
|
|
foreach ($slider['layersparams'] as $k => &$layer_css) {
|
|
if ($layer_css['layer_status'] == 0) {
|
|
unset($slider['layersparams'][$k]);
|
|
continue;
|
|
}
|
|
|
|
$layer_css_val = '';
|
|
if (isset($layer_css['layer_font_size']) && $layer_css['layer_font_size']) {
|
|
$layer_css_val = 'font-size:'.$layer_css['layer_font_size'];
|
|
}
|
|
if (isset($layer_css['layer_background_color']) && $layer_css['layer_background_color']) {
|
|
$layer_css_val .= ($layer_css_val != '' ? ';' : '').'background-color:'.$layer_css['layer_background_color'];
|
|
}
|
|
if (isset($layer_css['layer_color']) && $layer_css['layer_color']) {
|
|
$layer_css_val .= ($layer_css_val != '' ? ';' : '').'color:'.$layer_css['layer_color'];
|
|
}
|
|
$layer_css['css'] = $layer_css_val;
|
|
if (!isset($layer_css['layer_link'])) {
|
|
$layer_css['layer_link'] = $slider['link'];
|
|
} else {
|
|
$layer_css['layer_link'] = str_replace('_ASM_', '&', $layer_css['layer_link']);
|
|
}
|
|
|
|
$layer_css['layer_target'] = LeoSlideshowSlide::renderTarget($layer_css['layer_target']);
|
|
if (isset($layer_css['layer_caption']) && $layer_css['layer_caption']) {
|
|
$layer_css['layer_caption'] = utf8_decode($layer_css['layer_caption']);
|
|
}
|
|
}
|
|
}
|
|
$sliders[$key] = $slider;
|
|
}
|
|
$slider_params['start_with_slide'] = LeoSlideshowGroup::showStartWithSlide($slider_params['start_with_slide'], $sliders);
|
|
$sliders = LeoSlideshowSlide::showBulletCustomHTML($slider_params, $sliders);
|
|
$slider_params['playLabel'] = LeoSlideshowHelper::l('Play');
|
|
$slider_params['pauseLabel'] = LeoSlideshowHelper::l('Pause');
|
|
$slider_params['closeLabel'] = LeoSlideshowHelper::l('Close');
|
|
$slider_params['rtl'] = $this->context->language->is_rtl;
|
|
// echo '<pre>';
|
|
// print_r($sliders);die();
|
|
$this->smarty->assign(array(
|
|
'sliderParams' => $slider_params,
|
|
'sliders' => $sliders,
|
|
'sliderIDRand' => rand(20, rand()),
|
|
'sliderFullwidth' => $slider_fullwidth,
|
|
'sliderImgUrl' => $this->img_url,
|
|
'rand_num' => uniqid(),
|
|
));
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
*
|
|
*/
|
|
public function renderThumb($src_file, $width, $height)
|
|
{
|
|
$sub_folder = '/';
|
|
if (!$src_file) {
|
|
return '';
|
|
}
|
|
if (strpos($src_file, '/') !== false) {
|
|
$path = @pathinfo($src_file);
|
|
if (strpos($path['dirname'], '/') !== -1) {
|
|
$sub_folder = $path['dirname'].'/';
|
|
$folder_list = explode('/', $path['dirname']);
|
|
$tmp_folder = '/';
|
|
foreach ($folder_list as $value) {
|
|
if ($value) {
|
|
if (!is_dir(_PS_ROOT_DIR_.'/cache/'.$this->name.$tmp_folder.$value)) {
|
|
mkdir(_PS_ROOT_DIR_.'/cache/'.$this->name.$tmp_folder.$value, 0755, true);
|
|
}
|
|
|
|
$tmp_folder .= $value.'/';
|
|
}
|
|
}
|
|
}
|
|
$image_name = $path['basename'];
|
|
} else {
|
|
$image_name = $src_file;
|
|
}
|
|
|
|
$path = '';
|
|
if (file_exists($this->img_path.$src_file)) {
|
|
//return image url
|
|
$path = __PS_BASE_URI__.'cache/'.$this->name.$sub_folder.$width.'_'.$height.'_'.$image_name;
|
|
$save_path = _PS_ROOT_DIR_.'/cache/'.$this->name.$sub_folder.$width.'_'.$height.'_'.$image_name;
|
|
if (!file_exists($save_path)) {
|
|
$thumb = PhpThumbFactory::create($this->img_path.$src_file);
|
|
$thumb->adaptiveResize($width, $height);
|
|
$thumb->save($save_path);
|
|
}
|
|
}
|
|
|
|
return $path;
|
|
}
|
|
|
|
public function _processHook($hookName)
|
|
{
|
|
$id_slide = Tools::getValue('id_slide');
|
|
$id_group = Tools::getValue('id_group');
|
|
if (isset($id_slide) && isset($id_group) && $id_slide && $id_group) {
|
|
# preview
|
|
return;
|
|
}
|
|
|
|
if (!$this->_prepareHook($hookName)) {
|
|
return false;
|
|
}
|
|
|
|
// return $this->display(__FILE__, ''.$this->name.'.tpl', $this->getCacheId($hookName.'_'.$this->name));
|
|
return $this->fetch('module:leoslideshow/views/templates/front/leoslideshow.tpl', $this->getCacheId($hookName.'_'.$this->name));
|
|
}
|
|
|
|
public function hookHeader()
|
|
{
|
|
$media_dir = $this->getMediaDir();
|
|
$this->context->controller->addJS(_PS_JS_DIR_.'jquery/jquery-migrate-1.2.1.min.js');
|
|
$this->context->controller->addJS(_PS_JS_DIR_.'jquery/plugins/jquery.easing.js');
|
|
|
|
$this->context->controller->addCSS(__PS_BASE_URI__.$media_dir.'css/typo/typo.css', 'all');
|
|
// if (file_exists(_PS_THEME_DIR_.'modules/leoslideshow/css/typo/typo.css')) {
|
|
// $this->context->controller->addCSS(_PS_THEME_DIR_.'modules/leoslideshow/css/typo/typo.css');
|
|
// } else {
|
|
// $this->context->controller->addCSS($this->_path.'css/typo/typo.css');
|
|
// }
|
|
$this->context->controller->addCSS(__PS_BASE_URI__.$media_dir.'css/iView/iview.css', 'all');
|
|
$this->context->controller->addCSS(__PS_BASE_URI__.$media_dir.'css/iView/skin_4_responsive/style.css', 'all');
|
|
$this->context->controller->addJqueryUI('ui.core');
|
|
$this->context->controller->addJS(__PS_BASE_URI__.$media_dir.'js/iView/raphael-min.js');
|
|
$this->context->controller->addJS(__PS_BASE_URI__.$media_dir.'js/iView/iview.js');
|
|
$this->context->controller->addJS(__PS_BASE_URI__.$media_dir.'js/leoslideshow.js');
|
|
}
|
|
|
|
public function hookDisplayAfterBodyOpeningTag()
|
|
{
|
|
return $this->_processHook('displayAfterBodyOpeningTag');
|
|
}
|
|
|
|
public function hookDisplayTop()
|
|
{
|
|
return $this->_processHook('displayTop');
|
|
}
|
|
|
|
public function hookDisplayNav1()
|
|
{
|
|
return $this->_processHook('displayNav1');
|
|
}
|
|
|
|
public function hookDisplayNav2()
|
|
{
|
|
return $this->_processHook('displayNav2');
|
|
}
|
|
|
|
public function hookDisplayNavFullWidth()
|
|
{
|
|
return $this->_processHook('displayNavFullWidth');
|
|
}
|
|
|
|
public function hookDisplayHome()
|
|
{
|
|
return $this->_processHook('displayHome');
|
|
}
|
|
|
|
public function hookDisplayLeftColumn()
|
|
{
|
|
return $this->_processHook('displayLeftColumn');
|
|
}
|
|
|
|
public function hookDisplayRightColumn()
|
|
{
|
|
return $this->_processHook('displayRightColumn');
|
|
}
|
|
|
|
public function hookDisplayFooterProduct()
|
|
{
|
|
return $this->_processHook('displayFooterProduct');
|
|
}
|
|
|
|
public function hookDisplayFooterBefore()
|
|
{
|
|
return $this->_processHook('displayFooterBefore');
|
|
}
|
|
|
|
public function hookDisplayFooter()
|
|
{
|
|
return $this->_processHook('displayFooter');
|
|
}
|
|
|
|
public function hookDisplayFooterAfter()
|
|
{
|
|
return $this->_processHook('displayFooterAfter');
|
|
}
|
|
|
|
public function hookDisplayLeftColumnProduct()
|
|
{
|
|
return $this->_processHook('displayLeftColumnProduct');
|
|
}
|
|
|
|
public function hookDisplayRightColumnProduct()
|
|
{
|
|
return $this->_processHook('displayRightColumnProduct');
|
|
}
|
|
|
|
public function hookDisplayProductButtons()
|
|
{
|
|
return $this->_processHook('displayProductButtons');
|
|
}
|
|
|
|
public function hookDisplayReassurance()
|
|
{
|
|
return $this->_processHook('displayReassurance');
|
|
}
|
|
|
|
public function hookDisplayBeforeBodyClosingTag()
|
|
{
|
|
return $this->_processHook('displayBeforeBodyClosingTag');
|
|
}
|
|
|
|
public function clearCache()
|
|
{
|
|
foreach ($this->hook_support as $val) {
|
|
$this->_clearCache(''.$this->name.'.tpl', $val.'_'.$this->name);
|
|
}
|
|
}
|
|
|
|
public function hookActionShopDataDuplication($params)
|
|
{
|
|
$sql = 'SELECT gr.*
|
|
FROM `'._DB_PREFIX_.'leoslideshow_groups` gr
|
|
WHERE gr.`id_shop` = '.(int)$params['old_id_shop'];
|
|
$group_list = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
|
|
foreach ($group_list as $list) {
|
|
$mod_group = new LeoSlideshowGroup();
|
|
foreach ($list as $key => $value) {
|
|
if ($key != 'id' && $key != 'id_shop') {
|
|
$mod_group->{$key} = $value;
|
|
}
|
|
}
|
|
|
|
$mod_group->id_shop = (int)$params['new_id_shop'];
|
|
$mod_group->add();
|
|
|
|
//import slider
|
|
$slide_list = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('SELECT sl.id_leoslideshow_slides as id
|
|
FROM `'._DB_PREFIX_.'leoslideshow_slides` sl
|
|
WHERE sl.`id_group` = '.(int)$list['id_leoslideshow_groups']);
|
|
|
|
$fields = array('active', 'image', 'thumbnail', 'video', 'title', 'layersparams', 'title', 'position', 'link', 'params');
|
|
foreach ($slide_list as $key => $value) {
|
|
$mod_slide = new LeoSlideshowSlide($value['id']);
|
|
$mod_new_slide = new LeoSlideshowSlide();
|
|
$mod_new_slide->id_group = $mod_group->id;
|
|
foreach ($fields as $field) {
|
|
$mod_new_slide->{$field} = $mod_slide->{$field};
|
|
}
|
|
|
|
$mod_new_slide->add();
|
|
}
|
|
}
|
|
|
|
$this->clearCache();
|
|
}
|
|
|
|
public function headerHTML()
|
|
{
|
|
$media_dir = $this->getMediaDir();
|
|
|
|
if (Tools::getValue('controller') != 'AdminModules' && Tools::getValue('configure') != $this->name) {
|
|
return;
|
|
}
|
|
$this->context->controller->addCSS(__PS_BASE_URI__.$media_dir.'css/admin/style.css');
|
|
if (defined('_LEO_MODE_DEV_') && _LEO_MODE_DEV_ === true) {
|
|
if (file_exists(_PS_THEME_DIR_.'assets/css/modules/leoslideshow/views/css/typo/typo.css')) {
|
|
$this->context->controller->addCSS(_PS_THEME_DIR_.'assets/css/modules/leoslideshow/views/css/typo/typo.css');
|
|
} else {
|
|
$this->context->controller->addCSS(__PS_BASE_URI__.$media_dir.'css/typo/typo.css');
|
|
}
|
|
} else {
|
|
if (file_exists(_PS_THEME_DIR_.'assets/css/modules/leoslideshow/views/css/typo/typo.css')) {
|
|
$this->context->controller->addCSS(_PS_THEME_DIR_.'assets/css/modules/leoslideshow/views/css/typo/typo.css');
|
|
} else {
|
|
if (file_exists(_PS_THEME_DIR_.'modules/leoslideshow/views/css/typo/typo.css')) {
|
|
$this->context->controller->addCSS(_PS_THEME_DIR_.'modules/leoslideshow/views/css/typo/typo.css');
|
|
} else {
|
|
$this->context->controller->addCSS(__PS_BASE_URI__.$media_dir.'css/typo/typo.css');
|
|
}
|
|
}
|
|
}
|
|
|
|
$this->context->controller->addJS(_PS_JS_DIR_.'jquery/plugins/jquery.colorpicker.js');
|
|
$this->context->controller->addJS(__PS_BASE_URI__.$media_dir.'js/admin/script.js');
|
|
$this->context->controller->addJqueryUI('ui.core');
|
|
$this->context->controller->addJqueryUI('ui.widget');
|
|
$this->context->controller->addJqueryUI('ui.mouse');
|
|
$this->context->controller->addJqueryUI('ui.draggable');
|
|
$this->context->controller->addJqueryUI('ui.sortable');
|
|
$this->context->controller->addCSS(_PS_JS_DIR_.'jquery/ui/themes/ui-lightness/jquery-ui-1.8.16.custom.css');
|
|
$this->context->controller->addJqueryUI('ui.dialog');
|
|
$this->context->controller->addJqueryPlugin('cooki-plugin');
|
|
}
|
|
|
|
public function getNextPosition()
|
|
{
|
|
$sql = 'SELECT MAX(hss.`position`) AS `next_position`
|
|
FROM `'._DB_PREFIX_.''.$this->name.'_slides` hss, `'._DB_PREFIX_.''.$this->name.'` hs
|
|
WHERE hss.`id_'.$this->name.'_slides` = hs.`id_'.$this->name.'_slides` AND hs.`id_shop` = '.(int)$this->context->shop->id;
|
|
$row = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($sql);
|
|
|
|
return ( ++$row['next_position']);
|
|
}
|
|
|
|
public function displayGStatus($id_group, $active)
|
|
{
|
|
# Status Image
|
|
$title = ((int)$active == 0 ? $this->l('Click to Enabled') : $this->l('Click to Disabled'));
|
|
$img = ((int)$active == 0 ? 'disabled.gif' : 'enabled.gif');
|
|
|
|
# Status Link
|
|
if ($active == LeoSlideshowStatus::GROUP_STATUS_DISABLE) {
|
|
$change_group_status = LeoSlideshowStatus::GROUP_STATUS_ENABLE;
|
|
} elseif ($active == LeoSlideshowStatus::GROUP_STATUS_ENABLE) {
|
|
$change_group_status = LeoSlideshowStatus::GROUP_STATUS_DISABLE;
|
|
}
|
|
|
|
$this->context->smarty->assign(array(
|
|
'gstatus' => true,
|
|
'status_link' => $this->context->link->getAdminLink('AdminModules').'&configure='.$this->name.'&changeGStatus='.$change_group_status.'&id_group='.(int)$id_group,
|
|
'title' => $title,
|
|
'img_link' => _PS_ADMIN_IMG_.$img,
|
|
));
|
|
return $this->display(__FILE__, 'status.tpl');
|
|
}
|
|
|
|
public function displayStatus($id_slide, $active, $group_id, $slide)
|
|
{
|
|
# Status Image
|
|
$title = ((int)$active == 0 ? $this->l('Click to Enabled') : $this->l('Click to Disabled'));
|
|
$src_img = _PS_ADMIN_IMG_;
|
|
$mod_slide = new LeoSlideshowSlide();
|
|
$mod_slide->mergeSlider($slide)->mergeParams($this->slider_data);
|
|
|
|
if ($mod_slide->getStatusTime() == LeoSlideshowStatus::SLIDER_STATUS_DISABLE) {
|
|
$img = 'disabled.gif';
|
|
} elseif ($mod_slide->getStatusTime() == LeoSlideshowStatus::SLIDER_STATUS_ENABLE) {
|
|
$img = 'enabled.gif';
|
|
} elseif ($mod_slide->getStatusTime() == LeoSlideshowStatus::SLIDER_STATUS_COMING) {
|
|
$img = 'coming.png';
|
|
$src_img = _MODULE_DIR_.'leoslideshow/views/img/admin/';
|
|
}
|
|
|
|
# Status Link
|
|
if ($mod_slide->getStatusTime() == LeoSlideshowStatus::SLIDER_STATUS_DISABLE) {
|
|
$change_slide_status = LeoSlideshowStatus::SLIDER_STATUS_ENABLE;
|
|
} elseif ($mod_slide->getStatusTime() == LeoSlideshowStatus::SLIDER_STATUS_ENABLE) {
|
|
$change_slide_status = LeoSlideshowStatus::SLIDER_STATUS_DISABLE;
|
|
} elseif ($mod_slide->getStatusTime() == LeoSlideshowStatus::SLIDER_STATUS_COMING) {
|
|
$change_slide_status = LeoSlideshowStatus::SLIDER_STATUS_DISABLE;
|
|
}
|
|
|
|
$this->context->smarty->assign(array(
|
|
'status' => true,
|
|
'status_link' => $this->context->link->getAdminLink('AdminModules').'&configure='.$this->name.'&changeStatus='.$change_slide_status.'&sslider='.(int)$id_slide.'&showsliders=1&id_group='.(int)$group_id,
|
|
'title' => $title,
|
|
'img_link' => $src_img.$img,
|
|
));
|
|
|
|
return $this->display(__FILE__, 'status.tpl');
|
|
}
|
|
|
|
public function slideExists($id_slide)
|
|
{
|
|
$sql = 'SELECT `id_'.$this->name.'_slides`
|
|
FROM `'._DB_PREFIX_.''.$this->name.'_slides`
|
|
WHERE `id_'.$this->name.'_slides` = '.(int)$id_slide;
|
|
$row = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($sql);
|
|
return ($row);
|
|
}
|
|
|
|
protected function getCacheId($name = null, $hook = '')
|
|
{
|
|
$cache_array = array(
|
|
$name !== null ? $name : $this->name,
|
|
$hook,
|
|
date('Ymd'),
|
|
(int)Tools::usingSecureMode(),
|
|
(int)$this->context->shop->id,
|
|
(int)Group::getCurrent()->id,
|
|
(int)$this->context->language->id,
|
|
(int)$this->context->currency->id,
|
|
(int)$this->context->country->id,
|
|
(!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443)
|
|
);
|
|
return implode('|', $cache_array);
|
|
}
|
|
|
|
public function converParams($old_params = '')
|
|
{
|
|
$result = '';
|
|
if ($old_params != '') {
|
|
$data = Tools::unSerialize($old_params);
|
|
$result = LeoSlideshowSlide::base64Encode(Tools::jsonEncode($data));
|
|
}
|
|
return $result;
|
|
}
|
|
# ******************** SLIDE ********************
|
|
|
|
public function slideProcessAjax()
|
|
{
|
|
$result = array();
|
|
if (Tools::getValue('action') && Tools::getValue('action') == 'submitslider') {
|
|
# ACTION - edit slide
|
|
if (Tools::getValue('id_slide')) {
|
|
$mod_slide = new LeoSlideshowSlide((int)Tools::getValue('id_slide'));
|
|
$mod_slide->completeDatabase(array('lang' => true));
|
|
if (!Validate::isLoadedObject($mod_slide)) {
|
|
$this->l('Invalid id_slide');
|
|
return;
|
|
}
|
|
} else {
|
|
$mod_slide = new LeoSlideshowSlide();
|
|
}
|
|
|
|
$mod_slide->id_group = (int)Tools::getValue('id_group');
|
|
$mod_slide->position = (int)Tools::getValue('position');
|
|
$mod_slide->active = (int)Tools::getValue('active_slide');
|
|
$mod_slide->params = LeoSlideshowSlide::base64Encode(Tools::jsonEncode(Tools::getValue('slider')));
|
|
|
|
try {
|
|
$post_slide = Tools::getValue('slider');
|
|
$mod_slide->start_date_time = $post_slide['start_date_time'];
|
|
$mod_slide->end_date_time = $post_slide['end_date_time'];
|
|
$mod_slide->bullet_class = $post_slide['bullet_class'];
|
|
$mod_slide->id_group = $post_slide['group_id'];
|
|
|
|
$mod_slide->validate($this);
|
|
} catch (Exception $exc) {
|
|
$result = array('error' => 1, 'text' => $exc->getMessage());
|
|
$this->clearCache();
|
|
die(Tools::jsonEncode($result));
|
|
}
|
|
|
|
$languages = Language::getLanguages(false);
|
|
$tmp_data = array();
|
|
$tmp_back_color = '';
|
|
|
|
foreach ($languages as $language) {
|
|
$mod_slide->title[$language['id_lang']] = Tools::getValue('title_'.$language['id_lang']);
|
|
//get data default
|
|
$mod_slide->link[$language['id_lang']] = Tools::getValue('link_'.$language['id_lang']);
|
|
$mod_slide->image[$language['id_lang']] = Tools::getValue('image_'.$language['id_lang']);
|
|
$mod_slide->thumbnail[$language['id_lang']] = Tools::getValue('thumbnail_'.$language['id_lang']);
|
|
|
|
$video = array();
|
|
$video['usevideo'] = Tools::getValue('usevideo_'.$language['id_lang']);
|
|
$video['videoid'] = Tools::getValue('videoid_'.$language['id_lang']);
|
|
$video['videoauto'] = Tools::getValue('videoauto_'.$language['id_lang']);
|
|
$video['background_color'] = Tools::getValue('background_color_'.$language['id_lang']);
|
|
$video['bullet_description'] = Tools::getValue('bullet_description_'.$language['id_lang']);
|
|
|
|
if ($video['background_color'] == '' && !Tools::getValue('id_slide')) {
|
|
$video['background_color'] = $tmp_back_color;
|
|
} else {
|
|
$tmp_back_color = $video['background_color'];
|
|
}
|
|
|
|
$mod_slide->video[$language['id_lang']] = LeoSlideshowSlide::base64Encode(Tools::jsonEncode($video));
|
|
$layersparams = new stdClass();
|
|
$layersparams->layers = array();
|
|
|
|
if (Tools::getIsset('layers_'.$language['id_lang'])) {
|
|
$times = Tools::getValue('layer_time');
|
|
$layers = Tools::getValue('layers_'.$language['id_lang']);
|
|
|
|
foreach ($layers as $key => $value) {
|
|
$value['time_start'] = $times[$value['layer_id']];
|
|
//fix for php 5.2 and 5.3
|
|
$value['layer_caption'] = utf8_encode(str_replace(array('\'', '\"'), array("'", '"'), $value['layer_caption']));
|
|
$times[$value['layer_id']] = $value;
|
|
}
|
|
$k = 0;
|
|
foreach ($times as $key => $value) {
|
|
if (is_array($times) && $key == @$value['layer_id']) {
|
|
$value['layer_id'] = $language['id_lang'].'_'.($k + 1);
|
|
$layersparams->layers[$k] = $value;
|
|
$k++;
|
|
}
|
|
}
|
|
$mod_slide->layersparams[$language['id_lang']] = LeoSlideshowSlide::base64Encode(Tools::jsonEncode($layersparams->layers));
|
|
} else {
|
|
//when add new create sample data for other language
|
|
if (!Tools::getValue('id_slide') && isset($tmp_data['layersparams']) && $tmp_data['layersparams']) {
|
|
//set id again
|
|
foreach ($tmp_data['layersparams'] as &$tmp_layer) {
|
|
foreach ($tmp_layer as $key => &$value) {
|
|
if ($key == 'layer_id') {
|
|
$valu = explode('_', $value);
|
|
$value = str_replace($valu[0].'_', $language['id_lang'].'_', $value);
|
|
}
|
|
}
|
|
}
|
|
$mod_slide->layersparams[$language['id_lang']] = LeoSlideshowSlide::base64Encode(Tools::jsonEncode($tmp_data['layersparams']));
|
|
} else {
|
|
$mod_slide->layersparams[$language['id_lang']] = '';
|
|
}
|
|
}
|
|
|
|
//get data default if add new
|
|
if (!Tools::getValue('id_slide') && $mod_slide->title && empty($tmp_data)) {
|
|
$tmp_data['title'] = $mod_slide->title[$language['id_lang']];
|
|
$tmp_data['link'] = $mod_slide->link[$language['id_lang']];
|
|
$tmp_data['video'] = $mod_slide->video[$language['id_lang']];
|
|
$tmp_data['image'] = $mod_slide->image[$language['id_lang']];
|
|
$tmp_data['thumbnail'] = $mod_slide->image[$language['id_lang']];
|
|
$tmp_data['id_lang'] = $language['id_lang'];
|
|
$tmp_data['image'] = $mod_slide->image[$language['id_lang']];
|
|
}
|
|
if (!Tools::getValue('id_slide') && !isset($tmp_data['layersparams'])) {
|
|
$tmp_data['layersparams'] = $layersparams->layers;
|
|
}
|
|
}
|
|
|
|
if (!Tools::getValue('id_slide')) {
|
|
# ACTION - add SLIDE
|
|
|
|
if (LeoSlideshowConfig::getPermission() == false) {
|
|
# CHECK VERSION
|
|
$number_group = $mod_slide->count();
|
|
|
|
if ($number_group >= 2) {
|
|
$errors = $this->display(__FILE__, 'error_freemodule1.tpl');
|
|
$result = array('error' => 2, 'text' => $errors );
|
|
die(Tools::jsonEncode($result));
|
|
}
|
|
}
|
|
# add default image
|
|
foreach ($mod_slide->title as &$value) {
|
|
if ($value == '') {
|
|
$value = $tmp_data['title'];
|
|
}
|
|
}
|
|
|
|
foreach ($mod_slide->link as &$value) {
|
|
if ($value == '') {
|
|
$value = $tmp_data['link'];
|
|
}
|
|
}
|
|
|
|
foreach ($mod_slide->image as &$value) {
|
|
if ($value == '') {
|
|
$value = $tmp_data['image'];
|
|
}
|
|
}
|
|
|
|
foreach ($mod_slide->video as &$value) {
|
|
if ($value == '') {
|
|
$value = $tmp_data['video'];
|
|
}
|
|
}
|
|
|
|
if (!$mod_slide->add()) {
|
|
$result = array('error' => 1, 'text' => $this->l('The slide could not be added.'));
|
|
}
|
|
} elseif (!$mod_slide->update()) {
|
|
/* Update */
|
|
$result = array('error' => 1, 'text' => $this->l('The slide could not be updated.'));
|
|
}
|
|
$my_link = '&configure=leoslideshow&editSlider=1&id_slide='.$mod_slide->id.'&id_group='.$mod_slide->id_group.'&conf=4';
|
|
$result = array('error' => 0, 'text' => $my_link);
|
|
|
|
$this->clearCache();
|
|
die(Tools::jsonEncode($result));
|
|
}
|
|
|
|
if (Tools::getValue('action') && Tools::getValue('action') == 'updateSlidesPosition' && Tools::getValue('slides')) {
|
|
$slides = Tools::getValue('slides');
|
|
|
|
foreach ($slides as $position => $id_slide) {
|
|
$sql = 'UPDATE `'._DB_PREFIX_.'leoslideshow_slides` SET `position` = '.(int)$position.'
|
|
WHERE `id_leoslideshow_slides` = '.(int)$id_slide;
|
|
$result = Db::getInstance()->execute($sql);
|
|
}
|
|
$this->clearCache();
|
|
die(Tools::jsonEncode($result));
|
|
}
|
|
|
|
if (Tools::getValue('action') && Tools::getValue('action') == 'deleteSlider') {
|
|
$id_slide = Tools::getValue('id_slide');
|
|
$mod_slide = new LeoSlideshowSlide((int)$id_slide);
|
|
if (!$mod_slide->delete()) {
|
|
$result = array('error' => 1, 'text' => $this->l('The slide could not be delete.'));
|
|
}
|
|
|
|
$this->clearCache();
|
|
die(Tools::jsonEncode($result));
|
|
}
|
|
|
|
if (Tools::getValue('action') && Tools::getValue('action') == 'duplicateSlider') {
|
|
if (LeoSlideshowConfig::getPermission() == false) {
|
|
# CHECK VERSION
|
|
$mod_slide = new LeoSlideshowSlide();
|
|
$number_group = $mod_slide->count();
|
|
|
|
if ($number_group >= 2) {
|
|
$errors = $this->display(__FILE__, 'error_freemodule1.tpl');
|
|
|
|
$result = array('error' => 2, 'text' => $errors );
|
|
die(Tools::jsonEncode($result));
|
|
}
|
|
}
|
|
|
|
|
|
$mod_slide = new LeoSlideshowSlide((int)Tools::getValue('id_slide'));
|
|
$mod_new_slide = new LeoSlideshowSlide();
|
|
|
|
$defined = $mod_new_slide->getDefinition('LeoSlideshowSlide');
|
|
|
|
foreach ($defined['fields'] as $ke => $val) {
|
|
# module validation
|
|
unset($val);
|
|
|
|
if ($ke == 'id') {
|
|
continue;
|
|
}
|
|
|
|
if ($ke == 'title') {
|
|
$tmp = array();
|
|
foreach ($mod_slide->title as $kt => $vt) {
|
|
$tmp[$kt] = $this->l('Duplicate of').' '.$vt;
|
|
}
|
|
|
|
$mod_new_slide->{$ke} = $tmp;
|
|
} else {
|
|
$mod_new_slide->{$ke} = $mod_slide->{$ke};
|
|
}
|
|
}
|
|
if (!$mod_new_slide->add()) {
|
|
$result = array('error' => 1, 'text' => $this->l('The slide could not be duplicate.'));
|
|
}
|
|
|
|
$this->clearCache();
|
|
die(Tools::jsonEncode($result));
|
|
}
|
|
}
|
|
|
|
public function getSliderGroupById($id)
|
|
{
|
|
$this->context = Context::getContext();
|
|
$id_shop = $this->context->shop->id;
|
|
return Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('
|
|
SELECT *
|
|
FROM '._DB_PREFIX_.'leoslideshow_groups gr
|
|
WHERE gr.id_shop = '.(int)$id_shop.'
|
|
AND gr.id_leoslideshow_groups = '.(int)$id);
|
|
}
|
|
|
|
public function processHookCallBack($group_id)
|
|
{
|
|
$media_dir = $this->getMediaDir();
|
|
$this->context->controller->addJS($this->_path.'js/jquery.themepunch.enablelog.js');
|
|
$this->context->controller->addJS($this->_path.'js/jquery.themepunch.revolution.js');
|
|
//$this->context->controller->addJS($this->_path.'js/jquery.themepunch.revolution.min.js');
|
|
$this->context->controller->addJS($this->_path.'js/jquery.themepunch.tools.min.js');
|
|
$this->context->controller->addCSS(__PS_BASE_URI__.$media_dir.'css/typo/typo.css', 'all');
|
|
|
|
$slideshow_group_obj = new LeoSlideshowGroup($group_id);
|
|
|
|
if ($slideshow_group_obj->active_ap != 1) {
|
|
$slideshow_group_obj->hook = '';
|
|
$slideshow_group_obj->active_ap = 1;
|
|
$slideshow_group_obj->save();
|
|
}
|
|
|
|
$res = $this->prepareHookForApPageBuilder($group_id);
|
|
if (!$res) {
|
|
return false;
|
|
} elseif ($res === 2) {
|
|
return $this->l('If you load this Slideshow (not active) from ApPageBuilder module, please access ApPageBuilder module then delete it');
|
|
}
|
|
|
|
// return $this->display(__FILE__, ''.$this->name.'.tpl', $this->getCacheId($group_id.'_'.$this->name));
|
|
return $this->fetch('module:leoslideshow/views/templates/front/leoslideshow.tpl', $this->getCacheId($group_id.'_'.$this->name));
|
|
}
|
|
|
|
private function prepareHookForApPageBuilder($group_id)
|
|
{
|
|
$tpl = 'module:leoslideshow/views/templates/front/leoslideshow.tpl';
|
|
if (!$this->isCached($tpl, $this->getCacheId($group_id.'_'.$this->name))) {
|
|
if (!is_dir(_PS_ROOT_DIR_.'/cache/'.$this->name)) {
|
|
mkdir(_PS_ROOT_DIR_.'/cache/'.$this->name, 0755, true);
|
|
}
|
|
|
|
//get slider via hookname
|
|
$group = $this->getSliderGroupById($group_id);
|
|
if (!$group) {
|
|
return false;
|
|
} elseif ($group['active'] != 1) {
|
|
return 2;
|
|
}
|
|
$sliders = $this->getSlides($group['id_leoslideshow_groups'], 1);
|
|
$sliders = LeoSlideshowSlide::filterSlider($sliders, $this->slider_data);
|
|
if (!$sliders) {
|
|
return false;
|
|
}
|
|
|
|
$slider_params = Tools::jsonDecode(LeoSlideshowSlide::base64Decode($group['params']), true);
|
|
$slider_params = array_merge($group, $slider_params);
|
|
$slider_params = array_merge($this->group_data, $slider_params);
|
|
$mod_group = new LeoSlideshowGroup();
|
|
$mod_group->setModule($this);
|
|
$slider_params = $mod_group->setData($slider_params)->beforeLoad()->loadFrontEnd();
|
|
|
|
if (isset($slider_params['fullwidth']) && (!empty($slider_params['fullwidth']) || $slider_params['fullwidth'] == 'boxed')) {
|
|
$slider_params['image_cropping'] = false;
|
|
}
|
|
|
|
$slider_params['hide_navigator_after'] = $slider_params['show_navigator'] ? 0 : $slider_params['hide_navigator_after'];
|
|
$slider_params['slider_class'] = trim(isset($slider_params['fullwidth']) && !empty($slider_params['fullwidth']) ? $slider_params['fullwidth'] : 'boxed');
|
|
$slider_fullwidth = $slider_params['slider_class'] == 'boxed' ? 'off' : 'on';
|
|
|
|
// generate back-ground
|
|
if ($slider_params['background_image'] && $slider_params['background_url'] && file_exists($this->img_path.$slider_params['background_url'])) {
|
|
$slider_params['background'] = 'background: url('.$this->img_url.$slider_params['background_url'].') no-repeat scroll left 0 '.$slider_params['background_color'].';';
|
|
} else {
|
|
$slider_params['background'] = 'background-color:'.$slider_params['background_color'];
|
|
}
|
|
|
|
//include library genimage
|
|
if (!class_exists('PhpThumbFactory')) {
|
|
require_once _PS_MODULE_DIR_.'leoslideshow/libs/phpthumb/ThumbLib.inc.php';
|
|
}
|
|
|
|
$white_main_img = __PS_BASE_URI__.'modules/'.$this->name.'/views/img/white50.png';
|
|
|
|
//process slider
|
|
|
|
foreach ($sliders as $key => $slider) {
|
|
$slider['layers'] = array();
|
|
$slider['params'] = array_merge($this->slider_data, Tools::jsonDecode(LeoSlideshowSlide::base64Decode($slider['params']), true));
|
|
$slider['layersparams'] = Tools::jsonDecode(LeoSlideshowSlide::base64Decode($slider['layersparams']), true);
|
|
$slider['video'] = Tools::jsonDecode(LeoSlideshowSlide::base64Decode($slider['video']), true);
|
|
|
|
$slider['data_link'] = '';
|
|
if ($slider['params']['enable_link'] && $slider['link']) {
|
|
// $slider['data_link'] = 'data-link="'.$slider['link'].'"';
|
|
// $slider['data_target'] = 'data-target="'.LeoSlideshowSlide::renderTarget($slider['params']['target']).'"';
|
|
$slider['data_link'] = $slider['link'];
|
|
$slider['data_target'] = LeoSlideshowSlide::renderTarget($slider['params']['target']);
|
|
} else {
|
|
$slider['data_target'] = '';
|
|
}
|
|
|
|
$slider['data_delay'] = (int)$slider['params']['delay'];
|
|
|
|
//videoURL
|
|
$slider['videoURL'] = '';
|
|
$slider['video']['active'] = '0';
|
|
if ($slider['video']['usevideo'] == 'youtube' || $slider['video']['usevideo'] == 'vimeo') {
|
|
$slider['video']['active'] = '1';
|
|
$slider['video']['videoURL'] = Tools::getCurrentUrlProtocolPrefix() . 'player.vimeo.com/video/'.$slider['video']['videoid'].'/';
|
|
if ($slider['video']['usevideo'] == 'youtube') {
|
|
$slider['video']['videoURL'] = Tools::getCurrentUrlProtocolPrefix() . 'www.youtube.com/embed/'.$slider['video']['videoid'].'/';
|
|
}
|
|
}
|
|
|
|
$slider['background_color'] = '';
|
|
if (isset($slider_params['background_color']) && $slider_params['background_color']) {
|
|
$slider['background_color'] = $slider_params['background_color'];
|
|
}
|
|
if (isset($slider['video']['background_color']) && $slider['video']['background_color']) {
|
|
$slider['background_color'] = $slider['video']['background_color'];
|
|
}
|
|
|
|
LeoSlideshowSlide::getBackground($slider_params, $slider);
|
|
|
|
if ($slider['image'] == '') {
|
|
$slider['image'] = 'views/img/blank.gif';
|
|
}
|
|
|
|
if ($slider_params['image_cropping']) {
|
|
//gender main_image
|
|
if ($slider['image'] && file_exists($this->img_path.$slider['image'])) {
|
|
$slider['main_image'] = $this->renderThumb($slider['image'], $slider_params['width'], $slider_params['height']);
|
|
} else {
|
|
$slider['main_image'] = $white_main_img;
|
|
}
|
|
|
|
if ($slider['thumbnail'] && file_exists($this->img_path.$slider['thumbnail'])) {
|
|
# module validation
|
|
//$slider['thumbnail'] = $this->renderThumb($slider['thumbnail'], $sliderParams['thumbnail_width'], $sliderParams['thumbnail_height']);
|
|
} else if ($slider['image'] && file_exists($this->img_path.$slider['image'])) {
|
|
# module validation
|
|
//$slider['thumbnail'] = $this->renderThumb($slider['image'], $sliderParams['thumbnail_width'], $sliderParams['thumbnail_height']);
|
|
} else {
|
|
$slider['thumbnail'] = $white_main_img;
|
|
}
|
|
} else {
|
|
$slider['main_image'] = __PS_BASE_URI__.'modules/leoslideshow'.'/views/img/blank.gif';
|
|
|
|
if ($slider['image'] && file_exists($this->img_path.$slider['image'])) {
|
|
$slider['main_image'] = $this->img_url.$slider['image'];
|
|
}else if (((Tools::substr($slider['image'], 0, 7) == 'http://')) || ((Tools::substr($slider['image'], 0, 8) == 'https://')) || ((Tools::substr($slider['image'], 0, 10) == 'data:image'))) {
|
|
# Image External Link
|
|
$slider['main_image'] = $slider['image'];
|
|
}
|
|
|
|
if ($slider['thumbnail'] && file_exists($this->img_path.$slider['thumbnail'])) {
|
|
$slider['thumbnail'] = $this->img_url.$slider['thumbnail'];
|
|
} else if ($slider['image'] && file_exists($this->img_path.$slider['image'])) {
|
|
$slider['thumbnail'] = $slider['main_image'];
|
|
}else if (((Tools::substr($slider['thumbnail'], 0, 7) == 'http://')) || ((Tools::substr($slider['thumbnail'], 0, 8) == 'https://')) || ((Tools::substr($slider['thumbnail'], 0, 10) == 'data:image'))) {
|
|
# Image External Link
|
|
$slider['thumbnail'] = $slider['thumbnail'];
|
|
} else {
|
|
$slider['thumbnail'] = $white_main_img;
|
|
}
|
|
}
|
|
|
|
if ($slider['layersparams']) {
|
|
foreach ($slider['layersparams'] as $k => &$layer_css) {
|
|
if ($layer_css['layer_status'] == 0) {
|
|
unset($slider['layersparams'][$k]);
|
|
continue;
|
|
}
|
|
|
|
$layer_css_val = '';
|
|
if (isset($layer_css['layer_font_size']) && $layer_css['layer_font_size']) {
|
|
$layer_css_val = 'font-size:'.$layer_css['layer_font_size'];
|
|
}
|
|
if (isset($layer_css['layer_background_color']) && $layer_css['layer_background_color']) {
|
|
$layer_css_val .= ($layer_css_val != '' ? ';' : '').'background-color:'.$layer_css['layer_background_color'];
|
|
}
|
|
if (isset($layer_css['layer_color']) && $layer_css['layer_color']) {
|
|
$layer_css_val .= ($layer_css_val != '' ? ';' : '').'color:'.$layer_css['layer_color'];
|
|
}
|
|
$layer_css['css'] = $layer_css_val;
|
|
if (!isset($layer_css['layer_link'])) {
|
|
$layer_css['layer_link'] = $slider['link'];
|
|
} else {
|
|
$layer_css['layer_link'] = str_replace('_ASM_', '&', $layer_css['layer_link']);
|
|
}
|
|
|
|
$layer_css['layer_target'] = LeoSlideshowSlide::renderTarget($layer_css['layer_target']);
|
|
if (isset($layer_css['layer_caption']) && $layer_css['layer_caption']) {
|
|
$layer_css['layer_caption'] = utf8_decode($layer_css['layer_caption']);
|
|
}
|
|
|
|
if (isset($layer_css['layer_type']) && $layer_css['layer_type'] == 'image') {
|
|
if (((Tools::substr($layer_css['layer_content'], 0, 4) != 'http')) && ((Tools::substr($layer_css['layer_content'], 0, 8) != 'data:image'))) {
|
|
$layer_css['layer_content'] = $this->img_url. $layer_css['layer_content'];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
$sliders[$key] = $slider;
|
|
}
|
|
$slider_params['start_with_slide'] = LeoSlideshowGroup::showStartWithSlide($slider_params['start_with_slide'], $sliders);
|
|
$sliders = LeoSlideshowSlide::showBulletCustomHTML($slider_params, $sliders);
|
|
$slider_params['rtl'] = $this->context->language->is_rtl;
|
|
|
|
if (!isset($this->load_from_appagebuilder)) {
|
|
// Default load via appabuilder
|
|
$this->load_from_appagebuilder = 1;
|
|
}
|
|
$this->smarty->assign(array(
|
|
'sliderParams' => $slider_params,
|
|
'sliders' => $sliders,
|
|
'sliderIDRand' => rand(20, rand()),
|
|
'sliderFullwidth' => $slider_fullwidth,
|
|
'sliderImgUrl' => $this->img_url,
|
|
'load_from_appagebuilder' => $this->load_from_appagebuilder,
|
|
'rand_num' => uniqid(),
|
|
));
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Run only one when install/change Theme_of_Leo
|
|
*/
|
|
public function hookActionAdminBefore($params)
|
|
{
|
|
if (isset($params) && isset($params['controller']) && isset($params['controller']->theme_manager)) {
|
|
// Validate : call hook from theme_manager
|
|
} else {
|
|
// Other module call this hook -> duplicate data
|
|
return;
|
|
}
|
|
|
|
$this->unregisterHook('actionAdminBefore');
|
|
|
|
# FIX : update Prestashop by 1-Click module -> NOT NEED RESTORE DATABASE
|
|
$ap_version = Configuration::get('AP_CURRENT_VERSION');
|
|
if ($ap_version != false) {
|
|
$ps_version = Configuration::get('PS_VERSION_DB');
|
|
$versionCompare = version_compare($ap_version, $ps_version);
|
|
if ($versionCompare != 0) {
|
|
// Just update Prestashop
|
|
Configuration::updateValue('AP_CURRENT_VERSION', $ps_version);
|
|
return;
|
|
}
|
|
}
|
|
|
|
# WHENE INSTALL THEME, INSERT HOOK FROM DATASAMPLE IN THEME
|
|
$hook_from_theme = false;
|
|
if (file_exists(_PS_MODULE_DIR_.'appagebuilder/libs/LeoDataSample.php')) {
|
|
require_once(_PS_MODULE_DIR_.'appagebuilder/libs/LeoDataSample.php');
|
|
$sample = new Datasample();
|
|
if ($sample->processHook($this->name)) {
|
|
$hook_from_theme = true;
|
|
};
|
|
}
|
|
|
|
# INSERT HOOK FROM MODULE_DATASAMPLE
|
|
if ($hook_from_theme == false) {
|
|
$this->registerLeoHook();
|
|
}
|
|
|
|
# WHEN INSTALL MODULE, NOT NEED RESTORE DATABASE IN THEME
|
|
$install_module = (int)Configuration::get('AP_INSTALLED_LEOSLIDESHOW', 0);
|
|
if ($install_module) {
|
|
Configuration::updateValue('AP_INSTALLED_LEOSLIDESHOW', '0'); // next : allow restore sample
|
|
return;
|
|
}
|
|
|
|
# INSERT DATABASE FROM THEME_DATASAMPLE
|
|
if (file_exists(_PS_MODULE_DIR_.'appagebuilder/libs/LeoDataSample.php')) {
|
|
require_once(_PS_MODULE_DIR_.'appagebuilder/libs/LeoDataSample.php');
|
|
$sample = new Datasample();
|
|
$sample->processImport($this->name);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Common method
|
|
* Resgister all hook for module
|
|
*/
|
|
public function registerLeoHook()
|
|
{
|
|
$res = true;
|
|
$res &= $this->registerHook('header');
|
|
$res &= $this->registerHook('actionShopDataDuplication');
|
|
foreach ($this->hook_support as $value) {
|
|
$res &= $this->registerHook($value);
|
|
}
|
|
# Multishop create new shop
|
|
$res &= $this->registerHook('actionAdminShopControllerSaveAfter');
|
|
$res &= $this->registerHook('actionAdminControllerSetMedia');
|
|
|
|
return $res;
|
|
}
|
|
|
|
/**
|
|
* Common method
|
|
* Unresgister all hook for module
|
|
*/
|
|
public function unregisterLeoHook()
|
|
{
|
|
$res = true;
|
|
$res &= $this->unregisterHook('header');
|
|
$res &= $this->unregisterHook('actionShopDataDuplication');
|
|
foreach ($this->hook_support as $value) {
|
|
$res &= $this->unregisterHook($value);
|
|
}
|
|
$res &= $this->unregisterHook('actionAdminShopControllerSaveAfter');
|
|
$res &= $this->unregisterHook('actionAdminControllerSetMedia');
|
|
return $res;
|
|
}
|
|
|
|
/**
|
|
* @Action Create new shop, choose theme then auto restore datasample.
|
|
*/
|
|
public function hookActionAdminShopControllerSaveAfter($param)
|
|
{
|
|
if (Tools::getIsset('controller') !== false && Tools::getValue('controller') == 'AdminShop'
|
|
&& Tools::getIsset('submitAddshop') !== false && Tools::getValue('submitAddshop')
|
|
&& Tools::getIsset('theme_name') !== false && Tools::getValue('theme_name')) {
|
|
$shop = $param['return'];
|
|
|
|
if (file_exists(_PS_MODULE_DIR_.'appagebuilder/libs/LeoDataSample.php')) {
|
|
require_once(_PS_MODULE_DIR_.'appagebuilder/libs/Helper.php');
|
|
require_once(_PS_MODULE_DIR_.'appagebuilder/libs/LeoDataSample.php');
|
|
$sample = new Datasample();
|
|
apPageHelper::$id_shop = $shop->id;
|
|
$sample->_id_shop = $shop->id;
|
|
$sample->processImport('leoslideshow');
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Add the CSS & JavaScript files you want to be loaded in the BO.
|
|
*/
|
|
public function hookActionAdminControllerSetMedia()
|
|
{
|
|
$this->autoRestoreSampleData();
|
|
}
|
|
|
|
public function processCMS()
|
|
{
|
|
$cms = $this->smarty->smarty->getVariable('cms')->value;
|
|
$cms['content'] = $this->doShortCode($cms['content']);
|
|
$this->smarty->smarty->assign('cms', $cms);
|
|
}
|
|
|
|
public function getContentCMS($atts, $content = null)
|
|
{
|
|
$group_id = isset($atts['group_id']) ? (int)$atts['group_id'] : 0;
|
|
$id_shop = (int)Context::getContext()->shop->id;
|
|
|
|
$where = ' WHERE id_leoslideshow_groups = '.(int)$group_id.' AND id_shop = ' . (int)$id_shop;
|
|
$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('SELECT id_leoslideshow_groups FROM `'._DB_PREFIX_.'leoslideshow_groups` '.$where);
|
|
|
|
|
|
if (is_array($result) && !empty($result)) {
|
|
$str_group_id = '';
|
|
foreach ($result as $slide) {
|
|
$str_group_id .= ($str_group_id == '') ? $slide['id_leoslideshow_groups'] : ','.$slide['id_leoslideshow_groups'];
|
|
}
|
|
$this->load_from_appagebuilder = 0;
|
|
$content = $this->processHookCallBack($str_group_id);
|
|
} else {
|
|
$content = $this->display(__FILE__, 'cms_error.tpl');
|
|
}
|
|
|
|
return $content;
|
|
}
|
|
|
|
public static function doShortCode($content, $hook_name = '')
|
|
{
|
|
// validate module
|
|
unset($hook_name);
|
|
$pattern = '\[(\[?)(leoslideshow)(?![\w-])([^\]\/]*(?:\/(?!\])[^\]\/]*)*?)(?:(\/)\]|\](?:([^\[]*+(?:\[(?!\/\2\])[^\[]*+)*+)\[\/\2\])?)(\]?)';
|
|
return preg_replace_callback("/$pattern/s", array(__CLASS__, 'doShortCodeTag'), $content);
|
|
}
|
|
public static function doShortCodeTag($m)
|
|
{
|
|
$attr = self::doShortcodeParseAtts($m[3]);
|
|
if (isset($m[5])) {
|
|
return $m[1] . call_user_func(array(new LeoSlideshow(), 'getContentCMS'), $attr, $m[5]) . $m[6];
|
|
} else {
|
|
return $m[1] . call_user_func(array(new LeoSlideshow(), 'getContentCMS'), $attr, null) . $m[6];
|
|
}
|
|
}
|
|
|
|
public static function doShortcodeParseAtts($text)
|
|
{
|
|
$atts = array();
|
|
$pattern = '/(\w+)\s*=\s*"([^"]*)"(?:\s|$)|(\w+)\s*=\s*\'([^\']*)\'(?:\s|$)|(\w+)\s*=\s*([^\s\'"]+)(?:\s|$)|"([^"]*)"(?:\s|$)|(\S+)(?:\s|$)/';
|
|
$text = preg_replace("/[\x{00a0}\x{200b}]+/u", " ", $text);
|
|
if (preg_match_all($pattern, $text, $match, PREG_SET_ORDER)) {
|
|
foreach ($match as $m) {
|
|
if (!empty($m[1])) {
|
|
$atts[Tools::strtolower($m[1])] = stripcslashes($m[2]);
|
|
} elseif (!empty($m[3])) {
|
|
$atts[Tools::strtolower($m[3])] = stripcslashes($m[4]);
|
|
} elseif (!empty($m[5])) {
|
|
$atts[Tools::strtolower($m[5])] = stripcslashes($m[6]);
|
|
} elseif (isset($m[7]) and Tools::strlen($m[7])) {
|
|
$atts[] = stripcslashes($m[7]);
|
|
} elseif (isset($m[8])) {
|
|
$atts[] = stripcslashes($m[8]);
|
|
}
|
|
}
|
|
} else {
|
|
$atts = ltrim($text);
|
|
}
|
|
return $atts;
|
|
}
|
|
|
|
// public function isCached($template, $cache_id = null, $compile_id = null)
|
|
// {
|
|
// if (version_compare(_PS_VERSION_, '1.7.4.0', '>=') || version_compare(Configuration::get('PS_VERSION_DB'), '1.7.4.0', '>=')) {
|
|
// return false;
|
|
// }
|
|
// return parent::isCached($template, $cache_id, $compile_id);
|
|
// }
|
|
|
|
/**
|
|
* FIX BUG 1.7.3.3 : install theme lose hook displayHome, displayLeoProfileProduct
|
|
* because ajax not run hookActionAdminBefore();
|
|
*/
|
|
public function autoRestoreSampleData()
|
|
{
|
|
if (Hook::isModuleRegisteredOnHook($this, 'actionAdminBefore', (int)Context::getContext()->shop->id)) {
|
|
$theme_manager = new stdclass();
|
|
$theme_manager->theme_manager = 'theme_manager';
|
|
$this->hookActionAdminBefore(array(
|
|
'controller' => $theme_manager,
|
|
));
|
|
}
|
|
}
|
|
|
|
//DONGND:: update direction css, js, img for 1.7.4.0
|
|
public function getMediaDir()
|
|
{
|
|
$media_dir = '';
|
|
if (version_compare(_PS_VERSION_, '1.7.4.0', '>=') || version_compare(Configuration::get('PS_VERSION_DB'), '1.7.4.0', '>=')) {
|
|
$media_dir = 'modules/'.$this->name.'/views/';
|
|
} else {
|
|
$media_dir = 'modules/'.$this->name.'/';
|
|
}
|
|
return $media_dir;
|
|
}
|
|
|
|
private function exportGroup()
|
|
{
|
|
$id_group = (int)Tools::getValue('id_group');
|
|
|
|
$group = LeoSlideshowGroup::getGroupByID($id_group);
|
|
$sliders = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
|
|
SELECT lsll.`id_lang`, lsl.`id_leoslideshow_slides` as id, lsl.*,lsll.*
|
|
FROM '._DB_PREFIX_.'leoslideshow_slides lsl
|
|
LEFT JOIN '._DB_PREFIX_.'leoslideshow_slides_lang lsll ON (lsl.id_leoslideshow_slides = lsll.id_leoslideshow_slides)
|
|
WHERE lsl.id_group = '.(int)$id_group.'
|
|
ORDER BY lsl.position');
|
|
|
|
$language_field = array('title', 'link', 'image', 'thumbnail', 'video', 'layersparams');
|
|
|
|
$languages = Language::getLanguages();
|
|
$lang_list = array();
|
|
foreach ($languages as $lang) {
|
|
# module validation
|
|
$lang_list[$lang['id_lang']] = $lang['iso_code'];
|
|
}
|
|
|
|
foreach ($sliders as $slider) {
|
|
$curent_lang = 'en';
|
|
foreach ($slider as $key => $value) {
|
|
if ($key == 'id_lang') {
|
|
$curent_lang = $lang_list[$value];
|
|
continue;
|
|
}
|
|
if (in_array($key, $language_field)) {
|
|
$group['sliders'][$slider['id']][$key][$curent_lang] = $value;
|
|
} else {
|
|
# module validation
|
|
$group['sliders'][$slider['id']][$key] = $value;
|
|
}
|
|
}
|
|
}
|
|
header('Content-Type: plain/text');
|
|
header('Content-Disposition: Attachment; filename=export_group_'.Tools::getValue('id_group').'_'.time().'.txt');
|
|
header('Pragma: no-cache');
|
|
die(LeoSlideshowSlide::base64Encode(Tools::jsonEncode($group)));
|
|
}
|
|
|
|
/**
|
|
* PERMISSION ACCOUNT demo@demo.com
|
|
*/
|
|
public function getPermission($variable, $employee = null)
|
|
{
|
|
if ($variable == 'configure') {
|
|
// Allow see form if permission is : configure, view
|
|
$configure = Module::getPermissionStatic($this->id, 'configure', $employee);
|
|
$view = Module::getPermissionStatic($this->id, 'view', $employee);
|
|
return ($configure || $view);
|
|
}
|
|
|
|
return Module::getPermissionStatic($this->id, $variable, $employee);
|
|
}
|
|
|
|
/**
|
|
* PERMISSION ACCOUNT demo@demo.com
|
|
*/
|
|
public function access($action)
|
|
{
|
|
$employee = null;
|
|
return Module::getPermissionStatic($this->id, $action, $employee);
|
|
}
|
|
}
|