From 938ef4fe39105af9f86ee593285c87df2f944e5b Mon Sep 17 00:00:00 2001 From: Jerome Nadaud Date: Mon, 18 Nov 2013 17:12:35 +0100 Subject: [PATCH] // small fix --- .../themeconfigurator/themeconfigurator.php | 749 +++++++++++++----- 1 file changed, 559 insertions(+), 190 deletions(-) diff --git a/modules/themeconfigurator/themeconfigurator.php b/modules/themeconfigurator/themeconfigurator.php index 0d94cf6c5..af8737bd8 100644 --- a/modules/themeconfigurator/themeconfigurator.php +++ b/modules/themeconfigurator/themeconfigurator.php @@ -29,15 +29,26 @@ if (!defined('_PS_VERSION_')) class ThemeConfigurator extends Module { + protected $max_image_size = 1048576; + protected $default_language; + protected $languages; + public function __construct() { $this->name = 'themeconfigurator'; $this->tab = 'front_office_features'; $this->version = '0.1'; + $this->bootstrap = true; + $this->secure_key = Tools::encrypt($this->name); + $this->default_language = Language::getLanguage(Configuration::get('PS_LANG_DEFAULT')); + $this->languages = Language::getLanguages(); parent::__construct(); $this->displayName = $this->l('Theme configurator'); $this->description = $this->l('Configure elements of your theme'); - $this->bootstrap = true; + $this->module_path = _PS_MODULE_DIR_.$this->name.'/'; + $this->uploads_path = _PS_MODULE_DIR_.$this->name.'/images/'; + $this->admin_tpl_path = _PS_MODULE_DIR_.$this->name.'/views/templates/admin/'; + $this->hooks_tpl_path = _PS_MODULE_DIR_.$this->name.'/views/templates/hooks/'; } public function install() @@ -58,207 +69,565 @@ class ThemeConfigurator extends Module '"Lucida Console", Monaco, monospace' ); - return (parent::install() - && $this->registerHook('top') - && Configuration::updateValue('PS_TC_THEMES', serialize($themes_colors)) - && Configuration::updateValue('PS_TC_THEMES_FONTS', serialize($themes_fonts))); + if (!parent::install() || + !$this->installDB() || + !$this->registerHook('displayHeader') || + !$this->registerHook('displayTop') || + !$this->registerHook('displayLeftColumn') || + !$this->registerHook('displayRightColumn') || + !$this->registerHook('displayHome') || + !$this->registerHook('displayFooter') || + !$this->registerHook('displayBackOfficeHeader') || + + !Configuration::updateValue('PS_TC_THEMES', serialize($themes_colors)) || + !Configuration::updateValue('PS_TC_THEMES_FONTS', serialize($themes_fonts))) + return false; + + return true; } - public function hookTop($params) + private function installDB() { - if ((int)Tools::getValue('live_configurator', 0) == 1) - { - if (Tools::isSubmit('submitLiveConfigurator')) - { - Configuration::updateValue('PS_TC_THEME', Tools::getValue('theme')); - Configuration::updateValue('PS_TC_TEXT_PAGE_FONT', Tools::getValue('text-page-font')); - Configuration::updateValue('PS_TC_TEXT_MENU_FONT', Tools::getValue('text-menu-font')); - Configuration::updateValue('PS_TC_PRODUCT_NAME_FONT', Tools::getValue('product-name-font')); - } + return ( + Db::getInstance()->Execute('DROP TABLE IF EXISTS `'._DB_PREFIX_.'themeconfigurator`') && + Db::getInstance()->Execute(' + CREATE TABLE `'._DB_PREFIX_.'themeconfigurator` ( + `id_item` int(10) unsigned NOT NULL AUTO_INCREMENT, + `id_shop` int(10) unsigned NOT NULL, + `id_lang` int(10) unsigned NOT NULL, + `item_order` int(10) unsigned NOT NULL, + `title` VARCHAR(100), + `title_use` tinyint(1) unsigned NOT NULL DEFAULT \'0\', + `hook` VARCHAR(100), + `url` VARCHAR(100), + `target` tinyint(1) unsigned NOT NULL DEFAULT \'0\', + `image` VARCHAR(100), + `image_w` VARCHAR(10), + `image_h` VARCHAR(10), + `html` TEXT, + `active` tinyint(1) unsigned NOT NULL DEFAULT \'1\', + PRIMARY KEY (`id_item`) + ) ENGINE = '._MYSQL_ENGINE_.' DEFAULT CHARSET=UTF8;') + ); - $this->context->controller->addCSS($this->_path.'css/live_configurator.css'); - $this->context->controller->addJS($this->_path.'js/live_configurator.js'); - - $this->smarty->assign(array( - 'themes' => unserialize(Configuration::get('PS_TC_THEMES')), - 'themes_fonts' => unserialize(Configuration::get('PS_TC_THEMES_FONTS')), - 'advertisement_image' => $this->_path.'/img/'.$this->context->language->iso_code.'/advertisement.png', - 'advertisement_text' => $this->l('Over 500+ PrestaShop Premium Templates! Browse Now!') - )); - return $this->display(__FILE__, 'live_configurator.tpl'); - } + return true; } - public function getContent() - { - if (Tools::isSubmit('submitModule')) - { - Configuration::updateValue('PS_QUICK_VIEW', (int)Tools::getValue('quick_view')); - foreach($this->getConfigurableModules() as $module) + public function uninstall() + { + $images = Db::getInstance()->executeS('SELECT image FROM `'._DB_PREFIX_.'themeconfigurator`'); + foreach ($images as $image) + $this->deleteImage($image['image']); + + if (!Db::getInstance()->Execute('DROP TABLE IF EXISTS `'._DB_PREFIX_.'themeconfigurator`') || + !parent::uninstall()) + return false; + + return true; + } + + public function hookDisplayBackOfficeHeader() + { + if (Tools::getValue('configure') != $this->name) + return; + $this->context->controller->addCSS($this->_path.'views/css/admin.css'); + $this->context->controller->addJquery(); + $this->context->controller->addJS($this->_path.'views/js/admin.js'); + } + + public function hookdisplayHeader($params) + { + $this->context->controller->addCss($this->_path.'views/css/hooks.css', 'all'); + } + + public function hookDisplayTop() + { + if ((int)Tools::getValue('live_configurator', 0) == 1) { - if (!isset($module['is_module']) || !$module['is_module'] || !Validate::isModuleName($module['name'])) - continue; - - $module_instance = Module::getInstanceByName($module['name']); - if ($module_instance === false || !is_object($module_instance)) - continue; - - $is_installed = (int)Validate::isLoadedObject($module_instance); - if ($is_installed) + if (Tools::isSubmit('submitLiveConfigurator')) { - if (($active = (int)Tools::getValue($module['name'])) == $module_instance->active) - continue; - - if ($active) - $module_instance->enable(); - else - $module_instance->disable(); + Configuration::updateValue('PS_TC_THEME', Tools::getValue('theme')); + Configuration::updateValue('PS_TC_TEXT_PAGE_FONT', Tools::getValue('text-page-font')); + Configuration::updateValue('PS_TC_TEXT_MENU_FONT', Tools::getValue('text-menu-font')); + Configuration::updateValue('PS_TC_PRODUCT_NAME_FONT', Tools::getValue('product-name-font')); } - else - if ((int)Tools::getValue($module['name'])) - $module_instance->install(); - } - } - return $this->renderForm(); - } - public function renderForm() - { - $inputs = array(); - foreach ($this->getConfigurableModules() as $module) - $inputs[] = array( - 'type' => 'switch', - 'label' => $module['label'], - 'name' => $module['name'], - 'desc' => (isset($module['desc']) ? $module['desc'] : ''), - 'values' => array( - array( - 'id' => 'active_on', - 'value' => 1, - 'label' => $this->l('Enabled') - ), - array( - 'id' => 'active_off', - 'value' => 0, - 'label' => $this->l('Disabled') - ) - ), - ); - - $fields_form = array( - 'form' => array( - 'legend' => array( - 'title' => $this->l('Settings'), - 'icon' => 'icon-cogs' - ), - 'input' => $inputs, - 'submit' => array( - 'title' => $this->l('Save'), - 'class' => 'btn btn-default') - ), - ); - - $helper = new HelperForm(); - $helper->show_toolbar = false; - $helper->table = $this->table; - $lang = new Language((int)Configuration::get('PS_LANG_DEFAULT')); - $helper->default_form_language = $lang->id; - $helper->allow_employee_form_lang = Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') ? Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') : 0; - $this->fields_form = array(); + $this->context->controller->addCSS($this->_path.'css/live_configurator.css'); + $this->context->controller->addJS($this->_path.'js/live_configurator.js'); - $helper->identifier = $this->identifier; - $helper->submit_action = 'submitModule'; - $helper->currentIndex = $this->context->link->getAdminLink('AdminModules', false).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name; - $helper->token = Tools::getAdminTokenLite('AdminModules'); - $helper->tpl_vars = array( - 'fields_value' => $this->getConfigFieldsValues(), - 'languages' => $this->context->controller->getLanguages(), - 'id_language' => $this->context->language->id - ); + $this->smarty->assign(array( + 'themes' => unserialize(Configuration::get('PS_TC_THEMES')), + 'themes_fonts' => unserialize(Configuration::get('PS_TC_THEMES_FONTS')), + 'advertisement_image' => $this->_path.'/img/'.$this->context->language->iso_code.'/advertisement.png', + 'advertisement_text' => $this->l('Over 500+ PrestaShop Premium Templates! Browse Now!') + )); + return $this->display(__FILE__, 'live_configurator.tpl'); + } + + $this->context->smarty->assign(array( + 'htmlitems'=> $this->getItemsFromHook('top'), + 'hook' => 'top' + )); + return $this->display(__FILE__, 'views/templates/hooks/hook.tpl'); + } - return $helper->generateForm(array($fields_form)); - } - - protected function getConfigurableModules() - { - return array( - array( - 'label' => $this->l('Display the reinsurance block'), - 'name' => 'blockreinsurance', - 'desc' => ''.$this->l('Configure the reinsurance block').'', - 'value' => (int)(Validate::isLoadedObject($module = Module::getInstanceByName('blockreinsurance')) && $module->active), - 'is_module' => true, - ), - array( - 'label' => $this->l('Display the social following links'), - 'name' => 'blocksocial', - 'desc' => ''.$this->l('Configure the social following links').'', - 'value' => (int)(Validate::isLoadedObject($module = Module::getInstanceByName('blocksocial')) && $module->active), - 'is_module' => true, - ), - array( - 'label' => $this->l('Display contact information'), - 'name' => 'blockcontactinfos', - 'desc' => ''.$this->l('Configure the contact information of your store').'', - 'value' => (int)(Validate::isLoadedObject($module = Module::getInstanceByName('blockcontactinfos')) && $module->active), - 'is_module' => true, - ), - array( - 'label' => $this->l('Display social buttons on the products page'), - 'name' => 'addsharethis', - 'desc' => ''.$this->l('Configure').'', - 'value' => (int)(Validate::isLoadedObject($module = Module::getInstanceByName('addsharethis')) && $module->active), - 'is_module' => true, - ), - array( - 'label' => $this->l('Display facebook block on the home page'), - 'name' => 'blockfacebook', - 'desc' => ''.$this->l('Configure').'', - 'value' => (int)(Validate::isLoadedObject($module = Module::getInstanceByName('blockfacebook')) && $module->active), - 'is_module' => true, - ), - array( - 'label' => $this->l('Customer cms information block'), - 'name' => 'blockcmsinfo', - 'desc' => ''.$this->l('Configure').'', - 'value' => (int)(Validate::isLoadedObject($module = Module::getInstanceByName('blockcmsinfo')) && $module->active), - 'is_module' => true, - ), - array( - 'label' => $this->l('Customer banner information block'), - 'name' => 'tmhtmlcontent', - 'desc' => ''.$this->l('Configure').'', - 'value' => (int)(Validate::isLoadedObject($module = Module::getInstanceByName('tmhtmlcontent')) && $module->active), - 'is_module' => true, - ), - array( - 'label' => $this->l('Enable Quick view'), - 'name' => 'quick_view', - 'value' => (int)Tools::getValue('PS_QUICK_VIEW', Configuration::get('PS_QUICK_VIEW')) - ), - array( - 'label' => $this->l('Enable top banner'), - 'name' => 'blockbanner', - 'desc' => ''.$this->l('Configure').'', - 'value' => (int)(Validate::isLoadedObject($module = Module::getInstanceByName('blockbanner')) && $module->active), - 'is_module' => true, - ), - array( - 'label' => $this->l('Enable product payment logos'), - 'name' => 'productpaymentlogos', - 'desc' => ''.$this->l('Configure').'', - 'value' => (int)(Validate::isLoadedObject($module = Module::getInstanceByName('productpaymentlogos')) && $module->active), - 'is_module' => true, - ) - ); - } + public function hookDisplayHome() + { + $this->context->smarty->assign(array( + 'htmlitems'=> $this->getItemsFromHook('home'), + 'hook' => 'home' + )); + return $this->display(__FILE__, 'views/templates/hooks/hook.tpl'); + } - public function getConfigFieldsValues() - { - $values = array(); - foreach ($this->getConfigurableModules() as $module) - $values[$module['name']] = $module['value']; - return $values; + public function hookDisplayLeftColumn() + { + $this->context->smarty->assign(array( + 'htmlitems'=> $this->getItemsFromHook('left'), + 'hook' => 'left' + )); + return $this->display(__FILE__, 'views/templates/hooks/hook.tpl'); + } + + public function hookDisplayRightColumn() + { + $this->context->smarty->assign(array( + 'htmlitems'=> $this->getItemsFromHook('right'), + 'hook' => 'right' + )); + return $this->display(__FILE__, 'views/templates/hooks/hook.tpl'); + } + + public function hookDisplayFooter() + { + $this->context->smarty->assign(array( + 'htmlitems'=> $this->getItemsFromHook('footer'), + 'hook' => 'footer' + )); + return $this->display(__FILE__, 'views/templates/hooks/hook.tpl'); + } - } + protected function getItemsFromHook($hook) + { + if (!$hook) + return false; + + return Db::getInstance()->ExecuteS(' + SELECT * + FROM `'._DB_PREFIX_.'themeconfigurator` + WHERE id_shop = '.(int)$this->context->shop->id.' AND id_lang = '.(int)$this->context->language->id.' AND hook = \''.pSQL($hook).'\' AND active = 1 + ORDER BY item_order ASC' + ); + } + + protected function deleteImage($image) + { + $file_name = $this->uploads_path.$image; + if (realpath(dirname($file_name)) != $this->uploads_path) + die; + + if ($image != '' && is_file($file_name)) + unlink($file_name); + } + + protected function removeItem() + { + $id_item = (int)Tools::getValue('item_id'); + + if ($image = Db::getInstance()->getValue('SELECT image FROM `'._DB_PREFIX_.'themeconfigurator` WHERE id_item = '.(int)$id_item)) + $this->deleteImage($image); + + Db::getInstance()->delete(_DB_PREFIX_.'themeconfigurator', 'id_item = '.(int)$id_item); + + if (Db::getInstance()->Affected_Rows() == 1) + { + Db::getInstance()->execute(' + UPDATE `'._DB_PREFIX_.'themeconfigurator` + SET item_order = item_order-1 + WHERE ( + item_order > '.(int)Tools::getValue('item_order').' AND + id_shop = '.(int)$this->context->shop->id.' AND + hook = \''.pSQL(Tools::getValue('item_hook')).'\') + '); + + $this->context->smarty->assign('confirmation', $this->l('Successful deletion.')); + } + else + $this->context->smarty->assign('error', $this->l('Can\'t delete the slide.')); + } + + protected function updateItem() + { + $id_item = (int)Tools::getValue('item_id'); + + $title = Tools::getValue('item_title'); + $content = Tools::getValue('item_html'); + if (!Validate::isCleanHtml($title, (int)Configuration::get('PS_ALLOW_HTML_IFRAME')) || !Validate::isCleanHtml($content,(int)Configuration::get('PS_ALLOW_HTML_IFRAME'))) + { + $this->context->smarty->assign('error', $this->l('Invalid content')); + return false; + } + + $new_image = ''; + $image_w = (is_numeric(Tools::getValue('item_img_w'))) ? (int)Tools::getValue('item_img_w') : ''; + $image_h = (is_numeric(Tools::getValue('item_img_h'))) ? (int)Tools::getValue('item_img_h') : ''; + + if(!empty($_FILES['item_img']['name'])) + { + if ($old_image = Db::getInstance()->getValue('SELECT image FROM `'._DB_PREFIX_.'themeconfigurator` WHERE id_item = '.(int)$id_item)) + $this->_deleteImages($old_image); + + if (!$image = $this->uploadImage($_FILES['item_img'], $image_w, $image_h)) + return false; + + $new_image = 'image = \''.pSQL($image).'\','; + } + else + { + $image_w = ''; + $image_h = ''; + } + + if (!Db::getInstance()->execute(' + UPDATE `'._DB_PREFIX_.'themeconfigurator` SET + title = \''.pSQL($title).'\', + title_use = '.(int)Tools::getValue('item_title_use').', + hook = \''.pSQL(Tools::getValue('item_hook')).'\', + url = \''.pSQL(Tools::getValue('item_url')).'\', + target = '.(int)Tools::getValue('item_target').', + '.$new_image.' + image_w = '.(int)$image_w.', + image_h = '.(int)$image_h.', + active = '.(int)Tools::getValue('item_active').', + html = \''.pSQL($content).'\' + WHERE id_item = '.(int)Tools::getValue('item_id') + )) + { + if ($image = Db::getInstance()->getValue('SELECT image FROM `'._DB_PREFIX_.'themeconfigurator` WHERE id_item = '.(int)Tools::getValue('item_id'))) + $this->deleteImage($image); + + $this->context->smarty->assign('error', $this->l('An error occured while saving data.')); + return false; + } + $this->context->smarty->assign('confirmation', $this->l('Successfully updated.')); + return true; + } + + protected function uploadImage($image, $image_w = '', $image_h = '') + { + $res = false; + if (is_array($image) && (ImageManager::validateUpload($image, $this->max_image_size) === false) && ($tmp_name = tempnam(_PS_TMP_IMG_DIR_, 'PS')) && move_uploaded_file($image['tmp_name'], $tmp_name)) + { + $type = Tools::strtolower(Tools::substr(strrchr($image['name'], '.'), 1)); + $img_name = Tools::encrypt($image['name'].sha1(microtime())).'.'.$type; + Configuration::set('PS_IMAGE_QUALITY','png_all'); + if (ImageManager::resize($tmp_name, dirname(__FILE__).'/images/'.$img_name, $image_w, $image_h)) + $res = true; + + } + + if (isset($temp_name)) + @unlink($tmp_name); + if (!$res) + { + $this->context->smarty->assign('error', $this->l('An error occurred during the image upload.')); + return false; + } + + return $img_name; + } + + public function getContent() + { + if (Tools::isSubmit('submitModule')) + { + Configuration::updateValue('PS_QUICK_VIEW', (int)Tools::getValue('quick_view')); + foreach($this->getConfigurableModules() as $module) + { + if (!isset($module['is_module']) || !$module['is_module'] || !Validate::isModuleName($module['name'])) + continue; + + $module_instance = Module::getInstanceByName($module['name']); + if ($module_instance === false || !is_object($module_instance)) + continue; + + $is_installed = (int)Validate::isLoadedObject($module_instance); + if ($is_installed) + { + if (($active = (int)Tools::getValue($module['name'])) == $module_instance->active) + continue; + + if ($active) + $module_instance->enable(); + else + $module_instance->disable(); + } + else + if ((int)Tools::getValue($module['name'])) + $module_instance->install(); + } + } + + if (Tools::isSubmit('newItem')) + $this->addItem(); + elseif (Tools::isSubmit('updateItem')) + $this->updateItem(); + elseif (Tools::isSubmit('removeItem')) + $this->removeItem(); + + $html = $this->renderConfigurationForm(); + $html .= $this->renderThemeConfiguratorForm(); + + return $html; + } + + protected function addItem() + { + $title = Tools::getValue('item_title'); + $content = Tools::getValue('item_html'); + if (!Validate::isCleanHtml($title, (int)Configuration::get('PS_ALLOW_HTML_IFRAME')) || !Validate::isCleanHtml($content, (int)Configuration::get('PS_ALLOW_HTML_IFRAME'))) + { + $this->context->smarty->assign('error', $this->l('Invalid content')); + return false; + } + + + if (!$current_order = (int)Db::getInstance()->getValue(' + SELECT item_order + 1 + FROM `'._DB_PREFIX_.'themeconfigurator` + WHERE + id_shop = '.(int)$this->context->shop->id.' + AND id_lang = '.(int)Tools::getValue('id_lang').' + AND hook = \''.pSQL(Tools::getValue('item_hook')).'\' + ORDER BY item_order DESC' + )) + $current_order = 1; + + $image_w = is_numeric(Tools::getValue('item_img_w')) ? (int)Tools::getValue('item_img_w') : ''; + $image_h = is_numeric(Tools::getValue('item_img_h')) ? (int)Tools::getValue('item_img_h') : ''; + + if(!empty($_FILES['item_img']['name'])) + { + if (!$image = $this->uploadImage($_FILES['item_img'], $image_w, $image_h)) + return false; + } + else + { + $image = ''; + $image_w = ''; + $image_h = ''; + } + + if (!Db::getInstance()->Execute(' + INSERT INTO `'._DB_PREFIX_.'themeconfigurator` ( + `id_shop`, `id_lang`, `item_order`, `title`, `title_use`, `hook`, `url`, `target`, `image`, `image_w`, `image_h`, `html`, `active` + ) VALUES ( + \''.(int)$this->context->shop->id.'\', + \''.(int)Tools::getValue('id_lang').'\', + \''.(int)$current_order.'\', + \''.pSQL($title).'\', + \''.(int)Tools::getValue('item_title_use').'\', + \''.pSQL(Tools::getValue('item_hook')).'\', + \''.pSQL(Tools::getValue('item_url')).'\', + \''.(int)Tools::getValue('item_target').'\', + \''.pSQL($image).'\', + \''.pSQL($image_w).'\', + \''.pSQL($image_h).'\', + \''.pSQL($content).'\', + 1) + ')) + { + if (!Tools::isEmpty($image)) + $this->deleteImage($image); + + $this->context->smarty->assign('error', $this->l('An error occured while saving data.')); + return false; + } + + $this->context->smarty->assign('confirmation', $this->l('New item added successfull.')); + return true; + } + + public function renderConfigurationForm() + { + $inputs = array(); + foreach ($this->getConfigurableModules() as $module) + { + $desc = ''; + if (isset($module['is_module']) && $module['is_module']) + { + $module_instance = Module::getInstanceByName($module['name']); + if (Validate::isLoadedObject($module_instance) && method_exists($module_instance, 'getContent')) + $desc = ''.$this->l('Configure').''; + } + if (!$desc && isset($module['desc']) && $module['desc']) + $desc = $module['desc']; + + $inputs[] = array( + 'type' => 'switch', + 'label' => $module['label'], + 'name' => $module['name'], + 'desc' => $desc, + 'values' => array( + array( + 'id' => 'active_on', + 'value' => 1, + 'label' => $this->l('Enabled') + ), + array( + 'id' => 'active_off', + 'value' => 0, + 'label' => $this->l('Disabled') + ) + ), + ); + } + + $fields_form = array( + 'form' => array( + 'legend' => array( + 'title' => $this->l('Settings'), + 'icon' => 'icon-cogs' + ), + 'input' => $inputs, + 'submit' => array( + 'title' => $this->l('Save'), + 'class' => 'btn btn-primary') + ), + ); + + $helper = new HelperForm(); + $helper->show_toolbar = false; + $helper->table = $this->table; + $lang = new Language((int)Configuration::get('PS_LANG_DEFAULT')); + $helper->default_form_language = $lang->id; + $helper->allow_employee_form_lang = Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') ? Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') : 0; + $this->fields_form = array(); + + $helper->identifier = $this->identifier; + $helper->submit_action = 'submitModule'; + $helper->currentIndex = $this->context->link->getAdminLink('AdminModules', false).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name; + $helper->token = Tools::getAdminTokenLite('AdminModules'); + $helper->tpl_vars = array( + 'fields_value' => $this->getConfigFieldsValues(), + 'languages' => $this->context->controller->getLanguages(), + 'id_language' => $this->context->language->id + ); + + return $helper->generateForm(array($fields_form)); + } + + protected function renderThemeConfiguratorForm() + { + $id_shop = (int)$this->context->shop->id; + $items = array(); + + $this->context->smarty->assign('htmlcontent', array( + 'admin_tpl_path' => $this->admin_tpl_path, + 'hooks_tpl_path' => $this->hooks_tpl_path, + + 'info' => array( + 'module' => $this->name, + 'name' => $this->displayName, + 'version' => $this->version, + 'psVersion' => _PS_VERSION_, + 'context' => (Configuration::get('PS_MULTISHOP_FEATURE_ACTIVE') == 0) ? 1 : ($this->context->shop->getTotalShops() != 1) ? $this->context->shop->getContext() : 1 + ) + )); + + foreach ($this->languages as $language) { + $hooks[$language['id_lang']] = array('home', 'top', 'left', 'right', 'footer'); + + foreach ($hooks[$language['id_lang']] as $hook) + $items[$language['id_lang']][$hook] = Db::getInstance()->ExecuteS(' + SELECT * FROM `'._DB_PREFIX_.'themeconfigurator` + WHERE id_shop = '.(int)$id_shop.' + AND id_lang = '.(int)$language['id_lang'].' + AND hook = \''.pSQL($hook).'\' + ORDER BY item_order ASC' + ); + } + + $this->context->smarty->assign('htmlitems', array( + 'items' => $items, + 'lang' => array( + 'default' => $this->default_language, + 'all' => $this->languages, + 'lang_dir' => _THEME_LANG_DIR_, + 'user' => $this->context->language->id + ), + 'postAction' => 'index.php?tab=AdminModules&configure='.$this->name.'&token='.Tools::getAdminTokenLite('AdminModules').'&tab_module=other&module_name='.$this->name.'', + 'id_shop' => $id_shop + )); + + return $this->display(__FILE__, 'views/templates/admin/admin.tpl'); + } + + protected function getConfigurableModules() + { + return array( + array( + 'label' => $this->l('Display the reinsurance block'), + 'name' => 'blockreinsurance', + 'value' => (int)(Validate::isLoadedObject($module = Module::getInstanceByName('blockreinsurance')) && $module->active), + 'is_module' => true, + ), + array( + 'label' => $this->l('Display the social following links'), + 'name' => 'blocksocial', + 'value' => (int)(Validate::isLoadedObject($module = Module::getInstanceByName('blocksocial')) && $module->active), + 'is_module' => true, + ), + array( + 'label' => $this->l('Display contact information'), + 'name' => 'blockcontactinfos', + 'value' => (int)(Validate::isLoadedObject($module = Module::getInstanceByName('blockcontactinfos')) && $module->active), + 'is_module' => true, + ), + array( + 'label' => $this->l('Display social buttons on the products page'), + 'name' => 'addsharethis', + 'value' => (int)(Validate::isLoadedObject($module = Module::getInstanceByName('addsharethis')) && $module->active), + 'is_module' => true, + ), + array( + 'label' => $this->l('Display facebook block on the home page'), + 'name' => 'blockfacebook', + 'value' => (int)(Validate::isLoadedObject($module = Module::getInstanceByName('blockfacebook')) && $module->active), + 'is_module' => true, + ), + array( + 'label' => $this->l('Customer cms information block'), + 'name' => 'blockcmsinfo', + 'value' => (int)(Validate::isLoadedObject($module = Module::getInstanceByName('blockcmsinfo')) && $module->active), + 'is_module' => true, + ), + array( + 'label' => $this->l('Enable Quick view'), + 'name' => 'quick_view', + 'value' => (int)Tools::getValue('PS_QUICK_VIEW', Configuration::get('PS_QUICK_VIEW')) + ), + array( + 'label' => $this->l('Enable top banner'), + 'name' => 'blockbanner', + 'value' => (int)(Validate::isLoadedObject($module = Module::getInstanceByName('blockbanner')) && $module->active), + 'is_module' => true, + ), + array( + 'label' => $this->l('Enable product payment logos'), + 'name' => 'productpaymentlogos', + 'value' => (int)(Validate::isLoadedObject($module = Module::getInstanceByName('productpaymentlogos')) && $module->active), + 'is_module' => true, + ) + ); + } + + public function getConfigFieldsValues() + { + $values = array(); + foreach ($this->getConfigurableModules() as $module) + $values[$module['name']] = $module['value']; + return $values; + + } }