On rajoute les derniers modules et on modifie les CSS

This commit is contained in:
2020-10-20 16:45:41 +02:00
parent 25cb197711
commit bd1927da6f
334 changed files with 39634 additions and 1825 deletions

View File

@@ -0,0 +1,25 @@
{*
* 2007-2020 ETS-Soft
*
* NOTICE OF LICENSE
*
* This file is not open source! Each license that you purchased is only available for 1 wesite only.
* If you want to use this file on more websites (or projects), you need to purchase additional licenses.
* You are not allowed to redistribute, resell, lease, license, sub-license or offer our resources to any third party.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs, please contact us for extra customization service at an affordable price
*
* @author ETS-Soft <etssoft.jsc@gmail.com>
* @copyright 2007-2020 ETS-Soft
* @license Valid for 1 website (or project) for each purchase of license
* International Registered Trademark & Property of ETS-Soft
*}
<script type="text/javascript" src="{$base_dir|escape:'quotes'}views/js/admin.js"></script>
<script type="text/javascript" src="{$base_dir|escape:'quotes'}views/js/other.js"></script>
<div class="pa_wrapper_content {if !$is16}is15{/if}">
{$html nofilter}
</div>

View File

@@ -0,0 +1,43 @@
{*
* 2007-2020 ETS-Soft
*
* NOTICE OF LICENSE
*
* This file is not open source! Each license that you purchased is only available for 1 wesite only.
* If you want to use this file on more websites (or projects), you need to purchase additional licenses.
* You are not allowed to redistribute, resell, lease, license, sub-license or offer our resources to any third party.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs, please contact us for extra customization service at an affordable price
*
* @author ETS-Soft <etssoft.jsc@gmail.com>
* @copyright 2007-2020 ETS-Soft
* @license Valid for 1 website (or project) for each purchase of license
* International Registered Trademark & Property of ETS-Soft
*}
{if isset($errors) && $errors && !$PA_CAPTCHA_ERROR_IS_FIXED}
<div class="pa_captcha_log_install alert alert-success">
<h4>{l s='Congratulations! You have installed CAPTCHA successfully.' mod='ets_advancedcaptcha'}</h4>
<p>{l s='However, there are a few files/functions could not be overridden during the installation process (they might have been already overridden by another module).' mod='ets_advancedcaptcha'}</p>
<p>{l s='Please check the installation log below and manually copy the files/functions from directory "root/modules/ets_advancedcaptcha/override/" to "root/override"' mod='ets_advancedcaptcha'}</p>
<p>{l s='to make sure all features of the CAPTCHA works properly' mod='ets_advancedcaptcha'}</p>
<ul class="pa_captcha_logs alert-warning">
{foreach from=$errors item='log'}
{if $log}{foreach from=$log item='lg'}<li class="ybc_ins_item_log">{$lg|escape:'html':'UTF-8'}</li>{/foreach}{/if}
{/foreach}
</ul>
<div class="pa_captcha_log_actions">
<button id="pa_captcha_button_yes" class="btn btn-primary" name="pa_captcha_button_yes">{l s='Yes, I have fixed all these issues' mod='ets_advancedcaptcha'}</button>
<button id="pa_captcha_clear_log" class="btn btn-default" name="pa_captcha_clear_log">{l s='Clear installation logs' mod='ets_advancedcaptcha'}</button>
</div>
</div>
{elseif $PA_CAPTCHA_ERROR_IS_FIXED}
<div class="pa_captcha_log_install alert alert-info">
<p>{l s='Module was successfully installed with warnings.' mod='ets_advancedcaptcha'}</p>
<a class="pa_captcha_view_log" href="{$link|escape:'html':'UTF-8'}" target="_blank">{l s='View installation log' mod='ets_advancedcaptcha'}</a>
<a class="pa_captcha_clear_log" href="{$smarty.server.REQUEST_URI|escape:'quotes'}&pa_captcha_clear_log=1">{l s='Clear installation log' mod='ets_advancedcaptcha'}</a>
</div>
{/if}

View File

@@ -0,0 +1,38 @@
{*
* 2007-2020 ETS-Soft
*
* NOTICE OF LICENSE
*
* This file is not open source! Each license that you purchased is only available for 1 wesite only.
* If you want to use this file on more websites (or projects), you need to purchase additional licenses.
* You are not allowed to redistribute, resell, lease, license, sub-license or offer our resources to any third party.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs, please contact us for extra customization service at an affordable price
*
* @author ETS-Soft <etssoft.jsc@gmail.com>
* @copyright 2007-2020 ETS-Soft
* @license Valid for 1 website (or project) for each purchase of license
* International Registered Trademark & Property of ETS-Soft
*}
<{if $is16}div{else}p{/if} class="captcha_{$posTo|escape:'html':'utf-8'} {if $is16}form-group row required{else}text{/if} {if isset($posTo) && $posTo}{$posTo|escape:'quotes'}{/if} page_{$captcha_page|escape:'html':'UTF-8'} ver1{if $is17}7{elseif $is16}6{else}5{/if}">
{if $PA_CAPTCHA_TYPE != 'google_v3'}<label for="pa_captcha" {if $is16}class="col-md-3"{/if}>{if isset($PA_CAPTCHA_TYPE) && $PA_CAPTCHA_TYPE != 'google'}{l s='Enter security code' mod='ets_advancedcaptcha'}{else}{l s='Security check' mod='ets_advancedcaptcha'}{/if} {if $captcha_page=='registration'}<sub>*</sub>{/if}</label>{/if}
<{if $is16}div{else}span{/if} class="pa-captcha-inf {if $is16}col-md-6{else}pa-captcha-field-cell{/if}">
{if $PA_CAPTCHA_TYPE != 'google' && $PA_CAPTCHA_TYPE != 'google_v3'}
<input type="hidden" name="posTo" value="{$posTo|escape:'html':'utf-8'}">
<span class="pa_captcha_img">
<img class="pa_captcha_img_data" src="{$captcha_image|escape:'html':'UTF-8'}" data-rand="{$rand|escape:'html':'UTF-8'}" alt="{l s='Security code' mod='ets_advancedcaptcha'}" title="{l s='Security code' mod='ets_advancedcaptcha'}" />
<span id="pa_captcha_refesh"><img title="{l s='Refresh the code' mod='ets_advancedcaptcha'}" alt="{l s='Refresh the code' mod='ets_advancedcaptcha'}" src="{$modules_dir|escape:'html':'UTF-8'}ets_advancedcaptcha/views/img/refresh.png" /></span>
</span>
<input type="text" name="pa_captcha" {if $is16}class="form-control grey"{/if}/>
{elseif $PA_CAPTCHA_TYPE == 'google_v3'}
<input type="hidden" name="g-recaptcha-response" value=""/>
{elseif $PA_CAPTCHA_TYPE == 'google'}
<div class="g-recaptcha"></div>
{/if}
</{if $is16}div{else}span{/if}>
{if $is16}<div class="col-md-3 form-control-comment"></div>{/if}
</{if $is16}div{else}p{/if}>

View File

@@ -0,0 +1,24 @@
{*
* 2007-2020 ETS-Soft
*
* NOTICE OF LICENSE
*
* This file is not open source! Each license that you purchased is only available for 1 wesite only.
* If you want to use this file on more websites (or projects), you need to purchase additional licenses.
* You are not allowed to redistribute, resell, lease, license, sub-license or offer our resources to any third party.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs, please contact us for extra customization service at an affordable price
*
* @author ETS-Soft <etssoft.jsc@gmail.com>
* @copyright 2007-2020 ETS-Soft
* @license Valid for 1 website (or project) for each purchase of license
* International Registered Trademark & Property of ETS-Soft
*}
{extends file='contact.tpl'}
{block name='page_content'}
{widget name="ets_advancedcaptcha"}
{/block}

View File

@@ -0,0 +1,178 @@
{*
* 2007-2020 ETS-Soft
*
* NOTICE OF LICENSE
*
* This file is not open source! Each license that you purchased is only available for 1 wesite only.
* If you want to use this file on more websites (or projects), you need to purchase additional licenses.
* You are not allowed to redistribute, resell, lease, license, sub-license or offer our resources to any third party.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs, please contact us for extra customization service at an affordable price
*
* @author ETS-Soft <etssoft.jsc@gmail.com>
* @copyright 2007-2020 ETS-Soft
* @license Valid for 1 website (or project) for each purchase of license
* International Registered Trademark & Property of ETS-Soft
*}
{if isset($key) && $key}{if $key == 'PA_CAPTCHA_HELP'}
{if $is17}
<div class="container">
<div class="group-0">
<h2>Quick Help - Prestashop 1.7.x</h2>
<div class="note">
This module should work perfectly on most Prestashop websites without any code modification, however if you
website is installed with a custom theme or custom modules you may (rarely) get into some problems when
installing the module to your website. <br />
This quick help will guide you how to quickly fix the problems by modifying some code so you can fix the problems
yourself but we recommend you to ,<a href="https://addons.prestashop.com/en/contact-us?pab=1&id_product=26997"
target="_blank">contact us via Prestashop Addons</a>, We're happy to support you and we'll help you solve the
issues for free!
<br />
For more information of how to install, use and troubleshoot problems (rarely happen), please refer to user-guide
document that is attached to your download.
</div>
<div class="line"></div>
<p>If you see an error that says method <strong>validate</strong> and <strong>getFormat</strong> are overriden
already by another module,
it means some other modules have overridden the method that causes blocking the CAPTCHA module to implement its
overriding code<br />
To solve the problem, You need to manually edit the methods (in overriding files) with overriding code of the
CAPTCHA module
</p>
</div>
<div class="group-1">
<h3>Error: "Method validate() is overriden already"</h3>
Follow steps below to fix the problem: <br />
<ul>
<li>1. Open this file: <i>root/YOUR-SITE/modules/ets_advancedcaptcha/override/classes/form/CustomerForm.php</i></li>
<li>2. Copy the code highlighted on the photo below<br />
<img src="{$path|escape:'quotes'}views/img/help/validate.jpg" style="width:100%" />
</li>
<li>3. Open this file: <i>root/YOUR-SITE/override/classes/form/CustomerForm.php</i></li>
<li>4. Find a method (function) named <strong>"validate"</strong>, paste the code you copied at step 2 into the
method just at the <strong>START</strong> of the method then save your changes</li>
</ul>
</div>
<div class="group-2">
<h3>Error: "Method getFormat() is overriden already"</h3>
Follow steps below to fix the problem: <br />
<ul>
<li>1. Open this file: <i>root/YOUR-SITE/modules/ets_advancedcaptcha/override/classes/form/CustomerFormatter.php</i></li>
<li>2. Copy the code highlighted on the photo below<br />
<img src="{$path|escape:'quotes'}views/img/help/getFormat.jpg" style="width:100%" />
</li>
<li>3. Open this file: <i>root/YOUR-SITE/override/classes/form/CustomerFormatter.php</i></li>
<li>4. Find a method (function) named <strong>"getFormat"</strong>, paste the code you copied at step 2 into the
method just at the <strong>START</strong> of the method then save your changes</li>
</ul>
<h3>Error: "Method submit() is overriden already"</h3>
Follow steps below to fix the problem: <br />
<ul>
<li>1. Open this file: <i>root/YOUR-SITE/modules/ets_advancedcaptcha/override/classes/form/CustomerLoginForm.php</i></li>
<li>2. Copy the code highlighted on the photo below<br />
<img src="{$path|escape:'quotes'}views/img/help/submit.jpg" style="width:100%" />
</li>
<li>3. Open this file: <i>root/YOUR-SITE/override/classes/form/CustomerLoginForm.php</i></li>
<li>4. Find a method (function) named <strong>"submit"</strong>, paste the code you copied at step 2 into the
method just at the <strong>START</strong> of the method then save your changes</li>
</ul>
</div>
</div>
{else}
<div class="container">
<div class="group-0">
<h2>Quick Help - Prestashop 1.5.x - 1.6.x</h2>
<br />
<div class="note">
This module should work perfectly on most Prestashop websites without any code modification, however if you
website is installed with a custom theme or custom modules you may (rarely) get into some problems when
installing the module to your website. <br />
This quick help will guide you how to quickly fix the problems by modifying some code so you can fix the problems
yourself but we recommend you to ,<a href="https://addons.prestashop.com/en/contact-us?pab=1&id_product=26997"
target="_blank">contact us via Prestashop Addons</a>, We're happy to support you and we'll help you solve the
issues for free!
<br />
For more information of how to install, use and troubleshoot problems (rarely happen), please refer to user-guide
document that is attached to your download.
</div>
<div class="line"></div>
If you install CAPTCHA on a Prestashop website that has custom theme or custom modules (that override to the same
classes/methods that CAPTCHA does), you may see following problems after installing CAPTCHA to your website.<br />
- On frontend, you may see your website contact form misses translations or CSS styles.<br />
- In backend, you may see an error saying <strong>"Method processSubmitAccount is overriden already"</strong> or
<strong>"Method postProcess is overriden already"</strong>.<br />
This document will quickly guide you how to solve the problems.<br />
</div>
<div class="group-1">
<h3>Problem: Missing contact form is translations or styles</h3>
<span>Follow steps below to fix the problem:</span><br />
<ul>
<li>1. In your backend, open CAPTCHA configuration panel</li>
<li>2. Enable this option <strong>"Disable template overrides contact form"</strong>
<img src="{$path|escape:'quotes'}views/img/help/contact-form-config.jpg" style="width:100%" />
</li>
<li>3. Copy this code: <i>{literal}{hook h='displayPaCaptcha' posTo='contact'}{/literal}</i></li>
<li>4. Open this file: <i>root/YOUR-SITE/themes/YOUR-THEME/contact-form.tpl </i></li>
<li>5. Paste the code you copied at step 3 into the contact-form.tpl just below the file upload field then save your changes
<img src="{$path|escape:'quotes'}views/img/help/contact-form-code.jpg" style="width:100%" />
</li>
</ul>
</div>
<div class="group-2">
<h3>Problem: Missing login form is translations or styles</h3>
Follow steps below to fix the problem:<br />
<ul>
<li>1. In your backend, open CAPTCHA configuration panel</li>
<li>2. Enable this option <strong>"Disable template override login form"</strong>
<img src="{$path|escape:'quotes'}views/img/help/login-form-config.jpg" style="width:100%" />
</li>
<li>3. Copy this code: <i>{literal}{hook h='displayPaCaptcha' posTo='login'}{/literal}</i></li>
<li>4. Open this file: <i>root/YOUR-SITE/themes/YOUR-THEME/authentication.tpl </i></li>
<li>5. Paste the code you copied at step 3 into the authentication.tpl just below the file upload field then save your changes
<img src="{$path|escape:'quotes'}views/img/help/login-form-code.jpg" style="width:100%" />
</li>
</ul>
</div>
<div class="group-3">
<h3>Problem: Missing forgot your password form's translations or styles</h3>
Follow steps below to fix the problem:<br />
<ul>
<li>1. In your backend, open CAPTCHA configuration panel</li>
<li>2. Enable this option <strong>"Disable template override forgot your password form"</strong>
<img src="{$path|escape:'quotes'}views/img/help/forgot-password-config.jpg" style="width:100%" />
</li>
<li>3. Copy this code: <i>{literal}{hook h='displayPaCaptcha' posTo='pwd_recovery'}{/literal}</i></li>
<li>4. Open this file: <i>root/YOUR-SITE/themes/YOUR-THEME/password.tpl </i></li>
<li>5. Paste the code you copied at step 3 into the password.tpl just below the file upload field then save your changes
<img src="{$path|escape:'quotes'}views/img/help/forgot-password-code.jpg" style="width:100%" />
</li>
</ul>
</div>
<div class="group-4">
<h3>Problem: Error override controller</h3>
<span>- Method <strong>processSubmitAccount</strong>, <strong>processSubmitLogin</strong>, <strong>sendRenewPasswordLink</strong>, <strong>postProcess</strong>, <strong>initContent</strong> is overriden already</span>
Follow steps below to fix the problem:<br />
<ul>
<li>1. Open 2 files: <strong>AuthController.php</strong>, <strong>ContactController.php</strong>, <strong>PasswordController.php</strong> that are
located in <i>"root/YOUR-SITE/modules/ets_advancedcaptcha/override/controllers/front/"</i> folder</li>
<li>2. Copy methods (functions) that're defined on the files<br /></li>
<li>3. Open this respective overriding files (<strong>AuthController.php</strong>, <strong>ContactController.php</strong>, <strong>PasswordController.php</strong>)
in overriding folder of your website at <i>"root/YOUR-SITE/override/controllers/front/"</i><br /></li>
<li>4. Find and replace the methods defined in those files by the methods you copied at step 2 then save your changes</li>
</ul>
<div style="font-style: italic; border: 1px solid #eee; font-size: 14px;padding: 10px;margin-top: 10px;">
*Note: if you replace the whole methods that are overriden by other modules, the other modules may not work
properly anymore (but the CAPTCHA module will surely work).<br />
So if you have programming knowledge, you should check the existing overriden methods and only insert necessary
code that are defined on overriding files of the CAPTCHA MODULE.<br />
We recommend you to contact us for a quick and free fix of the problem (as it requires coding work), We're happy
to support you.
</div>
</div>
</div>
{/if}
{/if}{/if}

View File

@@ -0,0 +1,48 @@
{*
* 2007-2020 ETS-Soft
*
* NOTICE OF LICENSE
*
* This file is not open source! Each license that you purchased is only available for 1 wesite only.
* If you want to use this file on more websites (or projects), you need to purchase additional licenses.
* You are not allowed to redistribute, resell, lease, license, sub-license or offer our resources to any third party.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs, please contact us for extra customization service at an affordable price
*
* @author ETS-Soft <etssoft.jsc@gmail.com>
* @copyright 2007-2020 ETS-Soft
* @license Valid for 1 website (or project) for each purchase of license
* International Registered Trademark & Property of ETS-Soft
*}
<script src="https://www.google.com/recaptcha/api.js?{if $PA_CAPTCHA_TYPE == 'google'}onload=onloadCallback&render=explicit{else}render={$PA_GOOGLE_V3_CAPTCHA_SITE_KEY|escape:'html':'UTF-8'}{/if}{if isset($hl) && $hl}&hl={$hl|escape:'quotes'}{/if}" {if $PA_CAPTCHA_TYPE == 'google'}async defer{/if}></script>
<script type="text/javascript">
{if $PA_CAPTCHA_TYPE == 'google'}
var PA_GOOGLE_CAPTCHA_SITE_KEY = '{$PA_GOOGLE_CAPTCHA_SITE_KEY|escape:'html':'UTF-8'}';{literal}
var recaptchaWidgets = [];
var onloadCallback = function () {
ets_captcha_load(document.getElementsByTagName('form'));
};
var ets_captcha_load = function (forms) {
var pattern = /(^|\s)g-recaptcha(\s|$)/;
for (var i = 0; i < forms.length; i++) {
var items = forms[i].getElementsByTagName('div');
for (var k = 0; k < items.length; k++) {
if (items[k].className && items[k].className.match(pattern) && PA_GOOGLE_CAPTCHA_SITE_KEY) {
var widget_id = grecaptcha.render(items[k], {
'sitekey': PA_GOOGLE_CAPTCHA_SITE_KEY,
'theme': 'light',
});
recaptchaWidgets.push(widget_id);
break;
}
}
}
};{/literal}{else}
var PA_GOOGLE_V3_CAPTCHA_SITE_KEY = '{$PA_GOOGLE_V3_CAPTCHA_SITE_KEY|escape:'html':'UTF-8'}';
{/if}
</script>

View File

@@ -0,0 +1,31 @@
<?php
/**
* 2007-2020 ETS-Soft
*
* NOTICE OF LICENSE
*
* This file is not open source! Each license that you purchased is only available for 1 wesite only.
* If you want to use this file on more websites (or projects), you need to purchase additional licenses.
* You are not allowed to redistribute, resell, lease, license, sub-license or offer our resources to any third party.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please contact us for extra customization service at an affordable price
*
* @author ETS-Soft <etssoft.jsc@gmail.com>
* @copyright 2007-2020 ETS-Soft
* @license Valid for 1 website (or project) for each purchase of license
* International Registered Trademark & Property of ETS-Soft
*/
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;

View File

@@ -0,0 +1,31 @@
{*
* 2007-2020 ETS-Soft
*
* NOTICE OF LICENSE
*
* This file is not open source! Each license that you purchased is only available for 1 wesite only.
* If you want to use this file on more websites (or projects), you need to purchase additional licenses.
* You are not allowed to redistribute, resell, lease, license, sub-license or offer our resources to any third party.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs, please contact us for extra customization service at an affordable price
*
* @author ETS-Soft <etssoft.jsc@gmail.com>
* @copyright 2007-2020 ETS-Soft
* @license Valid for 1 website (or project) for each purchase of license
* International Registered Trademark & Property of ETS-Soft
*}
{if isset($configs) && $configs}
<script type="text/javascript">
{foreach from=$configs key='key' item='config'}
{if $config['type'] == 'int'}
var {$key|escape:'quotes'} = {$config['value']|intval};
{elseif $config['type'] != 'int'}
var {$key|escape:'quotes'} = '{$config['value']|escape:'html':'utf-8'}';
{/if}
{/foreach}
</script>
{/if}

View File

@@ -0,0 +1,116 @@
{*
* 2007-2020 ETS-Soft
*
* NOTICE OF LICENSE
*
* This file is not open source! Each license that you purchased is only available for 1 wesite only.
* If you want to use this file on more websites (or projects), you need to purchase additional licenses.
* You are not allowed to redistribute, resell, lease, license, sub-license or offer our resources to any third party.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please, contact us for extra customization service at an affordable price
*
* @author ETS-Soft <contact@etssoft.net>
* @copyright 2007-2020 ETS-Soft
* @license Valid for 1 website (or project) for each purchase of license
* International Registered Trademark & Property of ETS-Soft
*}
<div class="ets-mod hidden" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;z-index: 9999999;">
<div class="ets-mod-inner">
<div class="ets-mod-header">
<div class="ets-mod-logo">
<a href="{$ets_profile_url|escape:'html':'UTF-8'}" target="_blank" class="mod-link">
<img src="{$shortlink|escape:'html':'UTF-8'}logo.jpg" alt="ETS-Soft" /></a>
</div>
<div class="ets-mod-intro">
{if isset($intro) && $intro}
{assign var='intro' value=sprintf($intro,$module_name)}
{$intro nofilter}
{/if}
</div>
<div class="ets-mod-badges">
<div class="ets-badge-superhero">
<img src="{$img_dir|escape:'html':'UTF-8'}other/ets-superhero-1.png"/>
<span>{$trans.txt_superhero|escape:'html':'UTF-8'}</span>
</div>
<div class="ets-badge-partner">
<img src="{$img_dir|escape:'html':'UTF-8'}other/ets-partner-badge.png"/>
<span>{$trans.txt_partner|escape:'html':'UTF-8'}</span>
</div>
</div>
</div>
<div class="ets-body">
<div class="ets-mod-left">
{if $categories}
<div class="ets-mod-cats_mobile">
<h4>&nbsp;</h4>
</div>
<ul class="ets-mod-cats">
{foreach from=$categories item='cat'}
<li {if $cat.id==0}class="active"{/if} data-id="{$cat.id|intval}">{$cat.title|escape:'html':'UTF-8'}</li>
{/foreach}
</ul>
{/if}
</div>
<div class="ets-mod-right">
{if $modules && $enabled}
<ul class="ets-mod-list">
{foreach from=$modules item='mod'}
{if isset($mod.link) && $mod.link && isset($mod.title) && $mod.title}
{assign var='modcats' value=array_unique(array_map('intval',explode(',',$mod.categories)))}
<li class="mod-item cat-0 {if $modcats}{foreach from=$modcats item='catid'}cat-{$catid|intval} {/foreach}{/if}">
<a target="_blank" href="{$mod.link nofilter}" class="mod-link">
{if isset($mod.icon) && $mod.icon}
<div class="mod-image">
<img src="{$mod.icon|escape:'html':'UTF-8'}" title="{$mod.title nofilter}">
</div>
{/if}
<div class="mod-title">{$mod.title nofilter}</div>
{if isset($mod.promo) && $mod.promo}<div class="mod-promo">{$mod.promo|escape:'html':'UTF-8'}</div>{/if}
{if isset($mod.must_have) && $mod.must_have}<div class="mod-must-have">{$trans.txt_must_have|escape:'html':'UTF-8'}</div>{/if}
{if isset($mod.desc) && $mod.desc}
<div class="mod-desc">{$mod.desc nofilter}</div>
{/if}
{if isset($mod.badge) && $mod.badge}
<div class="mod-badge {$mod.badge|escape:'html':'UTF-8'}">
{if $mod.badge=='fav'}
{$trans.txt_fav|escape:'html':'UTF-8'}
{else}
{$trans.txt_elected|escape:'html':'UTF-8'}
{/if}
</div>
{elseif isset($mod.download) && $mod.download >= 500}
<div class="mod-download">{$mod.download|intval}+ {$trans.txt_downloads|escape:'html':'UTF-8'}</div>
{/if}
{if isset($mod.rating) && $mod.rating || isset($mod.price) && $mod.price}
<div class="mod-footer">
{if isset($mod.ratingClass) && $mod.ratingClass && isset($mod.rating_count) && $mod.rating_count}
<div class="mod-rating {$mod.ratingClass|escape:'html':'UTF-8'}">({$mod.rating_count|intval})</div>
{/if}
{if isset($mod.price) && $mod.price}
<div class="mod-price">
<span class="mod-price-int">{$mod.price|intval}</span>
<span class="mod-price-unit">&euro;</span>
<span class="mod-price-dec">99</span>
</div>
{/if}
</div>
{/if}
</a>
</li>
{/if}
{/foreach}
</ul>
<div class="ets-mod-external">
<a href="{$ets_profile_url|escape:'html':'UTF-8'}" target="_blank" class="ets-mod-external-link btn btn-default mod-link">{$trans.txt_view_all|escape:'html':'UTF-8'}</a>
</div>
{/if}
</div>
</div>
{if $contactUrl}<div class="ets-mod-contact"><a class="mod-link" href="{$contactUrl|escape:'html':'UTF-8'}" target="_blank" title="{$trans.txt_contact|escape:'html':'UTF-8'}"><span>{$trans.txt_contact|escape:'html':'UTF-8'}</span></a></div>{/if}
<div class="ets-mod-close">{$trans.txt_close|escape:'html':'UTF-8'}</div>
</div>
</div>