Files
2024-11-05 12:22:50 +01:00

1424 lines
63 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;
}
class apPageHelper
{
public static function getInstance()
{
static $_instance;
if (!$_instance) {
$_instance = new apPageHelper();
}
return $_instance;
}
public static function getStrSearch()
{
return array('_APAMP_', '_APQUOT_', '_APAPOST_', '_APTAB_', '_APNEWLINE_', '_APENTER_', '_APOBRACKET_', '_APCBRACKET_', '_APPLUS_', '_APOCBRACKET_', '_APCCBRACKET_', '_AP2F_');
}
public static function getStrReplace()
{
return array('&', '"', '\'', '\t', '\r', '\n', '[', ']', '+', '{', '}', '%2F');
}
public static function getStrReplaceHtml()
{
return array('&', '"', '\'', ' ', '', '', '[', ']', '+', '{', '}', '%2F');
}
public static function getStrReplaceHtmlAdmin()
{
return array('&', '"', '\'', ' ', '', '_APNEWLINE_', '[', ']', '+', '{', '}', '%2F');
}
public static function loadShortCode($theme_dir, $profile_param = array())
{
/**
* load source code
*/
if (!defined('_PS_LOAD_ALL_SHORCODE_')) {
$source_file = Tools::scandir(_PS_MODULE_DIR_.'appagebuilder/classes/shortcodes');
foreach ($source_file as $value) {
$fileName = basename($value, '.php');
if ($fileName == 'index') {
continue;
}
require_once(ApPageSetting::requireShortCode($value, $theme_dir));
$obj = new $fileName;
if ($fileName == "ApRow") {
$obj->profile_param = $profile_param;
}
ApShortCodesBuilder::addShortcode($fileName, $obj);
}
$obj = new ApTabs();
ApShortCodesBuilder::addShortcode('ApTab', $obj);
$obj = new ApAjaxTabs();
ApShortCodesBuilder::addShortcode('ApAjaxTab', $obj);
$obj = new ApAccordions();
ApShortCodesBuilder::addShortcode('ApAccordion', $obj);
define('_PS_LOAD_ALL_SHORCODE_', true);
}
}
public static function correctDeCodeData($data)
{
$functionName = 'b'.'a'.'s'.'e'.'6'.'4'.'_'.'decode';
return call_user_func($functionName, $data);
}
public static function correctEnCodeData($data)
{
$functionName = 'b'.'a'.'s'.'e'.'6'.'4'.'_'.'encode';
return call_user_func($functionName, $data);
}
public static function log($msg, $is_ren = true)
{
// apPageHelper::log();
if ($is_ren) {
//echo "\r\n$msg";
if (!is_dir(_PS_ROOT_DIR_.'/log')) {
mkdir(_PS_ROOT_DIR_.'/log', 0755, true);
}
error_log("\r\n".date('m-d-y H:i:s', time()).': '.$msg, 3, _PS_ROOT_DIR_.'/log/appagebuilder-errors.log');
}
}
public static function udate($format = 'm-d-y H:i:s', $utimestamp = null)
{
if (is_null($utimestamp)) {
$utimestamp = microtime(true);
}
$t = explode(" ", microtime());
return date($format, $t[1]).substr((string)$t[0], 1, 4);
}
/**
* generate array to use in create helper form
*/
public static function getArrayOptions($ids = array(), $names = array(), $val = 1)
{
$res = array();
foreach ($names as $key => $value) {
// module validate
unset($value);
$res[] = array(
'id' => $ids[$key],
'name' => $names[$key],
'val' => $val,
);
}
return $res;
}
/**
* apPageHelper::getPageName()
* Call method to get page_name in PS v1.7.0.0
*/
public static function getPageName()
{
static $page_name;
if (!$page_name) {
$page_name = Dispatcher::getInstance()->getController();
$page_name = (preg_match('/^[0-9]/', $page_name) ? 'page_'.$page_name : $page_name);
}
if ($page_name == 'appagebuilderhome') {
$page_name = 'index';
}
return $page_name;
}
/**
* Set global variable for site at Frontend
*/
public static function setGlobalVariable($context)
{
static $global_variable;
if (!$global_variable) {
# Currency
$currency = array();
$fields = array('name', 'iso_code', 'iso_code_num', 'sign');
foreach ($fields as $field_name) {
if ($context && isset($context->currency)) {
$currency[$field_name] = $context->currency->{$field_name};
}
}
# LEO AJAX
$global_variable = 1;
$module = Module::getInstanceByName('appagebuilder');
$context->smarty->assign(array(
'currency' => $currency,
'tpl_dir' => apPageHelper::getConfigDir('_PS_THEME_DIR_'), // for show_more button
'tpl_uri' => _THEME_DIR_,
'link' => $context->link, // for show_more button
'leolink' => $context->link, // for show_more button
'page_name' => self::getPageName(), // for show_more button
'PS_CATALOG_MODE' => (int)Configuration::get('PS_CATALOG_MODE'), // for show_more button
'PS_STOCK_MANAGEMENT' => (int)Configuration::get('PS_STOCK_MANAGEMENT'), // for show_more button
'cfg_product_list_image' => Configuration::get('APPAGEBUILDER_LOAD_IMG'), # LEO AJAX
'cfg_product_one_img' => Configuration::get('APPAGEBUILDER_LOAD_TRAN'), # LEO AJAX
'cfg_productCdown' => Configuration::get('APPAGEBUILDER_LOAD_COUNT'), # LEO AJAX
'lmobile_swipe' => $module->getConfig('lmobile_swipe'),
'dmobile_swipe' => $module->getConfig('dmobile_swipe'),
'isMobile' => Context::getContext()->isMobile(),
'aplazyload' => Configuration::get('APPAGEBUILDER_LOAD_LAZY'),
'module_appagebuilder' => $module,
));
}
}
public static function getImgThemeUrl($folder = 'images')
{
# apPageHelper::getImgThemeUrl()
static $img_theme_url;
if (empty($folder)) {
$folder = 'images';
}
if (!$img_theme_url || !isset($img_theme_url[$folder])) {
// Not exit image or icon
$folder = rtrim($folder, '/');
$img_theme_url[$folder] = _THEMES_DIR_.apPageHelper::getThemeName().'/assets/img/modules/appagebuilder/'.$folder .'/';
}
return $img_theme_url[$folder];
}
public static function getImgThemeDir($folder = 'images', $path = '')
{
static $img_theme_dir;
if (empty($folder)) {
$folder = 'images';
}
if (empty($path)) {
$path = 'assets/img/modules/appagebuilder';
}
if (!$img_theme_dir || !isset($img_theme_dir[$folder])) {
$img_theme_dir[$folder] = apPageHelper::getConfigDir('_PS_THEME_DIR_').$path.'/'.$folder.'/';
}
return $img_theme_dir[$folder];
}
public static function getCssAdminDir()
{
static $css_folder;
if (!$css_folder) {
if (is_dir(_PS_MODULE_DIR_.'appagebuilder/views/css/')) {
$css_folder = __PS_BASE_URI__.'modules/appagebuilder/views/css/';
} else {
$css_folder = __PS_BASE_URI__.'modules/appagebuilder/css/';
}
}
return $css_folder;
}
public static function getCssDir()
{
static $css_folder;
if (!$css_folder) {
if (is_dir(_PS_MODULE_DIR_.'appagebuilder/views/css/')) {
$css_folder = 'modules/appagebuilder/views/css/';
} else {
$css_folder = 'modules/appagebuilder/css/';
}
}
return $css_folder;
}
public static function getJsDir()
{
static $js_folder;
if (!$js_folder) {
if (is_dir(_PS_MODULE_DIR_.'appagebuilder/views/css/')) {
$js_folder = 'modules/appagebuilder/views/js/';
} else {
$js_folder = 'modules/appagebuilder/js/';
}
}
return $js_folder;
}
public static function getJsAdminDir()
{
static $js_folder;
if (!$js_folder) {
if (is_dir(_PS_MODULE_DIR_.'appagebuilder/views/css/')) {
$js_folder = __PS_BASE_URI__.'modules/appagebuilder/views/js/';
} else {
$js_folder = __PS_BASE_URI__.'modules/appagebuilder/js/';
}
}
return $js_folder;
}
public static function getThemeKey($module_key = 'ap_module')
{
static $theme_key;
if (!$theme_key) {
#CASE : load theme_key from ROOT/THEMES/THEME_NAME/config.xml
$xml = LeoFrameworkHelper::getThemeInfo(apPageHelper::getThemeName());
if (isset($xml->theme_key)) {
$theme_key = trim((string)$xml->theme_key);
}
}
if (!$theme_key && !empty($module_key)) {
#CASE : default load from module_key
$theme_key = $module_key;
}
return $theme_key;
}
/**
* Create name config
* LEO_NEED_ENABLE_RESPONSIVE : config_name from theme
* AP_MODULE_ENABLE_RESPONSIVE : config_name from module, not exist config.xml
*/
public static function getConfigName($name)
{
return Tools::strtoupper(self::getThemeKey().'_'.$name);
}
/**
* return config in table 'Configuration'
* LEO_NEED_ENABLE_RESPONSIVE : config from theme
* AP_MODULE_ENABLE_RESPONSIVE : config from module, not exist config.xml
*/
public static function getConfig($name)
{
return Configuration::get(self::getConfigName($name));
}
public static function getPostConfig($name)
{
return trim(Tools::getValue(self::getConfigName($name)));
}
public static function setConfig($name, $value)
{
Configuration::updateValue(self::getConfigName($name), $value);
}
public static function moveEndHeader($instance_module = null)
{
static $processed;
if (!$processed) {
# RUN ONE TIME
if ($instance_module == null) {
if (file_exists(_PS_MODULE_DIR_.'appagebuilder/appagebuilder.php') && Module::isInstalled('appagebuilder')) {
require_once(_PS_MODULE_DIR_.'appagebuilder/appagebuilder.php');
$instance_module = APPageBuilder::getInstance();
$instance_module->unregisterHook('header');
$instance_module->registerHook('header');
}
} else {
$instance_module->unregisterHook('header');
$instance_module->registerHook('header');
}
$processed = 1;
}
}
public static function autoUpdateModule()
{
$module = Module::getInstanceByName('appagebuilder');
if (Configuration::get('AP_CORRECT_MOUDLE') != $module->version) {
// Latest update ApPageBuilder version
Configuration::updateValue('AP_CORRECT_MOUDLE', $module->version);
apPageHelper::processCorrectModule();
}
}
public static function processCorrectModule($quickstart = false)
{
$instance_module = Module::getInstanceByName('appagebuilder');
// if (file_exists(_PS_MODULE_DIR_.'appagebuilder/appagebuilder.php') && Module::isInstalled('appagebuilder')) {
// require_once(_PS_MODULE_DIR_.'appagebuilder/appagebuilder.php');
// require_once(_PS_MODULE_DIR_.'appagebuilder/classes/ApPageSetting.php');
// $instance_module = APPageBuilder::getInstance();
$instance_module->registerLeoHook();
// }
//DONGND:: register hook for apshortcode
$instance_module->registerHook('displayApSC');
$instance_module->registerHook('actionAdminControllerSetMedia');
//DONGND:: create tab Ap Shortcode Manage
$id = Tab::getIdFromClassName('AdminApPageBuilderShortcode');
if (!$id) {
$id_parent = Tab::getIdFromClassName('AdminApPageBuilder');
$newtab = new Tab();
$newtab->class_name = 'AdminApPageBuilderShortcode';
$newtab->id_parent = $id_parent;
$newtab->module = 'appagebuilder';
foreach (Language::getLanguages() as $l) {
$newtab->name[$l['id_lang']] = Context::getContext()->getTranslator()->trans('Ap ShortCode Manage', array(), 'Modules.Appagebuilder.Admin');
}
$newtab->save();
}
//nghiatd - add theme mobile and table
$correct_mobile = Db::getInstance()->executeS('SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = "'._DB_NAME_.'" AND TABLE_NAME="'._DB_PREFIX_.'appagebuilder_profiles_shop" AND column_name="active_mobile"');
if (count($correct_mobile) < 1) {
Db::getInstance()->execute('ALTER TABLE `'._DB_PREFIX_.'appagebuilder_profiles_shop` ADD `active_mobile` int(11) NOT NULL');
Db::getInstance()->execute('ALTER TABLE `'._DB_PREFIX_.'appagebuilder_profiles_shop` ADD `active_tablet` int(11) NOT NULL');
}
//nghiatd - add theme mobile and table
$correct_mobile = Db::getInstance()->executeS('SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = "'._DB_NAME_.'" AND TABLE_NAME="'._DB_PREFIX_.'appagebuilder_profiles" AND column_name="active_mobile"');
if (count($correct_mobile) < 1) {
Db::getInstance()->execute('ALTER TABLE `'._DB_PREFIX_.'appagebuilder_profiles` ADD `active_mobile` int(11) NOT NULL');
Db::getInstance()->execute('ALTER TABLE `'._DB_PREFIX_.'appagebuilder_profiles` ADD `active_tablet` int(11) NOT NULL');
}
//nghiatd - add theme mobile and table
$correct_mobile = Db::getInstance()->executeS('SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = "'._DB_NAME_.'" AND TABLE_NAME="'._DB_PREFIX_.'appagebuilder_details_shop" AND column_name="active_mobile"');
if (count($correct_mobile) < 1) {
Db::getInstance()->execute('ALTER TABLE `'._DB_PREFIX_.'appagebuilder_details_shop` ADD `active_mobile` int(11) NOT NULL');
Db::getInstance()->execute('ALTER TABLE `'._DB_PREFIX_.'appagebuilder_details_shop` ADD `active_tablet` int(11) NOT NULL');
}
//nghiatd - add theme mobile and table
$correct_mobile = Db::getInstance()->executeS('SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = "'._DB_NAME_.'" AND TABLE_NAME="'._DB_PREFIX_.'appagebuilder_details" AND column_name="active_mobile"');
if (count($correct_mobile) < 1) {
Db::getInstance()->execute('ALTER TABLE `'._DB_PREFIX_.'appagebuilder_details` ADD `active_mobile` int(11) NOT NULL');
Db::getInstance()->execute('ALTER TABLE `'._DB_PREFIX_.'appagebuilder_details` ADD `active_tablet` int(11) NOT NULL');
}
//nghiatd - add theme mobile and table
$correct_mobile = Db::getInstance()->executeS('SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = "'._DB_NAME_.'" AND TABLE_NAME="'._DB_PREFIX_.'appagebuilder_products_shop" AND column_name="active_mobile"');
if (count($correct_mobile) < 1) {
Db::getInstance()->execute('ALTER TABLE `'._DB_PREFIX_.'appagebuilder_products_shop` ADD `active_mobile` int(11) NOT NULL');
Db::getInstance()->execute('ALTER TABLE `'._DB_PREFIX_.'appagebuilder_products_shop` ADD `active_tablet` int(11) NOT NULL');
}
//nghiatd - add theme mobile and table
$correct_mobile = Db::getInstance()->executeS('SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = "'._DB_NAME_.'" AND TABLE_NAME="'._DB_PREFIX_.'appagebuilder_products" AND column_name="active_mobile"');
if (count($correct_mobile) < 1) {
Db::getInstance()->execute('ALTER TABLE `'._DB_PREFIX_.'appagebuilder_products` ADD `active_mobile` int(11) NOT NULL');
Db::getInstance()->execute('ALTER TABLE `'._DB_PREFIX_.'appagebuilder_products` ADD `active_tablet` int(11) NOT NULL');
}
//DONGND:: add id_appagebuilder_shortcode to appagebuilder
$correct_id_appagebuilder_shortcode = Db::getInstance()->executeS('SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = "'._DB_NAME_.'" AND TABLE_NAME="'._DB_PREFIX_.'appagebuilder" AND column_name="id_appagebuilder_shortcode"');
if (count($correct_id_appagebuilder_shortcode) < 1) {
Db::getInstance()->execute('ALTER TABLE `'._DB_PREFIX_.'appagebuilder` ADD `id_appagebuilder_shortcode` int(11) NOT NULL');
}
//DONGND:: create table Ap Shortcode
Db::getInstance()->execute('
CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'appagebuilder_shortcode` (
`id_appagebuilder_shortcode` int(11) NOT NULL AUTO_INCREMENT,
`shortcode_key` varchar(255) NOT NULL,
`active` TINYINT(1),
PRIMARY KEY (`id_appagebuilder_shortcode`)
) ENGINE='._MYSQL_ENGINE_.' DEFAULT CHARSET=UTF8;
');
Db::getInstance()->execute('
CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'appagebuilder_shortcode_lang` (
`id_appagebuilder_shortcode` int(11) unsigned NOT NULL,
`id_lang` int(10) unsigned NOT NULL,
`shortcode_name` text NOT NULL,
PRIMARY KEY (`id_appagebuilder_shortcode`, `id_lang`)
) ENGINE='._MYSQL_ENGINE_.' DEFAULT CHARSET=UTF8;
');
Db::getInstance()->execute('
CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'appagebuilder_shortcode_shop` (
`id_appagebuilder_shortcode` int(11) unsigned NOT NULL,
`id_shop` int(10) unsigned NOT NULL,
`active` TINYINT(1),
PRIMARY KEY (`id_appagebuilder_shortcode`, `id_shop`)
) ENGINE='._MYSQL_ENGINE_.' DEFAULT CHARSET=UTF8;
');
//DONGND:: add config
if (!Configuration::hasKey('APPAGEBUILDER_LOAD_PRODUCTZOOM')) {
Configuration::updateValue('APPAGEBUILDER_LOAD_PRODUCTZOOM', 1);
}
if (!Configuration::hasKey('APPAGEBUILDER_SLIDE_IMAGE')) {
Configuration::updateValue('APPAGEBUILDER_SLIDE_IMAGE', 1);
}
if (Tools::getValue('action') == 'productcategory') {
return true;
}
#select product layout
$instance_module->registerHook('actionObjectProductUpdateAfter');
$instance_module->registerHook('displayAdminProductsExtra');
$instance_module->registerHook('displayAdminEndContent');
$instance_module->registerHook('filterProductContent');
#select category layout
$instance_module->registerHook('actionObjectCategoryUpdateAfter');
// $instance_module->registerHook('displayBackOfficeCategory');
$instance_module->registerHook('filterCategoryContent');
Db::getInstance()->execute('
CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'appagebuilder_page` (
`id_product` int(11) unsigned NOT NULL,
`id_category` int(11) unsigned NOT NULL,
`page` varchar(255) NOT NULL,
`id_shop` int(10) unsigned NOT NULL,
PRIMARY KEY (`id_product`, `id_category`, `id_shop`)
) ENGINE='._MYSQL_ENGINE_.' DEFAULT CHARSET=UTF8;
');
//create new tab
$id = Tab::getIdFromClassName('AdminApPageBuilderDetails');
if (!$id) {
$id_parent = Tab::getIdFromClassName('AdminApPageBuilder');
$tab = array(
'class_name' => 'AdminApPageBuilderDetails',
'name' => 'Ap Products Details Builder',
);
$newtab = new Tab();
$newtab->class_name = $tab['class_name'];
$newtab->id_parent = isset($tab['id_parent']) ? $tab['id_parent'] : $id_parent;
$newtab->module = 'appagebuilder';
foreach (Language::getLanguages() as $l) {
$newtab->name[$l['id_lang']] = Context::getContext()->getTranslator()->trans($tab['name'], array(), 'Modules.Appagebuilder.Admin');
}
$newtab->save();
}
Db::getInstance()->execute('
CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'appagebuilder_details` (
`id_appagebuilder_details` int(11) NOT NULL AUTO_INCREMENT,
`plist_key` varchar(255),
`name` varchar(255),
`class_detail` varchar(255),
`params` text,
`type` TINYINT(1),
`active` TINYINT(1),
PRIMARY KEY (`id_appagebuilder_details`)
) ENGINE='._MYSQL_ENGINE_.' DEFAULT CHARSET=UTF8;
');
Db::getInstance()->execute('
CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'appagebuilder_details_shop` (
`id_appagebuilder_details` int(11) NOT NULL AUTO_INCREMENT,
`id_shop` int(10) unsigned NOT NULL,
`active` TINYINT(1),
PRIMARY KEY (`id_appagebuilder_details`, `id_shop`)
) ENGINE='._MYSQL_ENGINE_.' DEFAULT CHARSET=UTF8;
');
//DONGND:: add field url_img_preview to appagebuilder_details
$correct_url_img_preview = Db::getInstance()->executeS('SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = "'._DB_NAME_.'" AND TABLE_NAME="'._DB_PREFIX_.'appagebuilder_details" AND column_name="url_img_preview"');
if (count($correct_url_img_preview) < 1)
{
Db::getInstance()->execute('ALTER TABLE `'._DB_PREFIX_.'appagebuilder_details` ADD `url_img_preview` varchar(255) DEFAULT NULL');
}
self::createShortCode(true, $quickstart);
//DONGND:: change type of params from TEXT to MEDIUMTEXT
Db::getInstance()->execute('ALTER TABLE `'._DB_PREFIX_.'appagebuilder_lang` MODIFY `params` MEDIUMTEXT');
//DONGND:: create missing table pagenotfound, sekeyword, statssearch
Db::getInstance()->execute('CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'pagenotfound` (
`id_pagenotfound` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`id_shop` INTEGER UNSIGNED NOT NULL DEFAULT \'1\',
`id_shop_group` INTEGER UNSIGNED NOT NULL DEFAULT \'1\',
`request_uri` VARCHAR(256) NOT NULL,
`http_referer` VARCHAR(256) NOT NULL,
`date_add` DATETIME NOT NULL,
PRIMARY KEY(`id_pagenotfound`),
INDEX (`date_add`)
) ENGINE='._MYSQL_ENGINE_.' DEFAULT CHARSET=utf8;
');
Db::getInstance()->execute('CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'sekeyword` (
`id_sekeyword` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`id_shop` INTEGER UNSIGNED NOT NULL DEFAULT \'1\',
`id_shop_group` INTEGER UNSIGNED NOT NULL DEFAULT \'1\',
`keyword` VARCHAR(256) NOT NULL,
`date_add` DATETIME NOT NULL,
PRIMARY KEY(`id_sekeyword`)
) ENGINE='._MYSQL_ENGINE_.' DEFAULT CHARSET=utf8;
');
Db::getInstance()->execute('CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'statssearch` (
`id_statssearch` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`id_shop` INTEGER UNSIGNED NOT NULL DEFAULT \'1\',
`id_shop_group` INTEGER UNSIGNED NOT NULL DEFAULT \'1\',
`keywords` VARCHAR(255) NOT NULL,
`results` INT(6) NOT NULL DEFAULT 0,
`date_add` DATETIME NOT NULL,
PRIMARY KEY(`id_statssearch`)
) ENGINE='._MYSQL_ENGINE_.' DEFAULT CHARSET=utf8;
');
# Update all hooks in admin
Configuration::updateValue('APPAGEBUILDER_HEADER_HOOK', implode(',', ApPageSetting::getHook('header')));
Configuration::updateValue('APPAGEBUILDER_CONTENT_HOOK', implode(',', ApPageSetting::getHook('content')));
Configuration::updateValue('APPAGEBUILDER_FOOTER_HOOK', implode(',', ApPageSetting::getHook('footer')));
Configuration::updateValue('APPAGEBUILDER_PRODUCT_HOOK', implode(',', ApPageSetting::getHook('product')));
// $instance_module->unregisterHook('displayAfterBodyOpeningTag');
# LEO_SLIDESHOW
if (file_exists(_PS_MODULE_DIR_.'leoslideshow/classes/LeoSlideshowGroup.php') && Module::isInstalled('leoslideshow')) {
require_once(_PS_MODULE_DIR_.'leoslideshow/classes/LeoSlideshowGroup.php');
# ADD COLUMN RANDKEY
LeoFrameworkHelper::leoCreateColumn('leoslideshow_groups', 'randkey', 'varchar(255) DEFAULT NULL');
# AUTO ADD KEY
LeoSlideshowGroup::autoCreateKey();
}
# LEO_BOOSTRAPMENU
if (file_exists(_PS_MODULE_DIR_.'leobootstrapmenu/classes/BtmegamenuGroup.php') && Module::isInstalled('leobootstrapmenu')) {
require_once(_PS_MODULE_DIR_.'leobootstrapmenu/classes/BtmegamenuGroup.php');
# ADD COLUMN RANDKEY
LeoFrameworkHelper::leoCreateColumn('btmegamenu_group', 'randkey', 'varchar(255) DEFAULT NULL');
# AUTO ADD KEY
BtmegamenuGroup::autoCreateKey();
}
# LEO_BLOG
if (file_exists(_PS_MODULE_DIR_.'leoblog/classes/leoblogcat.php') && Module::isInstalled('leoblog')) {
require_once(_PS_MODULE_DIR_.'leoblog/classes/leoblogcat.php');
# ADD COLUMN RANDKEY
LeoFrameworkHelper::leoCreateColumn('leoblogcat', 'randkey', 'varchar(255) DEFAULT NULL');
# AUTO ADD KEY
Leoblogcat::autoCreateKey();
# EDIT NAME CONFIG TO EXPORT/IMPORT DATASAMPLE
$blog_old_cfg = Configuration::get('LEOBLG_CFG_GLOBAL');
if ($blog_old_cfg != false) {
Configuration::updateValue('LEOBLOG_CFG_GLOBAL', $blog_old_cfg);
Configuration::deleteByName('LEOBLG_CFG_GLOBAL');
}
}
Configuration::deleteByName('HEADER_HOOK');
Configuration::deleteByName('CONTENT_HOOK');
Configuration::deleteByName('FOOTER_HOOK');
Configuration::deleteByName('PRODUCT_HOOK');
# Add tab - Ap Live Theme Editor - BEGIN
$sql = 'SELECT * FROM '._DB_PREFIX_.'tab t WHERE t.`class_name`="AdminApPageBuilderThemeEditor"';
$exist_tab = Db::getInstance()->getRow($sql);
if (empty($exist_tab)) {
$sql = 'SELECT * FROM '._DB_PREFIX_.'tab t
WHERE t.`class_name`="AdminApPageBuilder"';
$row = Db::getInstance()->getRow($sql);
if (is_array($row) && !empty($row)) {
$id_parent = $row['id_tab'];
$newtab = new Tab();
$newtab->class_name = 'AdminApPageBuilderThemeEditor';
$newtab->id_parent = $id_parent;
$newtab->module = 'appagebuilder';
foreach (Language::getLanguages() as $l) {
$newtab->name[$l['id_lang']] = Context::getContext()->getTranslator()->trans('Ap Live Theme Editor', array(), 'Modules.Appagebuilder.Admin');
}
$newtab->save();
}
}
# Add tab - Ap Live Theme Editor - END
# HOOK ALL MODULE AFTER ONE_CLICK UPDATE - BEGIN
// if (file_exists(_PS_MODULE_DIR_.'leobootstrapmenu/leobootstrapmenu.php') && Module::isInstalled('leobootstrapmenu')) {
// require_once(_PS_MODULE_DIR_.'leobootstrapmenu/leobootstrapmenu.php');
// $leo_module = new Leobootstrapmenu();
// $leo_module->registerLeoHook();
// }
// if (file_exists(_PS_MODULE_DIR_.'leoslideshow/leoslideshow.php') && Module::isInstalled('leoslideshow')) {
// require_once(_PS_MODULE_DIR_.'leoslideshow/leoslideshow.php');
// $leo_module = new LeoSlideshow();
// $leo_module->registerLeoHook();
// }
// if (file_exists(_PS_MODULE_DIR_.'leoblog/leoblog.php') && Module::isInstalled('leoblog')) {
// require_once(_PS_MODULE_DIR_.'leoblog/leoblog.php');
// $leo_module = new Leoblog();
// $leo_module->registerLeoHook();
// }
// if (file_exists(_PS_MODULE_DIR_.'blockgrouptop/blockgrouptop.php') && Module::isInstalled('blockgrouptop')) {
// require_once(_PS_MODULE_DIR_.'blockgrouptop/blockgrouptop.php');
// $leo_module = new Blockgrouptop();
// $leo_module->registerLeoHook();
// }
# HOOK ALL MODULE AFTER ONE_CLICK UPDATE - END
# SEO_URL
if (!LeoFrameworkHelper::leoExitsDb('table', 'appagebuilder_profiles_lang')) {
$sql = '
CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'appagebuilder_profiles_lang` (
`id_appagebuilder_profiles` int(11) NOT NULL AUTO_INCREMENT,
`id_lang` int(10) unsigned NOT NULL,
`friendly_url` varchar(255),
`meta_title` varchar(255),
`meta_description` varchar(255),
`meta_keywords` varchar(255),
PRIMARY KEY (`id_appagebuilder_profiles`, `id_lang`)
) ENGINE='._MYSQL_ENGINE_.' DEFAULT CHARSET=UTF8;
';
Db::getInstance()->execute($sql);
$rows = Db::getInstance()->executes('SELECT id_appagebuilder_profiles from `'._DB_PREFIX_.'appagebuilder_profiles`');
foreach ($rows as $row) {
foreach (Language::getLanguages() as $lang) {
Db::getInstance()->execute('
INSERT INTO `'._DB_PREFIX_.'appagebuilder_profiles_lang` (`id_appagebuilder_profiles`, `id_lang`, `friendly_url`, `meta_title`, `meta_description`, `meta_keywords`)
VALUES('.(int)$row['id_appagebuilder_profiles'].', '.(int)$lang['id_lang'].', "","","","")'
);
}
}
}
# GROUP_BOX
LeoFrameworkHelper::leoCreateColumn('appagebuilder_profiles', 'group_box', 'varchar(255)');
# Add tab - Ap Hook Control Panel - BEGIN
// @tam_thoi : tu dong remove de tao lai access cho tab nay
$id = Tab::getIdFromClassName('AdminApPageBuilderHook');
if ($id) {
$tab = new Tab($id);
$tab->delete();
}
$sql = 'SELECT * FROM '._DB_PREFIX_.'tab t WHERE t.`class_name`="AdminApPageBuilderHook"';
$exist_tab = Db::getInstance()->getRow($sql);
if (empty($exist_tab)) {
$sql = 'SELECT * FROM '._DB_PREFIX_.'tab t
WHERE t.`class_name`="AdminApPageBuilder"';
$row = Db::getInstance()->getRow($sql);
if (is_array($row) && !empty($row)) {
$id_parent = $row['id_tab'];
$newtab = new Tab();
$newtab->class_name = 'AdminApPageBuilderHook';
$newtab->id_parent = $id_parent;
$newtab->module = 'appagebuilder';
foreach (Language::getLanguages() as $l) {
$newtab->name[$l['id_lang']] = Context::getContext()->getTranslator()->trans('Ap Hook Control Panel', array(), 'Modules.Appagebuilder.Admin');
}
$newtab->save();
}
}
# Add tab - Ap Hook Control Panel - END
# Empty File css -> auto delete file
if (version_compare(_PS_VERSION_, '1.7.1.0', '>=')) {
$common_folders = array(_PS_THEME_URI_.'assets/css/', _PS_THEME_URI_.'assets/js/', _PS_THEME_URI_, _PS_PARENT_THEME_URI_, __PS_BASE_URI__);
foreach ($common_folders as $common_folder) {
$cur_dir = self::getPathFromUri( $common_folder.'modules/appagebuilder/css/positions/' );
$position_css_files = @Tools::scandir($cur_dir, 'css');
foreach ($position_css_files as $cur_file) {
if (filesize($cur_dir.$cur_file) === 0) {
Tools::deleteFile($cur_dir.$cur_file);
}
}
$cur_dir = self::getPathFromUri( $common_folder.'modules/appagebuilder/js/positions/' );
$position_js_files = @Tools::scandir($cur_dir, 'js');
foreach ($position_js_files as $cur_file) {
if (filesize($cur_dir.$cur_file) === 0) {
Tools::deleteFile($cur_dir.$cur_file);
}
}
$cur_dir = self::getPathFromUri( $common_folder.'modules/appagebuilder/css/profiles/' );
$profile_css_files = @Tools::scandir($cur_dir, 'css');
foreach ($profile_css_files as $cur_file) {
if (filesize($cur_dir.$cur_file) === 0) {
Tools::deleteFile($cur_dir.$cur_file);
}
}
$cur_dir = self::getPathFromUri( $common_folder.'modules/appagebuilder/js/profiles/' );
$profile_js_files = @Tools::scandir($cur_dir, 'js');
foreach ($profile_js_files as $cur_file) {
if (filesize($cur_dir.$cur_file) === 0) {
Tools::deleteFile($cur_dir.$cur_file);
}
}
}
if (file_exists(_PS_MODULE_DIR_.'appagebuilder/appagebuilder.php') && Module::isInstalled('appagebuilder')) {
// @tam_thoi hook vao 'displayBanner'
require_once(_PS_MODULE_DIR_.'appagebuilder/appagebuilder.php');
$instance_module = APPageBuilder::getInstance();
$instance_module->registerHook('displayBanner');
}
}
# FIX : update Prestashop by 1-Click module -> LOST HOOK
$ap_version = Configuration::get('AP_CURRENT_VERSION');
if ($ap_version == false) {
$ps_version = Configuration::get('PS_VERSION_DB');
Configuration::updateValue('AP_CURRENT_VERSION', $ps_version);
}
$instance_module->registerHook('displayBackOfficeHeader');
//add some hook
# FIX THEME_CHILD NOT EXIST TPL FILE -> AUTO COPY TPL FILE FROM THEME_PARENT
$assets = Context::getContext()->shop->theme->get('assets');
$theme_parent = Context::getContext()->shop->theme->get('parent');
if (is_array($assets) && isset($assets['use_parent_assets']) && $assets['use_parent_assets'] && $theme_parent ) {
$from = _PS_ALL_THEMES_DIR_.$theme_parent.'/modules/appagebuilder';
$to = _PS_ALL_THEMES_DIR_.apPageHelper::getInstallationThemeName().'/modules/appagebuilder';
apPageHelper::createDir($to);
Tools::recurseCopy($from, $to);
}
# FIX AJAX ERROR WHEN MODULE NOT HAS AUTHOR
Configuration::updateValue('AP_CACHE_MODULE', '');
// ApShortCode for maintain page
$instance_module->registerHook('displayMaintenance');
// ApShortCode for maintain page
$instance_module->registerHook('actionOutputHTMLBefore');
// ApShortCode for cms page
$instance_module->registerHook('filterCmsContent');
// ApShortCode for manufacturer page
$instance_module->registerHook('filterHtmlContent');
$instance_module->registerHook('displayApCustom');
$instance_module->registerHook('displayLeoProductAtribute');
}
public static function processDeleteOldPosition()
{
$sql = 'SELECT header,content,footer,product FROM `'._DB_PREFIX_.'appagebuilder_profiles` GROUP BY id_appagebuilder_profiles';
$result = Db::getInstance()->executeS($sql);
$list_exits_position = array();
foreach ($result as $val) {
foreach ($val as $v) {
if (!in_array($v, $list_exits_position) && $v) {
$list_exits_position[] = $v;
}
}
}
if ($list_exits_position) {
$sql = 'SELECT * FROM `'._DB_PREFIX_.'appagebuilder_positions` WHERE id_appagebuilder_positions NOT IN ('.pSQL(implode(',', $list_exits_position)).')';
$list_delete_position = Db::getInstance()->executes($sql);
foreach ($list_delete_position as $row) {
$object = new ApPageBuilderPositionsModel($row['id_appagebuilder_positions']);
$object->delete();
if ($object->position_key) {
Tools::deleteFile(_PS_ALL_THEMES_DIR_.apPageHelper::getThemeName().'/modules/appagebuilder/css/positions/'.$object->position.$object->position_key.'.css');
Tools::deleteFile(_PS_ALL_THEMES_DIR_.apPageHelper::getThemeName().'/modules/appagebuilder/js/positions/'.$object->position.$object->position_key.'.js');
}
}
}
}
/**
* Check is Release or Developing
* Release : load css in themes/THEME_NAME/modules/MODULE_NAME/ folder
* Developing : load css in themes/THEME_NAME/assets/css/ folder
*/
public static function isRelease()
{
if (defined('_LEO_MODE_DEV_') && _LEO_MODE_DEV_ === true) {
# CASE DEV
return false;
}
# Release
return true;
}
public static $path_css;
public static function getFullPathCss($file, $directories = array())
{
if (self::$path_css) {
$directories = self::$path_css;
} else {
/**
* DEFAULT
* => D:\localhost\prestashop\themes/base/
* =>
* => D:\localhost\prestashop\
*/
$directories = array(apPageHelper::getConfigDir('_PS_THEME_DIR_'), _PS_PARENT_THEME_DIR_, _PS_ROOT_DIR_);
if (!self::isRelease()) {
$directories = array(apPageHelper::getConfigDir('_PS_THEME_DIR_').'assets/css/',apPageHelper::getConfigDir('_PS_THEME_DIR_'), _PS_PARENT_THEME_DIR_, _PS_ROOT_DIR_);
}
}
foreach ($directories as $baseDir) {
$fullPath = realpath($baseDir.'/'.$file);
if (is_file($fullPath)) {
return $fullPath;
}
}
return false;
}
public static function getUriFromPath($fullPath)
{
$uri = str_replace(
_PS_ROOT_DIR_,
rtrim(__PS_BASE_URI__, '/'),
$fullPath
);
return str_replace(DIRECTORY_SEPARATOR, '/', $uri);
}
/**
* Live Theme Editor
*/
public static function getFileList($path, $e = null, $nameOnly = false)
{
$output = array();
$directories = glob($path.'*'.$e);
if ($directories) {
foreach ($directories as $dir) {
$dir = basename($dir);
if ($nameOnly) {
$dir = str_replace($e, '', $dir);
}
$output[$dir] = $dir;
}
}
return $output;
}
/**
* When install theme, still get old_theme
*/
public static function getInstallationThemeName()
{
$theme_name = '';
if (Tools::getValue('controller') == 'AdminThemes' && Tools::getValue('action') == 'enableTheme') {
# Case install theme
$theme_name = Tools::getValue('theme_name');
} else if (Tools::getValue('controller') == 'AdminShop' && Tools::getValue('submitAddshop')) {
# Case install theme
$theme_name = Tools::getValue('theme_name');
} else if ( preg_match('#/improve/design/themes/(?P<themeName>[a-zA-Z0-9_.-]+)/enable#sD', $_SERVER['REQUEST_URI'], $matches) ) {
if (isset($matches['themeName']) && $matches['themeName']) {
$theme_name = $matches['themeName'];
}
}
if (empty($theme_name)) {
$theme_name = apPageHelper::getThemeName();
}
return $theme_name;
}
static $id_shop;
/**
* FIX Install multi theme
* apPageHelper::getIDShop();
*/
public static function getIDShop()
{
if ((int)self::$id_shop) {
$id_shop = (int)self::$id_shop;
} else {
$id_shop = (int)Context::getContext()->shop->id;
}
return $id_shop;
}
/*
* get theme in SINGLE_SHOP or MULTI_SHOP
* apPageHelper::getThemeName()
*/
public static function getThemeName()
{
static $theme_name;
if (!$theme_name) {
# DEFAULT SINGLE_SHOP
$theme_name = _THEME_NAME_;
# GET THEME_NAME MULTI_SHOP
if (Shop::getTotalShops(false, null) >= 2) {
$id_shop = Context::getContext()->shop->id;
$shop_arr = Shop::getShop($id_shop);
if (is_array($shop_arr) && !empty($shop_arr)) {
$theme_name = $shop_arr['theme_name'];
}
}
}
return $theme_name;
}
public static function fullCopy( $source, $target )
{
if (is_dir($source)) {
@mkdir($target);
$d = dir($source);
while (FALSE !== ( $name = $d->read())) {
if ($name == '.' || $name == '..' ) {
continue;
}
$entry = $source . '/' . $name;
if (is_dir($entry)) {
self::fullCopy($entry, $target . '/' . $name);
continue;
}
copy($entry, $target . '/' . $name);
}
$d->close();
} else {
copy($source, $target);
}
}
public static function getTemplate($tpl_name, $override_folder = '')
{
$module_name = 'appagebuilder';
$hook_name = ApShortCodesBuilder::$hook_name;
if (isset($override_folder) && file_exists(_PS_ALL_THEMES_DIR_.apPageHelper::getThemeName()."/modules/$module_name/views/templates/hook/$override_folder/$tpl_name")) {
$tpl_file = "views/templates/hook/$override_folder/$tpl_name";
} elseif (file_exists(_PS_ALL_THEMES_DIR_.apPageHelper::getThemeName().'/modules/'.$module_name.'/views/templates/hook/'.$hook_name.'/'.$tpl_name) || file_exists(_PS_MODULE_DIR_.$module_name.'/views/templates/hook/'.$hook_name.'/'.$tpl_name)) {
$tpl_file = 'views/templates/hook/'.$hook_name.'/'.$tpl_name;
} elseif (file_exists(_PS_ALL_THEMES_DIR_.apPageHelper::getThemeName().'/modules/'.$module_name.'/views/templates/hook/'.$tpl_name) || file_exists(_PS_MODULE_DIR_.$module_name.'/views/templates/hook/'.$tpl_name)) {
$tpl_file = 'views/templates/hook/'.$tpl_name;
} else {
$tpl_file = 'views/templates/hook/ApGeneral.tpl';
}
return $tpl_file;
}
/**
* get Full path in tpl
*/
public static function getTplTemplate($tpl_name='', $override_folder = '')
{
$module_name = 'appagebuilder';
$hook_name = ApShortCodesBuilder::$hook_name;
$path_theme = _PS_ALL_THEMES_DIR_.apPageHelper::getThemeName().'/modules/'.$module_name.'/views/templates/hook/';
$path_module = _PS_MODULE_DIR_.$module_name.'/views/templates/hook/';
if (file_exists($path_theme.$override_folder.'/'.$tpl_name)) {
# THEMES / OVERRIDE
$tpl_file = $path_theme.$override_folder.'/'.$tpl_name;
} elseif (file_exists($path_module.$override_folder.'/'.$tpl_name)) {
# MODULE / OVERRIDE
$tpl_file = $path_module.$override_folder.'/'.$tpl_name;
} elseif (file_exists($path_theme.$hook_name.'/'.$tpl_name)) {
# THEME / HOOK_NAME
$tpl_file = $path_theme.$hook_name.'/'.$tpl_name;
} elseif (file_exists($path_module.$hook_name.'/'.$tpl_name)) {
# MODULE / HOOK_NAME
$tpl_file = $path_module.$hook_name.'/'.$tpl_name;
} elseif (file_exists($path_theme.$tpl_name)) {
# THEME / HOOK
$tpl_file = $path_theme.$tpl_name;
} elseif (file_exists($path_module.$tpl_name)) {
# MODULE / HOOK
$tpl_file = $path_module.$tpl_name;
} elseif (file_exists($path_theme.'/ApGeneral.tpl')) {
# THEME / GENERATE
$tpl_file = $path_theme.'/ApGeneral.tpl';
} else {
# MODULE / GENERATE
$tpl_file = $path_module.'/ApGeneral.tpl';
}
return $tpl_file;
}
/**
* Copy method from ROOT\src\Adapter\Assets\AssetUrlGeneratorTrait.php
*/
public static function getPathFromUri($fullUri)
{
return _PS_ROOT_DIR_.str_replace(rtrim(__PS_BASE_URI__, '/'), '', $fullUri);
}
public static function getFontFamily($default=false)
{
if ($default == 'default') {
return '';
}
$result = array(
array( 'id' => '', 'name' => ''),
array( 'id' => 'arial', 'name' => 'Arial'),
array( 'id' => 'verdana', 'name' => 'Verdana, Geneva'),
array( 'id' => 'trebuchet', 'name' => 'Trebuchet'),
array( 'id' => 'georgia', 'name' => 'Georgia'),
array( 'id' => 'times', 'name' => 'Times New Roman'),
array( 'id' => 'tahoma', 'name' => 'Tahoma, Geneva'),
array( 'id' => 'palatino', 'name' => 'Palatino'),
array( 'id' => 'helvetica', 'name' => 'Helvetica'),
);
$google_font_cfg = Configuration::get( self::getConfigName('google_font'));
if ($google_font_cfg) {
$google_fonts = explode('__________', $google_font_cfg);
foreach ($google_fonts as &$font) {
$font = Tools::jsonDecode($font, true);
$result[] = array(
'id' => $font['gfont_name'],
'name' => $font['gfont_name'],
);
}
}
return $result;
}
public static function getShortcodeTemplatePath( $file_name )
{
$path = _PS_MODULE_DIR_.'appagebuilder/views/templates/admin/shortcodes/' . $file_name;
return $path;
}
public static function createShortCode($correct = false, $quickstart = false)
{
#shortcode to tinymce : backup file
if (!file_exists(_PS_MODULE_DIR_.'appagebuilder/views/js/shortcode/backup/tinymce.inc.js'))
{
Tools::copy(_PS_ROOT_DIR_.'/js/admin/tinymce.inc.js', _PS_MODULE_DIR_.'appagebuilder/views/js/shortcode/backup/tinymce.inc.js');
}
@mkdir(_PS_ROOT_DIR_.'/js/admin/', 0755, true);
#shortcode to tinymce : override file
Tools::copy(_PS_MODULE_DIR_.'appagebuilder/views/js/shortcode/tinymce.inc.js', _PS_ROOT_DIR_.'/js/admin/tinymce.inc.js');
#shortcode to tinymce : copy folder plugin of shortcode for tinymce
@mkdir(_PS_ROOT_DIR_.'/js/tiny_mce/plugins/appagebuilder/', 0755, true);
Tools::copy(_PS_MODULE_DIR_.'appagebuilder/views/js/shortcode/appagebuilder/index.php', _PS_ROOT_DIR_.'/js/tiny_mce/plugins/appagebuilder/index.php');
Tools::copy(_PS_MODULE_DIR_.'appagebuilder/views/js/shortcode/appagebuilder/plugin.min.js', _PS_ROOT_DIR_.'/js/tiny_mce/plugins/appagebuilder/plugin.min.js');
@mkdir(_PS_ROOT_DIR_.'/override/controllers/front/listing/', 0755, true);
Tools::copy(_PS_ROOT_DIR_.'/override/controllers/front/index.php', _PS_ROOT_DIR_.'/override/controllers/front/listing/index.php');
if (($correct && !Configuration::get('APPAGEBUILDER_OVERRIDED')) || ($correct && $quickstart))
{
$instance_module = APPageBuilder::getInstance();
$instance_module->installOverrides();
Configuration::updateValue('APPAGEBUILDER_OVERRIDED', 1);
}
if (Tools::substr(_PS_VERSION_, 0, 5) >= '1.7.6') {
#CATEGORY
if (!file_exists(_PS_MODULE_DIR_.'appagebuilder/views/js/shortcode/backup/category.bundle.js'))
{
Tools::copy(_PS_ADMIN_DIR_.'/themes/new-theme/public/category.bundle.js', _PS_MODULE_DIR_.'appagebuilder/views/js/shortcode/backup/category.bundle.js');
}
Tools::copy(_PS_MODULE_DIR_.'appagebuilder/views/js/shortcode/category.bundle.js', _PS_ADMIN_DIR_.'/themes/new-theme/public/category.bundle.js');
#CMS
if (!file_exists(_PS_MODULE_DIR_.'appagebuilder/views/js/shortcode/backup/cms_page_form.bundle.js'))
{
Tools::copy(_PS_ADMIN_DIR_.'/themes/new-theme/public/cms_page_form.bundle.js', _PS_MODULE_DIR_.'appagebuilder/views/js/shortcode/backup/cms_page_form.bundle.js');
}
Tools::copy(_PS_MODULE_DIR_.'appagebuilder/views/js/shortcode/cms_page_form.bundle.js', _PS_ADMIN_DIR_.'/themes/new-theme/public/cms_page_form.bundle.js');
}
}
// public static function getExportProfileDir($module_folder = '')
// {
// static $img_theme_dir;
//
// if (!$img_theme_dir || !isset($img_theme_dir[$module_folder]))
// {
// $img_theme_dir[$module_folder] = _PS_ALL_THEMES_DIR_.apPageHelper::getThemeName().'/leo_export_profiles/'.$module_folder.'/';
// }
// return $img_theme_dir[$module_folder];
// }
public static function createDir($path = '')
{
if (!file_exists($path))
{
if (!mkdir($path, 0755, true))
{
die("Please create folder ".$path." and set permission 755");
}
}
}
public static function getConfigUrl($key = 'theme_profile_logo', $value = '')
{
static $data;
if (!$data)
{
$data = array(
'module_img_admin' => _PS_BASE_URL_.__PS_BASE_URI__.'modules/appagebuilder/img/admin/',
'module_details' => _PS_BASE_URL_.__PS_BASE_URI__.'modules/appagebuilder/views/templates/front/details/',
'module_profiles' => _PS_BASE_URL_.__PS_BASE_URI__.'modules/appagebuilder/views/templates/front/profiles/',
'theme_ap_image' => _PS_BASE_URL_._PS_THEME_URI_.'assets/img/modules/appagebuilder/images/',
'theme_ap_icon' => _PS_BASE_URL_._PS_THEME_URI_.'assets/img/modules/appagebuilder/icon/',
'theme_profile_logo' => _PS_BASE_URL_._PS_THEME_URI_.'profiles/images/',
'theme_profile_js' => _PS_BASE_URL_._PS_THEME_URI_.'modules/appagebuilder/js/profiles/',
'theme_profile_css' => _PS_BASE_URL_._PS_THEME_URI_.'modules/appagebuilder/css/profiles/',
'theme_position_js' => _PS_BASE_URL_._PS_THEME_URI_.'modules/appagebuilder/js/positions/',
'theme_position_css' => _PS_BASE_URL_._PS_THEME_URI_.'modules/appagebuilder/css/positions/',
'theme_export_profile' => _PS_BASE_URL_._PS_THEME_URI_.'profiles_export/',
'theme_download_profile' => _PS_BASE_URL_._PS_THEME_URI_.'profiles_download/',
'theme_image_appagebuilder' => _PS_BASE_URL_._PS_THEME_URI_.'assets/img/modules/appagebuilder/',
'theme_image_leoslideshow' => _PS_BASE_URL_._PS_THEME_URI_.'assets/img/modules/leoslideshow/',
'theme_image_leoblog' => _PS_BASE_URL_._PS_THEME_URI_.'assets/img/modules/leoblog/',
'theme_image_leobootstrapmenu' => _PS_BASE_URL_._PS_THEME_URI_.'assets/img/modules/leobootstrapmenu/',
'theme_details' => _PS_BASE_URL_._PS_THEME_URI_.'details/',
'theme_profiles' => _PS_BASE_URL_._PS_THEME_URI_.'profiles/',
);
if (version_compare(_PS_VERSION_, '1.7.4.0', '>=') || version_compare(Configuration::get('PS_VERSION_DB'), '1.7.4.0', '>=')) {
$data['theme_details'] = _PS_BASE_URL_._PS_THEME_URI_.'modules/appagebuilder/views/templates/front/details/';
$data['theme_profiles'] = _PS_BASE_URL_._PS_THEME_URI_.'modules/appagebuilder/views/templates/front/profiles/';
}
}
if ($value && !array_key_exists($key.$value, $data)) {
$temp = array(
'theme_pfdl_ap' => _PS_BASE_URL_._PS_THEME_URI_.'profiles_download/'.'_TUANVU_'.'/appagebuilder/',
'theme_pfdl_ap_image' => _PS_BASE_URL_._PS_THEME_URI_.'profiles_download/'.'_TUANVU_'.'/appagebuilder/images/', // profile_download_ap_image
'theme_pfdl_ap_icon' => _PS_BASE_URL_._PS_THEME_URI_.'profiles_download/'.'_TUANVU_'.'/appagebuilder/icon/', // profile_download_ap_icon
);
if (!isset($temp[$key])) {
$temp[$key] = '';
}
$data[$key.$value] = str_replace('_TUANVU_', $value, $temp[$key]);
}
if (isset($data[$key.$value])) {
return $data[$key.$value];
} else {
return '';
}
}
public static function getConfigDir($key = '_PS_THEME_DIR_', $value = '')
{
static $data;
if (!$data )
{
$folder_theme = _PS_ALL_THEMES_DIR_.apPageHelper::getThemeName().'/';
$data = array(
'module_img_admin' => _PS_ROOT_DIR_.'/modules/appagebuilder/img/admin/',
'module_details' => _PS_ROOT_DIR_.'/modules/appagebuilder/views/templates/front/details/',
'module_profiles' => _PS_ROOT_DIR_.'/modules/appagebuilder/views/templates/front/profiles/',
'theme_ap_image' => $folder_theme.'assets/img/modules/appagebuilder/images/', // apPageHelper::getImgThemeDir()
'theme_ap_icon' => $folder_theme.'assets/img/modules/appagebuilder/icon/', // apPageHelper::getImgThemeDir('icon')
'theme_profile_logo' => $folder_theme.'profiles/images/',
'theme_profile_js' => $folder_theme.'modules/appagebuilder/js/profiles/',
'theme_profile_css' => $folder_theme.'modules/appagebuilder/css/profiles/',
'theme_position_js' => $folder_theme.'modules/appagebuilder/js/positions/',
'theme_position_css' => $folder_theme.'modules/appagebuilder/css/positions/',
'theme_export_profile' => $folder_theme.'profiles_export/',
'theme_download_profile' => $folder_theme.'profiles_download/',
'theme_image_appagebuilder' => $folder_theme.'assets/img/modules/appagebuilder/',
'theme_image_leoslideshow' => $folder_theme.'assets/img/modules/leoslideshow/',
'theme_image_leoblog' => $folder_theme.'assets/img/modules/leoblog/',
'theme_image_leobootstrapmenu' => $folder_theme.'assets/img/modules/leobootstrapmenu/',
'theme_details' => $folder_theme.'details/',
'theme_profiles' => $folder_theme.'profiles/',
'_PS_THEME_DIR_' => $folder_theme,
);
if (version_compare(_PS_VERSION_, '1.7.4.0', '>=') || version_compare(Configuration::get('PS_VERSION_DB'), '1.7.4.0', '>=')) {
$data['theme_details'] = $folder_theme.'modules/appagebuilder/views/templates/front/details/';
$data['theme_profiles'] = $folder_theme.'modules/appagebuilder/views/templates/front/profiles/';
}
}
if ($value && !array_key_exists($key.$value, $data)) {
$temp = array(
'theme_pfdl_ap' => $folder_theme.'profiles_download/'.'_TUANVU_'.'/appagebuilder/',
'theme_pfdl_ap_image' => $folder_theme.'profiles_download/'.'_TUANVU_'.'/appagebuilder/images/', // apPageHelper::getConfigDir('theme_export_profile') . $this->profile_key . '/appagebuilder/images/';
'theme_pfdl_ap_icon' => $folder_theme.'profiles_download/'.'_TUANVU_'.'/appagebuilder/icon/', // apPageHelper::getConfigDir('theme_export_profile') . $this->profile_key . '/appagebuilder/icon/';
);
if (!isset($temp[$key])) {
$temp[$key] = '';
}
$data[$key.$value] = str_replace('_TUANVU_', $value, $temp[$key]);
}
if (isset($data[$key.$value])) {
return $data[$key.$value];
} else {
return '';
}
}
public static function getModules()
{
$not_module = array('appagebuilder', 'themeconfigurator', 'leotempcp', 'themeinstallator', 'cheque');
$where = '';
if (count($not_module) == 1) {
$where = ' WHERE m.`name` <> \''.$not_module[0].'\'';
} elseif (count($not_module) > 1) {
$where = ' WHERE m.`name` NOT IN (\''.implode("','", $not_module).'\')';
}
$context = Context::getContext();
$id_shop = $context->shop->id;
$sql = 'SELECT m.name, m.id_module
FROM `'._DB_PREFIX_.'module` m
JOIN `'._DB_PREFIX_.'module_shop` ms ON (m.`id_module` = ms.`id_module` AND ms.`id_shop` = '.(int)$id_shop.')
'.$where;
$module_list = Db::getInstance()->ExecuteS($sql);
$module_info = ModuleCore::getModulesOnDisk(true);
$modules = array();
foreach ($module_list as $m) {
foreach ($module_info as $mi) {
if ($m['name'] === $mi->name) {
$m['tab'] = (isset($mi->tab) && $mi->tab) ? $mi->tab : '';
$m['interest'] = (isset($mi->interest) && $mi->interest) ? $mi->interest : '';
$m['author'] = (isset($mi->author) && $mi->author) ? Tools::ucwords(Tools::strtolower($mi->author)) : '';
$m['image'] = (isset($mi->image) && $mi->image) ? $mi->image : '';
$m['avg_rate'] = (isset($mi->avg_rate) && $mi->avg_rate) ? $mi->avg_rate : '';
$m['description'] = (isset($mi->description) && $mi->description) ? $mi->description : '';
$sub = '';
if (isset($mi->description) && $mi->description) {
// Get sub word 50 words from description
$sub = Tools::substr($mi->description, 0, 50);
$spo = Tools::strrpos($sub, ' ');
$sub = Tools::substr($mi->description, 0, ($spo != -1 ? $spo : 0)).'...';
}
$m['description_short'] = $sub;
break;
}
}
if (in_array($m['name'], array('leosliderlayer'))) {
$m['author'] = 'Apollotheme';
}
$m['tab'] = (isset($m['tab']) && $m['tab']) ? $m['tab'] : '';
$m['interest'] = (isset($m['interest']) && $m['interest']) ? $m['interest'] : '';
$m['author'] = (isset($m['author']) && $m['author']) ? $m['author'] : '';
$m['image'] = (isset($m['image']) && $m['image']) ? $m['image'] : '';
$m['avg_rate'] = (isset($m['avg_rate']) && $m['avg_rate']) ? $m['avg_rate'] : '';
$m['description'] = (isset($m['description']) && $m['description']) ? $m['description'] : '';
$m['description_short'] = (isset($m['description_short']) && $m['description_short']) ? $m['description_short'] : '';
$modules[] = $m;
}
return $modules;
}
public static $replaced_element;
public static function replaceFormId($param)
{
preg_match_all('/form_id="([^\"]+)"/i', $param, $matches, PREG_OFFSET_CAPTURE);
foreach ($matches[0] as $row) {
if (!isset(self::$replaced_element[$row[0]])) {
$form_id = 'form_id="form_'.ApPageSetting::getRandomNumber().'"';
self::$replaced_element[$row[0]] = $form_id;
} else {
$form_id = self::$replaced_element[$row[0]];
}
$param = str_replace($row[0], $form_id, $param);
}
preg_match_all('/ id="([^\"]+)"/i', $param, $matches, PREG_OFFSET_CAPTURE);
foreach ($matches[0] as $row) {
if (!isset(self::$replaced_element[$row[0]])) {
if (strpos($row[0], 'tab')) {
$form_id = ' id="tab_'.ApPageSetting::getRandomNumber().'"';
} else if (strpos($row[0], 'accordion')) {
$form_id = ' id="accordion_'.ApPageSetting::getRandomNumber().'"';
} else if (strpos($row[0], 'collapse')) {
$form_id = ' id="collapse_'.ApPageSetting::getRandomNumber().'"';
} else {
$form_id = '';
}
self::$replaced_element[$row[0]] = $form_id;
} else {
$form_id = self::$replaced_element[$row[0]];
}
if ($form_id) {
$param = str_replace($row[0], $form_id, $param);
//ifreplace id="accordion_8223663723713862" to new id="accordion_8223663723713862"
if (strpos($row[0], 'accordion')) {
$parent_id = Tools::substr(str_replace(' id="accordion_', 'accordion_', $row[0]), 0, -1);
$parent_form_id = Tools::substr(str_replace(' id="accordion_', 'accordion_', $form_id), 0, -1);
$param = str_replace(' parent_id="'.$parent_id.'"', ' parent_id="'.$parent_form_id.'"', $param);
}
}
}
return $param;
}
/**
* String to int to string
* apPageHelper::addonValidInt($id_categories);
*/
public static function addonValidInt($str_ids = '')
{
return implode(',' , array_map('intval', explode(',', $str_ids)));
}
public static function getLicenceTPL()
{
return Tools::file_get_contents( _PS_MODULE_DIR_.'appagebuilder/views/templates/admin/licence_tpl.txt');
}
/**
* COPY FROM modules\appagebuilder\controllers\admin\AdminApPageBuilderPositions.php
* @TODO remove modules\appagebuilder\controllers\admin\AdminApPageBuilderPositions.php
*/
public static function autoCreatePosition($obj)
{
$model = new ApPageBuilderPositionsModel();
$id = $model->addAuto($obj);
if ($id) {
self::saveCustomJsAndCss($obj['position'].$obj['position_key'], '');
}
return $id;
}
/**
* COPY FROM modules\appagebuilder\controllers\admin\AdminApPageBuilderPositions.php
* @TODO remove modules\appagebuilder\controllers\admin\AdminApPageBuilderPositions.php
*/
public static function saveCustomJsAndCss($key, $old_key = '')
{
if ($old_key) {
Tools::deleteFile(apPageHelper::getConfigDir('_PS_THEME_DIR_').apPageHelper::getCssDir().'positions/'.$old_key.'.css');
Tools::deleteFile(apPageHelper::getConfigDir('_PS_THEME_DIR_').apPageHelper::getJsDir().'positions/'.$old_key.'.js');
}
if (Tools::getValue('js') != '') {
ApPageSetting::writeFile(apPageHelper::getConfigDir('_PS_THEME_DIR_').apPageHelper::getJsDir().'positions/', $key.'.js', Tools::getValue('js'));
}
if (Tools::getValue('css') != '') {
ApPageSetting::writeFile(apPageHelper::getConfigDir('_PS_THEME_DIR_').apPageHelper::getCssDir().'positions/', $key.'.css', Tools::getValue('css'));
}
}
}