260 lines
10 KiB
PHP
260 lines
10 KiB
PHP
<?php
|
|
/**
|
|
* 2007-2015 Apollotheme
|
|
*
|
|
* NOTICE OF LICENSE
|
|
*
|
|
* ApPageBuilder is module help you can build content for your shop
|
|
*
|
|
* DISCLAIMER
|
|
*
|
|
* @author Apollotheme <apollotheme@gmail.com>
|
|
* @copyright 2007-2019 Apollotheme
|
|
* @license http://apollotheme.com - prestashop template provider
|
|
*/
|
|
|
|
if (!defined('_PS_VERSION_')) {
|
|
# module validation
|
|
exit;
|
|
}
|
|
|
|
require_once(_PS_MODULE_DIR_.'appagebuilder/classes/ApPageSetting.php');
|
|
require_once(_PS_MODULE_DIR_.'appagebuilder/controllers/admin/AdminApPageBuilderPositions.php');
|
|
|
|
class AdminApPageBuilderShortcodesController extends ModuleAdminControllerCore
|
|
{
|
|
public static $shortcode_lang;
|
|
public static $language;
|
|
public static $lang_id;
|
|
public $file_content = '';
|
|
protected $max_image_size = null;
|
|
public $theme_name;
|
|
public $config_module;
|
|
public $hook_assign;
|
|
public $module_name;
|
|
public $module_path;
|
|
public $tpl_controller_path;
|
|
public $tpl_front_path;
|
|
public $shortcode_dir;
|
|
public $shortcode_override_dir;
|
|
public $theme_dir;
|
|
public $theme_url;
|
|
|
|
public function __construct()
|
|
{
|
|
$this->bootstrap = true;
|
|
$this->show_toolbar = true;
|
|
$this->table = 'appagebuilder';
|
|
$this->className = 'ApPageBuilderShortCode';
|
|
$this->context = Context::getContext();
|
|
$this->module_name = 'appagebuilder';
|
|
$this->module_path = __PS_BASE_URI__.'modules/'.$this->module_name.'/';
|
|
$this->tpl_controller_path = _PS_ROOT_DIR_.'/modules/'.$this->module_name.'/views/templates/admin/ap_page_builder_shortcodes/';
|
|
$this->tpl_front_path = _PS_ROOT_DIR_.'/modules/'.$this->module_name.'/views/templates/font/';
|
|
$this->shortcode_dir = _PS_MODULE_DIR_.'appagebuilder/classes/shortcodes/';
|
|
|
|
self::$language = Language::getLanguages(false);
|
|
parent::__construct();
|
|
$this->theme_dir = apPageHelper::getConfigDir('_PS_THEME_DIR_');
|
|
$this->theme_url = _THEMES_DIR_.apPageHelper::getThemeName().'/';
|
|
$this->shortcode_override_dir = $this->theme_dir.'modules/appagebuilder/classes/shortcodes/';
|
|
$this->max_image_size = (int)Configuration::get('PS_PRODUCT_PICTURE_MAX_SIZE');
|
|
$this->theme_name = apPageHelper::getThemeName();
|
|
$this->hook_assign = array('rightcolumn', 'leftcolumn', 'home', 'top', 'footer');
|
|
}
|
|
|
|
public function init()
|
|
{
|
|
if (Tools::getIsset('type_shortcode')) {
|
|
# Run AJAX here for Hight Speed
|
|
$this->ajaxLoadWidget();
|
|
}
|
|
parent::init();
|
|
}
|
|
|
|
/**
|
|
* Duplicate all data relate with profile
|
|
* @param type int $old_id : current profile id is duplicating
|
|
* @param type int $new_id : new profile id after duplicated
|
|
*/
|
|
public static function duplicateData($old_id, $new_id)
|
|
{
|
|
// $context = Context::getContext();
|
|
$positions = array();
|
|
$sql = 'SELECT *
|
|
FROM `'._DB_PREFIX_.'appagebuilder_profiles` p
|
|
WHERE p.id_appagebuilder_profiles='.(int)$old_id;
|
|
$result = Db::getInstance()->getRow($sql);
|
|
if ($result) {
|
|
$positions[] = $result['header'];
|
|
$positions[] = $result['content'];
|
|
$positions[] = $result['footer'];
|
|
$positions[] = $result['product'];
|
|
}
|
|
$sql_update = 'UPDATE '._DB_PREFIX_.'appagebuilder_profiles ';
|
|
$sep = ' SET ';
|
|
$is_update = false;
|
|
// Duplicate positions
|
|
foreach ($positions as $item) {
|
|
$id = (int)$item;
|
|
$object = ApPageBuilderPositionsModel::getPositionById($id);
|
|
if ($object) {
|
|
$key = ApPageSetting::getRandomNumber();
|
|
$old_key = $object['position_key'];
|
|
$name = 'Duplicate '.$key;
|
|
$data = array('name' => $name, 'position' => $object['position'], 'position_key' => 'duplicate_'.$key);
|
|
$model = new ApPageBuilderPositionsModel();
|
|
$duplicate_id = $model->addAuto($data);
|
|
if ($duplicate_id) {
|
|
$position_controller = new AdminApPageBuilderPositionsController();
|
|
$sql_update .= $sep.$data['position'].'='.$duplicate_id;
|
|
$sep = ', ';
|
|
$is_update = true;
|
|
self::duplcateDataPosition($id, $duplicate_id);
|
|
ApPageSetting::writeFile($position_controller->position_js_folder, $data['position'].$data['position_key'].'.js', Tools::file_get_contents($position_controller->position_js_folder.$data['position'].$old_key.'.js'));
|
|
ApPageSetting::writeFile($position_controller->position_css_folder, $data['position'].$data['position_key'].'.css', Tools::file_get_contents($position_controller->position_css_folder.$data['position'].$old_key.'.css'));
|
|
}
|
|
}
|
|
}
|
|
if ($is_update) {
|
|
$sql_update .= ' WHERE id_appagebuilder_profiles='.(int)$new_id;
|
|
Db::getInstance()->execute($sql_update);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Duplicate a position: dulicate data in table appagebuilder_lang; appagebuilder; appagebuilder_shop;
|
|
* @param type int $old_id: position id for duplicate
|
|
* @param type int $duplicate_id: new position id
|
|
*/
|
|
public static function duplcateDataPosition($old_id, $duplicate_id)
|
|
{
|
|
$context = Context::getContext();
|
|
$id_shop = $context->shop->id;
|
|
// Get list appagebuilder for copy
|
|
$sql = 'SELECT * from '._DB_PREFIX_.'appagebuilder p WHERE p.id_appagebuilder_positions='.(int)$old_id;
|
|
$result = Db::getInstance()->executeS($sql);
|
|
foreach ($result as $item) {
|
|
// Duplicate to tables appagebuilder
|
|
$sql = 'INSERT INTO '._DB_PREFIX_.'appagebuilder (id_appagebuilder_positions, hook_name)
|
|
VALUES("'.(int)$duplicate_id.'", "'.pSQL($item['hook_name']).'")';
|
|
Db::getInstance()->execute($sql);
|
|
// Duplicate to tables appagebuilder_shop
|
|
$id_new = Db::getInstance()->Insert_ID();
|
|
$sql = 'INSERT INTO '._DB_PREFIX_.'appagebuilder_shop (id_appagebuilder, id_shop)
|
|
VALUES('.(int)$id_new.', '.(int)$id_shop.')';
|
|
Db::getInstance()->execute($sql);
|
|
// Copy data and languages
|
|
$sql = 'SELECT * from '._DB_PREFIX_.'appagebuilder_lang p
|
|
WHERE p.id_appagebuilder='.(int)$item['id_appagebuilder'];
|
|
$old_data = Db::getInstance()->executeS($sql);
|
|
foreach ($old_data as $temp) {
|
|
// Not pSQL at here because duplicate profile is error
|
|
$sql = 'INSERT INTO '._DB_PREFIX_."appagebuilder_lang (id_appagebuilder, id_lang, params)
|
|
VALUES('".(int)$id_new."', '".(int)$temp['id_lang']."', '".apPageHelper::replaceFormId($temp['params'])."')";
|
|
Db::getInstance()->execute($sql);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
public function adminContent($assign, $tpl_name)
|
|
{
|
|
if (file_exists($this->tpl_controller_path.$tpl_name)) {
|
|
$tpl = $this->createTemplate($tpl_name);
|
|
} else {
|
|
$tpl = $this->createTemplate('ApGeneral.tpl');
|
|
}
|
|
$assign['moduleDir'] = _MODULE_DIR_;
|
|
foreach ($assign as $key => $ass) {
|
|
$tpl->assign(array($key => $ass));
|
|
}
|
|
return $tpl->fetch();
|
|
}
|
|
|
|
public function postProcess()
|
|
{
|
|
parent::postProcess();
|
|
}
|
|
|
|
/**
|
|
* AJAX :
|
|
* - load widget or module
|
|
* - call method of widget
|
|
*/
|
|
private function ajaxLoadWidget()
|
|
{
|
|
$type_shortcode = Tools::ucfirst(Tools::getValue('type_shortcode'));
|
|
$type = Tools::getValue('type');
|
|
$shor_code_dir = '';
|
|
// Add new widget from apollotheme
|
|
if ($type === 'widget') {
|
|
if (!$shor_code_dir = ApPageSetting::requireShortCode($type_shortcode.'.php', $this->theme_dir)) {
|
|
die($this->l('This short code is not exist'));
|
|
}
|
|
if (class_exists($type_shortcode) != true) {
|
|
// validate module
|
|
require_once($shor_code_dir);
|
|
}
|
|
|
|
$obj = new $type_shortcode;
|
|
die($obj->renderForm());
|
|
} elseif ($type === 'module') {
|
|
// Custom a module
|
|
$shor_code_dir = ApPageSetting::requireShortCode('ApModule.php', $this->theme_dir);
|
|
if (class_exists('ApModule') != true) {
|
|
// validate module
|
|
require_once($shor_code_dir);
|
|
}
|
|
$obj = new ApModule();
|
|
die($obj->renderForm());
|
|
}
|
|
|
|
|
|
|
|
# RUN WIDGET METHOD - BEGIN
|
|
$result = array(
|
|
'hasError' => false,
|
|
'error' => '',
|
|
'success' => false,
|
|
'information' => '',
|
|
);
|
|
$type_shortcode = Tools::ucfirst(Tools::getValue('type_shortcode'));
|
|
if (Tools::getIsset('type_shortcode') && $type_shortcode) {
|
|
if ($shor_code_dir = ApPageSetting::requireShortCode($type_shortcode.'.php', $this->theme_dir)) {
|
|
if (class_exists($type_shortcode) != true) {
|
|
require_once($shor_code_dir);
|
|
}
|
|
$obj = new $type_shortcode;
|
|
$method_name = Tools::getValue('method_name', '');
|
|
$method_name = 'ajaxCallBack'.Tools::toCamelCase($method_name, true);
|
|
if (method_exists($obj, $method_name)) {
|
|
# RUN WIDGET METHOD
|
|
$obj->{$method_name}();
|
|
$result['information'] = $method_name . $this->l(' is successful');
|
|
} else {
|
|
$result['error'] = sprintf($this->l('%s method is not exist'), $method_name);
|
|
}
|
|
} else {
|
|
$result['error'] = sprintf($this->l('%s is not found'), $type_shortcode.'.php');
|
|
}
|
|
} else {
|
|
$result['error'] = $this->l('type_shortcode param is empty');
|
|
}
|
|
|
|
if (count($result['error'])) {
|
|
$result['hasError'] = true;
|
|
}
|
|
|
|
die(Tools::jsonEncode($result));
|
|
# RUN WIDGET METHOD - END
|
|
}
|
|
|
|
public function viewAccess($disable = true)
|
|
{
|
|
// return $this->access('view', $disable);
|
|
unset($disable);
|
|
return true;
|
|
}
|
|
}
|