* @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/ApPageBuilderProfilesModel.php'); class AdminApPageBuilderProfilesController extends ModuleAdminControllerCore { private $theme_name = ''; public $profile_js_folder = ''; public $profile_css_folder = ''; public $module_name = 'appagebuilder'; public $explicit_select; public $order_by; public $order_way; public $theme_dir; public function __construct() { $this->bootstrap = true; $this->table = 'appagebuilder_profiles'; $this->className = 'ApPageBuilderProfilesModel'; $this->lang = false; $this->explicit_select = true; $this->allow_export = true; parent::__construct(); $this->theme_dir = apPageHelper::getConfigDir('_PS_THEME_DIR_'); $this->context = Context::getContext(); $this->order_by = 'page'; $this->order_way = 'DESC'; $alias = 'sa'; $id_shop = (int)$this->context->shop->id; $this->_join .= ' JOIN `'._DB_PREFIX_.'appagebuilder_profiles_shop` sa ON (a.`id_appagebuilder_profiles` = sa.`id_appagebuilder_profiles` AND sa.id_shop = '.$id_shop.')'; $this->_select .= ' sa.active as active, sa.active_mobile as active_mobile, sa.active_tablet as active_tablet'; $this->fields_list = array( 'id_appagebuilder_profiles' => array( 'title' => $this->l('ID'), 'align' => 'center', 'width' => 50, 'class' => 'fixed-width-xs' ), 'name' => array( 'title' => $this->l('Name'), 'width' => 140, 'type' => 'text', 'filter_key' => 'a!name' ), 'profile_key' => array( 'title' => $this->l('Key'), 'filter_key' => 'a!profile_key', 'type' => 'text', 'width' => 140, ), 'active' => array( 'title' => $this->l('Is Default'), 'active' => 'status', 'filter_key' => $alias.'!active', 'align' => 'text-center', 'type' => 'bool', 'class' => 'fixed-width-sm', 'orderby' => false ), 'active_mobile' => array( 'title' => $this->l('Is Mobile'), 'active' => 'active_mobile', 'filter_key' => $alias.'!active_mobile', 'align' => 'text-center', 'type' => 'bool', 'class' => 'fixed-width-sm', 'orderby' => false ), 'active_tablet' => array( 'title' => $this->l('Is Tablet'), 'active' => 'active_tablet', 'filter_key' => $alias.'!active_tablet', 'align' => 'text-center', 'type' => 'bool', 'class' => 'fixed-width-sm', 'orderby' => false ) ); $this->bulk_actions = array( 'delete' => array( 'text' => $this->l('Delete selected'), 'confirm' => $this->l('Delete selected items?'), 'icon' => 'icon-trash' ), 'insertLang' => array( 'text' => $this->l('Auto Input Data for New Lang'), 'confirm' => $this->l('Auto insert data for new language?'), 'icon' => 'icon-edit' ) ); //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'); } $this->_where = ' AND sa.id_shop='.(int)$this->context->shop->id; $this->theme_name = apPageHelper::getThemeName(); $this->profile_css_folder = apPageHelper::getConfigDir('_PS_THEME_DIR_').apPageHelper::getCssDir().'profiles/'; $this->profile_js_folder = apPageHelper::getConfigDir('_PS_THEME_DIR_').apPageHelper::getJsDir().'profiles/'; if (!is_dir($this->profile_css_folder)) { mkdir($this->profile_css_folder, 0755, true); } if (!is_dir($this->profile_js_folder)) { mkdir($this->profile_js_folder, 0755, true); } } public function initToolbar() { parent::initToolbar(); # SAVE AND STAY if ($this->display == 'add' || $this->display == 'edit') { $this->context->controller->addJs(apPageHelper::getJsAdminDir().'admin/function.js'); $this->page_header_toolbar_btn['SaveAndStay'] = array( 'href' => 'javascript:void(0);', 'desc' => $this->l('Save and stay'), 'js' => 'TopSaveAndStay()', 'icon' => 'process-icon-save', ); Media::addJsDef(array('TopSaveAndStay_Name' => 'submitAdd'.$this->table.'AndStay')); $this->page_header_toolbar_btn['Save'] = array( 'href' => 'javascript:void(0);', 'desc' => $this->l('Save'), 'js' => 'TopSave()', 'icon' => 'process-icon-save', ); Media::addJsDef(array('TopSave_Name' => 'submitAdd'.$this->table)); } } public function setMedia($isNewTheme = false) { parent::setMedia($isNewTheme); $this->addJqueryPlugin('tagify'); } public function processDelete() { $object = $this->loadObject(); $object->loadDataShop(); if ($object && !$object->active) { $object = parent::processDelete(); if ($object->profile_key) { Tools::deleteFile($this->profile_css_folder.$object->profile_key.'.css'); Tools::deleteFile($this->profile_js_folder.$object->profile_key.'.js'); } } else { $this->errors[] = Tools::displayError('Can not delete Default Profile.'); } return $object; } public function processBulkDelete() { $arr = $this->boxes; if (!$arr) { return; } foreach ($arr as $id) { $object = new $this->className($id); $object->loadDataShop(); if ($object && !$object->active) { $object->delete(); if ($object->profile_key) { Tools::deleteFile($this->profile_css_folder.$object->profile_key.'.css'); Tools::deleteFile($this->profile_js_folder.$object->profile_key.'.js'); } } else { $this->errors[] = Tools::displayError('Can not delete Default Profile.'); } } if (empty($this->errors)) { $this->confirmations[] = $this->_conf[1]; } } public function renderView() { //echo 'here';die; $object = $this->loadObject(); if ($object->page == 'product_detail') { $this->redirect_after = Context::getContext()->link->getAdminLink('AdminApPageBuilderProductDetail'); } else { $this->redirect_after = Context::getContext()->link->getAdminLink('AdminApPageBuilderHome'); } $this->redirect_after .= '&id_appagebuilder_profiles='.$object->id; $this->redirect(); } public function displayViewLink($token = null, $id = null, $name = null) { // validate module unset($name); $token = Context::getContext()->link->getAdminLink('AdminApPageBuilderHome'); $href = $token . '&id_appagebuilder_profiles='.$id; $html = ' View'; return $html; } public function processBulkinsertLang() { // Remove resouce and update table profiles $arr = $this->boxes; if (!$arr) { // validate module $arr[] = Tools::getValue('id'); } if (!$arr) { return; } foreach ($arr as $item) { if ($item) { //has profile id $pfile = new ApPageBuilderProfilesModel($item); $id_positions = array($pfile->header, $pfile->content, $pfile->footer, $pfile->product); $list_position = $pfile->getPositionsForProfile($id_positions); $list_pos_id = array(); foreach ($list_position as $v) { // validate module $list_pos_id[] = $v['id_appagebuilder_positions']; } $s_model = new ApPageBuilderModel(); $list_short_c = $s_model->getAllItemsByPositionId($list_pos_id); $context = Context::getContext(); $id_lang = (int)$context->language->id; foreach ($list_short_c as $shor_code) { $s_model = new ApPageBuilderModel($shor_code['id']); if ($s_model->params) { foreach ($s_model->params as $key => $value) { if ($key != $id_lang) { // validate module $s_model->params[$key] = $s_model->params[$id_lang]; } // validate module unset($value); } } $s_model->save(); } } } } public function processStatus() { if (Validate::isLoadedObject($object = $this->loadObject())) { if ($object->toggleStatus()) { $matches = array(); if (preg_match('/[\?|&]controller=([^&]*)/', (string)$_SERVER['HTTP_REFERER'], $matches) !== false && Tools::strtolower($matches[1]) != Tools::strtolower(preg_replace('/controller/i', '', get_class($this)))) { $this->redirect_after = preg_replace('/[\?|&]conf=([^&]*)/i', '', (string)$_SERVER['HTTP_REFERER']); } else { $this->redirect_after = self::$currentIndex.'&token='.$this->token; } } else { $this->errors[] = Tools::displayError('You can not disable default profile, Please select other profile as default'); } } else { $this->errors[] = Tools::displayError('An error occurred while updating the status for an object.') .''.$this->table.' '.Tools::displayError('(cannot load object)'); } return $object; } public function postProcess() { parent::postProcess(); if (count($this->errors) > 0) { return; } if (Tools::getIsset('active_mobileappagebuilder_profiles') || Tools::getIsset('active_tabletappagebuilder_profiles')) { if (Validate::isLoadedObject($object = $this->loadObject())) { $result = Tools::getIsset('active_mobileappagebuilder_profiles')?$object->toggleStatusMT('active_mobile'):$object->toggleStatusMT('active_tablet'); if ($result) { // $this->mesage[] = Tools::displayError('You should enebale mobile theme in theme config'); $matches = array(); if (preg_match('/[\?|&]controller=([^&]*)/', (string)$_SERVER['HTTP_REFERER'], $matches) !== false && Tools::strtolower($matches[1]) != Tools::strtolower(preg_replace('/controller/i', '', get_class($this)))) { $this->redirect_after = preg_replace('/[\?|&]conf=([^&]*)/i', '', (string)$_SERVER['HTTP_REFERER']); } else { $this->redirect_after = self::$currentIndex.'&token='.$this->token.'&mobiletheme'; } } else { $this->errors[] = Tools::displayError('You can not disable default profile, Please select other profile as default'); } } else { $this->errors[] = Tools::displayError('An error occurred while updating the status for an object.') .''.$this->table.' '.Tools::displayError('(cannot load object)'); } } if (Tools::getIsset('duplicateappagebuilder_profiles')) { // $context = Context::getContext(); // $id_shop = $context->shop->id; $id = Tools::getValue('id_appagebuilder_profiles'); $model = new ApPageBuilderProfilesModel($id); if ($model) { $old_key = $model->profile_key; $model->profile_key = $profile_key = 'profile'.ApPageSetting::getRandomNumber(); $model->id = null; $model->name = $this->l('Duplicate of ') . $model->name; $model->active = ''; $model->friendly_url = array(); $duplicate_object = $model->save(); if ($duplicate_object) { //duplicate shortCode $id_new = $model->id; ApPageSetting::writeFile($this->profile_js_folder, $profile_key.'.js', Tools::file_get_contents($this->profile_js_folder.$old_key.'.js')); ApPageSetting::writeFile($this->profile_css_folder, $profile_key.'.css', Tools::file_get_contents($this->profile_css_folder.$old_key.'.css')); AdminApPageBuilderShortcodesController::duplicateData($id, $id_new); $this->redirect_after = self::$currentIndex.'&token='.$this->token; $this->redirect(); } else { Tools::displayError('Can not create new profile'); } } else { Tools::displayError('Profile is not exist to duplicate'); } } } public function renderList() { $this->initToolbar(); $this->addRowAction('view'); $this->addRowAction('edit'); $this->addRowAction('duplicate'); $this->addRowAction('delete'); $this->context->controller->addCss(apPageHelper::getCssAdminDir().'admin/form.css'); $tpl_name = 'list.tpl'; $path = ''; if (file_exists($this->theme_dir.'modules/'.$this->module->name.'/views/templates/admin/'.$tpl_name)) { $path = $this->theme_dir.'modules/'.$this->module->name.'/views/templates/admin/'.$tpl_name; } elseif (file_exists($this->getTemplatePath().$this->override_folder.$tpl_name)) { $path = $this->getTemplatePath().$this->override_folder.$tpl_name; } $model = new ApPageBuilderProfilesModel(); $list_profiles = $model->getAllProfileByShop(); // Build url for back from live edit page, it is stored in cookie and read in fontContent function below $controller = 'AdminApPageBuilderHome'; $id_lang = Context::getContext()->language->id; $url_edit_profile_token = Tools::getAdminTokenLite($controller); $params = array('token' => $url_edit_profile_token); $url_edit_profile = dirname($_SERVER['PHP_SELF']).'/'.Dispatcher::getInstance()->createUrl($controller, $id_lang, $params, false); $live_edit_params = array( 'ap_live_edit' => true, 'ad' => basename(_PS_ADMIN_DIR_), 'liveToken' => Tools::getAdminTokenLite('AdminModulesPositions'), 'id_employee' => (int)Context::getContext()->employee->id, 'id_shop' => (int)Context::getContext()->shop->id ); $url_live_edit = $this->getLiveEditUrl($live_edit_params); $lang = ''; if (Configuration::get('PS_REWRITING_SETTINGS') && count(Language::getLanguages(true)) > 1) { $lang = Language::getIsoById($this->context->employee->id_lang).'/'; } $url_preview = $this->context->shop->getBaseUrl().(Configuration::get('PS_REWRITING_SETTINGS') ? '' : 'index.php').$lang; $cookie = new Cookie('url_live_back'); $cookie->setExpire(time() + 60 * 60); $cookie->variable_name = $url_edit_profile; $cookie->write(); // Save token for check valid $cookie = new Cookie('ap_token'); //make your own cookie $cookie->setExpire(time() + 60 * 60); $cookie->variable_name = $live_edit_params['liveToken']; $cookie->write(); $profile_link = $this->context->link->getAdminLink('AdminApPageBuilderProfiles').'&addappagebuilder_profiles'; $this->context->smarty->assign(array( 'profile_link' => $profile_link, 'url_preview' => $url_preview, 'list_profile' => $list_profiles, 'use_mobile_theme' => $this->module->getConfig('USE_MOBILE_THEME'), 'url_live_edit' => $url_live_edit, 'url_profile_detail' => $this->context->link->getAdminLink('AdminApPageBuilderProfiles'), 'url_edit_profile_token' => $url_edit_profile_token, 'url_edit_profile' => $url_edit_profile)); $content = $this->context->smarty->fetch($path); $path_guide = $this->getTemplatePath().'guide.tpl'; $guide_box = ApPageSetting::buildGuide($this->context, $path_guide, 0); return $guide_box.parent::renderList().$content; //return parent::renderList(); } public function getLiveEditUrl($live_edit_params) { $lang = ''; $admin_dir = dirname($_SERVER['PHP_SELF']); $admin_dir = Tools::substr($admin_dir, strrpos($admin_dir, '/') + 1); $dir = str_replace($admin_dir, '', dirname($_SERVER['SCRIPT_NAME'])); if (Configuration::get('PS_REWRITING_SETTINGS') && count(Language::getLanguages(true)) > 1) { $lang = Language::getIsoById(Context::getContext()->employee->id_lang).'/'; } $url = Tools::getCurrentUrlProtocolPrefix().Tools::getHttpHost().$dir.$lang. Dispatcher::getInstance()->createUrl('index', (int)Context::getContext()->language->id, $live_edit_params); return $url; } public function renderForm() { $this->initToolbar(); $this->context->controller->addJqueryUI('ui.sortable'); $groups = Group::getGroups($this->default_form_language, true); // UNSET GROUP_BOX if ($this->object->id == '') { $model = new ApPageBuilderProfilesModel(); $list_profiles = $model->getAllProfileByShop(); foreach ($list_profiles as $profile) { $group_boxs = $profile['group_box']; $aray_group_box = explode(',', $group_boxs); foreach ($aray_group_box as $group_box) { if ($group_box!=1&&$group_box!=2&&$group_box!=3) { while ($group = current($groups)) { if ($group['id_group'] == $group_box) { unset($groups[key($groups)]); } next($groups); } } } } } $this->fields_form = array( 'legend' => array( 'title' => $this->l('Ap Profile Manage'), 'icon' => 'icon-folder-close' ), 'input' => array( array( 'type' => 'text', 'label' => $this->l('Name'), 'name' => 'name', 'required' => true, 'hint' => $this->l('Invalid characters:'),' <>;=#{}' ), array( 'type' => 'text', 'label' => $this->l('Friendly URL'), 'name' => 'friendly_url', 'lang' => true, 'hint' => $this->l('Invalid characters:').' <>;=#{}' ), array( 'type' => 'text', 'label' => $this->l('Meta title'), 'name' => 'meta_title', 'id' => 'name', // for copyMeta2friendlyURL compatibility 'lang' => true, // 'required' => true, 'class' => 'copyMeta2friendlyURL', 'hint' => $this->l('Invalid characters:').' <>;=#{}' ), array( 'type' => 'textarea', 'label' => $this->l('Meta description'), 'name' => 'meta_description', 'lang' => true, 'cols' => 40, 'rows' => 10, 'hint' => $this->l('Invalid characters:').' <>;=#{}' ), array( 'type' => 'tags', 'label' => $this->l('Meta keywords'), 'name' => 'meta_keywords', 'lang' => true, 'hint' => array( $this->l('Invalid characters:').' <>;=#{}', $this->l('To add "tags" click in the field, write something, and then press "Enter."') ) ), array( 'type' => 'text', 'label' => $this->l('Profile Key'), 'name' => 'profile_key', 'readonly' => 'readonly', 'desc' => $this->l('Use it to save as file name of css and js of profile'), 'hint' => $this->l('Invalid characters:').' <>;=#{}' ), array( 'type' => 'group', 'label' => $this->l('Apply default profile for these groups'), 'name' => 'groupBox', 'values' => $groups, 'col' => '6', 'hint' => $this->l('Select the groups that you would like to apply this profile is default.') ), array( 'type' => 'html', 'name' => 'dump_name', 'html_content' => '
'.$this->l('Fullwidth Function: is only for develop') .'
'.$this->l('To use this function, you have to download') .'
' .'header.tpl' .'
' .'footer.tpl
' .$this->l('file and compare or override in themes folder').'
' ), array( 'type' => 'checkbox', 'name' => 'fullwidth_index_hook', 'label' => $this->l('Fullwidth Homepage'), 'class' => 'checkbox-group', 'desc' => $this->l('The setting full-width for above HOOKS, apply for Home page'), 'values' => array( 'query' => self::getCheckboxIndexHook(), 'id' => 'id', 'name' => 'name' ) ), array( 'type' => 'checkbox', 'name' => 'fullwidth_other_hook', 'label' => $this->l('Fullwidth other Pages'), 'class' => 'checkbox-group', 'desc' => $this->l('The setting full-width for above HOOKS, apply for all OTHER pages ( not Home page )'), 'values' => array( 'query' => self::getCheckboxOtherHook(), 'id' => 'id', 'name' => 'name' ) ), array( 'type' => 'checkbox', 'name' => 'disable_cache_hook', 'label' => $this->l('Disable cache Hooks'), 'class' => 'checkbox-group', 'desc' => $this->l('Some modules always update data, disable cache for those modules show correct info.'), 'values' => array( 'query' => self::getCheckboxCacheHook(), 'id' => 'id', 'name' => 'name' ) ), array( 'type' => 'select', //'label' => $this->l('Profile For Page'), 'name' => 'page', 'class' => 'hide', 'options' => array( 'query' => array( array( 'id' => 'index', 'name' => $this->l('Index'), ), array( 'id' => 'product_detail', 'name' => $this->l('Product Detail'), ) ), 'id' => 'id', 'name' => 'name' ), ) ), 'submit' => array( 'title' => $this->l('Save'), ), 'buttons' => array( 'save-and-stay' => array( 'title' => $this->l('Save and Stay'), 'name' => 'submitAdd'.$this->table.'AndStay', 'type' => 'submit', 'class' => 'btn btn-default pull-right', 'icon' => 'process-icon-save' ) ) ); $is_edit = Tools::getValue('id_appagebuilder_profiles'); $this->fields_form['input'][] = array( 'type' => 'textarea', 'label' => $this->l('Custom Css'), 'name' => 'css', 'desc' => sprintf($this->l('Please set write Permission for folder %s'), $this->profile_css_folder), ); $this->fields_form['input'][] = array( 'type' => 'textarea', 'label' => $this->l('Custom Js'), 'name' => 'js', 'desc' => sprintf($this->l('Please set write Permission for folder %s'), $this->profile_js_folder), ); // Display link view if it existed if ($is_edit) { $profile_link = $this->context->link->getAdminLink('AdminApPageBuilderHome').'&id_appagebuilder_profiles='.$is_edit; $this->fields_form['input'][] = array( 'type' => 'html', 'name' => 'default_html', 'name' => 'dess', 'html_content' => ' '.$this->l('View and edit use mode Layout design').' >>' ); } $default_index_hook = $this->getDefaultIndexHook(); $default_other_hook = $this->getDefaultOtherHook(); $default_disable_cache_hook = $this->getDefaultDisableCacheHook(); foreach ($default_index_hook as $key => $value) { $this->fields_value['fullwidth_index_hook_'.$key] = $value; } foreach ($default_other_hook as $key => $value) { $this->fields_value['fullwidth_other_hook_'.$key] = $value; } foreach ($default_disable_cache_hook as $key => $value) { $this->fields_value['disable_cache_hook_'.$key] = $value; } foreach ($groups as $group) { $this->fields_value['groupBox_'.$group['id_group']] = Tools::getValue('groupBox_'.$group['id_group'], in_array($group['id_group'], explode(',', $this->object->group_box))); } $path_guide = $this->getTemplatePath().'guide.tpl'; $guide_box = ApPageSetting::buildGuide($this->context, $path_guide, 2); return $guide_box.parent::renderForm(); } /** * Read file css + js to form when add/edit */ public function getFieldsValue($obj) { $file_value = parent::getFieldsValue($obj); if ($obj->id && $obj->profile_key) { $file_value['css'] = Tools::file_get_contents($this->profile_css_folder.$obj->profile_key.'.css'); $file_value['js'] = Tools::file_get_contents($this->profile_js_folder.$obj->profile_key.'.js'); } else { $file_value['profile_key'] = 'profile'.ApPageSetting::getRandomNumber(); } return $file_value; } public function processAdd() { parent::validateRules(); if (count($this->errors)) { return false; } if ($this->object = parent::processAdd()) { $this->saveCustomJsAndCss($this->object->profile_key, ''); } $this->processParams(); if (!Tools::isSubmit('submitAdd'.$this->table.'AndStay')) { $this->redirect_after = Context::getContext()->link->getAdminLink('AdminApPageBuilderHome'); $this->redirect_after .= '&id_appagebuilder_profiles='.($this->object->id); $this->redirect(); } } public function processUpdate() { parent::validateRules(); if (count($this->errors)) { return false; } if ($this->object = parent::processUpdate()) { $this->saveCustomJsAndCss($this->object->profile_key, $this->object->profile_key); } $this->processParams(); if (!Tools::isSubmit('submitAdd'.$this->table.'AndStay')) { $this->redirect_after = Context::getContext()->link->getAdminLink('AdminApPageBuilderHome'); $this->redirect_after .= '&id_appagebuilder_profiles='.($this->object->id); $this->redirect(); } } /** * Get fullwidth hook, save to params */ public function processParams() { $params = Tools::jsonDecode($this->object->params); if ($params === null) { $params = new stdClass(); } # get post index hook $index_hook = ApPageSetting::getIndexHook(); $post_index_hooks = array(); foreach ($index_hook as $key => $value) { // validate module $post_index_hooks[$value] = Tools::getValue('fullwidth_index_hook_'.$value) ? Tools::getValue('fullwidth_index_hook_'.$value) : ApPageSetting::HOOK_BOXED; // validate module unset($key); } $params->fullwidth_index_hook = $post_index_hooks; # get post other hook $other_hook = ApPageSetting::getOtherHook(); $post_other_hooks = array(); foreach ($other_hook as $key => $value) { // validate module $post_other_hooks[$value] = Tools::getValue('fullwidth_other_hook_'.$value) ? Tools::getValue('fullwidth_other_hook_'.$value) : ApPageSetting::HOOK_BOXED; // validate module unset($key); } $params->fullwidth_other_hook = $post_other_hooks; # get post disable hook $cache_hooks = ApPageSetting::getCacheHook(); $post_disable_hooks = array(); foreach ($cache_hooks as $key => $value) { // validate module $post_disable_hooks[$value] = Tools::getValue('disable_cache_hook_'.$value) ? Tools::getValue('disable_cache_hook_'.$value) : ApPageSetting::HOOK_BOXED; // validate module unset($key); } $params->disable_cache_hook = $post_disable_hooks; # Save to params $this->object->params = Tools::jsonEncode($params); # Save group_box if (Tools::getValue('groupBox')) { $this->object->group_box = implode(',', Tools::getValue('groupBox')); } else { $this->object->group_box = ''; } $this->object->save(); } public function saveCustomJsAndCss($key, $old_key = '') { # DELETE OLD FILE if ($old_key) { Tools::deleteFile($this->profile_css_folder.$old_key.'.css'); Tools::deleteFile($this->profile_js_folder.$old_key.'.js'); } if (Tools::getValue('js') != '') { ApPageSetting::writeFile($this->profile_js_folder, $key.'.js', Tools::getValue('js')); } if (Tools::getValue('css') != '') { # FIX CUSTOMER CAN NOT TYPE "\" $temp = Tools::getAllValues(); $css = $temp['css']; ApPageSetting::writeFile($this->profile_css_folder, $key.'.css', $css); } } /** * Generate form : create checkbox in admin form ( add/edit profile ) */ public static function getCheckboxIndexHook() { $ids = ApPageSetting::getIndexHook(); $names = ApPageSetting::getIndexHook(); return apPageHelper::getArrayOptions($ids, $names); } /** * Generate form : create checkbox in admin form ( add/edit profile ) */ public static function getCheckboxOtherHook() { $ids = ApPageSetting::getOtherHook(); $names = ApPageSetting::getOtherHook(); return apPageHelper::getArrayOptions($ids, $names); } /** * Generate form : create checkbox in admin form ( add/edit profile ) */ public static function getCheckboxCacheHook() { $ids = ApPageSetting::getCacheHook(); $names = ApPageSetting::getCacheHook(); return apPageHelper::getArrayOptions($ids, $names); } /** * Get fullwidth hook from database or default */ public function getDefaultIndexHook() { $params = Tools::jsonDecode($this->object->params); return isset($params->fullwidth_index_hook) ? $params->fullwidth_index_hook : ApPageSetting::getIndexHook(3); } /** * Get fullwidth hook from database or default */ public function getDefaultOtherHook() { $params = Tools::jsonDecode($this->object->params); return isset($params->fullwidth_other_hook) ? $params->fullwidth_other_hook : ApPageSetting::getOtherHook(3); } /** * Get fullwidth hook from database or default */ public function getDefaultDisableCacheHook() { $params = Tools::jsonDecode($this->object->params); return isset($params->disable_cache_hook) ? $params->disable_cache_hook : ApPageSetting::getCacheHook(3); } /** * PERMISSION ACCOUNT demo@demo.com * OVERRIDE CORE */ public function initProcess() { parent::initProcess(); if (count($this->errors) <= 0) { if (Tools::isSubmit('duplicate'.$this->table)) { if ($this->id_object) { if (!$this->access('add')) { $this->errors[] = $this->trans('You do not have permission to duplicate this.', array(), 'Admin.Notifications.Error'); } } } } } }