2703 lines
115 KiB
PHP
2703 lines
115 KiB
PHP
<?php
|
|
/**
|
|
* 2007-2015 Leotheme
|
|
*
|
|
* NOTICE OF LICENSE
|
|
*
|
|
* Leo Bootstrap Menu
|
|
*
|
|
* DISCLAIMER
|
|
*
|
|
* @author leotheme <leotheme@gmail.com>
|
|
* @copyright 2007-2015 Leotheme
|
|
* @license http://leotheme.com - prestashop template provider
|
|
*/
|
|
|
|
if (!defined('_PS_VERSION_')) {
|
|
# module validation
|
|
exit;
|
|
}
|
|
|
|
use PrestaShop\PrestaShop\Core\Module\WidgetInterface;
|
|
|
|
include_once(_PS_MODULE_DIR_.'leobootstrapmenu/classes/Btmegamenu.php');
|
|
include_once(_PS_MODULE_DIR_.'leobootstrapmenu/classes/BtmegamenuGroup.php');
|
|
include_once(_PS_MODULE_DIR_.'leobootstrapmenu/libs/Helper.php');
|
|
require_once(_PS_MODULE_DIR_.'leobootstrapmenu/classes/widgetbase.php');
|
|
require_once(_PS_MODULE_DIR_.'leobootstrapmenu/classes/widget.php');
|
|
//include_once(_PS_MODULE_DIR_.'leobootstrapmenu/leobootstrapmenuAdmin.php');
|
|
//class Leobootstrapmenu extends LeobootstrapmenuAdmin implements WidgetInterface
|
|
|
|
class Leobootstrapmenu extends Module implements WidgetInterface
|
|
{
|
|
private $html = '';
|
|
public $widget;
|
|
public $theme_name;
|
|
private $current_group = array('id_group' => 0, 'title' => '', 'group_type' => '');
|
|
public $group_data = array(
|
|
'id_btmegamenu_group' => '',
|
|
'title' => null,
|
|
'id_shop' => '',
|
|
'hook' => '',
|
|
'active' => '',
|
|
'group_type' => '',
|
|
'show_cavas' => '',
|
|
'type_sub' => '',
|
|
'group_class' => '',
|
|
);
|
|
|
|
private $hook_support = array(
|
|
'displayTop',
|
|
'displayNav1',
|
|
'displayNav2',
|
|
'displayNavFullWidth',
|
|
'displayLeftColumn',
|
|
'displayHome',
|
|
'displayRightColumn',
|
|
'displayFooterBefore',
|
|
'displayFooter',
|
|
'displayFooterAfter',
|
|
'displayLeftColumnProduct',
|
|
'displayFooterProduct',
|
|
'displayRightColumnProduct',
|
|
'displayProductButtons',
|
|
'displayReassurance');
|
|
|
|
public function __construct()
|
|
{
|
|
$this->name = 'leobootstrapmenu';
|
|
$this->tab = 'front_office_features';
|
|
$this->version = '4.2.0';
|
|
$this->author = 'LeoTheme';
|
|
$this->need_instance = 0;
|
|
$this->bootstrap = true;
|
|
$this->controllers = array('widget');
|
|
$this->secure_key = Tools::encrypt($this->name);
|
|
|
|
parent::__construct();
|
|
|
|
|
|
$this->displayName = $this->l('Leo Bootstrap Megamenu');
|
|
$this->description = $this->l('Leo Bootstrap Megamenu Support Leo Framework Version 4.0.0');
|
|
$this->theme_name = Context::getContext()->shop->theme->getName();
|
|
$this->img_path = _PS_ALL_THEMES_DIR_.$this->theme_name.'/'.$this->getThemeMediaDir('img').'/img/icons/';
|
|
|
|
$this->widget = new LeoWidget();
|
|
}
|
|
|
|
public function install()
|
|
{
|
|
/* Adds Module */
|
|
if (parent::install() &&
|
|
Configuration::updateValue('BTMEGAMENU_iscache', 1)
|
|
&& Configuration::updateValue('BTMEGAMENU_cachetime', 24)
|
|
&& Configuration::updateValue('BTMEGAMENU_CAVAS', 0)
|
|
&& Configuration::updateValue('BTMEGAMENU_GROUP_DE', '')
|
|
&& Configuration::updateValue('BTMEGAMENU_CLEARCACHE_HOOK', '')
|
|
&& Configuration::updateValue('BTMEGAMENU_ADD_HOOK', 1)
|
|
&& Configuration::updateValue('BTMEGAMENU_CURRENT_SHOP', '')
|
|
&& $this->registerLeoHook()) {
|
|
$res = true;
|
|
$res &= $this->createTables();
|
|
foreach (LeoBtmegamenuHelper::getModuleTabs() as $tab) {
|
|
$newtab = new Tab();
|
|
$newtab->class_name = $tab['class_name'];
|
|
$newtab->id_parent = isset($tab['id_parent']) ? $tab['id_parent'] : 0;
|
|
$newtab->module = 'leobootstrapmenu';
|
|
foreach (Language::getLanguages(false) as $l) {
|
|
$newtab->name[$l['id_lang']] = $this->l($tab['name']);
|
|
}
|
|
$res &= $newtab->save();
|
|
}
|
|
|
|
Configuration::updateValue('AP_INSTALLED_LEOBOOTSTRAPMENU', '1');
|
|
return (bool)$res;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public function uninstall()
|
|
{
|
|
if (parent::uninstall() && $this->unregisterLeoHook()) {
|
|
foreach (LeoBtmegamenuHelper::getModuleTabs() as $tab) {
|
|
$id = Tab::getIdFromClassName($tab['class_name']);
|
|
if ($id) {
|
|
$tab = new Tab($id);
|
|
$tab->delete();
|
|
}
|
|
}
|
|
|
|
$res = $this->deleteTables();
|
|
|
|
Configuration::deleteByName('BTMEGAMENU_iscache');
|
|
Configuration::deleteByName('BTMEGAMENU_cachetime');
|
|
Configuration::deleteByName('BTMEGAMENU_CAVAS');
|
|
Configuration::deleteByName('BTMEGAMENU_GROUP_DE');
|
|
Configuration::deleteByName('BTMEGAMENU_CLEARCACHE_HOOK');
|
|
Configuration::deleteByName('BTMEGAMENU_ADD_HOOK');
|
|
Configuration::deleteByName('BTMEGAMENU_CURRENT_SHOP');
|
|
|
|
return $res;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public function deleteTables()
|
|
{
|
|
return Db::getInstance()->execute('
|
|
DROP TABLE IF EXISTS
|
|
`'._DB_PREFIX_.'btmegamenu`,
|
|
`'._DB_PREFIX_.'btmegamenu_lang`,
|
|
`'._DB_PREFIX_.'btmegamenu_shop`,
|
|
`'._DB_PREFIX_.'btmegamenu_widgets`,
|
|
`'._DB_PREFIX_.'btmegamenu_group`,
|
|
`'._DB_PREFIX_.'btmegamenu_group_lang`
|
|
');
|
|
}
|
|
|
|
protected function createTables()
|
|
{
|
|
if ($this->installDataSample()) {
|
|
return true;
|
|
}
|
|
$res = 1;
|
|
include_once(dirname(__FILE__).'/install/install.php');
|
|
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');
|
|
|
|
$sample = new Datasample(1);
|
|
return $sample->processImport($this->name);
|
|
}
|
|
|
|
public function lazydatabase()
|
|
{
|
|
$sql = ' SELECT * FROM '._DB_PREFIX_.'btmegamenu_widgets WHERE id_shop='.$this->context->shop->id;
|
|
$result = Db::getInstance()->executes($sql);
|
|
|
|
foreach ($result as &$value) {
|
|
$params = Tools::jsonDecode(call_user_func('base64'.'_decode', $value['params']), true);
|
|
|
|
foreach ($params as $key => $param) {
|
|
if (is_string($param) && strpos($param, '<img') !== false) {
|
|
preg_match_all('/<img[^>]+>/i', $param, $imgs);
|
|
$icheck = 0;
|
|
|
|
foreach ($imgs[0] as $img) {
|
|
//if have lazy break
|
|
if (strpos($img, 'lazy') === false && strpos($img, 'lazyOwl') === false && strpos($img, 'data-src') === false) {
|
|
$imga = str_replace('src', 'data-src', $img);
|
|
|
|
//has class add more class
|
|
if (strpos($imga, "class") !== false) {
|
|
$imga = str_replace('class="', 'class="lazy ', $imga);
|
|
$imga = str_replace("class='", "class='lazy ", $imga);
|
|
} else {
|
|
$imga = str_replace('<img', '<img class="lazy"', $imga);
|
|
}
|
|
$icheck = 1;
|
|
$params[$key] = str_replace($img, $imga, $params[$key]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($icheck) {
|
|
$model = new LeoWidget($value['id_btmegamenu_widgets']);
|
|
$model->params = call_user_func('base64'.'_encode', Tools::jsonEncode($params));
|
|
|
|
$model->save();
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
public function lazyrolbackdatabase()
|
|
{
|
|
$sql = ' SELECT * FROM '._DB_PREFIX_.'btmegamenu_widgets WHERE id_shop='.$this->context->shop->id;
|
|
$result = Db::getInstance()->executes($sql);
|
|
foreach ($result as &$value) {
|
|
$params = Tools::jsonDecode(call_user_func('base64'.'_decode', $value['params']), true);
|
|
|
|
foreach ($params as $key => $param) {
|
|
if (is_string($param) && strpos($param, '<img') !== false) {
|
|
preg_match_all('/<img[^>]+>/i', $param, $imgs);
|
|
$icheck = 0;
|
|
|
|
foreach ($imgs[0] as $img) {
|
|
//if have lazy break
|
|
if (strpos($img, 'lazy ') !== false || strpos($img, '"lazy') !== false || strpos($img, "'lazy") !== false || strpos($img, " lazy") !== false) {
|
|
$imga = str_replace('data-src', 'src', $img);
|
|
$imga = str_replace('<img class="lazy"', '<img', $imga);
|
|
$imga = str_replace('lazy ', '', $imga);
|
|
$imga = str_replace(' lazy', '', $imga);
|
|
|
|
$icheck = 1;
|
|
|
|
$params[$key] = str_replace($img, $imga, $params[$key]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($icheck) {
|
|
$model = new LeoWidget($value['id_btmegamenu_widgets']);
|
|
$model->params = call_user_func('base64'.'_encode', Tools::jsonEncode($params));
|
|
|
|
$model->save();
|
|
}
|
|
}
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
//remove current id group and update current shop when change shop
|
|
if (Configuration::get('BTMEGAMENU_GROUP_DE') != '') {
|
|
$check_group_exist = new BtmegamenuGroup(Configuration::get('BTMEGAMENU_GROUP_DE'));
|
|
if ($check_group_exist->id_shop != $this->context->shop->id && Tools::isSubmit('editgroup')) {
|
|
Configuration::updateValue('BTMEGAMENU_GROUP_DE', '');
|
|
Tools::redirectAdmin($this->context->link->getAdminLink('AdminModules').'&configure=leobootstrapmenu');
|
|
return false;
|
|
}
|
|
}
|
|
|
|
if (Configuration::get('BTMEGAMENU_GROUP_DE') && Configuration::get('BTMEGAMENU_GROUP_DE') != '' && !Tools::getValue('id_group') && !Tools::isSubmit('addNewGroup') && !Tools::isSubmit('submitGroup') && !Tools::getValue('liveeditor') && !Tools::getValue('importgroup') && !Tools::getValue('importwidgets') && !Tools::getValue('doupdategrouppos') && !Tools::getValue('hook') && !Tools::getValue('correctmodule')) {
|
|
$url = $this->context->link->getAdminLink('AdminModules').'&id_group='.Configuration::get('BTMEGAMENU_GROUP_DE').'&editgroup=1&tab_module=front_office_features&module_name=leobootstrapmenu&configure=leobootstrapmenu';
|
|
Tools::redirectAdmin($url);
|
|
return false;
|
|
}
|
|
|
|
if (Tools::getValue('hook')) {
|
|
Configuration::updateValue('BTMEGAMENU_CLEARCACHE_HOOK', Tools::getValue('hook'));
|
|
Configuration::updateValue('BTMEGAMENU_GROUP_DE', '');
|
|
$tpl = 'views/templates/hook/megamenu.tpl';
|
|
if (Tools::getValue('hook') == 'all') {
|
|
$this->clearCache();
|
|
} else {
|
|
$this->_clearCache($tpl, Tools::getValue('hook').'_'.$this->name);
|
|
}
|
|
}
|
|
|
|
if (Tools::isSubmit('save'.$this->name) && Tools::isSubmit('active')) {
|
|
# add + edit menu
|
|
$this->saveMenu();
|
|
}
|
|
if (Tools::isSubmit('save'.$this->name) && Tools::getValue('dodel')) {
|
|
$this->deleteMenu();
|
|
}
|
|
if (Tools::isSubmit('save'.$this->name) && Tools::getValue('delete_many_menu')) {
|
|
$this->deleteManyMenu();
|
|
}
|
|
if (Tools::isSubmit('save'.$this->name) && Tools::getValue('doduplicate')) {
|
|
$this->duplicateMenu();
|
|
}
|
|
if (Tools::isSubmit('save'.$this->name) && Tools::getIsset('dostatus')) {
|
|
$this->statusMenu(Tools::getValue('dostatus'));
|
|
}
|
|
if (Tools::isSubmit('addmenuproductlayout')) {
|
|
if ($this->postValidation()) {
|
|
$this->addMenuProductLayout();
|
|
}
|
|
}
|
|
if (Tools::isSubmit('submitGroup')) {
|
|
# add + edit group
|
|
if ($this->postValidation()) {
|
|
$this->saveGroup();
|
|
}
|
|
}
|
|
if (Tools::isSubmit('deletegroup')) {
|
|
if ($this->postValidation()) {
|
|
$this->deleteGroup();
|
|
}
|
|
}
|
|
if (Tools::isSubmit('duplicategroup')) {
|
|
if ($this->postValidation()) {
|
|
$this->duplicateGroup();
|
|
}
|
|
}
|
|
if (Tools::isSubmit('exportgroup')) {
|
|
$this->exportGroup();
|
|
}
|
|
if (Tools::isSubmit('exportwidgets')) {
|
|
$this->exportWidgets();
|
|
}
|
|
if (Tools::isSubmit('changeGStatus')) {
|
|
if ($this->postValidation()) {
|
|
$this->changeStatusGroup();
|
|
}
|
|
}
|
|
|
|
if (Tools::isSubmit('importgroup')) {
|
|
if ($this->postValidation()) {
|
|
if ($this->importGroup()) {
|
|
$this->clearCache();
|
|
Configuration::updateValue('BTMEGAMENU_GROUP_DE', '');
|
|
Tools::redirectAdmin('index.php?controller=AdminModules&token='.Tools::getAdminTokenLite('AdminModules').'&configure=leobootstrapmenu&success=importgroup');
|
|
} else {
|
|
$this->html .= $this->displayError($this->l('The file could not be import.'));
|
|
}
|
|
}
|
|
}
|
|
|
|
if (Tools::isSubmit('importwidgets')) {
|
|
if ($this->postValidation()) {
|
|
if ($this->importWidgets()) {
|
|
$this->clearCache();
|
|
Configuration::updateValue('BTMEGAMENU_GROUP_DE', '');
|
|
Tools::redirectAdmin('index.php?controller=AdminModules&token='.Tools::getAdminTokenLite('AdminModules').'&configure=leobootstrapmenu&success=importwidgets');
|
|
} else {
|
|
$this->html .= $this->displayError($this->l('The file could not be import.'));
|
|
}
|
|
}
|
|
}
|
|
|
|
if (Tools::getValue('correctmodule')) {
|
|
LeoBtmegamenuHelper::processCorrectModule();
|
|
}
|
|
|
|
if (Tools::getValue('doupdategrouppos') && Tools::isSubmit('updateGroupPosition')) {
|
|
$this->changePositionGroup();
|
|
}
|
|
|
|
if (Tools::getValue('doupdatepos') && Tools::isSubmit('updatePosition')) {
|
|
$this->changePositionMenu();
|
|
}
|
|
|
|
if (Tools::getValue('liveeditor') && Tools::getValue('do') == 'ajxmenuinfo') {
|
|
$this->ajxmenuinfo();
|
|
}
|
|
}
|
|
|
|
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'));
|
|
}
|
|
|
|
LeoBtmegamenuHelper::autoUpdateModule();
|
|
$this->postProcess();
|
|
|
|
$this->context->controller->addJqueryUI('ui.sortable');
|
|
|
|
$this->displaySuccessMessage();
|
|
|
|
return $this->html.$this->displayForm();
|
|
}
|
|
|
|
/**
|
|
* show megamenu item configuration.
|
|
*/
|
|
protected function showFormSetting($id_group = null)
|
|
{
|
|
$media_dir = $this->getMediaDir();
|
|
$this->context->controller->addJS(__PS_BASE_URI__.$media_dir.'js/admin/jquery.nestable.js');
|
|
$this->context->controller->addJS(__PS_BASE_URI__.$media_dir.'js/admin/form.js');
|
|
|
|
$this->context->controller->addJS(__PS_BASE_URI__.'js/jquery/plugins/jquery.cookie-plugin.js');
|
|
$this->context->controller->addJS(__PS_BASE_URI__.'js/jquery/ui/jquery.ui.tabs.min.js');
|
|
|
|
$this->context->controller->addCss(__PS_BASE_URI__.'js/jquery/ui/themes/base/jquery.ui.tabs.css');
|
|
$this->context->controller->addCss(__PS_BASE_URI__.$media_dir.'css/admin/form.css');
|
|
|
|
$return = '';
|
|
$mod_group = new BtmegamenuGroup();
|
|
$id_shop = $this->context->shop->id;
|
|
$groups = $mod_group->getGroups(null, $id_shop);
|
|
// check when change shop
|
|
if (count($groups) == 0 && Configuration::get('BTMEGAMENU_GROUP_DE') != '') {
|
|
Configuration::updateValue('BTMEGAMENU_GROUP_DE', '');
|
|
Tools::redirectAdmin($this->context->link->getAdminLink('AdminModules').'&configure=leobootstrapmenu');
|
|
return false;
|
|
}
|
|
|
|
$languages = Language::getLanguages(false);
|
|
foreach ($languages as $lang) {
|
|
$this->group_data['title'][$lang['id_lang']] = '';
|
|
$this->group_data['title_fo'][$lang['id_lang']] = '';
|
|
}
|
|
foreach ($groups as $key => $group) {
|
|
if ($group['id_btmegamenu_group'] == Tools::getValue('id_group') || (!Tools::getValue('id_group') && !Tools::isSubmit('addNewGroup') && $group['id_btmegamenu_group'] == Configuration::get('BTMEGAMENU_GROUP_DE'))) {
|
|
$this->current_group['id_group'] = $group['id_btmegamenu_group'];
|
|
$this->current_group['title'] = $group['title'];
|
|
|
|
$params = Tools::jsonDecode(LeoBtmegamenuHelper::base64Decode($group['params']), true);
|
|
|
|
$this->current_group['group_type'] = ($params['group_type'] == 'horizontal')?'Horizontal':'Vertical';
|
|
if ($params) {
|
|
$group_result = array();
|
|
}
|
|
foreach ($params as $k => $v) {
|
|
$group_result[$k] = $v;
|
|
}
|
|
$obj_group = new BtmegamenuGroup($group['id_btmegamenu_group']);
|
|
foreach ($languages as $lang) {
|
|
$group_result['title'][$lang['id_lang']] = $obj_group->title[$lang['id_lang']];
|
|
$group_result['title_fo'][$lang['id_lang']] = $obj_group->title_fo[$lang['id_lang']];
|
|
}
|
|
// $group_result['title'] = $group['title'];
|
|
$group_result['id_btmegamenu_group'] = $group['id_btmegamenu_group'];
|
|
$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_btmegamenu_group'], $group['active']);
|
|
}
|
|
$this->context->smarty->assign(array(
|
|
'link' => $this->context->link,
|
|
'update_group_position_link' => $this->context->link->getAdminLink('AdminModules').'&configure=leobootstrapmenu',
|
|
'groups' => $groups,
|
|
'curentGroup' => $this->current_group['id_group'],
|
|
'languages' => $this->context->controller->getLanguages(),
|
|
'exportLink' => $this->context->link->getAdminLink('AdminModules').'&configure=leobootstrapmenu'.'&exportgroup=1',
|
|
'exportWidgetsLink' => $this->context->link->getAdminLink('AdminModules').'&configure=leobootstrapmenu'.'&exportwidgets=1',
|
|
'msecure_key' => $this->secure_key,
|
|
'list_hook' => $this->hook_support,
|
|
'clearcache_hook' => Configuration::get('BTMEGAMENU_CLEARCACHE_HOOK'),
|
|
));
|
|
$return .= $this->display(_PS_MODULE_DIR_.'leobootstrapmenu/leobootstrapmenu.php', 'group_list.tpl');
|
|
|
|
if ((isset($this->renderGroupConfig) && $this->renderGroupConfig) || Tools::isSubmit('editgroup') || Tools::isSubmit('addNewGroup')) {
|
|
$return .= $this->renderGroupConfig();
|
|
};
|
|
|
|
if (isset($id_group)) {
|
|
return $return.$this->renderFormConfig();
|
|
}
|
|
return $return;
|
|
}
|
|
|
|
public function renderGroupConfig()
|
|
{
|
|
$description = $this->l('Add New Group');
|
|
if (!Tools::isSubmit('deletegroup') && !Tools::isSubmit('duplicategroup') && !Tools::isSubmit('addmenuproductlayout') && !Tools::isSubmit('importgroup') && !Tools::isSubmit('importwidgets') && !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);
|
|
}
|
|
|
|
$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(
|
|
'form' => array(
|
|
'legend' => array(
|
|
'title' => $description,
|
|
'icon' => 'icon-cogs'
|
|
),
|
|
'input' => array(
|
|
array(
|
|
'type' => 'text',
|
|
'label' => $this->l('Group Name'),
|
|
'name' => 'title_group',
|
|
'lang' => true,
|
|
'required' => 1
|
|
),
|
|
array(
|
|
'type' => 'text',
|
|
'label' => $this->l('Title on front end'),
|
|
'name' => 'title_fo_group',
|
|
'lang' => true,
|
|
),
|
|
array(
|
|
'type' => 'select',
|
|
'label' => $this->l('Show in Hook'),
|
|
'name' => 'hook_group',
|
|
'options' => array(
|
|
'query' => $select_hook,
|
|
'id' => 'id',
|
|
'name' => 'name',
|
|
)
|
|
),
|
|
array(
|
|
'type' => 'select',
|
|
'label' => $this->l('Group Type'),
|
|
'name' => 'group[group_type]',
|
|
'id' => 'group_type',
|
|
'options' => array('query' => array(
|
|
array('id' => 'horizontal', 'name' => $this->l('Horizontal')),
|
|
array('id' => 'vertical', 'name' => $this->l('Vertical')),
|
|
),
|
|
'id' => 'id',
|
|
'name' => 'name'),
|
|
'default' => 'horizontal',
|
|
),
|
|
array(
|
|
'type' => 'select',
|
|
'label' => $this->l('Show Canvas'),
|
|
'name' => 'group[show_cavas]',
|
|
'id' => 'show_cavas',
|
|
'options' => array('query' => array(
|
|
array('id' => '1', 'name' => $this->l('Yes')),
|
|
array('id' => '0', 'name' => $this->l('No')),
|
|
),
|
|
'id' => 'id',
|
|
'name' => 'name'),
|
|
'default' => '',
|
|
'class' => 'group-type-group',
|
|
),
|
|
array(
|
|
'type' => 'select',
|
|
'label' => $this->l('Type Sub'),
|
|
'name' => 'group[type_sub]',
|
|
'id' => 'type_sub',
|
|
'options' => array('query' => array(
|
|
array('id' => 'auto', 'name' => $this->l('Auto')),
|
|
array('id' => 'right', 'name' => $this->l('Right')),
|
|
array('id' => 'left', 'name' => $this->l('Left')),
|
|
),
|
|
'id' => 'id',
|
|
'name' => 'name'),
|
|
'default' => '',
|
|
'class' => 'group-type-group',
|
|
),
|
|
array(
|
|
'type' => 'group_class',
|
|
'label' => $this->l('Group Class'),
|
|
'name' => 'group[group_class]'
|
|
),
|
|
array(
|
|
'type' => 'switch',
|
|
'label' => $this->l('Enable'),
|
|
'name' => 'active_group',
|
|
'is_bool' => true,
|
|
'values' => array(
|
|
array(
|
|
'id' => 'active_on',
|
|
'value' => 1,
|
|
'label' => $this->l('Yes')
|
|
),
|
|
array(
|
|
'id' => 'active_off',
|
|
'value' => 0,
|
|
'label' => $this->l('No')
|
|
)
|
|
),
|
|
),
|
|
),
|
|
'submit' => array(
|
|
'title' => $this->l('Save Group Configuration'),
|
|
'class' => 'btn btn-danger')
|
|
),
|
|
);
|
|
|
|
if (Tools::isSubmit('id_group') && BtmegamenuGroup::groupExists((int)Tools::getValue('id_group'))) {
|
|
$fields_form['form']['input'][] = array('type' => 'hidden', 'name' => 'id_group');
|
|
} else if ($this->current_group['id_group'] && BtmegamenuGroup::groupExists($this->current_group['id_group'])) {
|
|
$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';
|
|
$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,
|
|
'hidden_config' => $hidden_config
|
|
);
|
|
|
|
return $helper->generateForm(array($fields_form));
|
|
}
|
|
|
|
public function getGroupFieldsValues()
|
|
{
|
|
$group = array();
|
|
$field = array('id_btmegamenu_group', 'title', 'title_fo', 'id_shop', 'hook', 'active');
|
|
foreach ($this->group_data as $key => $value) {
|
|
if (in_array($key, $field)) {
|
|
if ($key == 'id_btmegamenu_group') {
|
|
# module validation
|
|
$group['id_group'] = $value;
|
|
} else {
|
|
# module validation
|
|
$group[$key.'_group'] = $value;
|
|
}
|
|
continue;
|
|
}
|
|
$group['group['.$key.']'] = $value;
|
|
}
|
|
return $group;
|
|
}
|
|
|
|
public function renderFormConfig()
|
|
{
|
|
$this->widget->loadEngines();
|
|
|
|
$id_lang = $this->context->language->id;
|
|
$id_btmegamenu = (int)Tools::getValue('id_btmegamenu');
|
|
$id_group = (int)Tools::getValue('id_group');
|
|
$obj = new Btmegamenu($id_btmegamenu);
|
|
$obj->setModule($this);
|
|
$tree = $obj->getTree(null, $id_group);
|
|
$categories = LeoBtmegamenuHelper::getCategories();
|
|
$cms_categories = LeoBtmegamenuHelper::getCMSCategories();
|
|
$manufacturers = Manufacturer::getManufacturers(false, $id_lang, true);
|
|
$suppliers = Supplier::getSuppliers(false, $id_lang, true);
|
|
$cmss = CMS::listCms($this->context->language->id, false, true);
|
|
$menus = $obj->getDropdown(null, $obj->id_parent, $id_group);
|
|
if (isset($id_btmegamenu) && $id_btmegamenu != '') {
|
|
foreach ($menus as $key => $menus_val) {
|
|
if ($menus_val ['id'] == $id_btmegamenu) {
|
|
unset($menus[$key]);
|
|
}
|
|
}
|
|
}
|
|
$page_controller = array();
|
|
foreach (Meta::getPages() as $page) {
|
|
if (strpos($page, 'module') === false) {
|
|
$array_tmp = array();
|
|
$array_tmp['link'] = $page;
|
|
$array_tmp['name'] = $page;
|
|
array_push($page_controller, $array_tmp);
|
|
}
|
|
}
|
|
$default_lang = (int)Configuration::get('PS_LANG_DEFAULT');
|
|
|
|
$soption = array(
|
|
array(
|
|
'id' => 'active_on',
|
|
'value' => 1,
|
|
'label' => $this->l('Enabled')
|
|
),
|
|
array(
|
|
'id' => 'active_off',
|
|
'value' => 0,
|
|
'label' => $this->l('Disabled')
|
|
)
|
|
);
|
|
|
|
$this->fields_form[0]['form'] = array(
|
|
'legend' => array(
|
|
'title' => ($id_btmegamenu)?$this->l('Edit MegaMenu Item.'):$this->l('Create New MegaMenu Item.'),
|
|
),
|
|
'input' => array(
|
|
array(
|
|
'type' => 'hidden',
|
|
'label' => $this->l('Megamenu ID'),
|
|
'name' => 'id_btmegamenu',
|
|
'default' => 0,
|
|
),
|
|
array(
|
|
'type' => 'hidden',
|
|
'label' => $this->l('Group ID'),
|
|
'name' => 'id_group',
|
|
'default' => $id_group,
|
|
),
|
|
array(
|
|
'type' => 'text',
|
|
'label' => $this->l('Title'),
|
|
'name' => 'title',
|
|
'required' => true,
|
|
'lang' => true,
|
|
'default' => '',
|
|
),
|
|
array(
|
|
'type' => 'text',
|
|
'label' => $this->l('Sub Title'),
|
|
'lang' => true,
|
|
'name' => 'text',
|
|
'cols' => 40,
|
|
'rows' => 10,
|
|
'default' => '',
|
|
),
|
|
array(
|
|
'type' => 'select',
|
|
'label' => $this->l('Parent ID'),
|
|
'name' => 'id_parent',
|
|
'options' => array('query' => $menus,
|
|
'id' => 'id',
|
|
'name' => 'title'),
|
|
'default' => 'url',
|
|
),
|
|
|
|
array(
|
|
'type' => 'hidden',
|
|
'name' => 'active',
|
|
),
|
|
array(
|
|
'type' => 'switch',
|
|
'label' => $this->l('Show Title'),
|
|
'name' => 'show_title',
|
|
'values' => $soption,
|
|
'default' => '1',
|
|
),
|
|
array(
|
|
'type' => 'select',
|
|
'label' => $this->l('Show submenu with'),
|
|
'name' => 'sub_with',
|
|
'options' => array('query' => array(
|
|
array('id' => 'none', 'name' => $this->l('None')),
|
|
array('id' => 'submenu', 'name' => $this->l('Submenu')),
|
|
array('id' => 'widget', 'name' => $this->l('Widget')),
|
|
),
|
|
'id' => 'id',
|
|
'name' => 'name'),
|
|
'default' => 'submenu',
|
|
'desc' => $this->l('Turn on (select type) or turn off submenu'),
|
|
),
|
|
array(
|
|
'type' => 'select',
|
|
'label' => $this->l('Menu Type'),
|
|
'name' => 'type',
|
|
'id' => 'menu_type',
|
|
'desc' => $this->l('Select a menu link type and fill data for following input'),
|
|
'options' => array('query' => array(
|
|
array('id' => 'url', 'name' => $this->l('Url')),
|
|
array('id' => 'category', 'name' => $this->l('Category')),
|
|
array('id' => 'product', 'name' => $this->l('Product')),
|
|
array('id' => 'manufacture', 'name' => $this->l('Manufacture')),
|
|
array('id' => 'supplier', 'name' => $this->l('Supplier')),
|
|
array('id' => 'cms', 'name' => $this->l('Cms')),
|
|
array('id' => 'cms_category', 'name' => $this->l('Cms Category')),
|
|
array('id' => 'html', 'name' => $this->l('Html')),
|
|
array('id' => 'controller', 'name' => $this->l('Page Controller'))
|
|
),
|
|
'id' => 'id',
|
|
'name' => 'name'),
|
|
'default' => 'url',
|
|
),
|
|
array(
|
|
'type' => 'text',
|
|
'label' => $this->l('Product ID'),
|
|
'name' => 'product_type',
|
|
'id' => 'product_type',
|
|
'class' => 'menu-type-group',
|
|
'default' => '',
|
|
),
|
|
array(
|
|
'type' => 'select',
|
|
'label' => $this->l('CMS Type'),
|
|
'name' => 'cms_type',
|
|
'id' => 'cms_type',
|
|
'options' => array('query' => $cmss,
|
|
'id' => 'id_cms',
|
|
'name' => 'meta_title'),
|
|
'default' => '',
|
|
'class' => 'menu-type-group',
|
|
),
|
|
array(
|
|
'type' => 'text',
|
|
'label' => $this->l('URL'),
|
|
'name' => 'url',
|
|
'id' => 'url_type',
|
|
'required' => true,
|
|
'lang' => true,
|
|
'class' => 'url-type-group-lang',
|
|
'default' => '',
|
|
),
|
|
array(
|
|
'type' => 'select',
|
|
'label' => $this->l('Category Type'),
|
|
'name' => 'category_type',
|
|
'id' => 'category_type',
|
|
'options' => array('query' => $categories,
|
|
'id' => 'id_category',
|
|
'name' => 'name'),
|
|
'default' => '',
|
|
'class' => 'menu-type-group',
|
|
),
|
|
array(
|
|
'type' => 'select',
|
|
'label' => $this->l('CMS Category Type'),
|
|
'name' => 'cms_category_type',
|
|
'id' => 'cms_category_type',
|
|
'options' => array('query' => $cms_categories,
|
|
'id' => 'id_cms_category',
|
|
'name' => 'name'),
|
|
'default' => '',
|
|
'class' => 'menu-type-group',
|
|
),
|
|
array(
|
|
'type' => 'select',
|
|
'label' => $this->l('Manufacture Type'),
|
|
'name' => 'manufacture_type',
|
|
'id' => 'manufacture_type',
|
|
'options' => array('query' => $manufacturers,
|
|
'id' => 'id_manufacturer',
|
|
'name' => 'name'),
|
|
'default' => '',
|
|
'class' => 'menu-type-group',
|
|
|
|
),
|
|
array(
|
|
'type' => 'select',
|
|
'label' => $this->l('Supplier Type'),
|
|
'name' => 'supplier_type',
|
|
'id' => 'supplier_type',
|
|
'options' => array('query' => $suppliers,
|
|
'id' => 'id_supplier',
|
|
'name' => 'name'),
|
|
'default' => '',
|
|
'class' => 'menu-type-group',
|
|
),
|
|
array(
|
|
'type' => 'textarea',
|
|
'label' => $this->l('HTML Type'),
|
|
'name' => 'content_text',
|
|
'desc' => $this->l('This menu is only for display content,PLease do not select it for menu level 1'),
|
|
'lang' => true,
|
|
'default' => '',
|
|
'autoload_rte' => true,
|
|
'class' => 'menu-type-group-lang',
|
|
),
|
|
array(
|
|
'type' => 'select',
|
|
'label' => $this->l('List Page Controller'),
|
|
'name' => 'controller_type',
|
|
'id' => 'controller_type',
|
|
'options' => array('query' => $page_controller,
|
|
'id' => 'link',
|
|
'name' => 'name'),
|
|
'default' => '',
|
|
'class' => 'menu-type-group',
|
|
),
|
|
array(
|
|
'type' => 'text',
|
|
'label' => $this->l('Parameter of page controller'),
|
|
'name' => 'controller_type_parameter',
|
|
'id' => 'controller_type_parameter',
|
|
'default' => '',
|
|
'class' => 'menu-type-group',
|
|
'desc' => 'Eg: ?a=1&b=2',
|
|
),
|
|
array(
|
|
'type' => 'select',
|
|
'label' => $this->l('Target Open'),
|
|
'name' => 'target',
|
|
'options' => array('query' => array(
|
|
array('id' => '_self', 'name' => $this->l('Self')),
|
|
array('id' => '_blank', 'name' => $this->l('Blank')),
|
|
array('id' => '_parent', 'name' => $this->l('Parent')),
|
|
array('id' => '_top', 'name' => $this->l('Top'))
|
|
),
|
|
'id' => 'id',
|
|
'name' => 'name'),
|
|
'default' => '_self',
|
|
),
|
|
array(
|
|
'type' => 'text',
|
|
'label' => $this->l('Menu Class'),
|
|
'name' => 'menu_class',
|
|
'display_image' => true,
|
|
'default' => ''
|
|
),
|
|
array(
|
|
'type' => 'text',
|
|
'label' => $this->l('Menu Icon Font'),
|
|
'name' => 'icon_class',
|
|
'display_image' => true,
|
|
'default' => '',
|
|
'desc' => $this->context->smarty->fetch($this->local_path.'views/templates/admin/icon_front_guide.tpl'),
|
|
),
|
|
array(
|
|
'type' => 'file',
|
|
'label' => $this->l('Or Menu Icon Image'),
|
|
'name' => 'image',
|
|
'display_image' => true,
|
|
'default' => '',
|
|
'desc' => $this->l('Use image icon if no use icon Class'),
|
|
'thumb' => '',
|
|
'title' => $this->l('Icon Preview'),
|
|
),
|
|
array(
|
|
'type' => 'switch',
|
|
'label' => $this->l('Group Submenu'),
|
|
'name' => 'is_group',
|
|
'values' => $soption,
|
|
'default' => '0',
|
|
'desc' => $this->l('Group all sub menu to display in same level')
|
|
),
|
|
array(
|
|
'type' => 'text',
|
|
'label' => $this->l('Column'),
|
|
'name' => 'colums',
|
|
'values' => $soption,
|
|
'default' => '1',
|
|
'desc' => $this->l('Set each sub menu item as column')
|
|
),
|
|
array(
|
|
'type' => 'group',
|
|
'label' => $this->l('Group access'),
|
|
'name' => 'groupBox',
|
|
'values' => Group::getGroups(Context::getContext()->language->id),
|
|
'hint' => $this->l('Mark all of the customer groups which you would like to have access to this menu.'),
|
|
'default' => '1',
|
|
),
|
|
),
|
|
'submit' => array(
|
|
'title' => $this->l('Save Menu Item'),
|
|
'class' => 'button btn btn-danger'
|
|
)
|
|
);
|
|
|
|
$helper = new HelperForm();
|
|
$helper->module = $this;
|
|
$helper->name_controller = $this->name;
|
|
$helper->identifier = $this->identifier;
|
|
$helper->token = Tools::getAdminTokenLite('AdminModules');
|
|
foreach (Language::getLanguages(false) as $lang) {
|
|
$helper->languages[] = array(
|
|
'id_lang' => $lang['id_lang'],
|
|
'iso_code' => $lang['iso_code'],
|
|
'name' => $lang['name'],
|
|
'is_default' => ($default_lang == $lang['id_lang'] ? 1 : 0)
|
|
);
|
|
}
|
|
|
|
$helper->currentIndex = AdminController::$currentIndex.'&configure='.$this->name;
|
|
$helper->default_form_language = $default_lang;
|
|
$helper->allow_employee_form_lang = $default_lang;
|
|
$helper->toolbar_scroll = true;
|
|
$helper->title = $this->displayName;
|
|
$helper->submit_action = 'save'.$this->name;
|
|
$helper->tpl_vars = array(
|
|
'fields_value' => $this->getConfigFieldsValues($obj),
|
|
'languages' => $this->context->controller->getLanguages(),
|
|
'id_language' => $this->context->language->id
|
|
);
|
|
$live_editor_url = AdminController::$currentIndex.'&configure='.$this->name.'&liveeditor=1&id_group='.$id_group.'&token='.Tools::getAdminTokenLite('AdminModules');
|
|
|
|
$action = AdminController::$currentIndex.'&configure='.$this->name.'&editgroup=1&id_group='.$id_group.'&save'.$this->name.'&token='.Tools::getAdminTokenLite('AdminModules');
|
|
$helper->toolbar_btn = array(
|
|
'back' => array(
|
|
'href' => AdminController::$currentIndex.'&configure='.$this->name.'&token='.Tools::getAdminTokenLite('AdminModules'),
|
|
'desc' => $this->l('Back to list')
|
|
)
|
|
);
|
|
$successful = 0;
|
|
if (Tools::getValue('successful') == 1) {
|
|
$successful = 1;
|
|
}
|
|
$addnew = AdminController::$currentIndex.'&token='.Tools::getAdminTokenLite('AdminModules').'&configure='.$this->name.'&editgroup=1&id_group='.$id_group;
|
|
|
|
$this->context->smarty->assign(array(
|
|
'successful' => $successful,
|
|
'live_editor_url' => $live_editor_url,
|
|
'addnew' => $addnew,
|
|
'action' => $action,
|
|
'tree' => $tree,
|
|
'admin_widget_link' => Context::getContext()->link->getAdminLink('AdminLeoWidgets'),
|
|
'helper_form' => $helper->generateForm($this->fields_form),
|
|
'current_group_title' => $this->current_group['title'],
|
|
'current_group_type' => $this->current_group['group_type'],
|
|
'id_group' => $id_group,
|
|
));
|
|
|
|
$output = $this->context->smarty->fetch($this->local_path.'views/templates/admin/configure.tpl');
|
|
return $output;
|
|
}
|
|
|
|
public function getConfigFieldsValues($obj)
|
|
{
|
|
$languages = Language::getLanguages(false);
|
|
$fields_values = array();
|
|
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? 'https://' : 'http://';
|
|
$this->image_base_url = Tools::htmlentitiesutf8($protocol.$_SERVER['HTTP_HOST'].__PS_BASE_URI__).'themes/'.$this->theme_name.'/'.$this->getThemeMediaDir('img').'img/icons/';
|
|
foreach ($this->fields_form as $k => $f) {
|
|
foreach ($f['form']['input'] as $j => $input) {
|
|
if (isset($obj->{trim($input['name'])})) {
|
|
$data = $obj->{trim($input['name'])};
|
|
|
|
if ($input['name'] == 'image' && $data) {
|
|
$thumb = $this->image_base_url.$data;
|
|
$this->fields_form[$k]['form']['input'][$j]['thumb'] = $thumb;
|
|
}
|
|
|
|
if (isset($input['lang'])) {
|
|
foreach ($languages as $lang) {
|
|
# validate module
|
|
$fields_values[$input['name']][$lang['id_lang']] = isset($data[$lang['id_lang']]) ? $data[$lang['id_lang']] : $input['default'];
|
|
}
|
|
} else {
|
|
# validate module
|
|
$fields_values[$input['name']] = isset($data) ? $data : $input['default'];
|
|
}
|
|
} else {
|
|
if (isset($input['lang'])) {
|
|
foreach ($languages as $lang) {
|
|
$v = Tools::getValue('title', Configuration::get($input['name'], $lang['id_lang']));
|
|
$fields_values[$input['name']][$lang['id_lang']] = $v ? $v : $input['default'];
|
|
}
|
|
} else {
|
|
$v = Tools::getValue($input['name'], Configuration::get($input['name']));
|
|
$fields_values[$input['name']] = $v ? $v : $input['default'];
|
|
}
|
|
if ($input['name'] == $obj->type.'_type') {
|
|
# validate module
|
|
$fields_values[$input['name']] = $obj->item;
|
|
}
|
|
if ($input['name'] == $obj->type.'_type_parameter') {
|
|
$fields_values[$input['name']] = $obj->item_parameter;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$id_menu_groups= $obj->getGroups(null, true);
|
|
$groups = Group::getGroups($this->context->language->id);
|
|
foreach ($groups as $group) {
|
|
$fields_values['groupBox_'.$group['id_group']] = Tools::getValue('groupBox_'.$group['id_group'], (in_array($group['id_group'], $id_menu_groups) || (empty($id_menu_groups) && !$obj->id) || in_array('all', $id_menu_groups)));
|
|
}
|
|
return $fields_values;
|
|
}
|
|
|
|
/**
|
|
* render menu tree using for editing
|
|
*/
|
|
protected function ajxgenmenu()
|
|
{
|
|
$parent = '1';
|
|
$params = array('params' => array());
|
|
$get_params_widget = array();
|
|
$list_root_menu = Btmegamenu::getMenusRoot((int)Tools::getValue('id_group'));
|
|
/* unset mega menu configuration */
|
|
if (Tools::getValue('doreset')) {
|
|
# validate module
|
|
Btmegamenu::resetParamsWidget();
|
|
}
|
|
if (count($list_root_menu) > 0) {
|
|
foreach ($list_root_menu as $list_root_menu_item) {
|
|
$menu_obj = new Btmegamenu($list_root_menu_item['id_btmegamenu']);
|
|
$menu_params_widget = $menu_obj->getParamsWidget();
|
|
if ($menu_params_widget != '') {
|
|
$get_params_widget[$list_root_menu_item['id_btmegamenu']] = Tools::jsonDecode(LeoBtmegamenuHelper::base64Decode($menu_params_widget));
|
|
}
|
|
}
|
|
}
|
|
$params['params'] = $get_params_widget;
|
|
$obj = new Btmegamenu($parent);
|
|
$obj->setModule($this);
|
|
$tree = $obj->getFrontTree(0, true, $params['params'], Tools::getValue('id_group'));
|
|
$this->context->smarty->assign(array(
|
|
'tree' => $tree,
|
|
));
|
|
echo $this->context->smarty->fetch($this->local_path.'views/templates/admin/ajxgenmenu.tpl');
|
|
}
|
|
|
|
/**
|
|
* re-load list widget
|
|
*/
|
|
protected function loadwidget()
|
|
{
|
|
$id_shop = $this->context->shop->id;
|
|
$model = $this->widget;
|
|
$widgets = $model->getWidgets($id_shop);
|
|
$type_menu = array('carousel', 'categoriestabs', 'manucarousel', 'map', 'producttabs', 'tab', 'accordion', 'specialcarousel');
|
|
foreach ($widgets as $key => $widget) {
|
|
if (in_array($widget['type'], $type_menu)) {
|
|
unset($widgets[$key]);
|
|
}
|
|
}
|
|
|
|
$return = '';
|
|
$this->context->smarty->assign(array(
|
|
'widgets' => $widgets,
|
|
));
|
|
$return = $this->context->smarty->fetch($this->local_path.'views/templates/admin/list_widget.tpl');
|
|
|
|
echo $return;
|
|
}
|
|
|
|
/**
|
|
* Ajax Menu : Save
|
|
*/
|
|
public function ajxmenuinfo()
|
|
{
|
|
if (Tools::getValue('params')) {
|
|
$params = trim(html_entity_decode(Tools::getValue('params')));
|
|
$array_params = Tools::jsonDecode($params, true);
|
|
if (count($array_params) > 0) {
|
|
foreach ($array_params as $key => $value) {
|
|
$menu_obj = new Btmegamenu((int)$key);
|
|
$menu_obj->updateParamsWidget(LeoBtmegamenuHelper::base64Encode(Tools::jsonEncode($value)));
|
|
}
|
|
}
|
|
$this->clearCache();
|
|
}
|
|
}
|
|
|
|
public function getWidget()
|
|
{
|
|
if (Tools::getIsset('allWidgets')) {
|
|
$dataForm = Tools::jsonDecode(Tools::getValue('dataForm'), 1);
|
|
foreach ($dataForm as $key => &$widget) {
|
|
# validate module
|
|
unset($key);
|
|
$widget['html'] = $this->renderLeoWidget($widget['id_shop'], $widget['id_widget']);
|
|
}
|
|
die(Tools::jsonEncode($dataForm));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* show live editor tools
|
|
*/
|
|
protected function showLiveEditorSetting()
|
|
{
|
|
$media_dir = $this->getMediaDir();
|
|
$this->context->controller->addJS(__PS_BASE_URI__.'js/jquery/ui/jquery.ui.dialog.min.js');
|
|
$this->context->controller->addJS(__PS_BASE_URI__.'js/jquery/ui/jquery.ui.draggable.min.js');
|
|
$this->context->controller->addJS(__PS_BASE_URI__.'js/jquery/ui/jquery.ui.droppable.min.js');
|
|
$this->context->controller->addJS(__PS_BASE_URI__.$media_dir.'js/admin/form.js');
|
|
$this->context->controller->addCss(__PS_BASE_URI__.$media_dir.'css/admin/liveeditor.css');
|
|
$this->context->controller->addJS(__PS_BASE_URI__.$media_dir.'js/admin/liveeditor.js');
|
|
$tcss = _PS_ROOT_DIR_.'/themes/'.$this->context->shop->theme->getName().'/'.$this->getThemeMediaDir('css').'css/megamenu.css';
|
|
|
|
if (file_exists($tcss)) {
|
|
# validate module
|
|
$this->context->controller->addCss(_THEMES_DIR_.$this->context->shop->theme->getName().'/'.$this->getThemeMediaDir('css').'css/megamenu.css');
|
|
} else {
|
|
# validate module
|
|
$this->context->controller->addCss(__PS_BASE_URI__.$media_dir.'css/megamenu.css');
|
|
}
|
|
|
|
$id_group = Tools::getValue('id_group');
|
|
$group_obj = new BtmegamenuGroup($id_group, $this->context->language->id);
|
|
$base_config_url = AdminController::$currentIndex.'&configure='.$this->name.'&token='.Tools::getValue('token');
|
|
|
|
$liveedit_action = $base_config_url.'&liveeditor=1&id_group='.$id_group.'&do=livesave';
|
|
$action_backlink = $base_config_url.'&editgroup=1&id_group='.$id_group;
|
|
$action_widget = $base_config_url.'&liveeditor=1&id_group='.$id_group.'&do=getwidget';
|
|
$action_loadwidget = $base_config_url.'&liveeditor=1&do=loadwidget';
|
|
$ajxgenmenu = $base_config_url.'&liveeditor=1&id_group='.$id_group.'&do=ajxgenmenu';
|
|
$ajxmenuinfo = $base_config_url.'&liveeditor=1&id_group='.$id_group.'&do=ajxmenuinfo';
|
|
$group_title = $group_obj->title;
|
|
|
|
$params = Tools::jsonDecode(LeoBtmegamenuHelper::base64Decode($group_obj->params), true);
|
|
$group_type = $params['group_type'];
|
|
$group_type_sub = $params['type_sub'];
|
|
$id_shop = $this->context->shop->id;
|
|
$shop = Shop::getShop($id_shop);
|
|
if (!empty($shop)) {
|
|
$live_site_url = $shop['uri'];
|
|
} else {
|
|
$live_site_url = __PS_BASE_URI__;
|
|
}
|
|
$model = $this->widget;
|
|
$widgets = $model->getWidgets($id_shop);
|
|
$type_menu = array('carousel', 'categoriestabs', 'manucarousel', 'map', 'producttabs', 'tab', 'accordion', 'specialcarousel');
|
|
foreach ($widgets as $key => $widget) {
|
|
if (in_array($widget['type'], $type_menu)) {
|
|
unset($widgets[$key]);
|
|
}
|
|
}
|
|
|
|
$this->context->smarty->assign(array(
|
|
'liveedit_action' => $liveedit_action,
|
|
'widgets' => $widgets,
|
|
'group_title' => $group_title,
|
|
'group_type' => $group_type,
|
|
'group_type_sub' => $group_type_sub,
|
|
'live_site_url' => $live_site_url,
|
|
'action_backlink' => $action_backlink,
|
|
'ajxgenmenu' => $ajxgenmenu,
|
|
'ajxmenuinfo' => $ajxmenuinfo,
|
|
'action_widget' => $action_widget,
|
|
'action_loadwidget' => $action_loadwidget,
|
|
'id_shop' => $id_shop,
|
|
'link' => $this->context->link,
|
|
));
|
|
|
|
return $this->display(_PS_MODULE_DIR_.'leobootstrapmenu/leobootstrapmenu.php', 'liveeditor.tpl');
|
|
}
|
|
|
|
public function displayForm()
|
|
{
|
|
if (Tools::getValue('liveeditor')) {
|
|
if (Tools::getValue('do')) {
|
|
switch (Tools::getValue('do')) {
|
|
case 'ajxmenuinfo':
|
|
echo $this->ajxgenmenu();
|
|
break;
|
|
case 'ajxgenmenu':
|
|
echo $this->ajxgenmenu();
|
|
break;
|
|
case 'loadwidget':
|
|
echo $this->loadwidget();
|
|
break;
|
|
case 'getwidget':
|
|
echo $this->getWidget();
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
die;
|
|
} else {
|
|
# validate module
|
|
return $this->showLiveEditorSetting();
|
|
}
|
|
} else {
|
|
# validate module
|
|
if (Tools::getValue('id_group')) {
|
|
$id_group = Tools::getValue('id_group');
|
|
return $this->showFormSetting($id_group);
|
|
} else {
|
|
return $this->showFormSetting();
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* render widgets
|
|
*/
|
|
public function renderLeoWidget($id_shop, $widgets)
|
|
{
|
|
if (!$id_shop) {
|
|
$id_shop = Context::getContext()->shop->id;
|
|
}
|
|
|
|
$widgets = explode('|wid-', '|'.$widgets);
|
|
$this->context->smarty->assign(array(
|
|
'link' => $this->context->link,
|
|
));
|
|
if (!empty($widgets)) {
|
|
unset($widgets[0]);
|
|
$model = $this->widget;
|
|
$model->setTheme(Context::getContext()->shop->theme->getName());
|
|
$model->langID = $this->context->language->id;
|
|
$model->loadWidgets($id_shop);
|
|
$model->loadEngines();
|
|
$output = '';
|
|
foreach ($widgets as $wid) {
|
|
$content = $model->renderContent($wid);
|
|
$output .= $this->getWidgetContent($wid, $content['type'], $content['data']);
|
|
}
|
|
return $output;
|
|
}
|
|
return '';
|
|
}
|
|
|
|
public function getWidgetContent($id, $type, $data, $show_widget_id = 1)
|
|
{
|
|
# validate module
|
|
unset($show_widget_id);
|
|
|
|
$data['id_lang'] = $this->context->language->id;
|
|
$id_shop = $this->context->shop->id;
|
|
$model = $this->widget;
|
|
$widgets = $model->getWidgets($id_shop);
|
|
$type_menu = array('carousel', 'categoriestabs', 'manucarousel', 'map', 'producttabs', 'tab', 'accordion', 'specialcarousel');
|
|
foreach ($widgets as $key => $widget) {
|
|
if (in_array($widget['type'], $type_menu)) {
|
|
unset($widgets[$key]);
|
|
}
|
|
}
|
|
$current_context = Context::getContext();
|
|
$this->smarty->assign($data);
|
|
$this->smarty->assign('id_widget', $id);
|
|
$this->smarty->assign('widgets', $widgets);
|
|
$this->smarty->assign('show_widget_bo', $current_context->controller->controller_type);
|
|
$output = $this->display(_PS_MODULE_DIR_.'leobootstrapmenu/leobootstrapmenu.php', 'views/templates/hook/widgets/widget_'.$type.'.tpl');
|
|
return $output;
|
|
}
|
|
|
|
public function checkFolderIcon()
|
|
{
|
|
if (file_exists($this->img_path) && is_dir($this->img_path)) {
|
|
return;
|
|
}
|
|
if (!file_exists($this->img_path) && !is_dir($this->img_path)) {
|
|
@mkdir(_PS_ALL_THEMES_DIR_.$this->theme_name.'/modules/', 0777, true);
|
|
// update direction css, js, img for 1.7.4.0
|
|
@mkdir(_PS_ALL_THEMES_DIR_.$this->theme_name.'/assets/img/modules/', 0777, true);
|
|
@mkdir(_PS_ALL_THEMES_DIR_.$this->theme_name.'/modules/'.$this->name.'/', 0777, true);
|
|
// update direction css, js, img for 1.7.4.0
|
|
@mkdir(_PS_ALL_THEMES_DIR_.$this->theme_name.'/assets/img/modules/'.$this->name.'/', 0777, true);
|
|
|
|
if (!file_exists(_PS_ALL_THEMES_DIR_.$this->theme_name.'/modules/'.$this->name.'/index.php') && file_exists(_PS_IMG_DIR_.'index.php')) {
|
|
@copy(_PS_IMG_DIR_.'index.php', _PS_ALL_THEMES_DIR_.$this->theme_name.'/modules/'.$this->name.'/index.php');
|
|
}
|
|
if (!file_exists(_PS_ALL_THEMES_DIR_.$this->theme_name.'/assets/img/modules/'.$this->name.'/index.php') && file_exists(_PS_IMG_DIR_.'index.php')) {
|
|
@copy(_PS_IMG_DIR_.'index.php', _PS_ALL_THEMES_DIR_.$this->theme_name.'/assets/img/modules/'.$this->name.'/index.php');
|
|
}
|
|
@mkdir(_PS_ALL_THEMES_DIR_.$this->theme_name.'/modules/'.$this->name.'/img/', 0777, true);
|
|
@mkdir(_PS_ALL_THEMES_DIR_.$this->theme_name.'/assets/img/modules/'.$this->name.'/img/', 0777, true);
|
|
if (!file_exists(_PS_ALL_THEMES_DIR_.$this->theme_name.'/modules/'.$this->name.'/img/index.php') && file_exists(_PS_IMG_DIR_.'index.php')) {
|
|
@copy(_PS_IMG_DIR_.'index.php', _PS_ALL_THEMES_DIR_.$this->theme_name.'/modules/'.$this->name.'/img/index.php');
|
|
}
|
|
if (!file_exists(_PS_ALL_THEMES_DIR_.$this->theme_name.'/assets/img/modules/'.$this->name.'/img/index.php') && file_exists(_PS_IMG_DIR_.'index.php')) {
|
|
@copy(_PS_IMG_DIR_.'index.php', _PS_ALL_THEMES_DIR_.$this->theme_name.'/assets/img/modules/'.$this->name.'/img/index.php');
|
|
}
|
|
@mkdir($this->img_path, 0777, true);
|
|
if (!file_exists($this->img_path.'index.php') && file_exists(_PS_IMG_DIR_.'index.php')) {
|
|
@copy(_PS_IMG_DIR_.'index.php', $this->img_path.'index.php');
|
|
}
|
|
}
|
|
}
|
|
|
|
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 == BtmegamenuGroup::GROUP_STATUS_DISABLE) {
|
|
$change_group_status = BtmegamenuGroup::GROUP_STATUS_ENABLE;
|
|
} elseif ($active == BtmegamenuGroup::GROUP_STATUS_ENABLE) {
|
|
$change_group_status = BtmegamenuGroup::GROUP_STATUS_DISABLE;
|
|
}
|
|
|
|
$html = '<a href="'.AdminController::$currentIndex.'&configure='.$this->name.'&token='.Tools::getAdminTokenLite('AdminModules').'&changeGStatus='.$change_group_status.'&id_group='.(int)$id_group.'" title="'.$title.'"><img src="'._PS_ADMIN_IMG_.''.$img.'" alt="" /></a>';
|
|
return $html;
|
|
}
|
|
|
|
public function postValidation()
|
|
{
|
|
$errors = array();
|
|
|
|
if (Tools::isSubmit('submitGroup')) {
|
|
if (Tools::isSubmit('id_group')) {
|
|
if (!Validate::isInt(Tools::getValue('id_group')) && !BtmegamenuGroup::groupExists(Tools::getValue('id_group'))) {
|
|
$errors[] = $this->l('Invalid id_group');
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 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;
|
|
}
|
|
|
|
/**
|
|
* 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_LEOBOOTSTRAPMENU', 0);
|
|
if ($install_module) {
|
|
// next : allow restore sample
|
|
Configuration::updateValue('AP_INSTALLED_LEOBOOTSTRAPMENU', '0');
|
|
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');
|
|
foreach ($this->hook_support as $value) {
|
|
$res &= $this->registerHook($value);
|
|
}
|
|
# Multishop create new shop
|
|
$res &= $this->registerHook('actionAdminShopControllerSaveAfter');
|
|
$res &= $this->registerHook('actionAdminControllerSetMedia');
|
|
|
|
return $res;
|
|
}
|
|
|
|
public function unregisterLeoHook()
|
|
{
|
|
$res = true;
|
|
$res &= $this->unregisterHook('header');
|
|
foreach ($this->hook_support as $value) {
|
|
$res &= $this->unregisterHook($value);
|
|
}
|
|
$res &= $this->unregisterHook('actionAdminShopControllerSaveAfter');
|
|
$res &= $this->unregisterHook('actionAdminControllerSetMedia');
|
|
return $res;
|
|
}
|
|
|
|
public function importGroup()
|
|
{
|
|
$this->renderGroupConfig = true;
|
|
$type = Tools::strtolower(Tools::substr(strrchr($_FILES['import_file']['name'], '.'), 1));
|
|
if (isset($_FILES['import_file']) && $type == 'txt' && isset($_FILES['import_file']['tmp_name']) && !empty($_FILES['import_file']['tmp_name'])) {
|
|
$content = Tools::file_get_contents($_FILES['import_file']['tmp_name']);
|
|
$content = Tools::jsonDecode(LeoBtmegamenuHelper::base64Decode($content), true);
|
|
if (!is_array($content) || !isset($content['id_btmegamenu_group']) || $content['id_btmegamenu_group'] == '') {
|
|
return false;
|
|
}
|
|
$language_field = array('title', 'text', 'url', 'description', 'content_text', 'submenu_content_text');
|
|
$languages = Language::getLanguages();
|
|
$shop_id = $this->context->shop->id;
|
|
$lang_list = array();
|
|
foreach ($languages as $lang) {
|
|
# module validation
|
|
$lang_list[$lang['iso_code']] = $lang['id_lang'];
|
|
}
|
|
|
|
$override_group = Tools::getValue('override_group');
|
|
$override_widget = Tools::getValue('override_widget');
|
|
if ($override_group && BtmegamenuGroup::groupExists($content['id_btmegamenu_group'], $shop_id)) {
|
|
$mod_group = new BtmegamenuGroup($content['id_btmegamenu_group']);
|
|
//edit group
|
|
$mod_group = BtmegamenuGroup::setDataForGroup($mod_group, $content, true);
|
|
if (!$mod_group->update()) {
|
|
# module validation
|
|
return false;
|
|
}
|
|
$this->removeAllMenuOfGroup($content['id_btmegamenu_group']);
|
|
|
|
if (count($content['list_menu']) > 0) {
|
|
$list_new_id = array();
|
|
foreach ($content['list_menu'] as $menu) {
|
|
$mod_menu = new Btmegamenu();
|
|
foreach ($menu as $key => $val) {
|
|
if (in_array($key, $language_field)) {
|
|
foreach ($val as $key_lang => $val_lang) {
|
|
# module validation
|
|
$mod_menu->{$key}[$lang_list[$key_lang]] = $val_lang;
|
|
}
|
|
} else {
|
|
# module validation
|
|
if ($key == 'id_group') {
|
|
$mod_menu->{$key} = $mod_group->id;
|
|
} elseif ($key == 'id_parent') {
|
|
if ($val != 0) {
|
|
$mod_menu->{$key} = $list_new_id[$val];
|
|
} else {
|
|
$mod_menu->{$key} = $val;
|
|
}
|
|
} else {
|
|
$mod_menu->{$key} = $val;
|
|
}
|
|
}
|
|
}
|
|
|
|
$mod_menu->id = 0;
|
|
if (!$mod_menu->add()) {
|
|
return false;
|
|
}
|
|
$list_new_id[$menu['id_btmegamenu']] = $mod_menu->id;
|
|
}
|
|
}
|
|
} else {
|
|
$mod_group = new BtmegamenuGroup();
|
|
$mod_group = BtmegamenuGroup::setDataForGroup($mod_group, $content, false);
|
|
if (!$mod_group->add()) {
|
|
# module validation
|
|
return false;
|
|
}
|
|
|
|
if (count($content['list_menu']) > 0) {
|
|
$list_new_id = array();
|
|
foreach ($content['list_menu'] as $menu) {
|
|
$mod_menu = new Btmegamenu();
|
|
foreach ($menu as $key => $val) {
|
|
if (in_array($key, $language_field)) {
|
|
foreach ($val as $key_lang => $val_lang) {
|
|
# module validation
|
|
$mod_menu->{$key}[$lang_list[$key_lang]] = $val_lang;
|
|
}
|
|
} else {
|
|
# module validation
|
|
if ($key == 'id_group') {
|
|
$mod_menu->{$key} = $mod_group->id;
|
|
} elseif ($key == 'id_parent') {
|
|
if ($val != 0) {
|
|
$mod_menu->{$key} = $list_new_id[$val];
|
|
} else {
|
|
$mod_menu->{$key} = $val;
|
|
}
|
|
} else {
|
|
$mod_menu->{$key} = $val;
|
|
}
|
|
}
|
|
}
|
|
|
|
$mod_menu->id = 0;
|
|
if (!$mod_menu->add()) {
|
|
return false;
|
|
}
|
|
$list_new_id[$menu['id_btmegamenu']] = $mod_menu->id;
|
|
}
|
|
}
|
|
}
|
|
//import widget
|
|
if (count($content['list_widget']) > 0) {
|
|
if (!$this->processImportWidgets($content['list_widget'], $override_widget, $shop_id)) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public function importWidgets()
|
|
{
|
|
$this->renderGroupConfig = true;
|
|
$type = Tools::strtolower(Tools::substr(strrchr($_FILES['import_widgets_file']['name'], '.'), 1));
|
|
if (isset($_FILES['import_widgets_file']) && $type == 'txt' && isset($_FILES['import_widgets_file']['tmp_name']) && !empty($_FILES['import_widgets_file']['tmp_name'])) {
|
|
$content = Tools::file_get_contents($_FILES['import_widgets_file']['tmp_name']);
|
|
$content = Tools::jsonDecode(LeoBtmegamenuHelper::base64Decode($content), true);
|
|
$override_import_widgets = Tools::getValue('override_import_widgets');
|
|
$shop_id = $this->context->shop->id;
|
|
if (count($content) > 0) {
|
|
if (!$this->processImportWidgets($content, $override_import_widgets, $shop_id)) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public function processImportWidgets($list_widget, $override, $shop_id)
|
|
{
|
|
$languages = Language::getLanguages();
|
|
|
|
if (!is_array($list_widget) || !isset($list_widget[0]['id_btmegamenu_widgets']) || $list_widget[0]['id_btmegamenu_widgets'] == '') {
|
|
return false;
|
|
}
|
|
foreach ($list_widget as $widget) {
|
|
$check_widget_exists = LeoWidget::getWidetByKey($widget['key_widget'], $shop_id);
|
|
if ($check_widget_exists['id'] != '' && $override) {
|
|
$mod_widget = new LeoWidget($check_widget_exists['id']);
|
|
}
|
|
if (($override && $check_widget_exists['id'] == '') || (!$override && $check_widget_exists['id'] == '')) {
|
|
$mod_widget = new LeoWidget();
|
|
}
|
|
$mod_widget->name = $widget['name'];
|
|
$mod_widget->type = $widget['type'];
|
|
$params_widget = LeoBtmegamenuHelper::base64Decode($widget['params']);
|
|
|
|
foreach ($languages as $lang) {
|
|
# module validation
|
|
if (strpos($params_widget, '_'.$lang['iso_code'].'"') !== false) {
|
|
$params_widget = str_replace('_'.$lang['iso_code'].'"', '_'.$lang['id_lang'].'"', $params_widget);
|
|
}
|
|
}
|
|
$mod_widget->params = LeoBtmegamenuHelper::base64Encode($params_widget);
|
|
|
|
if ($check_widget_exists['id'] != '' && $override) {
|
|
if (!$mod_widget->save()) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
if (($override && $check_widget_exists['id'] == '') || (!$override && $check_widget_exists['id'] == '')) {
|
|
$mod_widget->key_widget = $widget['key_widget'];
|
|
$mod_widget->id_shop = $shop_id;
|
|
$mod_widget->id = 0;
|
|
|
|
if (!$mod_widget->add()) {
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
//remove all menu of group when delete group or when import override
|
|
public function removeAllMenuOfGroup($id_group)
|
|
{
|
|
$res = true;
|
|
|
|
$list_menu = BtmegamenuGroup::getMenuParentByGroup($id_group);
|
|
if (count($list_menu) > 0) {
|
|
foreach ($list_menu as $key => $list_menu_item) {
|
|
$mod_menu = new Btmegamenu($list_menu_item['id_btmegamenu']);
|
|
$res = $mod_menu->delete();
|
|
}
|
|
// validate module
|
|
unset($key);
|
|
$this->clearCache();
|
|
}
|
|
|
|
return $res;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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;
|
|
}
|
|
|
|
public function getThemeMediaDir($media = null)
|
|
{
|
|
$media_dir = '';
|
|
|
|
if (version_compare(_PS_VERSION_, '1.7.4.0', '>=') || version_compare(Configuration::get('PS_VERSION_DB'), '1.7.4.0', '>=')) {
|
|
if ($media == 'img') {
|
|
$media_dir = 'assets/img/modules/'.$this->name.'/';
|
|
}
|
|
|
|
if ($media == 'css') {
|
|
$media_dir = 'assets/css/modules/'.$this->name.'/views/';
|
|
}
|
|
} else {
|
|
$media_dir = 'modules/'.$this->name.'/';
|
|
}
|
|
return $media_dir;
|
|
}
|
|
|
|
private function saveMenu()
|
|
{
|
|
if (!$id_group = Tools::getValue('id_group')) {
|
|
$this->html .= $this->displayError($this->l('An error occurred while attempting to save.'));
|
|
} else {
|
|
if ($id_btmegamenu = Tools::getValue('id_btmegamenu')) {
|
|
# validate module
|
|
$megamenu = new Btmegamenu((int)$id_btmegamenu);
|
|
} else {
|
|
# validate module
|
|
$megamenu = new Btmegamenu();
|
|
}
|
|
|
|
$keys = LeoBtmegamenuHelper::getConfigKey(false);
|
|
$post = LeoBtmegamenuHelper::getPost($keys, false);
|
|
$keys = LeoBtmegamenuHelper::getConfigKey(true);
|
|
$post += LeoBtmegamenuHelper::getPost($keys, true);
|
|
|
|
$megamenu->copyFromPost($post);
|
|
$megamenu->id_shop = $this->context->shop->id;
|
|
|
|
$megamenu->id_group = $id_group;
|
|
if ($megamenu->type && $megamenu->type != 'html' && Tools::getValue($megamenu->type.'_type')) {
|
|
# validate module
|
|
$megamenu->item = Tools::getValue($megamenu->type.'_type');
|
|
$megamenu->item_parameter = Tools::getValue($megamenu->type.'_type_parameter');
|
|
}
|
|
$url_default = '';
|
|
foreach ($megamenu->url as $menu_url) {
|
|
if ($menu_url) {
|
|
$url_default = $menu_url;
|
|
break;
|
|
}
|
|
}
|
|
if ($url_default) {
|
|
foreach ($megamenu->url as &$menu_url) {
|
|
if (!$menu_url) {
|
|
$menu_url = $url_default;
|
|
}
|
|
}
|
|
}
|
|
if ($megamenu->validateFields(false) && $megamenu->validateFieldsLang(false)) {
|
|
if (!Tools::getValue('id_btmegamenu')) {
|
|
# Auto set position when create menu
|
|
$megamenu->position = Btmegamenu::getLastPosition((int)$megamenu->id_parent);
|
|
}
|
|
|
|
$megamenu->save();
|
|
$megamenu->cleanPositions($megamenu->id_parent);
|
|
if (isset($_FILES['image']) && isset($_FILES['image']['tmp_name']) && !empty($_FILES['image']['tmp_name'])) {
|
|
$this->checkFolderIcon();
|
|
if (ImageManager::validateUpload($_FILES['image'])) {
|
|
return false;
|
|
} elseif (!($tmp_name = tempnam(_PS_TMP_IMG_DIR_, 'PS')) || !move_uploaded_file($_FILES['image']['tmp_name'], $tmp_name)) {
|
|
return false;
|
|
} elseif (!ImageManager::resize($tmp_name, $this->img_path.$_FILES['image']['name'])) {
|
|
return false;
|
|
}
|
|
unlink($tmp_name);
|
|
$megamenu->image = $_FILES['image']['name'];
|
|
$megamenu->save();
|
|
} else if (Tools::getIsset('delete_icon')) {
|
|
if ($megamenu->image) {
|
|
unlink($this->img_path.$megamenu->image);
|
|
$megamenu->image = '';
|
|
$megamenu->save();
|
|
}
|
|
}
|
|
Tools::redirectAdmin(AdminController::$currentIndex.'&configure=leobootstrapmenu&editgroup=1&id_group='.$id_group.'&id_btmegamenu='.$megamenu->id.'&successful=1&save'.$this->name.'&token='.Tools::getValue('token'));
|
|
} else {
|
|
# validate module
|
|
$errors = array();
|
|
$errors[] = $this->l('An error occurred while attempting to save.');
|
|
$errors[] = $this->l('Do not let the requirement fields (*) are empty.');
|
|
if (!Validate::isUnsignedInt(Tools::getValue('colums'))) {
|
|
$errors[] = $this->l('"Colums" is invalid. Must an integer validity (unsigned).');
|
|
}
|
|
}
|
|
if (isset($errors) && count($errors)) {
|
|
$this->html .= $this->displayError(implode('<br />', $errors));
|
|
} else {
|
|
$this->clearCache();
|
|
$this->html .= $this->displayConfirmation($this->l('Settings updated.'));
|
|
}
|
|
}
|
|
}
|
|
|
|
private function deleteMenu()
|
|
{
|
|
if (!$id_group = Tools::getValue('id_group')) {
|
|
$this->html .= $this->displayError($this->l('An error occurred while attempting to delete.'));
|
|
} else {
|
|
$obj = new Btmegamenu((int)Tools::getValue('id_btmegamenu'));
|
|
$obj->delete();
|
|
$this->clearCache();
|
|
Tools::redirectAdmin(AdminController::$currentIndex.'&editgroup=1&id_group='.$id_group.'&successful=1&configure='.$this->name.'&token='.Tools::getAdminTokenLite('AdminModules'));
|
|
}
|
|
}
|
|
|
|
private function deleteManyMenu()
|
|
{
|
|
if (!$id_group = Tools::getValue('id_group')) {
|
|
$this->html .= $this->displayError($this->l('An error occurred while attempting to delete.'));
|
|
} else {
|
|
$list = array_filter(explode(',', trim(Tools::getValue('list'), ',')));
|
|
if (is_array($list) && $list) {
|
|
foreach ($list as $key => $id) {
|
|
# validate module
|
|
unset($key);
|
|
$obj = new Btmegamenu((int)$id);
|
|
if ($obj->id) {
|
|
$obj->delete();
|
|
}
|
|
}
|
|
$this->clearCache();
|
|
}
|
|
Tools::redirectAdmin(AdminController::$currentIndex.'&editgroup=1&id_group='.$id_group.'&successful=1&configure='.$this->name.'&token='.Tools::getAdminTokenLite('AdminModules'));
|
|
}
|
|
}
|
|
|
|
private function statusMenu($active)
|
|
{
|
|
if (!Tools::getValue('id_btmegamenu')) {
|
|
$this->html .= $this->displayError($this->l('An error occurred while attempting to change status.'));
|
|
} else {
|
|
Db::getInstance()->execute('UPDATE '._DB_PREFIX_.'btmegamenu SET active='.$active.' WHERE id_btmegamenu='.Tools::getValue('id_btmegamenu'));
|
|
}
|
|
}
|
|
|
|
private function duplicateMenu()
|
|
{
|
|
if (!Tools::getValue('id_btmegamenu') || !$id_group = Tools::getValue('id_group')) {
|
|
$this->html .= $this->displayError($this->l('An error occurred while attempting to duplicate.'));
|
|
} else {
|
|
$mod_menu = new Btmegamenu((int)Tools::getValue('id_btmegamenu'));
|
|
$mod_new_menu = new Btmegamenu();
|
|
|
|
$defined = $mod_new_menu->getDefinition('Btmegamenu');
|
|
foreach ($defined['fields'] as $ke => $val) {
|
|
# module validation
|
|
unset($val);
|
|
|
|
if ($ke == 'id') {
|
|
continue;
|
|
}
|
|
|
|
if ($ke == 'title') {
|
|
$tmp = array();
|
|
foreach ($mod_menu->title as $kt => $vt) {
|
|
$tmp[$kt] = $this->l('Duplicate of').' '.$vt;
|
|
}
|
|
|
|
$mod_new_menu->{$ke} = $tmp;
|
|
} elseif ($ke == 'position') {
|
|
$mod_new_menu->{$ke} = Btmegamenu::getLastPosition((int)$mod_menu->id_parent);
|
|
} else {
|
|
$mod_new_menu->{$ke} = $mod_menu->{$ke};
|
|
}
|
|
}
|
|
$errors = array();
|
|
if (!$mod_new_menu->add()) {
|
|
$errors[] = $this->l('The menu could not be duplicate.');
|
|
}
|
|
|
|
if (isset($errors) && count($errors)) {
|
|
$this->html .= $this->displayError(implode('<br />', $errors));
|
|
} else {
|
|
$this->clearCache();
|
|
Tools::redirectAdmin(AdminController::$currentIndex.'&editgroup=1&id_group='.$id_group.'&successful=1&configure='.$this->name.'&token='.Tools::getAdminTokenLite('AdminModules'));
|
|
}
|
|
}
|
|
}
|
|
|
|
private function addMenuProductLayout()
|
|
{
|
|
$this->renderGroupConfig = true;
|
|
$langs = Language::getLanguages(false);
|
|
//add new menu item for product layout
|
|
if (!$id_group = Tools::getValue('id_group')) {
|
|
$this->html .= $this->displayError($this->l('An error occurred while attempting to save.'));
|
|
} else {
|
|
$megamenu = new Btmegamenu();
|
|
|
|
$id_shop = $this->context->shop->id;
|
|
|
|
foreach ($langs as $lang) {
|
|
$megamenu->title[$lang['id_lang']] = $this->l('Product Layouts');
|
|
$megamenu->url[$lang['id_lang']] = '#';
|
|
}
|
|
|
|
$megamenu->id_parent = 0;
|
|
$megamenu->sub_with = 'widget';
|
|
$megamenu->is_group = 0;
|
|
$megamenu->colums = 1;
|
|
$megamenu->type = 'url';
|
|
|
|
$megamenu->menu_class = 'icon-new';
|
|
$megamenu->show_title = 1;
|
|
$megamenu->level_depth = 1;
|
|
$megamenu->active = 1;
|
|
|
|
$megamenu->show_sub = 0;
|
|
$megamenu->target = '_self';
|
|
$megamenu->privacy = 0;
|
|
$megamenu->level = 0;
|
|
$megamenu->left = 0;
|
|
$megamenu->right = 0;
|
|
$megamenu->is_cattree = 1;
|
|
|
|
$megamenu->id_shop = $id_shop;
|
|
|
|
$megamenu->id_group = $id_group;
|
|
$megamenu->position = Btmegamenu::getLastPosition((int)$megamenu->id_parent);
|
|
$megamenu->save();
|
|
|
|
if ($megamenu->save()) {
|
|
$megamenu->cleanPositions($megamenu->id_parent);
|
|
|
|
//create widget with each product layout for new menu item
|
|
$sql = 'SELECT a.*
|
|
FROM `'._DB_PREFIX_.'appagebuilder_details` as a
|
|
INNER JOIN `'._DB_PREFIX_.'appagebuilder_details_shop` ps ON (ps.`id_appagebuilder_details` = a.`id_appagebuilder_details`) WHERE ps.id_shop='.(int)$id_shop;
|
|
$list_productdetail = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
|
|
|
|
if (count($list_productdetail) > 1) {
|
|
$widget_lang_field = array('widget_title', 'htmlcontent');
|
|
$list_widget = '';
|
|
foreach ($list_productdetail as $key => $list_productdetail_item) {
|
|
$layout_order = $key+1;
|
|
$url_img_preview = '#';
|
|
if ($list_productdetail_item['url_img_preview'] != '') {
|
|
$url_img_preview = $list_productdetail_item['url_img_preview'];
|
|
}
|
|
|
|
$model = new LeoWidget();
|
|
$model->id_shop = $id_shop;
|
|
$model->key_widget = time()+$layout_order;
|
|
$model->name = 'Product Layout '.$layout_order;
|
|
$model->type = 'html';
|
|
$tmp = array();
|
|
foreach ($widget_lang_field as $fVal) {
|
|
foreach ($langs as $language) {
|
|
if ($fVal == 'htmlcontent') {
|
|
$tmp[$fVal.'_'.$language['id_lang']] = '<a href="?layout='.$list_productdetail_item['plist_key'].'" title="'.$list_productdetail_item['name'].'"><img class="img-fluid" src="'.$url_img_preview.'" alt="'.$list_productdetail_item['name'].'"></a>';
|
|
} else {
|
|
$tmp[$fVal.'_'.$language['id_lang']] = '';
|
|
}
|
|
}
|
|
}
|
|
$tmp['widget_name'] = 'Product Layout '.$layout_order;
|
|
$tmp['widget_type'] = 'html';
|
|
$model->params = call_user_func('base64'.'_encode', Tools::jsonEncode($tmp));
|
|
$model->add();
|
|
if ($layout_order == count($list_productdetail)) {
|
|
$list_widget .= 'wid-'.$model->key_widget;
|
|
} else {
|
|
$list_widget .= 'wid-'.$model->key_widget.'|';
|
|
}
|
|
}
|
|
|
|
$megamenu->params_widget = call_user_func('base64'.'_encode', '{"subwith":"widget","submenu":1,"group":0,"align":"aligned-fullwidth","cols":1,"rows":[{"cols":[{"widgets":"'.$list_widget.'","colwidth":12,"colclass":"demo-product-detail"}]}]}');
|
|
$megamenu->save();
|
|
}
|
|
|
|
Tools::redirectAdmin(AdminController::$currentIndex.'&configure=leobootstrapmenu&editgroup=1&id_group='.$id_group.'&id_btmegamenu='.$megamenu->id.'&successful=1&save'.$this->name.'&token='.Tools::getValue('token'));
|
|
} else {
|
|
$this->html .= $this->displayError($this->l('An error occurred while attempting to save.'));
|
|
}
|
|
}
|
|
}
|
|
|
|
private function saveGroup()
|
|
{
|
|
$this->renderGroupConfig = true;
|
|
|
|
$langs = Language::getLanguages(false);
|
|
$errors = array();
|
|
|
|
# ACTION - add,edit for GROUP
|
|
/* Sets ID if needed */
|
|
if (Tools::getValue('id_group')) {
|
|
$mod_group = new BtmegamenuGroup((int)Tools::getValue('id_group'));
|
|
if (!Validate::isLoadedObject($mod_group)) {
|
|
$this->html .= $this->displayError($this->l('Invalid id_group'));
|
|
return;
|
|
}
|
|
} else {
|
|
$mod_group = new BtmegamenuGroup();
|
|
}
|
|
|
|
/* Sets position */
|
|
foreach ($langs as $lang) {
|
|
$mod_group->title[$lang['id_lang']] = Tools::getValue('title_group_'.$lang['id_lang']);
|
|
$mod_group->title_fo[$lang['id_lang']] = Tools::getValue('title_fo_group_'.$lang['id_lang']);
|
|
}
|
|
/* 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');
|
|
if (!Tools::getValue('id_group')) {
|
|
$mod_group->position = $mod_group->getLastPosition($context->shop->id);
|
|
$mod_group->randkey = LeoBtmegamenuHelper::genKey();
|
|
}
|
|
$params = Tools::getValue('group');
|
|
$mod_group->params = LeoBtmegamenuHelper::base64Encode(Tools::jsonEncode($params));
|
|
|
|
|
|
# Adds
|
|
if ($mod_group->validateFields(false) && $mod_group->validateFieldsLang(false)) {
|
|
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').'&success=add&editgroup=1&id_group='.$mod_group->id);
|
|
}
|
|
} 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').'&success=update&editgroup=1&id_group='.$mod_group->id);
|
|
}
|
|
}
|
|
} else {
|
|
$errors[] = $this->l('An error occurred while attempting to save.');
|
|
$errors[] = $this->l('Do not let the requirement fields (*) are empty');
|
|
}
|
|
|
|
# Save in config to edit next time
|
|
$this->clearCache();
|
|
/* Display errors if needed */
|
|
if (count($errors)) {
|
|
$this->html .= $this->displayError(implode('<br />', $errors));
|
|
} elseif (Tools::isSubmit('submitGroup')) {
|
|
$this->html .= $this->displayConfirmation($this->l('Group added'));
|
|
} else {
|
|
$this->html .= $this->displayConfirmation($this->l('Group updated'));
|
|
}
|
|
|
|
Configuration::updateValue('BTMEGAMENU_GROUP_DE', (int)Tools::getValue('id_group'));
|
|
}
|
|
|
|
private function deleteGroup()
|
|
{
|
|
$this->renderGroupConfig = true;
|
|
$mod_group = new BtmegamenuGroup((int)Tools::getValue('id_group'));
|
|
# Delete slider of group
|
|
$res = $mod_group->delete();
|
|
$this->clearCache();
|
|
if (!$res) {
|
|
$this->html .= $this->displayError($this->l('Could not delete'));
|
|
} else {
|
|
$res = $this->removeAllMenuOfGroup(Tools::getValue('id_group'));
|
|
|
|
if (!$res) {
|
|
$this->html .= $this->displayError($this->l('Could not delete'));
|
|
} else {
|
|
$this->html .= $this->displayConfirmation($this->l('Group deleted'));
|
|
Configuration::updateValue('BTMEGAMENU_GROUP_DE', '');
|
|
Tools::redirectAdmin('index.php?controller=AdminModules&token='.Tools::getAdminTokenLite('AdminModules').'&configure=leobootstrapmenu&success=delete');
|
|
}
|
|
}
|
|
}
|
|
|
|
private function duplicateGroup()
|
|
{
|
|
$this->renderGroupConfig = true;
|
|
$langs = Language::getLanguages(false);
|
|
if (!$id_group = Tools::getValue('id_group')) {
|
|
$this->html .= $this->displayError($this->l('An error occurred while attempting to duplicate.'));
|
|
} else {
|
|
$mod_group = new BtmegamenuGroup((int)Tools::getValue('id_group'));
|
|
$mod_new_group = new BtmegamenuGroup();
|
|
$defined = $mod_new_group->getDefinition('BtmegamenuGroup');
|
|
foreach ($defined['fields'] as $ke => $val) {
|
|
# module validation
|
|
unset($val);
|
|
|
|
if ($ke == 'id') {
|
|
continue;
|
|
}
|
|
|
|
if ($ke == 'title') {
|
|
foreach ($langs as $lang) {
|
|
$mod_new_group->{$ke}[$lang['id_lang']] = $this->l('Duplicate of').' '.$mod_group->{$ke}[$lang['id_lang']];
|
|
}
|
|
} elseif ($ke == 'position') {
|
|
$mod_new_group->{$ke} = BtmegamenuGroup::getLastPosition(Context::getContext()->shop->id);
|
|
} elseif ($ke == 'randkey') {
|
|
$mod_new_group->{$ke} = LeoBtmegamenuHelper::genKey();
|
|
} else {
|
|
$mod_new_group->{$ke} = $mod_group->{$ke};
|
|
}
|
|
}
|
|
$list_menu = BtmegamenuGroup::getMenuByGroup($id_group);
|
|
if (!$mod_new_group->add()) {
|
|
$this->html .= $this->displayError($this->l('The group could not be duplicate.'));
|
|
} else {
|
|
//copy menu of old group to new group
|
|
$list_menu = BtmegamenuGroup::getMenuByGroup($id_group);
|
|
|
|
$res = true;
|
|
if (count($list_menu) > 0) {
|
|
$list_new_id = array();
|
|
foreach ($list_menu as $list_menu_item) {
|
|
$mod_menu = new Btmegamenu($list_menu_item['id_btmegamenu']);
|
|
$mod_new_menu = new Btmegamenu();
|
|
|
|
$defined = $mod_new_menu->getDefinition('Btmegamenu');
|
|
foreach ($defined['fields'] as $ke => $val) {
|
|
# module validation
|
|
unset($val);
|
|
|
|
if ($ke == 'id') {
|
|
continue;
|
|
}
|
|
|
|
if ($ke == 'id_group') {
|
|
$mod_new_menu->{$ke} = $mod_new_group->id;
|
|
} elseif ($ke == 'id_parent') {
|
|
if ($mod_menu->{$ke} != 0) {
|
|
$mod_new_menu->{$ke} = $list_new_id[$mod_menu->{$ke}];
|
|
} else {
|
|
$mod_new_menu->{$ke} = $mod_menu->{$ke};
|
|
}
|
|
} else {
|
|
$mod_new_menu->{$ke} = $mod_menu->{$ke};
|
|
}
|
|
}
|
|
if (!$mod_new_menu->add()) {
|
|
$res = false;
|
|
} else {
|
|
$list_new_id[$list_menu_item['id_btmegamenu']] = $mod_new_menu->id;
|
|
}
|
|
}
|
|
}
|
|
if ($res) {
|
|
//update widget with new menu id
|
|
$this->html .= $this->displayConfirmation($this->l('Group duplicated'));
|
|
Configuration::updateValue('BTMEGAMENU_GROUP_DE', '');
|
|
// Tools::redirectAdmin(AdminController::$currentIndex.'&editgroup=1&id_group='.$id_group.'&successful=1&configure='.$this->name.'&token='.Tools::getAdminTokenLite('AdminModules'));
|
|
Tools::redirectAdmin('index.php?controller=AdminModules&token='.Tools::getAdminTokenLite('AdminModules').'&configure=leobootstrapmenu&success=duplicategroup');
|
|
} else {
|
|
$this->html .= $this->displayError($this->l('The group could not be duplicate.'));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private function exportGroup()
|
|
{
|
|
$this->renderGroupConfig = true;
|
|
//export group process
|
|
if (Tools::getValue('exportgroup')) {
|
|
$languages = Language::getLanguages();
|
|
$group = BtmegamenuGroup::getGroupByID(Tools::getValue('id_group'));
|
|
$obj_group = new BtmegamenuGroup(Tools::getValue('id_group'));
|
|
foreach ($languages as $lang) {
|
|
# module validation
|
|
$group['title'][$lang['iso_code']] = $obj_group->title[$lang['id_lang']];
|
|
$group['title_fo'][$lang['iso_code']] = $obj_group->title_fo[$lang['id_lang']];
|
|
}
|
|
//add list menu of group
|
|
// $menus = $this->getMenusByGroup(Tools::getValue('id_group'));
|
|
$id_group = (int)Tools::getValue('id_group');
|
|
$menus = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
|
|
SELECT btm.*, btml.*
|
|
FROM '._DB_PREFIX_.'btmegamenu btm
|
|
LEFT JOIN '._DB_PREFIX_.'btmegamenu_lang btml ON (btm.id_btmegamenu = btml.id_btmegamenu)
|
|
WHERE btm.id_group = '.(int)$id_group.'
|
|
ORDER BY btm.id_parent ASC');
|
|
|
|
$language_field = array('title', 'text', 'url', 'description', 'content_text', 'submenu_content_text');
|
|
|
|
$lang_list = array();
|
|
foreach ($languages as $lang) {
|
|
# module validation
|
|
$lang_list[$lang['id_lang']] = $lang['iso_code'];
|
|
}
|
|
|
|
$list_widgets = '';
|
|
|
|
foreach ($menus as $menus_item) {
|
|
if (Tools::getValue('widgets')) {
|
|
if ($menus_item['params_widget'] != '') {
|
|
$list_widgets .= LeoBtmegamenuHelper::base64Decode($menus_item['params_widget']);
|
|
}
|
|
} else {
|
|
$menus_item['params_widget'] = '';
|
|
}
|
|
foreach ($menus_item as $key => $value) {
|
|
if ($key == 'id_lang') {
|
|
$curent_lang = $lang_list[$value];
|
|
continue;
|
|
}
|
|
if (in_array($key, $language_field)) {
|
|
$group['list_menu'][$menus_item['id_btmegamenu']][$key][$curent_lang] = $value;
|
|
} else {
|
|
# module validation
|
|
$group['list_menu'][$menus_item['id_btmegamenu']][$key] = $value;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (Tools::getValue('widgets')) {
|
|
$widget_include = 'with_widgets';
|
|
} else {
|
|
// $group['params_widget'] = '';
|
|
$widget_include = 'without_widgets';
|
|
}
|
|
//add list menu of group
|
|
$group['list_widget'] = array();
|
|
if ($list_widgets != '' && Tools::getValue('widgets')) {
|
|
$model = new LeoWidget();
|
|
$widget_shop = $model->getWidgets();
|
|
if (count($widget_shop) > 0) {
|
|
foreach ($widget_shop as $widget_shop_item) {
|
|
if (strpos($list_widgets, 'wid-'.$widget_shop_item['key_widget']) !== false) {
|
|
$params_widget = LeoBtmegamenuHelper::base64Decode($widget_shop_item['params']);
|
|
foreach ($languages as $lang) {
|
|
# module validation
|
|
if (strpos($params_widget, '_'.$lang['id_lang'].'"') !== false) {
|
|
$params_widget = str_replace('_'.$lang['id_lang'].'"', '_'.$lang['iso_code'].'"', $params_widget);
|
|
}
|
|
}
|
|
$widget_shop_item['params'] = LeoBtmegamenuHelper::base64Encode($params_widget);
|
|
$group['list_widget'][] = $widget_shop_item;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
header('Content-Type: plain/text');
|
|
header('Content-Disposition: Attachment; filename=export_megamenu_group_'.Tools::getValue('id_group').'_'.$widget_include.'_'.time().'.txt');
|
|
header('Pragma: no-cache');
|
|
die(LeoBtmegamenuHelper::base64Encode(Tools::jsonEncode($group)));
|
|
}
|
|
}
|
|
|
|
private function exportWidgets()
|
|
{
|
|
//export widgets process
|
|
if (Tools::getValue('exportwidgets')) {
|
|
$languages = Language::getLanguages();
|
|
$model = new LeoWidget();
|
|
$widget_shop = $model->getWidgets();
|
|
|
|
$widgets = array();
|
|
if (count($widget_shop) > 0) {
|
|
foreach ($widget_shop as $widget_shop_item) {
|
|
$params_widget = LeoBtmegamenuHelper::base64Decode($widget_shop_item['params']);
|
|
foreach ($languages as $lang) {
|
|
# module validation
|
|
if (strpos($params_widget, '_'.$lang['id_lang'].'"') !== false) {
|
|
$params_widget = str_replace('_'.$lang['id_lang'].'"', '_'.$lang['iso_code'].'"', $params_widget);
|
|
}
|
|
}
|
|
|
|
$widget_shop_item['params'] = LeoBtmegamenuHelper::base64Encode($params_widget);
|
|
$widgets[] = $widget_shop_item;
|
|
}
|
|
}
|
|
|
|
header('Content-Type: plain/text');
|
|
header('Content-Disposition: Attachment; filename=export_widgets_'.time().'.txt');
|
|
header('Pragma: no-cache');
|
|
die(LeoBtmegamenuHelper::base64Encode(Tools::jsonEncode($widgets)));
|
|
}
|
|
}
|
|
|
|
private function changeStatusGroup()
|
|
{
|
|
$this->renderGroupConfig = true;
|
|
if (Tools::isSubmit('changeGStatus') && Tools::isSubmit('id_group')) {
|
|
# ACTION - Change status for GROUP : enable or disable a group
|
|
$mod_group = new BtmegamenuGroup((int)Tools::getValue('id_group'));
|
|
$change_status = Tools::getValue('changeGStatus');
|
|
$mod_group->update_flag = false;
|
|
|
|
if ($change_status == BtmegamenuGroup::GROUP_STATUS_DISABLE && $mod_group->active != $change_status) {
|
|
$mod_group->active = BtmegamenuGroup::GROUP_STATUS_DISABLE;
|
|
$mod_group->update_flag = true;
|
|
} elseif ($change_status == BtmegamenuGroup::GROUP_STATUS_ENABLE && $mod_group->active != $change_status) {
|
|
$mod_group->active = BtmegamenuGroup::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.')));
|
|
}
|
|
}
|
|
|
|
//save group id in config to edit in next time when open module
|
|
Configuration::updateValue('BTMEGAMENU_GROUP_DE', (int)Tools::getValue('id_group'));
|
|
}
|
|
|
|
private function changePositionMenu()
|
|
{
|
|
$list = Tools::getValue('list');
|
|
$root = 0;
|
|
$child = array();
|
|
foreach ($list as $id => $parent_id) {
|
|
if ($parent_id <= 0) {
|
|
# validate module
|
|
$parent_id = $root;
|
|
}
|
|
$child[$parent_id][] = $id;
|
|
}
|
|
$res = true;
|
|
foreach ($child as $id_parent => $menus) {
|
|
$i = 0;
|
|
foreach ($menus as $id_btmegamenu) {
|
|
$sql = 'UPDATE `'._DB_PREFIX_.'btmegamenu` SET `position` = '.(int)$i.', id_parent = '.(int)$id_parent.'
|
|
WHERE `id_btmegamenu` = '.(int)$id_btmegamenu;
|
|
$res &= Db::getInstance()->execute($sql);
|
|
$i++;
|
|
}
|
|
}
|
|
$this->clearCache();
|
|
$array = array('hasError' => false, 'errors' => $this->l('Update Positions Done'));
|
|
die(Tools::jsonEncode($array));
|
|
}
|
|
|
|
private function changePositionGroup()
|
|
{
|
|
$list_group = Tools::getValue('list_group');
|
|
$i = 0;
|
|
foreach ($list_group as $id_btmegamenu_group => $val) {
|
|
# validate module
|
|
unset($val);
|
|
$sql = 'UPDATE `'._DB_PREFIX_.'btmegamenu_group` SET `position` = '.(int)$i.'
|
|
WHERE `id_btmegamenu_group` = '.(int)$id_btmegamenu_group;
|
|
Db::getInstance()->execute($sql);
|
|
$i++;
|
|
}
|
|
$this->clearCache();
|
|
$array = array('hasError' => false, 'errors' => $this->l('Update Group Positions Done'));
|
|
die(Tools::jsonEncode($array));
|
|
}
|
|
|
|
public function displaySuccessMessage()
|
|
{
|
|
if (count($this->errors) > 0) {
|
|
return;
|
|
}
|
|
|
|
if (Tools::getValue('success')) {
|
|
switch (Tools::getValue('success')) {
|
|
case 'add':
|
|
$this->html = $this->displayConfirmation($this->l('Group added'));
|
|
break;
|
|
case 'update':
|
|
$this->html = $this->displayConfirmation($this->l('Group updated'));
|
|
break;
|
|
case 'delete':
|
|
$this->html = $this->displayConfirmation($this->l('Group deleted'));
|
|
break;
|
|
case 'clearcache':
|
|
$this->html = $this->displayConfirmation($this->l('Successful clear cache'));
|
|
break;
|
|
case 'duplicategroup':
|
|
$this->html = $this->displayConfirmation($this->l('Duplicate group is successful'));
|
|
break;
|
|
case 'importgroup':
|
|
$this->html = $this->displayConfirmation($this->l('Import group is successful'));
|
|
break;
|
|
case 'importwidgets':
|
|
$this->html = $this->displayConfirmation($this->l('Import widgets is successful'));
|
|
break;
|
|
case 'correct':
|
|
$this->html = $this->displayConfirmation($this->l('Correct Module is successful'));
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 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);
|
|
}
|
|
|
|
/**
|
|
* FRONTEND
|
|
************************************************************************************************************************************************
|
|
*/
|
|
public function hookDisplayHeader()
|
|
{
|
|
$media_dir = $this->getMediaDir();
|
|
$this->context->controller->addCSS(__PS_BASE_URI__.$media_dir.'css/megamenu.css', 'all');
|
|
$this->context->controller->addCSS(__PS_BASE_URI__.$media_dir.'css/leomenusidebar.css', 'all');
|
|
$this->context->controller->registerJavascript('modules-leoboostrapmenu-leoboostrapmenu', $media_dir.'js/leobootstrapmenu.js', array('position' => 'bottom', 'priority' => 150));
|
|
Context::getContext()->controller->addJqueryPlugin('fancybox');
|
|
$link = new Link();
|
|
$current_link = $link->getPageLink('', false, $this->context->language->id);
|
|
$this->smarty->assign('current_link', $current_link);
|
|
return $this->display(_PS_MODULE_DIR_.'leobootstrapmenu/leobootstrapmenu.php', 'views/templates/hook/javascript_parameter.tpl');
|
|
}
|
|
|
|
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 clearCache()
|
|
{
|
|
$tpl = 'views/templates/hook/megamenu.tpl';
|
|
foreach ($this->hook_support as $val) {
|
|
$group = BtmegamenuGroup::getActiveGroupByHook($val);
|
|
foreach ($group as $group_val) {
|
|
$this->_clearCache($tpl, $val.'_'.$this->name.'_'.$group_val['id_btmegamenu_group']);
|
|
}
|
|
}
|
|
|
|
// clear cache for appagebuilder
|
|
$list_group = BtmegamenuGroup::getGroups();
|
|
foreach ($list_group as $list_group_val) {
|
|
if (isset($list_group_val['form_id']) && $list_group_val['form_id'] != '') {
|
|
$this->_clearCache($tpl, $list_group_val['id_btmegamenu_group'].'_'.$list_group_val['form_id'].'_'.$this->name);
|
|
}
|
|
}
|
|
}
|
|
|
|
public function getWidgetVariables($hookName = null, array $configuration = [])
|
|
{
|
|
//require function of prestashop
|
|
}
|
|
|
|
public function renderWidget($hookName = null, array $configuration = [])
|
|
{
|
|
return $this->_processHook($hookName);
|
|
}
|
|
|
|
public function _processHook($hookName)
|
|
{
|
|
$tpl = 'module:leobootstrapmenu/views/templates/hook/megamenu.tpl';
|
|
$group = BtmegamenuGroup::cacheGroupsByFields(array('hook' => $hookName, 'active' => 1), true);
|
|
|
|
if (!$group) {
|
|
return false;
|
|
}
|
|
$hook_html = '';
|
|
foreach ($group as $group_val) {
|
|
if (!$this->_prepareHook($hookName, $group_val)) {
|
|
return false;
|
|
}
|
|
$hook_html .= $this->fetch($tpl, $this->getCacheId($hookName.'_'.$this->name.'_'.$group_val['id_btmegamenu_group']));
|
|
}
|
|
return $hook_html;
|
|
}
|
|
|
|
private function _prepareHook($hook_name, $group)
|
|
{
|
|
$tpl = 'module:leobootstrapmenu/views/templates/hook/megamenu.tpl';
|
|
if ($this->isCached($tpl, $this->getCacheId($hook_name.'_'.$this->name.'_'.$group['id_btmegamenu_group']))) {
|
|
return true;
|
|
}
|
|
if (!is_dir(_PS_ROOT_DIR_.'/cache/'.$this->name)) {
|
|
mkdir(_PS_ROOT_DIR_.'/cache/'.$this->name, 0755, true);
|
|
}
|
|
$params_group = Tools::jsonDecode(LeoBtmegamenuHelper::base64Decode($group['params']), true);
|
|
$params = array();
|
|
|
|
$show_cavas = $params_group['show_cavas'];
|
|
$type_sub = $params_group['type_sub'];
|
|
$group_type = $params_group['group_type'];
|
|
$group_class = $params_group['group_class'];
|
|
$list_root_menu = Btmegamenu::getMenusRoot($group['id_btmegamenu_group']);
|
|
|
|
$get_params_widget = array();
|
|
if (count($list_root_menu) > 0) {
|
|
foreach ($list_root_menu as $list_root_menu_item) {
|
|
$menu_obj = new Btmegamenu($list_root_menu_item['id_btmegamenu']);
|
|
$menu_params_widget = $menu_obj->getParamsWidget();
|
|
if ($menu_params_widget != '') {
|
|
$get_params_widget[$list_root_menu_item['id_btmegamenu']] = Tools::jsonDecode(LeoBtmegamenuHelper::base64Decode($menu_params_widget));
|
|
}
|
|
}
|
|
}
|
|
$params['params'] = $get_params_widget;
|
|
$obj = new Btmegamenu();
|
|
$obj->setModule($this);
|
|
$boostrapmenu = trim($obj->getFrontTree(0, false, $params['params'], $group['id_btmegamenu_group'], $hook_name));
|
|
$this->smarty->assign('boostrapmenu', $boostrapmenu);
|
|
$this->smarty->assign('show_cavas', $show_cavas);
|
|
$this->smarty->assign('type_sub', $type_sub);
|
|
$this->smarty->assign('group_type', $group_type);
|
|
$this->smarty->assign('group_class', $group_class);
|
|
$this->smarty->assign('group_title', $group['title_fo']);
|
|
$this->smarty->assign('megamenu_id', $group['id_btmegamenu_group']);
|
|
|
|
return true;
|
|
}
|
|
|
|
//function get list group for ApPageBuilder
|
|
public function getGroups()
|
|
{
|
|
$this->context = Context::getContext();
|
|
$id_shop = $this->context->shop->id;
|
|
$id_lang = Context::getContext()->language->id;
|
|
$sql = 'SELECT *
|
|
FROM '._DB_PREFIX_.'btmegamenu_group gr
|
|
LEFT JOIN '._DB_PREFIX_.'btmegamenu_group_lang grl ON gr.id_btmegamenu_group = grl.id_btmegamenu_group AND grl.id_lang = '.(int)$id_lang.'
|
|
WHERE gr.id_shop = '.(int)$id_shop.' ORDER BY gr.id_btmegamenu_group';
|
|
return Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
|
|
}
|
|
|
|
//function callback for ApPageBuilder
|
|
public function processHookCallBack($group_id, $form_id)
|
|
{
|
|
$tpl = 'module:leobootstrapmenu/views/templates/hook/megamenu.tpl';
|
|
|
|
$cache_id = $this->getCacheId($group_id.'_'.$form_id.'_'.$this->name);
|
|
if (!$this->isCached($tpl, $cache_id)) {
|
|
$this->prepareHookForApPageBuilder($group_id, $form_id);
|
|
}
|
|
|
|
return $this->fetch($tpl, $cache_id);
|
|
}
|
|
|
|
//function callback for ApPageBuilder
|
|
private function prepareHookForApPageBuilder($group_id, $form_id)
|
|
{
|
|
$error = '';
|
|
$group = BtmegamenuGroup::cacheGroupsByFields(array('id_btmegamenu_group' => (int)$group_id));
|
|
|
|
if (!$group) {
|
|
$error = 'The Group of LeoBoostrapMenu is not exist, please access ApPageBuilder module then delete it.';
|
|
} elseif ($group['active'] != 1) {
|
|
$error = 'The Group of LeoBoostrapMenu is not active, please access ApPageBuilder module then delete it';
|
|
}
|
|
|
|
if ($error) {
|
|
$this->smarty->assign('error', $error);
|
|
return;
|
|
}
|
|
|
|
$params_group = Tools::jsonDecode(LeoBtmegamenuHelper::base64Decode($group['params']), true);
|
|
$params = array();
|
|
|
|
$show_cavas = $params_group['show_cavas'];
|
|
$type_sub = $params_group['type_sub'];
|
|
$group_type = $params_group['group_type'];
|
|
$group_class = $params_group['group_class'];
|
|
$list_root_menu = Btmegamenu::getMenusRoot($group['id_btmegamenu_group']);
|
|
|
|
$get_params_widget = array();
|
|
if (count($list_root_menu) > 0) {
|
|
foreach ($list_root_menu as $list_root_menu_item) {
|
|
$menus = Btmegamenu::cacheMenusByFields(array('id_btmegamenu' => (int)$list_root_menu_item['id_btmegamenu']));
|
|
$menu_params_widget = (isset($menus['params_widget']) && $menus['params_widget']) ? $menus['params_widget'] : '';
|
|
if ($menu_params_widget != '') {
|
|
$get_params_widget[$list_root_menu_item['id_btmegamenu']] = Tools::jsonDecode(LeoBtmegamenuHelper::base64Decode($menu_params_widget));
|
|
}
|
|
}
|
|
}
|
|
|
|
$params['params'] = $get_params_widget;
|
|
$obj = new Btmegamenu();
|
|
$obj->setModule($this);
|
|
$boostrapmenu = $obj->getFrontTree(0, false, $params['params'], $group['id_btmegamenu_group']);
|
|
$this->smarty->assign('boostrapmenu', $boostrapmenu);
|
|
$this->smarty->assign('show_cavas', $show_cavas);
|
|
$this->smarty->assign('type_sub', $type_sub);
|
|
$this->smarty->assign('group_type', $group_type);
|
|
$this->smarty->assign('group_class', $group_class);
|
|
$this->smarty->assign('group_title', $group['title_fo']);
|
|
$this->smarty->assign('megamenu_id', $form_id);
|
|
}
|
|
|
|
/**
|
|
* @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/LeoDataSample.php');
|
|
$sample = new Datasample();
|
|
LeoBtmegamenuHelper::$id_shop = $shop->id;
|
|
$sample->_id_shop = $shop->id;
|
|
$sample->processImport('leobootstrapmenu');
|
|
}
|
|
}
|
|
}
|
|
}
|