+
+
{$banner_title}
+

+
+{/if}
+
+
+
+
diff --git a/modules/productpaymentlogos/translations/index.php b/modules/productpaymentlogos/translations/index.php
new file mode 100644
index 000000000..3f6561f72
--- /dev/null
+++ b/modules/productpaymentlogos/translations/index.php
@@ -0,0 +1,35 @@
+
+* @copyright 2007-2013 PrestaShop SA
+* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
+* International Registered Trademark & Property of PrestaShop SA
+*/
+
+header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
+header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
+
+header("Cache-Control: no-store, no-cache, must-revalidate");
+header("Cache-Control: post-check=0, pre-check=0", false);
+header("Pragma: no-cache");
+
+header("Location: ../");
+exit;
\ No newline at end of file
diff --git a/modules/tmhtmlcontent/images/index.php b/modules/themeconfigurator/images/index.php
similarity index 100%
rename from modules/tmhtmlcontent/images/index.php
rename to modules/themeconfigurator/images/index.php
diff --git a/modules/tmhtmlcontent/logo.gif b/modules/themeconfigurator/logo.gif
similarity index 100%
rename from modules/tmhtmlcontent/logo.gif
rename to modules/themeconfigurator/logo.gif
diff --git a/modules/tmhtmlcontent/logo.png b/modules/themeconfigurator/logo.png
similarity index 100%
rename from modules/tmhtmlcontent/logo.png
rename to modules/themeconfigurator/logo.png
diff --git a/modules/themeconfigurator/themeconfigurator.php b/modules/themeconfigurator/themeconfigurator.php
index a2531c613..6d2bf81bb 100644
--- a/modules/themeconfigurator/themeconfigurator.php
+++ b/modules/themeconfigurator/themeconfigurator.php
@@ -26,20 +26,281 @@
if (!defined('_PS_VERSION_'))
exit;
-
+
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->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()
+ {
+ 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'))
+ return false;
+
+ return true;
+ }
+
+ private function installDB()
+ {
+ 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;')
+ );
+
+ return true;
+ }
+
+ 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()
+ {
+ $this->context->smarty->assign(array(
+ 'htmlitems'=> $this->getItemsFromHook('top'),
+ 'hook' => 'top'
+ ));
+ return $this->display(__FILE__, 'views/templates/hooks/hook.tpl');
+ }
+
+ 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 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'))
@@ -70,19 +331,107 @@ class ThemeConfigurator extends Module
$module_instance->install();
}
}
- return $this->renderForm();
+
+ 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;
}
- public function renderForm()
+ 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' => (isset($module['desc']) ? $module['desc'] : ''),
+ 'desc' => $desc,
'values' => array(
array(
'id' => 'active_on',
@@ -96,6 +445,7 @@ class ThemeConfigurator extends Module
)
),
);
+ }
$fields_form = array(
'form' => array(
@@ -130,6 +480,52 @@ class ThemeConfigurator extends Module
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()
{
@@ -137,56 +533,55 @@ class ThemeConfigurator extends Module
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',
+ '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,
)
);
}
@@ -198,5 +593,5 @@ class ThemeConfigurator extends Module
$values[$module['name']] = $module['value'];
return $values;
- }
-}
+ }
+}
\ No newline at end of file
diff --git a/modules/tmhtmlcontent/views/css/admin.css b/modules/themeconfigurator/views/css/admin.css
similarity index 78%
rename from modules/tmhtmlcontent/views/css/admin.css
rename to modules/themeconfigurator/views/css/admin.css
index c260e6160..f68e3251e 100644
--- a/modules/tmhtmlcontent/views/css/admin.css
+++ b/modules/themeconfigurator/views/css/admin.css
@@ -27,33 +27,13 @@
font-size:16px;
color:#090;
}
-.new-item .languages {
- float:left;
- overflow:hidden;
-}
-.new-item .languages li {
- float:left;
- margin-right:5px;
- padding:5px;
- width:26px;
- height:18px;
- text-align:center;
-}
-.new-item .languages li.active {
- background:#d1d1d1;
-}
-
-
.lang-tabs {
position:relative;
z-index:99;
- clear:both;
- overflow:hidden;
- margin-top:20px;
}
.lang-tabs li {
border:1px solid #f3f3f3;
- border-bottom:1px solid #e9e9e9;
+ border-bottom:none;
background:#FAFAFA;
float:left;
padding:15px;
@@ -61,6 +41,7 @@
line-height:24px;
margin-right:5px;
cursor:pointer;
+ margin-bottom:0;
}
.lang-tabs li img {
vertical-align:baseline;
@@ -83,19 +64,22 @@
}
-h3.hook-title {
+h4.hook-title {
border:1px solid #d1d1d1;
background:#e5e5e5;
padding:10px 10px;
+ margin:20px 0 !important;
text-transform:capitalize;
clear:both;
}
-
+#items {
+ padding-left:0;
+}
.item {
margin:0 0 5px;
padding:10px;
border:1px solid #e5e5e5;
- background:#F1F1F1;
+ background:#fff;
line-height:25px;
font-weight:bold;
color:#444;
@@ -125,15 +109,6 @@ h3.hook-title {
padding-left:10px;
font-size:18px;
}
-
-.item .button{
- float:right;
- margin-left:10px;
- cursor:pointer;
- font-size:14px;
- line-height:18px;
- vertical-align: bottom;
-}
.item .button i{
margin-right:5px;
font-size:16px;
@@ -175,26 +150,13 @@ h3.hook-title {
line-height:normal;
position:relative;
overflow:hidden;
+ padding-top:10px;
}
.new-item .item-container {
display:none;
- padding:10px;
- border:1px solid #ccc;
- background:#F1F1F1;
- line-height:normal;
- position:relative;
- overflow:hidden;
- clear:both;
-}
-.item .item-field, .new-item .item-field {
- padding:10px 0;
- clear:both;
- overflow:hidden;
}
.item .image-display, .new-item .image-display {
- position:absolute;
- top:20px;
- right:20px;
+ text-align:center;
}
.item .image-display img, .new-item .image-display img {
max-width:400px;
diff --git a/modules/tmhtmlcontent/views/css/font/FontAwesome.otf b/modules/themeconfigurator/views/css/font/FontAwesome.otf
similarity index 100%
rename from modules/tmhtmlcontent/views/css/font/FontAwesome.otf
rename to modules/themeconfigurator/views/css/font/FontAwesome.otf
diff --git a/modules/tmhtmlcontent/views/css/font/font.css b/modules/themeconfigurator/views/css/font/font.css
similarity index 100%
rename from modules/tmhtmlcontent/views/css/font/font.css
rename to modules/themeconfigurator/views/css/font/font.css
diff --git a/modules/tmhtmlcontent/views/css/font/fontawesome-webfont.eot b/modules/themeconfigurator/views/css/font/fontawesome-webfont.eot
similarity index 100%
rename from modules/tmhtmlcontent/views/css/font/fontawesome-webfont.eot
rename to modules/themeconfigurator/views/css/font/fontawesome-webfont.eot
diff --git a/modules/tmhtmlcontent/views/css/font/fontawesome-webfont.svg b/modules/themeconfigurator/views/css/font/fontawesome-webfont.svg
similarity index 100%
rename from modules/tmhtmlcontent/views/css/font/fontawesome-webfont.svg
rename to modules/themeconfigurator/views/css/font/fontawesome-webfont.svg
diff --git a/modules/tmhtmlcontent/views/css/font/fontawesome-webfont.ttf b/modules/themeconfigurator/views/css/font/fontawesome-webfont.ttf
similarity index 100%
rename from modules/tmhtmlcontent/views/css/font/fontawesome-webfont.ttf
rename to modules/themeconfigurator/views/css/font/fontawesome-webfont.ttf
diff --git a/modules/tmhtmlcontent/views/css/font/fontawesome-webfont.woff b/modules/themeconfigurator/views/css/font/fontawesome-webfont.woff
similarity index 100%
rename from modules/tmhtmlcontent/views/css/font/fontawesome-webfont.woff
rename to modules/themeconfigurator/views/css/font/fontawesome-webfont.woff
diff --git a/modules/tmhtmlcontent/views/css/font/museo_slab_300-webfont.eot b/modules/themeconfigurator/views/css/font/museo_slab_300-webfont.eot
similarity index 100%
rename from modules/tmhtmlcontent/views/css/font/museo_slab_300-webfont.eot
rename to modules/themeconfigurator/views/css/font/museo_slab_300-webfont.eot
diff --git a/modules/tmhtmlcontent/views/css/font/museo_slab_300-webfont.ttf b/modules/themeconfigurator/views/css/font/museo_slab_300-webfont.ttf
similarity index 100%
rename from modules/tmhtmlcontent/views/css/font/museo_slab_300-webfont.ttf
rename to modules/themeconfigurator/views/css/font/museo_slab_300-webfont.ttf
diff --git a/modules/tmhtmlcontent/views/css/font/museo_slab_500-webfont.eot b/modules/themeconfigurator/views/css/font/museo_slab_500-webfont.eot
similarity index 100%
rename from modules/tmhtmlcontent/views/css/font/museo_slab_500-webfont.eot
rename to modules/themeconfigurator/views/css/font/museo_slab_500-webfont.eot
diff --git a/modules/tmhtmlcontent/views/css/font/museo_slab_500-webfont.ttf b/modules/themeconfigurator/views/css/font/museo_slab_500-webfont.ttf
similarity index 100%
rename from modules/tmhtmlcontent/views/css/font/museo_slab_500-webfont.ttf
rename to modules/themeconfigurator/views/css/font/museo_slab_500-webfont.ttf
diff --git a/modules/tmhtmlcontent/views/css/font/proximanova-sbold-webfont.eot b/modules/themeconfigurator/views/css/font/proximanova-sbold-webfont.eot
similarity index 100%
rename from modules/tmhtmlcontent/views/css/font/proximanova-sbold-webfont.eot
rename to modules/themeconfigurator/views/css/font/proximanova-sbold-webfont.eot
diff --git a/modules/tmhtmlcontent/views/css/font/proximanova-sbold-webfont.ttf b/modules/themeconfigurator/views/css/font/proximanova-sbold-webfont.ttf
similarity index 100%
rename from modules/tmhtmlcontent/views/css/font/proximanova-sbold-webfont.ttf
rename to modules/themeconfigurator/views/css/font/proximanova-sbold-webfont.ttf
diff --git a/modules/tmhtmlcontent/views/css/font/proximanova-webfont.eot b/modules/themeconfigurator/views/css/font/proximanova-webfont.eot
similarity index 100%
rename from modules/tmhtmlcontent/views/css/font/proximanova-webfont.eot
rename to modules/themeconfigurator/views/css/font/proximanova-webfont.eot
diff --git a/modules/tmhtmlcontent/views/css/font/proximanova-webfont.ttf b/modules/themeconfigurator/views/css/font/proximanova-webfont.ttf
similarity index 100%
rename from modules/tmhtmlcontent/views/css/font/proximanova-webfont.ttf
rename to modules/themeconfigurator/views/css/font/proximanova-webfont.ttf
diff --git a/modules/tmhtmlcontent/views/css/hooks.css b/modules/themeconfigurator/views/css/hooks.css
similarity index 100%
rename from modules/tmhtmlcontent/views/css/hooks.css
rename to modules/themeconfigurator/views/css/hooks.css
diff --git a/modules/tmhtmlcontent/views/js/admin.js b/modules/themeconfigurator/views/js/admin.js
similarity index 94%
rename from modules/tmhtmlcontent/views/js/admin.js
rename to modules/themeconfigurator/views/js/admin.js
index de5c2de25..d2f7a8a02 100644
--- a/modules/tmhtmlcontent/views/js/admin.js
+++ b/modules/themeconfigurator/views/js/admin.js
@@ -1,6 +1,6 @@
jQuery(document).ready(function() {
$('.button.new-item').click(function() {
- var item_container = $(this).parent('.new-item');
+ var item_container = $(this).parent().parent('.new-item');
item_container.toggleClass('active').children('.item-container').slideToggle();
});
$('.button-edit').click(function() {
diff --git a/modules/tmhtmlcontent/translations/index.php b/modules/themeconfigurator/views/js/index.php
similarity index 100%
rename from modules/tmhtmlcontent/translations/index.php
rename to modules/themeconfigurator/views/js/index.php
diff --git a/modules/tmhtmlcontent/views/templates/admin/admin.tpl b/modules/themeconfigurator/views/templates/admin/admin.tpl
similarity index 84%
rename from modules/tmhtmlcontent/views/templates/admin/admin.tpl
rename to modules/themeconfigurator/views/templates/admin/admin.tpl
index 5779a4a57..a57abe9e5 100644
--- a/modules/tmhtmlcontent/views/templates/admin/admin.tpl
+++ b/modules/themeconfigurator/views/templates/admin/admin.tpl
@@ -1,16 +1,13 @@
{$htmlcontent.info.name} (v.{$htmlcontent.info.version})
-
- {if $error}
+ {if isset($error) && $error}
{include file="{$htmlcontent.admin_tpl_path}messages.tpl" id="main" text=$error class='error'}
{/if}
- {if $confirmation}
+ {if isset($confirmation) && $confirmation}
{include file="{$htmlcontent.admin_tpl_path}messages.tpl" id="main" text=$confirmation class='conf'}
{/if}
-
{include file="{$htmlcontent.admin_tpl_path}new.tpl"}
{include file="{$htmlcontent.admin_tpl_path}items.tpl"}
-
-
\ No newline at end of file
+
diff --git a/modules/tmhtmlcontent/views/index.php b/modules/themeconfigurator/views/templates/admin/index.php
similarity index 100%
rename from modules/tmhtmlcontent/views/index.php
rename to modules/themeconfigurator/views/templates/admin/index.php
diff --git a/modules/themeconfigurator/views/templates/admin/items.tpl b/modules/themeconfigurator/views/templates/admin/items.tpl
new file mode 100644
index 000000000..8cd6e246f
--- /dev/null
+++ b/modules/themeconfigurator/views/templates/admin/items.tpl
@@ -0,0 +1,116 @@
+
+ {hook h='displayProductListReviews' product=$product}
{if ($product.id_product_attribute == 0 || (isset($add_prod_display) && ($add_prod_display == 1))) && $product.available_for_order && !isset($restricted_country_mode) && $product.minimal_quantity <= 1 && $product.customizable != 2 && !$PS_CATALOG_MODE}
{if ($product.allow_oosp || $product.quantity > 0)}
{if isset($static_token)}
diff --git a/themes/default-bootstrap/product.tpl b/themes/default-bootstrap/product.tpl
index 0a59c37c8..b1e59efe2 100644
--- a/themes/default-bootstrap/product.tpl
+++ b/themes/default-bootstrap/product.tpl
@@ -493,15 +493,6 @@ var contentOnly = {if $content_only}true{else}false{/if}
-
- {if !$content_only}
-