first commit
This commit is contained in:
@@ -0,0 +1,259 @@
|
||||
<?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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user