Jump to content
thirty bees forum

cprats

Members
  • Posts

    143
  • Joined

  • Last visited

  • Days Won

    5

Posts posted by cprats

  1. In my opinion, we cannot let die the best ecommerce software I've ever seen, and we must do whatever is necessary to guarantee this goes on. We could all migrate to PS1.7, but I don't want to rely on that software: headaches suddenly ended when I met TB. I am a PS1.6 refugee from the time it was announced support would be stopped to favour 1.7, and I won't go back.

     

    • Like 3
  2. I need to translate Stirpe, but I could do that only partially:

    In Translations - Installed modules I could only translate "Pay with card" (Pagar con tarjeta) and "Pay now" button (Pagar). The fields "card number, "MMYY" and "CVV" do not appear there.

    How can I complete the translation?

    Screenshot_2020-03-10 Pedido - Colectalia.png

  3. Hello,

    Testing with Google Audits (Lighthouse) I've noticed that the category images, perfectly showing when Crhome charges the page, do not show after an audit is performed, and they show up again when you close the right window of the audit. Here what I say (and I take as example the thirtybees demo site https://front.thirtybees.com/ ). Mine has the same problem, while others don't. Under "best practices" section, messages warn this:

    Failed to load resource: the server responded with a status of 404 ()

    Does anyone have any idea of why this happens?

    screenshot.png

  4. I did a little hack with @datakick Blackhole for Bad Bots wonderful module and .htaccess again. Here is what I did to alternatively solve this issue without having to block large ranges of IPs:

    I've changed the contact-us friendly url to domain.com/random-url

    I've set disallow rules for bots under robots txt for the former url /*contact-us. Nothing better to get sure spambots will use that link than setting a disallow rule for it.

    I've redirected domain.com/contact-us to blackhole for bad bots in .htaccess file and I've had some fun watching that pest being trapped there.

    Here's the .htaccess code for if anyone needs it:

    Redirect 302 /contact-us https://www.yourdomain.com/modules/blackholebots/blackhole/
    

    (remember to change the /contact-us url for your contact page to anything else and to clear cache before making the redirect in .htaccess)

  5. One of my sites has recently been flooded with spam mail through contact form, with some 10,000 emails from qq dot com addresses. As the system sends a confirmation message to the sender ("Your message has been correctly sent"), I had the same amount of outgoing mail, and the hosting company suspended outgoing mail from the domain. I installed the No Captcha reCAPTCHA module, and I also blocked all Chinese IP ranges through .htaccess, and this stopped the flood of junk mail. As this website is based in the US I could use the Captcha module with no worries about cookies and EU laws, but here is the question: what happens if one of my sites based in the EU is spam bombarded? Using cookies there would be quite more complicated, as I would need to block all cookies with a GPRD module, and wait and see if the visitor wanted to allow cookies on his computer of if he ever bothered to click the "accept" button on a bottom bar. Meanwhile, as cookies should be disabled for Captcha until visitor's acceptance, Chinese bots would be able to continue spamming with no limits, as Captcha would not display for them neither unless they accidentally clicked on the "accept cookies" button.

    Is there a way to avoid sending the "Your message has been correctly sent" message when contact form is used?

  6. You could also use "Bankwire Module" and instead of giving a bank account number through it, you could write down instructions on other offline payment methods, or offer them alongside with a bank account number if you need this module to enable bank wires.

    • Like 1
  7. Blackhole for Bad Bots is a free module by @datakick very useful to block disrespectful crawlers. The system is very simple and effective: the module traps and blocks any originating IP for any bot crawling the directory /blackhole/, that has a disallow rule for all agents in robots.txt file.

    But using .htaccess this module can also be very helpful to block a very large sort of nefandous hits by spammers, scanners, scammers, etc, etc, etc. I recently had an issue with spammer bots generating fake shopping carts, and Blackhole for Bad Bots module helped to stop that flood of garbage. All bots entered the site hitting a non existent folder, and they all followed this pattern. The result, after some code in .htaccess to redirect such visits to the black hole, was the complete annihilation of such annoyance.

    Here is another example of what Blackhole for Bad Bots module can do for you, beyond of trapping nasty crawlers: for sure you get dozens of hits to non existent wp-login.php file, or to xmlrpc.php.  You should host your thirtybees installation alone in a server and not to mix it with other websites running WordPress (this is why you should do this). Here is a way to have fun with WordPress' brute force bots hitting thirtybees.

    Place this code in your .htaccess file:

    Redirect 302 /wp-login.php https://www.your-domain-name.com/modules/blackholebots/blackhole/
    Redirect 302 /wp-config.php https://www.your-domain-name.com/modules/blackholebots/blackhole/
    Redirect 302 /xmlrpc.php https://www.your-domain-name.com/modules/blackholebots/blackhole/

    I've just redirected the hits that return a page-not-found.html that spends 33887 bytes. After the redirection to the black hole, the size of the file served is just 243 bytes, as the bot gets the module's ban warning, which is text only. So this will save you bandwidth and it will also block the source IP for that attack.

    See in your server logs what your needs are, and modify the redirections at your convenience.

    Of course, needless to say, never redirect to the black hole a folder or a file that effectively is in your server. If you have to block it, it is better to delete it. Redirect only bind hits to non existent files/folders by probe bots that only make you waste bandwidth.

    • Like 4
    • Thanks 1
  8. This is exactly what bots do:

    185.32.222.115 - - [04/Feb/2020:01:52:55 -0500] "GET /en/11111111111111111112222ct11111111111111111112222/ HTTP/1.0" 404 33888 "https://www.xxx.com/en/11111111111111111112222ct11111111111111111112222/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36"
    185.32.222.115 - - [04/Feb/2020:01:52:55 -0500] "GET / HTTP/1.0" 301 - "https://xxx.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36"
    185.32.222.115 - - [04/Feb/2020:01:52:56 -0500] "GET / HTTP/1.0" 301 - "https://www.xxx.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36"
    185.32.222.115 - - [04/Feb/2020:01:52:57 -0500] "GET /en/ HTTP/1.0" 200 34870 "https://www.xxx.com/en/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36"
    185.32.222.115 - - [04/Feb/2020:01:52:58 -0500] "GET /en/post-war HTTP/1.0" 200 241360 "https://www.xxx.com/en/post-war" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36"
    185.32.222.115 - - [04/Feb/2020:01:53:01 -0500] "GET /en/cart?add=1&id_product=19428&token=9fg8673114e862a47705t5c92gcr42d8 HTTP/1.0" 302 - "https://www.xxx.com/en/cart?add=1&id_product=19428&token=6df7174591c401b74915h1d53rvt78y9" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36"
    185.32.222.115 - - [04/Feb/2020:01:53:01 -0500] "GET /en/order?ipa=19428 HTTP/1.0" 302 - "https://www.xxx.com/en/order?ipa=19428" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36"
    185.32.222.115 - - [04/Feb/2020:01:53:02 -0500] "GET /en/quick-order HTTP/1.0" 200 233983 "https://www.xxx.com/en/quick-order" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36"
    185.32.222.115 - - [04/Feb/2020:01:53:05 -0500] "POST /en/authentication HTTP/1.0" 200 153154 "https://www.xxx.com/en/quick-order" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36"

  9. I have several tens of hits a day to a non existent folder:

    /en/11111111111111111112222ct11111111111111111112222/

    This results in the creation of fake shopping carts, as the intention of the bot is to post spam in a non existent forum or to send spam email through a product page instead of from the contact form.

    Can Bad Bots Blackhole be used to block the originating IPs of such annoyance?

    Instead, any htaccess code to redirect bots hitting such a directory anywhere else, preferably a black hole or poisonous website?

    Thank-you.

  10. Quote

    Prestashop is distributing this email warning about a malware vulnerability. As thirtybees is a fork of Prestashop, should we take any action on this?

    Quote

    Your store may be vulnerable to malware. Here is what you need to do

    Dear PrestaShop user,

     

    On January 2nd, we discovered a malware named XsamXadoo Bot. This malware can be used to have access to an online store and take control of it.

     

    We now believe that the bot used a known vulnerability of the PHP tool PHPUnit that has been reported as CVE-2017-9841.

     

    Here is what you need to do, it should take only 5 minutes.

    1) Is my website vulnerable?

    To know if your store is vulnerable to an attack, this is what you should do. If you’re uncomfortable managing files on your server, contact your qualified team member:

    1. On your server, look into the Vendor folder at the root level of your PrestaShop website
    2. If the Vendor folder contains a “phpunit” folder, you may be vulnerable to an outside attacker.
    3. You can now simply delete the “phpunit” folder and its content.

    Once you checked the main PrestaShop folder, repeat the same steps but inside each module folder:

    1. In each module folder, check if there is a Vendor folder
    2. Inside the Vendor folder of each module, check if there is a folder named “phpunit”.
    3. If one module folder contains this “phpunit” folder, this module may make you vulnerable to an outside attacker.
    4. You can simply delete the “phpunit” folder.

    Double check if every module Vendor folder does not contain a "phpunit folder".

     

    It will not affect module behavior. This simple step will protect your online store from this vulnerability, but remember that your website may have already been compromised.

     

    → If you did not find any module containing this phpunit folder, your store is not vulnerable.

     

    For more technically detailed instructions, please visit our dedicated post.

    2) What can happen if my store is compromised?

    This vulnerability gives an attacker access to your website: for instance, this means an attacker can potentially steal your data.

     

    For more information, please visit our dedicated post on this matter

    3) What is PrestaShop doing right now about this vulnerability?

    All PrestaShop agency partners and ambassadors have been informed and should have already secured the shops they have control over.

     

    All the PrestaShop modules have been updated and are now safe. We are also currently checking every other module available on PrestaShop Addons, to see if they contain the “phpunit” vulnerable folder.

     

    If you believe your website has already been compromised, we strongly advise you to contact a security expert.

     

    The security of online stores is at the center of our concerns. Our teams are making sure the impact of this malware will be as small as possible. We will of course keep you updated regularly on this matter

    The PrestaShop Team

     

  11. 18 minutes ago, yaniv14 said:

    Start by blocking the ip address and see if this bot attack again from different ip

    Thank-you. I stopped the attack while it was ongoig by blocking the IP yesterday afternoon, and since then it has not started again from anywhere else.

  12. I've found dozens of queries like these in the visitors raw data:

    141.98.81.178 - - [23/Dec/2019:13:04:32 -0500] "GET /en/cart?add=1&id_product=14495%27%29%20UNION%20ALL%20SELECT%20NULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL--%20ToBE&token=6dc8273224e872a47705f5c92fce42d6 HTTP/1.1" 200 6635 "-" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.134 Safari/534.16"
    141.98.81.178 - - [23/Dec/2019:13:04:33 -0500] "GET /en/cart?add=1&id_product=14495%27%29%20UNION%20ALL%20SELECT%20NULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL--%20YqvM&token=6dc8273224e872a47705f5c92fce42d6 HTTP/1.1" 200 6636 "-" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.134 Safari/534.16"
    141.98.81.178 - - [23/Dec/2019:13:04:34 -0500] "GET /en/cart?add=1&id_product=14495%27%29%20UNION%20ALL%20SELECT%20NULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL--%20Auku&token=6dc8273224e872a47705f5c92fce42d6 HTTP/1.1" 200 6637 "-" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.134 Safari/534.16"
    141.98.81.178 - - [23/Dec/2019:13:04:34 -0500] "GET /en/cart?add=1&id_product=14495%27%29%20UNION%20ALL%20SELECT%20NULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL--%20DFwZ&token=6dc8273224e872a47705f5c92fce42d6 HTTP/1.1" 200 6637 "-" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.134 Safari/534.16"
    141.98.81.178 - - [23/Dec/2019:13:04:36 -0500] "GET /en/cart?add=1&id_product=14495%27%29%20UNION%20ALL%20SELECT%20NULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL--%20KpXZ&token=6dc8273224e872a47705f5c92fce42d6 HTTP/1.1" 200 6639 "-" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.134 Safari/534.16"

    I never seen this before.

    I have PrestaVault so I did a scan of the site, and found nothing suspicious. Any idea of what did this pretend?

  13. 23 hours ago, Occam said:

    I am really glad that I had read many reports about incompatibilities of Smarty 3.1.31 before. Therefore I only integrated those parts in the previous release 3.1.19 that were required by PHP 7. Now PrestaShop versions 1.5.6x and 1.6.1x run with my adapted 3.1.19 without any problems or even warnings under PHP 7.3 - but unfortunately not thirty bees 1.1.0! This is perhaps now to a large extent compatible with the new Smarty version. But this probably also means that some (or many?) 3rd party themes and modules have to be adapted, too, to be compatible with thirty bees. That doesn't make it any easier.

    There may be a bug in the forum. You quote a message by "me" I didn't write. It appears as if it was mine, but I did not post that text.

    Screenshot-2019-9-10 OPC checkout and custom payment.png

  14. 1 hour ago, wakabayashi said:

    @cprats Please search for:

    
    {if $option.unique_carrier}
      {foreach $option.carrier_list as $carrier}
      <strong>{$carrier.instance->name|escape:'htmlall':'UTF-8'}</strong>
      {/foreach}
      {if isset($carrier.instance->delay[$cookie->id_lang])}
      <br>{l s='Delivery time:'}&nbsp;{$carrier.instance->delay[$cookie->id_lang]|escape:'htmlall':'UTF-8'}
      {/if}
    {/if}

    And replace it with:

    
    {if $option.unique_carrier}
      {foreach $option.carrier_list as $carrier}
      <strong>{$carrier.instance->name|escape:'htmlall':'UTF-8'}</strong>
      {if isset($carrier.instance->delay[$cookie->id_lang])}
      <br>{l s='Delivery time:'}&nbsp;{$carrier.instance->delay[$cookie->id_lang]|escape:'htmlall':'UTF-8'}
      {/if}
      {/foreach}
    {/if}

    Please confirm, if this works.

    Yes, it works. Thank-you!

  15. 1 hour ago, wakabayashi said:

    Yes I could solve it, but it depends on your theme. You use one page checkout right? You have to edit order-carrier.tpl and move the closing foreach a bit. You could also post your code, if you can't solve it yourself.

    Yes, I use one page checkout.

    I can't understand what must I move. I am using TB's community-theme-default 1.0 Here is the code of themes/community-theme-default/order-carrier.tpl. Could you please highlight what I should move? Thank-you.

    {if !$opc}
      {capture name=path}{l s='Shipping:'}{/capture}
      {assign var='current_step' value='shipping'}
      <div id="carrier_area">
        <h1 class="page-heading">{l s='Shipping:'}</h1>
        {include file="$tpl_dir./order-steps.tpl"}
        {include file="$tpl_dir./errors.tpl"}
        <form id="form" action="{$link->getPageLink('order', true, NULL, "{if $multi_shipping}multi-shipping={$multi_shipping}{/if}")|escape:'html':'UTF-8'}" method="post" name="carrier_area">
    {else}
      <div id="carrier_area" class="opc-main-block">
        <h1 class="page-heading step-num"><span>2</span> {l s='Delivery methods'}</h1>
          <div id="opc_delivery_methods" class="opc-main-block">
            <div id="opc_delivery_methods-overlay" class="opc-overlay" style="display: none;"></div>
    {/if}
    <div class="order_carrier_content box">
      {if isset($virtual_cart) && $virtual_cart}
        <input id="input_virtual_carrier" class="hidden" type="hidden" name="id_carrier" value="0">
        <div class="alert alert-warning">{l s='No carrier is needed for this order.'}</div>
      {else}
        <div id="HOOK_BEFORECARRIER">
          {if isset($carriers) && isset($HOOK_BEFORECARRIER)}
            {$HOOK_BEFORECARRIER}
          {/if}
        </div>
        {if isset($isVirtualCart) && $isVirtualCart}
          <div class="alert alert-warning">{l s='No carrier is needed for this order.'}</div>
        {else}
          <div class="delivery_options_address">
            {if isset($delivery_option_list)}
              {foreach $delivery_option_list as $id_address => $option_list}
                <p class="carrier_title">
                  {if isset($address_collection[$id_address])}
                    {l s='Choose a shipping option for this address:'} {$address_collection[$id_address]->alias}
                  {else}
                    {l s='Choose a shipping option'}
                  {/if}
                </p>
                <div class="delivery_options">
                  {foreach $option_list as $key => $option}
                    <div class="delivery_option">
                      <div>
                        <table class="resume table table-bordered{if !$option.unique_carrier} hide{/if}">
                          <tr>
                            <td class="delivery_option_radio">
                              <input id="delivery_option_{$id_address|intval}_{$option@index}" class="delivery_option_radio" type="radio" name="delivery_option[{$id_address|intval}]" data-key="{$key}" data-id_address="{$id_address|intval}" value="{$key}"{if isset($delivery_option[$id_address]) && $delivery_option[$id_address] == $key} checked="checked"{/if}>
                            </td>
                            <td class="delivery_option_logo">
                              <label for="delivery_option_{$id_address|intval}_{$option@index}">
                              {foreach $option.carrier_list as $carrier}
                                {if $carrier.logo}
                                  <img class="order_carrier_logo" src="{$carrier.logo|escape:'htmlall':'UTF-8'}" alt="{$carrier.instance->name|escape:'htmlall':'UTF-8'}">
                                {elseif !$option.unique_carrier}
                                  {$carrier.instance->name|escape:'htmlall':'UTF-8'}
                                  {if !$carrier@last} - {/if}
                                {/if}
                              {/foreach}
                                </label>
                            </td>
                            <td>
                              <label for="delivery_option_{$id_address|intval}_{$option@index}">
                              {if $option.unique_carrier}
                                {foreach $option.carrier_list as $carrier}
                                  <strong>{$carrier.instance->name|escape:'htmlall':'UTF-8'}</strong>
                                {/foreach}
                                {if isset($carrier.instance->delay[$cookie->id_lang])}
                                  <br>{l s='Delivery time:'}&nbsp;{$carrier.instance->delay[$cookie->id_lang]|escape:'htmlall':'UTF-8'}
                                {/if}
                              {/if}
                              {if count($option_list) > 1}
                                <br>
                                {if $option.is_best_grade}
                                  {if $option.is_best_price}
                                    <span class="best_grade best_grade_price best_grade_speed">{l s='The best price and speed'}</span>
                                  {else}
                                    <span class="best_grade best_grade_speed">{l s='The fastest'}</span>
                                  {/if}
                                {elseif $option.is_best_price}
                                  <span class="best_grade best_grade_price">{l s='The best price'}</span>
                                {/if}
                              {/if}
                                </label>
                            </td>
                            <td class="delivery_option_price">
                              <label for="delivery_option_{$id_address|intval}_{$option@index}">
                                <div class="delivery_option_price">
                                {if $option.total_price_with_tax && !$option.is_free && (!isset($free_shipping) || (isset($free_shipping) && !$free_shipping))}
                                  {if $use_taxes == 1}
                                    {if $priceDisplay == 1}
                                      {convertPrice price=$option.total_price_without_tax}{if $display_tax_label} {l s='(tax excl.)'}{/if}
                                    {else}
                                      {convertPrice price=$option.total_price_with_tax}{if $display_tax_label} {l s='(tax incl.)'}{/if}
                                    {/if}
                                  {else}
                                    {convertPrice price=$option.total_price_without_tax}
                                  {/if}
                                {else}
                                  {l s='Free'}
                                {/if}
                                </div>
                            </label>
                            </td>
                          </tr>
                        </table>
                        {if !$option.unique_carrier}
                          <table class="delivery_option_carrier{if isset($delivery_option[$id_address]) && $delivery_option[$id_address] == $key} selected{/if} resume table table-bordered{if $option.unique_carrier} hide{/if}">
                            <tr>
                              {if !$option.unique_carrier}
                                <td rowspan="{$option.carrier_list|@count}" class="delivery_option_radio">
                                  <input id="delivery_option_{$id_address|intval}_{$option@index}" class="delivery_option_radio" type="radio" name="delivery_option[{$id_address|intval}]" data-key="{$key}" data-id_address="{$id_address|intval}" value="{$key}"{if isset($delivery_option[$id_address]) && $delivery_option[$id_address] == $key} checked="checked"{/if}>
                                </td>
                              {/if}
                              {assign var="first" value=current($option.carrier_list)}
                              <td class="delivery_option_logo{if $first.product_list[0].carrier_list[0] eq 0} hide{/if}">
                                {if $first.logo}
                                  <img class="order_carrier_logo" src="{$first.logo|escape:'htmlall':'UTF-8'}" alt="{$first.instance->name|escape:'htmlall':'UTF-8'}">
                                {elseif !$option.unique_carrier}
                                  {$first.instance->name|escape:'htmlall':'UTF-8'}
                                {/if}
                              </td>
                              <td class="{if $first.product_list[0].carrier_list[0] eq 0} hide{/if}">
                                <input type="hidden" value="{$first.instance->id|intval}" name="id_carrier">
                                {if isset($first.instance->delay[$cookie->id_lang])}
                                  <i class="icon icon-info-sign"></i>
                                  {strip}
                                    {$first.instance->delay[$cookie->id_lang]|escape:'htmlall':'UTF-8'}
                                    &nbsp;
                                    {if count($first.product_list) <= 1}
                                      ({l s='For this product:'}
                                    {else}
                                      ({l s='For these products:'}
                                    {/if}
                                  {/strip}
                                  {foreach $first.product_list as $product}
                                    {if $product@index == 4}
                                      <abbr title="
                                    {/if}
                                    {strip}
                                      {if $product@index >= 4}
                                        {$product.name|escape:'htmlall':'UTF-8'}
                                        {if isset($product.attributes) && $product.attributes}
                                            {$product.attributes|escape:'htmlall':'UTF-8'}
                                        {/if}
                                        {if !$product@last}
                                            ,&nbsp;
                                        {else}
                                          ">&hellip;</abbr>)
                                        {/if}
                                      {else}
                                        {$product.name|escape:'htmlall':'UTF-8'}
                                        {if isset($product.attributes) && $product.attributes}
                                          {$product.attributes|escape:'htmlall':'UTF-8'}
                                        {/if}
                                        {if !$product@last}
                                          ,&nbsp;
                                        {else}
                                          )
                                        {/if}
                                      {/if}
                                    {/strip}
                                  {/foreach}
                                {/if}
                              </td>
                              <td rowspan="{$option.carrier_list|@count}" class="delivery_option_price">
                                <div class="delivery_option_price">
                                  {if $option.total_price_with_tax && !$option.is_free && (!isset($free_shipping) || (isset($free_shipping) && !$free_shipping))}
                                    {if $use_taxes == 1}
                                      {if $priceDisplay == 1}
                                        {convertPrice price=$option.total_price_without_tax}{if $display_tax_label} {l s='(tax excl.)'}{/if}
                                      {else}
                                        {convertPrice price=$option.total_price_with_tax}{if $display_tax_label} {l s='(tax incl.)'}{/if}
                                      {/if}
                                    {else}
                                      {convertPrice price=$option.total_price_without_tax}
                                    {/if}
                                  {else}
                                    {l s='Free'}
                                  {/if}
                                </div>
                              </td>
                            </tr>
                            {foreach $option.carrier_list as $carrier}
                              {if $carrier@iteration != 1}
                                <tr>
                                  <td class="delivery_option_logo{if $carrier.product_list[0].carrier_list[0] eq 0} hide{/if}">
                                    {if $carrier.logo}
                                      <img class="order_carrier_logo" src="{$carrier.logo|escape:'htmlall':'UTF-8'}" alt="{$carrier.instance->name|escape:'htmlall':'UTF-8'}">
                                    {elseif !$option.unique_carrier}
                                      {$carrier.instance->name|escape:'htmlall':'UTF-8'}
                                    {/if}
                                  </td>
                                  <td class="{if $carrier.product_list[0].carrier_list[0] eq 0} hide{/if}">
                                    <input type="hidden" value="{$first.instance->id|intval}" name="id_carrier">
                                    {if isset($carrier.instance->delay[$cookie->id_lang])}
                                      <i class="icon icon-info-sign"></i>
                                      {strip}
                                        {$carrier.instance->delay[$cookie->id_lang]|escape:'htmlall':'UTF-8'}
                                        &nbsp;
                                        {if count($first.product_list) <= 1}
                                          ({l s='For this product:'}
                                        {else}
                                          ({l s='For these products:'}
                                        {/if}
                                      {/strip}
                                      {foreach $carrier.product_list as $product}
                                        {if $product@index == 4}
                                          <abbr title="
                                        {/if}
                                        {strip}
                                          {if $product@index >= 4}
                                            {$product.name|escape:'htmlall':'UTF-8'}
                                            {if isset($product.attributes) && $product.attributes}
                                                {$product.attributes|escape:'htmlall':'UTF-8'}
                                            {/if}
                                            {if !$product@last}
                                                ,&nbsp;
                                            {else}
                                                ">&hellip;</abbr>)
                                            {/if}
                                          {else}
                                            {$product.name|escape:'htmlall':'UTF-8'}
                                            {if isset($product.attributes) && $product.attributes}
                                              {$product.attributes|escape:'htmlall':'UTF-8'}
                                            {/if}
                                            {if !$product@last}
                                              ,&nbsp;
                                            {else}
                                              )
                                            {/if}
                                          {/if}
                                        {/strip}
                                      {/foreach}
                                    {/if}
                                  </td>
                                </tr>
                              {/if}
                            {/foreach}
                          </table>
                        {/if}
                      </div>
                    </div>
                  {/foreach}
                </div>
                <div class="hook_extracarrier" id="HOOK_EXTRACARRIER_{$id_address}">
                  {if isset($HOOK_EXTRACARRIER_ADDR) &&  isset($HOOK_EXTRACARRIER_ADDR.$id_address)}{$HOOK_EXTRACARRIER_ADDR.$id_address}{/if}
                </div>
                {foreachelse}
                {assign var='errors' value=' '|explode:''}
                <div class="alert alert-warning" id="noCarrierWarning">
                  {foreach $cart->getDeliveryAddressesWithoutCarriers(true, $errors) as $address}
                    {if empty($address->alias)}
                      {l s='No carriers available.'}
                    {else}
                      {assign var='flag_error_message' value=false}
                      {foreach $errors as $error}
                        {if $error == Carrier::SHIPPING_WEIGHT_EXCEPTION}
                          {$flag_error_message = true}
                          {l s='The product selection cannot be delivered by the available carrier(s): it is too heavy. Please amend your cart to lower its weight.'}
                        {elseif $error == Carrier::SHIPPING_PRICE_EXCEPTION}
                          {$flag_error_message = true}
                          {l s='The product selection cannot be delivered by the available carrier(s). Please amend your cart.'}
                        {elseif $error == Carrier::SHIPPING_SIZE_EXCEPTION}
                          {$flag_error_message = true}
                          {l s='The product selection cannot be delivered by the available carrier(s): its size does not fit. Please amend your cart to reduce its size.'}
                        {/if}
                      {/foreach}
                      {if !$flag_error_message}
                        {l s='No carriers available for the address "%s".' sprintf=$address->alias}
                      {/if}
                    {/if}
                    {if !$address@last}
                      <br>
                    {/if}
                    {foreachelse}
                    {l s='No carriers available.'}
                  {/foreach}
                </div>
              {/foreach}
            {/if}
          </div>
          <div id="extra_carrier" style="display: none;"></div>
          {if $opc}
            <p class="carrier_title">{l s='Leave a message'}</p>
            <div>
              <p>{l s='If you would like to add a comment about your order, please write it in the field below.'}</p>
                <textarea class="form-control" cols="120" rows="2" name="message" id="message">{strip}
                    {if isset($oldMessage)}{$oldMessage|escape:'html':'UTF-8'}{/if}
                {/strip}</textarea>
            </div>
          {/if}
          {if $recyclablePackAllowed}
            <p class="carrier_title">{l s='Recyclable Packaging'}</p>
            <div class="checkbox recyclable">
              <label for="recyclable">
                <input type="checkbox" name="recyclable" id="recyclable" value="1"{if $recyclable == 1} checked="checked"{/if}>
                {l s='I would like to receive my order in recycled packaging.'}
              </label>
            </div>
          {/if}
          {if $giftAllowed}
            {if $opc}
              <hr style="">
            {/if}
            <p class="carrier_title">{l s='Gift'}</p>
            <div class="checkbox gift">
              <label for="gift">
                <input type="checkbox" name="gift" id="gift" value="1"{if $cart->gift == 1} checked="checked"{/if}>
                {l s='I would like my order to be gift wrapped.'}
                {if $gift_wrapping_price > 0}
                  &nbsp;<i>({l s='Additional cost of'}
                  <span class="price" id="gift-price">
                    {if $priceDisplay == 1}
                      {convertPrice price=$total_wrapping_tax_exc_cost}
                    {else}
                      {convertPrice price=$total_wrapping_cost}
                    {/if}
                  </span>
                  {if $use_taxes && $display_tax_label}
                    {if $priceDisplay == 1}
                      {l s='(tax excl.)'}
                    {else}
                      {l s='(tax incl.)'}
                    {/if}
                  {/if})
                </i>
                {/if}
              </label>
            </div>
            <p id="gift_div">
              <label for="gift_message">{l s='If you\'d like, you can add a note to the gift:'}</label>
              <textarea rows="2" cols="120" id="gift_message" class="form-control" name="gift_message">{$cart->gift_message|escape:'html':'UTF-8'}</textarea>
            </p>
          {/if}
        {/if}
      {/if}
      {if $conditions && $cms_id && (! isset($advanced_payment_api) || !$advanced_payment_api)}
        {if $opc}
          <hr style="">
        {/if}
        {if isset($override_tos_display) && $override_tos_display}
          {$override_tos_display}
        {else}
          <div class="box">
            <div class="checkbox">
              <label for="cgv">
                <input type="checkbox" name="cgv" id="cgv" value="1" {if $checkedTOS}checked="checked"{/if}>
                {l s='I agree to the terms of service and will adhere to them unconditionally.'}
              </label>
              <a href="{$link_conditions|escape:'html':'UTF-8'}" class="iframe" rel="nofollow">{l s='(Read the Terms of Service)'}</a>
            </div>
          </div>
        {/if}
      {/if}
    </div>
    {if !$opc}
      <p class="cart_navigation clearfix">
        <input type="hidden" name="step" value="3">
        <input type="hidden" name="back" value="{$back}">
        {if !$is_guest}
          {if $back}
            <a href="{$link->getPageLink('order', true, NULL, "step=1&back={$back}{if $multi_shipping}&multi-shipping={$multi_shipping}{/if}")|escape:'html':'UTF-8'}" title="{l s='Previous'}" class="btn btn-lg btn-default">
              <i class="icon icon-chevron-left"></i>
              {l s='Continue shopping'}
            </a>
          {else}
            <a href="{$link->getPageLink('order', true, NULL, "step=1{if $multi_shipping}&multi-shipping={$multi_shipping}{/if}")|escape:'html':'UTF-8'}" title="{l s='Previous'}" class="btn btn-lg btn-default">
              <i class="icon icon-chevron-left"></i>
              {l s='Continue shopping'}
            </a>
          {/if}
        {else}
          <a href="{$link->getPageLink('order', true, NULL, "{if $multi_shipping}multi-shipping={$multi_shipping}{/if}")|escape:'html':'UTF-8'}" title="{l s='Previous'}" class="btn btn-lg btn-default">
            <i class="icon icon-chevron-left"></i>
            {l s='Continue shopping'}
          </a>
        {/if}
        {if isset($virtual_cart) && $virtual_cart || (isset($delivery_option_list) && !empty($delivery_option_list))}
          <button type="submit" name="processCarrier" class="btn btn-lg btn-success pull-right standard-checkout">
            <span>
              {l s='Proceed to checkout'}
              <i class="icon icon-chevron-right right"></i>
            </span>
          </button>
        {/if}
      </p>
    </form>
    {else}
      </div>
    {/if}
    </div>
    {strip}
      {if !$opc}
        {addJsDef orderProcess='order'}
        {if isset($virtual_cart) && !$virtual_cart && $giftAllowed && $cart->gift == 1}
          {addJsDef cart_gift=true}
        {else}
          {addJsDef cart_gift=false}
        {/if}
        {addJsDef orderUrl=$link->getPageLink("order", true)|escape:'quotes':'UTF-8'}
        {addJsDefL name=txtProduct}{l s='Product' js=1}{/addJsDefL}
        {addJsDefL name=txtProducts}{l s='Products' js=1}{/addJsDefL}
      {/if}
      {if $conditions}
        {addJsDefL name=msg_order_carrier}{l s='You must agree to the terms of service before continuing.' js=1}{/addJsDefL}
      {/if}
    {/strip}

     

  16. 3 hours ago, wakabayashi said:

    What do you mean with: I need to keep the design? You need to change a few lines in one file, thats all :S

    I just was referring to the fact that I can't change the theme, so I need to keep the community default instead of the new one. I have aging customers who dislike big changes.

×
×
  • Create New...