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