first commit

This commit is contained in:
2024-11-05 12:22:50 +01:00
commit e5682a3912
19641 changed files with 2948548 additions and 0 deletions

View File

@@ -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;
}
}