first commit
This commit is contained in:
@@ -0,0 +1,413 @@
|
||||
<?php
|
||||
/**
|
||||
* 2007-2015 Apollotheme
|
||||
*
|
||||
* NOTICE OF LICENSE
|
||||
*
|
||||
* ApPageBuilder is module help you can build content for your shop
|
||||
*
|
||||
* DISCLAIMER
|
||||
*
|
||||
* @author Apollotheme <apollotheme@gmail.com>
|
||||
* @copyright 2007-2019 Apollotheme
|
||||
* @license http://apollotheme.com - prestashop template provider
|
||||
*/
|
||||
|
||||
require_once(_PS_MODULE_DIR_.'appagebuilder/libs/Helper.php');
|
||||
|
||||
if (!defined('_PS_VERSION_')) {
|
||||
# module validation
|
||||
exit;
|
||||
}
|
||||
|
||||
class AdminApPageBuilderHookController extends ModuleAdminControllerCore
|
||||
{
|
||||
/**
|
||||
* @var Boolean $display_key
|
||||
*
|
||||
* @access protected
|
||||
*/
|
||||
public $display_key = 0;
|
||||
/**
|
||||
* @var Array $hookspos
|
||||
*
|
||||
* @access protected
|
||||
*/
|
||||
public $hookspos = array();
|
||||
/**
|
||||
* @var Array $ownPositions
|
||||
*
|
||||
* @access protected
|
||||
*/
|
||||
// public $ownPositions = array();
|
||||
/**
|
||||
* @var String $theme_name
|
||||
*
|
||||
* @access protected
|
||||
*/
|
||||
public $theme_name;
|
||||
/**
|
||||
* @var String $theme_name
|
||||
*
|
||||
* @access protected
|
||||
*/
|
||||
public $themeKey;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->bootstrap = true;
|
||||
$this->table = 'leohook';
|
||||
$this->className = 'AdminApPageBuilderHook';
|
||||
$this->lang = true;
|
||||
$this->context = Context::getContext();
|
||||
parent::__construct();
|
||||
$this->display_key = (int)Tools::getValue('show_modules');
|
||||
|
||||
// $this->ownPositions = array(
|
||||
// 'displayHeaderRight',
|
||||
// 'displaySlideshow',
|
||||
// 'topNavigation',
|
||||
// 'displayPromoteTop',
|
||||
// 'displayBottom',
|
||||
// 'displayMassBottom'
|
||||
// );
|
||||
$this->hookspos = ApPageSetting::getHook();
|
||||
$this->theme_name = apPageHelper::getThemeName();
|
||||
}
|
||||
|
||||
/**
|
||||
* Build List linked Icons Toolbar
|
||||
*/
|
||||
public function initPageHeaderToolbar()
|
||||
{
|
||||
if (empty($this->display)) {
|
||||
$this->page_header_toolbar_btn['save'] = array(
|
||||
'href' => 'index.php?tab=AdminApPageBuilderHook&token='.Tools::getAdminTokenLite('AdminApPageBuilderHook').'&action=savepos',
|
||||
'id' => 'savepos',
|
||||
'desc' => $this->l('Save Positions')
|
||||
);
|
||||
}
|
||||
parent::initPageHeaderToolbar();
|
||||
}
|
||||
|
||||
/**
|
||||
* get live Edit URL
|
||||
*/
|
||||
public function getLiveEditUrl($live_edit_params)
|
||||
{
|
||||
$url = $this->context->shop->getBaseURL().Dispatcher::getInstance()->createUrl('index', (int)$this->context->language->id, $live_edit_params);
|
||||
if (Configuration::get('PS_REWRITING_SETTINGS')) {
|
||||
$url = str_replace('index.php', '', $url);
|
||||
}
|
||||
return $url;
|
||||
}
|
||||
|
||||
/**
|
||||
* add toolbar icons
|
||||
*/
|
||||
public function initToolbar()
|
||||
{
|
||||
$this->context->smarty->assign('toolbar_scroll', 1);
|
||||
$this->context->smarty->assign('show_toolbar', 1);
|
||||
$this->context->smarty->assign('toolbar_btn', $this->toolbar_btn);
|
||||
$this->context->smarty->assign('title', $this->toolbar_title);
|
||||
}
|
||||
|
||||
/**
|
||||
* render list of modules following positions in the layout editor.
|
||||
*/
|
||||
public function renderList()
|
||||
{
|
||||
$filePath = _PS_ALL_THEMES_DIR_.$this->theme_name.'';
|
||||
$showed = true;
|
||||
$xml = simplexml_load_file($filePath.'/config.xml');
|
||||
|
||||
if (isset($xml->theme_key)) {
|
||||
$this->themeKey = trim((string)$xml->theme_key);
|
||||
}
|
||||
$this->themeKey = '1111';
|
||||
if ($this->themeKey) {
|
||||
$this->initToolbarTitle();
|
||||
$this->initToolbar();
|
||||
$hookspos = $this->hookspos;
|
||||
|
||||
foreach ($hookspos as $hook) {
|
||||
if (Hook::getIdByName($hook)) {
|
||||
// validate module
|
||||
} else {
|
||||
$new_hook = new Hook();
|
||||
$new_hook->name = pSQL($hook);
|
||||
$new_hook->title = pSQL($hook);
|
||||
$new_hook->add();
|
||||
// $id_hook = $new_hook->id;
|
||||
}
|
||||
}
|
||||
|
||||
// $sql = 'UPDATE `'._DB_PREFIX_.'hook` SET position=1, live_edit=1
|
||||
// WHERE name in ("'.implode('","', $hookspos).'") ';
|
||||
// Db::getInstance(_PS_USE_SQL_SLAVE_)->execute($sql);
|
||||
|
||||
$modules = Module::getModulesInstalled(0);
|
||||
$assoc_modules_id = array();
|
||||
|
||||
$assoc_modules_id = $module_instances = array();
|
||||
foreach ($modules as $module) {
|
||||
if ($tmp_instance = Module::getInstanceById((int)$module['id_module'])) {
|
||||
// We want to be able to sort modules by display name
|
||||
$module_instances[$tmp_instance->displayName] = $tmp_instance;
|
||||
// But we also want to associate hooks to modules using the modules IDs
|
||||
$assoc_modules_id[(int)$module['id_module']] = $tmp_instance->displayName;
|
||||
}
|
||||
}
|
||||
$hooks = Hook::getHooks(!(int)Tools::getValue('hook_position'));
|
||||
|
||||
$hookModules = array();
|
||||
|
||||
$hookedModules = array();
|
||||
foreach ($hooks as $key => $hook) {
|
||||
// validate module
|
||||
unset($key);
|
||||
|
||||
$k = $hook['name'];
|
||||
$k = (Tools::strtolower(Tools::substr($k, 0, 1)).Tools::substr($k, 1));
|
||||
if (in_array($k, $hookspos)) {
|
||||
// Get all modules for this hook or only the filtered module
|
||||
$hookModules[$k]['modules'] = Hook::getModulesFromHook($hook['id_hook'], $this->display_key);
|
||||
$hookModules[$k]['module_count'] = count($hookModules[$k]['modules']);
|
||||
|
||||
if (is_array($hookModules[$k]['modules']) && !empty($hookModules[$k]['modules'])) {
|
||||
foreach ($hookModules[$k]['modules'] as $module_key => $module) {
|
||||
if (isset($assoc_modules_id[$module['id_module']])) {
|
||||
$hookedModules[] = $module['id_module'];
|
||||
$hookModules[$k]['modules'][$module_key]['instance'] = $module_instances[$assoc_modules_id[$module['id_module']]];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$instances = array();
|
||||
foreach ($modules as $module) {
|
||||
if ($tmp_instance = Module::getInstanceById($module['id_module'])) {
|
||||
foreach ($hookspos as $hk) {
|
||||
$retro_hook_name = Hook::getRetroHookName($hk);
|
||||
$hook_callable = is_callable(array($tmp_instance, 'hook'.$hk));
|
||||
$hook_retro_callable = is_callable(array($tmp_instance, 'hook'.$retro_hook_name));
|
||||
if ($hook_retro_callable || $hook_callable) {
|
||||
$instances[$tmp_instance->displayName] = $tmp_instance;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
ksort($instances);
|
||||
|
||||
$tpl = $this->createTemplate('panel.tpl');
|
||||
|
||||
// $this->context->controller->addJqueryUI('ui.sortable');
|
||||
// $this->context->controller->addJqueryUI('ui.draggable');
|
||||
$this->context->controller->addCss(apPageHelper::getCssAdminDir().'admin/style_hook_cpanel.css');
|
||||
$this->context->controller->addJs(apPageHelper::getJsAdminDir().'/jquery-ui-1.10.3.custom.min.js', 'all');
|
||||
$tpl->assign(array(
|
||||
'showed' => $showed,
|
||||
'toolbar' => $this->context->smarty->fetch('toolbar.tpl'),
|
||||
'modules' => $instances,
|
||||
'hookspos' => $hookspos,
|
||||
'URI' => __PS_BASE_URI__.'modules/',
|
||||
'hookModules' => $hookModules,
|
||||
'noModuleConfig' => $this->l('No Configuration For This Module'),
|
||||
'currentURL' => 'index.php?tab=AdminApPageBuilderHook&token='.Tools::getAdminTokenLite('AdminApPageBuilderHook').'',
|
||||
// 'moduleEditURL' => 'index.php?tab=AdminApPageBuilderHook&token='.Tools::getAdminTokenLite('AdminApPageBuilderHook').'',
|
||||
'moduleEditURL' => 'index.php?controller=adminmodules&token='.Tools::getAdminTokenLite('AdminModules').'&tab_module=Home',
|
||||
));
|
||||
|
||||
return $tpl->fetch();
|
||||
} else {
|
||||
$tpl = $this->createTemplate('error.tpl');
|
||||
$tpl->assign(array(
|
||||
'showed' => false,
|
||||
'themeURL' => 'index.php?controller=AdminThemes&token='.Tools::getAdminTokenLite('AdminThemes')
|
||||
));
|
||||
return $tpl->fetch();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Process posting data
|
||||
*/
|
||||
public function postProcess()
|
||||
{
|
||||
if (count($this->errors) > 0) {
|
||||
if ($this->ajax) {
|
||||
$array = array('hasError' => true, 'errors' => $this->errors[0]);
|
||||
die(Tools::jsonEncode($array));
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (Tools::getValue('action') && Tools::getValue('action') == 'modulehook') {
|
||||
// AJAX EDIT HOOK - READ
|
||||
$id = (int)Tools::getValue('id');
|
||||
|
||||
$tmp_instance = Module::getInstanceById($id);
|
||||
$hooks = array();
|
||||
|
||||
foreach ($this->hookspos as $hk) {
|
||||
$retro_hook_name = Hook::getRetroHookName($hk);
|
||||
$hook_callable = is_callable(array($tmp_instance, 'hook'.$hk));
|
||||
$hook_retro_callable = is_callable(array($tmp_instance, 'hook'.$retro_hook_name));
|
||||
|
||||
if ($hook_retro_callable || $hook_callable) {
|
||||
$hooks[] = $hk;
|
||||
}
|
||||
}
|
||||
$hooks = implode('|', $hooks);
|
||||
$sql = 'SELECT * FROM `'._DB_PREFIX_.'leohook` WHERE id_module='.(int)$id.' AND theme="'.pSQL($this->theme_name).'" AND id_shop='.(int)($this->context->shop->id);
|
||||
|
||||
if ($row = Db::getInstance()->getRow($sql)) {
|
||||
die('{"hasError" : false, "hook" : "'.$row['name_hook'].'","hooks":"'.$hooks.'"}');
|
||||
} else {
|
||||
die('{"hasError" : true, "errors" : "Can not update module position","hooks":"'.$hooks.'"}');
|
||||
}
|
||||
}
|
||||
if (Tools::getValue('action') && Tools::getValue('action') == 'overridehook') {
|
||||
// AJAX EDIT HOOK - SAVE
|
||||
$id_module = (int)Tools::getValue('hdidmodule');
|
||||
$name_hook = Tools::getValue('name_hook');
|
||||
if (is_numeric($name_hook)) {
|
||||
$sql = 'DELETE FROM`'._DB_PREFIX_.'leohook` WHERE id_module='.(int)$id_module.' AND theme="'.pSQL($this->theme_name).'" AND id_shop='.(int)($this->context->shop->id);
|
||||
|
||||
Db::getInstance(_PS_USE_SQL_SLAVE_)->execute($sql);
|
||||
die('{"hasError" : false, "errors" : "done!delete module position"}');
|
||||
} elseif ($name_hook) {
|
||||
$desHook = Tools::getValue('deshook');
|
||||
$desHookId = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue('SELECT id_hook FROM `'._DB_PREFIX_."hook` WHERE name='".pSQL($desHook)."'");
|
||||
$sql = 'SELECT *
|
||||
FROM `'._DB_PREFIX_.'leohook` WHERE id_hook= '.(int)$desHookId.' AND id_module='.(int)$id_module.' AND theme="'.pSQL($this->theme_name).'" AND id_shop='.(int)($this->context->shop->id);
|
||||
|
||||
if ($row = Db::getInstance()->getRow($sql)) {
|
||||
$sql = ' UPDATE `'._DB_PREFIX_.'leohook` SET `id_hook`='.(int)$desHookId.', name_hook="'.pSQL($name_hook).'"
|
||||
WHERE id_module='.(int)$id_module.' AND theme="'.pSQL($this->theme_name).'" AND id_shop='.(int)($this->context->shop->id);
|
||||
Db::getInstance(_PS_USE_SQL_SLAVE_)->execute($sql);
|
||||
} else {
|
||||
$sql = ' INSERT INTO `'._DB_PREFIX_.'leohook` (id_hook, id_module, id_shop, theme, name_hook)
|
||||
VALUES('.(int)$desHookId.','.(int)$id_module.','.(int)($this->context->shop->id).',"'.pSQL($this->theme_name).'","'.pSQL($name_hook).'")';
|
||||
Db::getInstance(_PS_USE_SQL_SLAVE_)->execute($sql);
|
||||
}
|
||||
die('{"hasError" : false, "errors" : "done!update module position"}');
|
||||
}
|
||||
die('{"hasError" : true, "errors" : "Can not update module position"}');
|
||||
}
|
||||
if (Tools::getValue('action') && Tools::getValue('action') == 'savepos') {
|
||||
// SUBMIT - SAVE HOOK
|
||||
$positions = Tools::getValue('position');
|
||||
$way = (int)(Tools::getValue('way'));
|
||||
$unhook = Tools::getValue('unhook');
|
||||
$id_shop = Context::getContext()->shop->id;
|
||||
|
||||
if (is_array($unhook)) {
|
||||
foreach ($unhook as $id_module => $str_hookId) {
|
||||
$hookIds = explode(',', $str_hookId);
|
||||
foreach ($hookIds as $hookId) {
|
||||
$module = Module::getInstanceById($id_module);
|
||||
if (Validate::isLoadedObject($module)) {
|
||||
!$module->unregisterHook((int)$hookId, array($id_shop));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (is_array($positions) && !empty($positions)) {
|
||||
foreach ($positions as $pos) {
|
||||
$tmp = explode('|', $pos);
|
||||
if (count($tmp) == 2 && $tmp[0] && $tmp[1]) {
|
||||
$position = $tmp[0];
|
||||
$hookId = Hook::getIdByName($position);
|
||||
$oldhooks = explode(',', Tools::getValue($position));
|
||||
|
||||
$ids = explode(',', $tmp[1]);
|
||||
if ($hookId && count($oldhooks)) {
|
||||
foreach ($ids as $index => $id_module) {
|
||||
$module = Module::getInstanceById($id_module);
|
||||
|
||||
if (Validate::isLoadedObject($module) && isset($oldhooks[$index]) && is_numeric($oldhooks[$index]) && $oldhooks[$index] != $hookId) {
|
||||
// MOVE MODULE TO OTHER HOOK
|
||||
$sql = 'UPDATE `'._DB_PREFIX_.'hook_module` SET id_hook='.(int)$hookId.'
|
||||
WHERE id_module='.(int)$id_module.' AND id_hook='.(int)$oldhooks[$index].' AND id_shop='.(int)($id_shop);
|
||||
try {
|
||||
// FIX: Drag a module to one hook in 2 times. Save 500 error
|
||||
Db::getInstance(_PS_USE_SQL_SLAVE_)->execute($sql);
|
||||
} catch (Exception $ex) {
|
||||
}
|
||||
} elseif (Validate::isLoadedObject($module) && (!isset($oldhooks[$index]) || !(int)$oldhooks[$index])) {
|
||||
$this->registerHook($id_module, $hookId, array($id_shop));
|
||||
//echo 'new:'.$id_module;
|
||||
}
|
||||
$module->updatePosition($hookId, $way, $index + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
die('{"hasError" : false, "errors" : "update module position"}');
|
||||
}
|
||||
}
|
||||
|
||||
public function registerHook($id_module, $id_hook, $shop_list = null)
|
||||
{
|
||||
// If shop lists is null, we fill it with all shops
|
||||
if (is_null($shop_list)) {
|
||||
$shop_list = Shop::getShops(true, null, true);
|
||||
}
|
||||
|
||||
$return = true;
|
||||
foreach ($shop_list as $shop_id) {
|
||||
// Check if already register
|
||||
$sql = 'SELECT hm.`id_module`
|
||||
FROM `'._DB_PREFIX_.'hook_module` hm, `'._DB_PREFIX_.'hook` h
|
||||
WHERE hm.`id_module` = '.(int)($id_module).' AND h.`id_hook` = '.(int)$id_hook.'
|
||||
AND h.`id_hook` = hm.`id_hook` AND `id_shop` = '.(int)$shop_id;
|
||||
|
||||
|
||||
if (Db::getInstance()->getRow($sql)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Get module position in hook
|
||||
$sql = 'SELECT MAX(`position`) AS position
|
||||
FROM `'._DB_PREFIX_.'hook_module`
|
||||
WHERE `id_hook` = '.(int)$id_hook.' AND `id_shop` = '.(int)$shop_id;
|
||||
if (!$position = Db::getInstance()->getValue($sql)) {
|
||||
$position = 0;
|
||||
}
|
||||
|
||||
// Register module in hook
|
||||
$return &= Db::getInstance()->insert('hook_module', array(
|
||||
'id_module' => (int)$id_module,
|
||||
'id_hook' => (int)$id_hook,
|
||||
'id_shop' => (int)$shop_id,
|
||||
'position' => (int)($position + 1),
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* PERMISSION ACCOUNT demo@demo.com
|
||||
* OVERRIDE CORE
|
||||
*/
|
||||
public function initProcess()
|
||||
{
|
||||
parent::initProcess();
|
||||
|
||||
if (count($this->errors) <= 0) {
|
||||
if (Tools::getIsset('updateleohook') && Tools::getValue('updateleohook')) {
|
||||
if (!$this->access('edit')) {
|
||||
$this->errors[] = $this->trans('You do not have permission to edit this.', array(), 'Admin.Notifications.Error');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user