Plugin Directory

Changeset 3421339


Ignore:
Timestamp:
12/16/2025 06:36:14 PM (4 weeks ago)
Author:
bbioon
Message:

version 2.2.1

Location:
merchant
Files:
1235 added
17 edited

Legend:

Unmodified
Added
Removed
  • merchant/trunk/admin/classes/class-merchant-admin-statistics-tracking.php

    r3287369 r3421339  
    403403     */
    404404    private function is_user_consent() {
    405         return Merchant_Admin_Options::get( 'global-settings', 'usage_statistics_tracking', true );
     405        return Merchant_Admin_Options::get( 'global-settings', 'usage_statistics_tracking', false );
    406406    }
    407407
  • merchant/trunk/admin/pages/page-settings.php

    r3287369 r3421339  
    8282                            'title'   => __( 'Enable modules usage tracking', 'merchant' ),
    8383                            'desc'    => __( 'Track which modules are used on your site. This helps us improve our products and services. No personal data is collected.', 'merchant' ),
    84                             'default' => true,
     84                            'default' => false,
    8585                        ),
    8686                    ),
  • merchant/trunk/assets/js/admin/merchant-preview.js

    r3403526 r3421339  
    4646          if (manipulators.text.hasOwnProperty(_key)) {
    4747            var inputText = $('[name="merchant[' + manipulators.text[_key].setting + ']"]').val();
    48             if (manipulators.text[_key].hasOwnProperty('replacements')) {
     48            if (manipulators.text[_key].hasOwnProperty('replacements') && inputText) {
    4949              inputText = setReplacements(inputText, manipulators.text[_key]);
    5050            }
  • merchant/trunk/assets/js/admin/merchant-preview.min.js

    r3403526 r3421339  
    1 function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function _slicedToArray(e,t){return _arrayWithHoles(e)||_iterableToArrayLimit(e,t)||_unsupportedIterableToArray(e,t)||_nonIterableRest()}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _iterableToArrayLimit(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,o,i,s=[],c=!0,l=!1;try{if(o=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=o.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){l=!0,a=e}finally{try{if(!c&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(l)throw a}}return s}}function _arrayWithHoles(e){if(Array.isArray(e))return e}function _createForOfIteratorHelper(e,t){var r,n,a,o,i="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(i)return a=!(n=!0),{s:function(){i=i.call(e)},n:function(){var e=i.next();return n=e.done,e},e:function(e){a=!0,r=e},f:function(){try{n||null==i.return||i.return()}finally{if(a)throw r}}};if(Array.isArray(e)||(i=_unsupportedIterableToArray(e))||t&&e&&"number"==typeof e.length)return i&&(e=i),o=0,{s:t=function(){},n:function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}},e:function(e){throw e},f:t};throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(e,t){var r;if(e)return"string"==typeof e?_arrayLikeToArray(e,t):"Map"===(r="Object"===(r={}.toString.call(e).slice(8,-1))&&e.constructor?e.constructor.name:r)||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?_arrayLikeToArray(e,t):void 0}function _arrayLikeToArray(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}((H,L)=>{H(L).ready(function(){function r(){if(C(I.css))for(var e in I.css)(t=>{var e,r;I.css.hasOwnProperty(t)&&(e=L.querySelectorAll(I.css[t].selector),r=H('[name="merchant['+I.css[t].setting+']"]').val()+I.css[t].unit,"radio"===H('[name="merchant['+I.css[t].setting+']"]').attr("type")&&(r=H('[name="merchant['+I.css[t].setting+']"]:checked').val()+I.css[t].unit),e.forEach(function(e){e.style.setProperty(I.css[t].variable,r)}))})(e);if(C(I.text))for(var t in I.text){var r;I.text.hasOwnProperty(t)&&(r=H('[name="merchant['+I.text[t].setting+']"]').val(),I.text[t].hasOwnProperty("replacements")&&(r=j(r,I.text[t])),H(I.text[t].selector).html(r))}if(C(I.attributes))for(var n in I.attributes){var a;I.attributes.hasOwnProperty(n)&&(a=(a="radio"===(a=H('[name="merchant['+I.attributes[n].setting+']"]')).attr("type")?H('[name="merchant['+I.attributes[n].setting+']"]:checked'):a).val(),I.attributes[n].hasOwnProperty("replacements")&&(a=j(a,I.attributes[n])),H(I.attributes[n].selector).attr(I.attributes[n].attribute,a))}if(C(I.classes))for(var o in I.classes)if(I.classes.hasOwnProperty(o)){if(I.classes[o].hasOwnProperty("remove")){var i,s=_createForOfIteratorHelper(I.classes[o].remove);try{for(s.s();!(i=s.n()).done;){var c=i.value;H(I.classes[o].selector).removeClass(c)}}catch(e){s.e(e)}finally{s.f()}}var l=H('[name="merchant['+I.classes[o].setting+']"]'),f=l.attr("type");"radio"===f&&(l=H('[name="merchant['+I.classes[o].setting+']"]:checked')),"checkbox"===f?l.is(":checked")?H(I.classes[o].selector).addClass(I.classes[o].add):H(I.classes[o].selector).removeClass(I.classes[o].add):(f=l.val(),I.classes[o].hasOwnProperty("add")?H(I.classes[o].selector).toggleClass(I.classes[o].add):H(I.classes[o].selector).addClass(f))}if(C(I.icons))for(var p in I.icons){var h,u;I.icons.hasOwnProperty(p)&&(u=(h=H('[name="merchant['+I.icons[p].setting+']"]:checked')).parent().find("figure img").attr("src"),p=H(I.icons[p].selector),"none"===h.val()?p.hide():(p.show(),p.attr("src",u)))}if(C(I.svg_icons))for(var m in I.svg_icons){var d,y;I.svg_icons.hasOwnProperty(m)&&(d=H('[name="merchant['+I.svg_icons[m].setting+']"]:checked'),y=I.svg_icons[m].icons_lib[d.val()],m=H(I.svg_icons[m].selector),"none"===d.val()?m.hide():(m.show(),m.html(y)))}if(C(I.repeater_content))for(var v in I.repeater_content)if(I.repeater_content.hasOwnProperty(v)){var g=H('[name="merchant['+I.repeater_content[v].setting+']"]'),b=g.val()?JSON.parse(g.val()):[],_=H(I.repeater_content[v].selector);if(b.length){var x,w=_createForOfIteratorHelper(b.entries());try{for(w.s();!(x=w.n()).done;){var O=_slicedToArray(x.value,2),A=O[0],T=O[1];_.length&&_.eq(A).html(T)}}catch(e){w.e(e)}finally{w.f()}if(_.length>b.length)for(var k=b.length;k<_.length;k++)_.eq(k).parent().remove();if(_.length<b.length)for(var P=_.length;P<b.length;P++)_.eq(0).parent().clone().appendTo(_.eq(0).parent().parent())}}if(C(I.flexible_content))for(var S in I.flexible_content)(i=>{var s=H(I.flexible_content[i].selector),e=s.children(),c=e.eq(0),t=H(".merchant-flexible-content-control[data-id="+I.flexible_content[i].setting+"]").find(".merchant-flexible-content").children();e.each(function(){H(this).hasClass("flexible-content-template")||H(this).remove()}),t.each(function(){var e,t=c.clone(),r=H(this).data("type");for(e in I.flexible_content[i].variables[r]){var n=I.flexible_content[i].variables[r][e],n=H(this).find(".merchant-module-page-setting-field[data-id="+n+"]"),a=n.data("type"),o=n.find("input").val();"text"===a&&t.html(t.html().replace(e,o)),"upload"===a&&void 0!==(o=n.find(".merchant-upload-image img").prop("outerHTML"))&&t.html(t.html().replace(e,o)),"choices"===a&&(o=n.find("input:checked"),n.find(".merchant-svg").length)&&void 0!==(a=o.parent().find("svg").prop("outerHTML"))&&t.html(t.html().replace(e,a)),t.html(t.html().replace(e,"")).removeClass("flexible-content-template").appendTo(s)}})})(S)}function e(e){var t=e.attr("type");"text"!==t&&"TEXTAREA"!==e.prop("tagName")||e.on("keyup input",r),"number"===t&&(e.on("keyup input",r),e.parent().find("input[type=range]").length)&&e.parent().find("input[type=range]").on("input change",r),"radio"===t&&e.on("input",r),"checkbox"!==t&&!e.is("select")||e.on("change",r),e.hasClass("merchant-sortable-repeater-input")&&e.on("change",r),e.hasClass("merchant-upload-input")&&e.on("change",r)}var I=merchantPreviewManipulators,C=function(e){return void 0!==e&&0<Object.keys(e).length};if(void 0!==I){if(C(I.css))for(var t in I.css)e(H('[name="merchant['+I.css[t].setting+']"]'));if(C(I.text))for(var n in I.text)e(H('[name="merchant['+I.text[n].setting+']"]'));if(C(I.attributes))for(var a in I.attributes)e(H('[name="merchant['+I.attributes[a].setting+']"]'));if(C(I.classes))for(var o in I.classes)e(H('[name="merchant['+I.classes[o].setting+']"]'));if(C(I.icons))for(var i in I.icons)e(H('[name="merchant['+I.icons[i].setting+']"]'));if(C(I.svg_icons))for(var s in I.svg_icons)e(H('[name="merchant['+I.svg_icons[s].setting+']"]'));if(C(I.repeater_content))for(var c in I.repeater_content)e(H('[name="merchant['+I.repeater_content[c].setting+']"]'));if(C(I.flexible_content))for(var l in I.flexible_content){l=H(".merchant-flexible-content-control[data-id="+I.flexible_content[l].setting+"]");e(l.find("input")),l.find(".customize-control-flexible-content-delete").on("click",r),l.on("merchant.sorted",r)}if(C(I.update))for(var f in I.update)e(H('[name="merchant['+I.update[f].setting+']"]'));for(var p=0,h=[".pcr-color-palette",".pcr-swatches button",".pcr-color-chooser",".pcr-color-opacity"];p<h.length;p++){var u=h[p];H(L).on("click",u,r)}}var j=function(e,t){var r,n=t.replacements[0],a=t.replacements[1],o=_createForOfIteratorHelper(n.entries());try{for(o.s();!(r=o.n()).done;){var i=_slicedToArray(r.value,2),s=i[0],c=i[1],l=a[s];if("string"==typeof l&&(e=e.replace(c,l)),"object"===_typeof(l))if(l.hasOwnProperty("conditions")){var f,p=H('[name="merchant['+l.setting+']"]');for(f in l.conditions)l.conditions.hasOwnProperty(f)&&p.val()===f&&("string"==typeof l.conditions[f]&&(e=e.replace(c,l.conditions[f])),"object"===_typeof(l.conditions[f]))&&(e=m(e,c,l.conditions[f]))}else e=m(e,c,l)}}catch(e){o.e(e)}finally{o.f()}return e},m=function(e,t,r){var n=H('input[name="merchant['+r.setting+']"]').val();return r.hasOwnProperty("format")&&(n=r.format.replace("{string}",n)),e.replace(t,n)};H(L).on("change",r)})})(jQuery,(window,document));
     1function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function _slicedToArray(e,t){return _arrayWithHoles(e)||_iterableToArrayLimit(e,t)||_unsupportedIterableToArray(e,t)||_nonIterableRest()}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _iterableToArrayLimit(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,o,i,s=[],c=!0,l=!1;try{if(o=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=o.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){l=!0,a=e}finally{try{if(!c&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(l)throw a}}return s}}function _arrayWithHoles(e){if(Array.isArray(e))return e}function _createForOfIteratorHelper(e,t){var r,n,a,o,i="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(i)return a=!(n=!0),{s:function(){i=i.call(e)},n:function(){var e=i.next();return n=e.done,e},e:function(e){a=!0,r=e},f:function(){try{n||null==i.return||i.return()}finally{if(a)throw r}}};if(Array.isArray(e)||(i=_unsupportedIterableToArray(e))||t&&e&&"number"==typeof e.length)return i&&(e=i),o=0,{s:t=function(){},n:function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}},e:function(e){throw e},f:t};throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(e,t){var r;if(e)return"string"==typeof e?_arrayLikeToArray(e,t):"Map"===(r="Object"===(r={}.toString.call(e).slice(8,-1))&&e.constructor?e.constructor.name:r)||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?_arrayLikeToArray(e,t):void 0}function _arrayLikeToArray(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}((H,L)=>{H(L).ready(function(){function r(){if(C(I.css))for(var e in I.css)(t=>{var e,r;I.css.hasOwnProperty(t)&&(e=L.querySelectorAll(I.css[t].selector),r=H('[name="merchant['+I.css[t].setting+']"]').val()+I.css[t].unit,"radio"===H('[name="merchant['+I.css[t].setting+']"]').attr("type")&&(r=H('[name="merchant['+I.css[t].setting+']"]:checked').val()+I.css[t].unit),e.forEach(function(e){e.style.setProperty(I.css[t].variable,r)}))})(e);if(C(I.text))for(var t in I.text){var r;I.text.hasOwnProperty(t)&&(r=H('[name="merchant['+I.text[t].setting+']"]').val(),I.text[t].hasOwnProperty("replacements")&&(r=r&&j(r,I.text[t])),H(I.text[t].selector).html(r))}if(C(I.attributes))for(var n in I.attributes){var a;I.attributes.hasOwnProperty(n)&&(a=(a="radio"===(a=H('[name="merchant['+I.attributes[n].setting+']"]')).attr("type")?H('[name="merchant['+I.attributes[n].setting+']"]:checked'):a).val(),I.attributes[n].hasOwnProperty("replacements")&&(a=j(a,I.attributes[n])),H(I.attributes[n].selector).attr(I.attributes[n].attribute,a))}if(C(I.classes))for(var o in I.classes)if(I.classes.hasOwnProperty(o)){if(I.classes[o].hasOwnProperty("remove")){var i,s=_createForOfIteratorHelper(I.classes[o].remove);try{for(s.s();!(i=s.n()).done;){var c=i.value;H(I.classes[o].selector).removeClass(c)}}catch(e){s.e(e)}finally{s.f()}}var l=H('[name="merchant['+I.classes[o].setting+']"]'),f=l.attr("type");"radio"===f&&(l=H('[name="merchant['+I.classes[o].setting+']"]:checked')),"checkbox"===f?l.is(":checked")?H(I.classes[o].selector).addClass(I.classes[o].add):H(I.classes[o].selector).removeClass(I.classes[o].add):(f=l.val(),I.classes[o].hasOwnProperty("add")?H(I.classes[o].selector).toggleClass(I.classes[o].add):H(I.classes[o].selector).addClass(f))}if(C(I.icons))for(var p in I.icons){var h,u;I.icons.hasOwnProperty(p)&&(u=(h=H('[name="merchant['+I.icons[p].setting+']"]:checked')).parent().find("figure img").attr("src"),p=H(I.icons[p].selector),"none"===h.val()?p.hide():(p.show(),p.attr("src",u)))}if(C(I.svg_icons))for(var m in I.svg_icons){var d,y;I.svg_icons.hasOwnProperty(m)&&(d=H('[name="merchant['+I.svg_icons[m].setting+']"]:checked'),y=I.svg_icons[m].icons_lib[d.val()],m=H(I.svg_icons[m].selector),"none"===d.val()?m.hide():(m.show(),m.html(y)))}if(C(I.repeater_content))for(var v in I.repeater_content)if(I.repeater_content.hasOwnProperty(v)){var g=H('[name="merchant['+I.repeater_content[v].setting+']"]'),b=g.val()?JSON.parse(g.val()):[],_=H(I.repeater_content[v].selector);if(b.length){var x,w=_createForOfIteratorHelper(b.entries());try{for(w.s();!(x=w.n()).done;){var O=_slicedToArray(x.value,2),A=O[0],T=O[1];_.length&&_.eq(A).html(T)}}catch(e){w.e(e)}finally{w.f()}if(_.length>b.length)for(var k=b.length;k<_.length;k++)_.eq(k).parent().remove();if(_.length<b.length)for(var P=_.length;P<b.length;P++)_.eq(0).parent().clone().appendTo(_.eq(0).parent().parent())}}if(C(I.flexible_content))for(var S in I.flexible_content)(i=>{var s=H(I.flexible_content[i].selector),e=s.children(),c=e.eq(0),t=H(".merchant-flexible-content-control[data-id="+I.flexible_content[i].setting+"]").find(".merchant-flexible-content").children();e.each(function(){H(this).hasClass("flexible-content-template")||H(this).remove()}),t.each(function(){var e,t=c.clone(),r=H(this).data("type");for(e in I.flexible_content[i].variables[r]){var n=I.flexible_content[i].variables[r][e],n=H(this).find(".merchant-module-page-setting-field[data-id="+n+"]"),a=n.data("type"),o=n.find("input").val();"text"===a&&t.html(t.html().replace(e,o)),"upload"===a&&void 0!==(o=n.find(".merchant-upload-image img").prop("outerHTML"))&&t.html(t.html().replace(e,o)),"choices"===a&&(o=n.find("input:checked"),n.find(".merchant-svg").length)&&void 0!==(a=o.parent().find("svg").prop("outerHTML"))&&t.html(t.html().replace(e,a)),t.html(t.html().replace(e,"")).removeClass("flexible-content-template").appendTo(s)}})})(S)}function e(e){var t=e.attr("type");"text"!==t&&"TEXTAREA"!==e.prop("tagName")||e.on("keyup input",r),"number"===t&&(e.on("keyup input",r),e.parent().find("input[type=range]").length)&&e.parent().find("input[type=range]").on("input change",r),"radio"===t&&e.on("input",r),"checkbox"!==t&&!e.is("select")||e.on("change",r),e.hasClass("merchant-sortable-repeater-input")&&e.on("change",r),e.hasClass("merchant-upload-input")&&e.on("change",r)}var I=merchantPreviewManipulators,C=function(e){return void 0!==e&&0<Object.keys(e).length};if(void 0!==I){if(C(I.css))for(var t in I.css)e(H('[name="merchant['+I.css[t].setting+']"]'));if(C(I.text))for(var n in I.text)e(H('[name="merchant['+I.text[n].setting+']"]'));if(C(I.attributes))for(var a in I.attributes)e(H('[name="merchant['+I.attributes[a].setting+']"]'));if(C(I.classes))for(var o in I.classes)e(H('[name="merchant['+I.classes[o].setting+']"]'));if(C(I.icons))for(var i in I.icons)e(H('[name="merchant['+I.icons[i].setting+']"]'));if(C(I.svg_icons))for(var s in I.svg_icons)e(H('[name="merchant['+I.svg_icons[s].setting+']"]'));if(C(I.repeater_content))for(var c in I.repeater_content)e(H('[name="merchant['+I.repeater_content[c].setting+']"]'));if(C(I.flexible_content))for(var l in I.flexible_content){l=H(".merchant-flexible-content-control[data-id="+I.flexible_content[l].setting+"]");e(l.find("input")),l.find(".customize-control-flexible-content-delete").on("click",r),l.on("merchant.sorted",r)}if(C(I.update))for(var f in I.update)e(H('[name="merchant['+I.update[f].setting+']"]'));for(var p=0,h=[".pcr-color-palette",".pcr-swatches button",".pcr-color-chooser",".pcr-color-opacity"];p<h.length;p++){var u=h[p];H(L).on("click",u,r)}}var j=function(e,t){var r,n=t.replacements[0],a=t.replacements[1],o=_createForOfIteratorHelper(n.entries());try{for(o.s();!(r=o.n()).done;){var i=_slicedToArray(r.value,2),s=i[0],c=i[1],l=a[s];if("string"==typeof l&&(e=e.replace(c,l)),"object"===_typeof(l))if(l.hasOwnProperty("conditions")){var f,p=H('[name="merchant['+l.setting+']"]');for(f in l.conditions)l.conditions.hasOwnProperty(f)&&p.val()===f&&("string"==typeof l.conditions[f]&&(e=e.replace(c,l.conditions[f])),"object"===_typeof(l.conditions[f]))&&(e=m(e,c,l.conditions[f]))}else e=m(e,c,l)}}catch(e){o.e(e)}finally{o.f()}return e},m=function(e,t,r){var n=H('input[name="merchant['+r.setting+']"]').val();return r.hasOwnProperty("format")&&(n=r.format.replace("{string}",n)),e.replace(t,n)};H(L).on("change",r)})})(jQuery,(window,document));
  • merchant/trunk/inc/class-merchant-loader.php

    r3343740 r3421339  
    5454         */
    5555        public function includes() {
     56
    5657            // Essential functions.
    5758            require_once MERCHANT_DIR . 'inc/functions.php';
     
    9495            require_once MERCHANT_DIR . 'inc/analytics/class-merchant-analytics-data-ajax.php';
    9596            require_once MERCHANT_DIR . 'inc/analytics/class-merchant-analytics-data-hooks.php';
     97
     98            // Usage Tracking.
     99            require_once MERCHANT_DIR . 'inc/usage-tracking/class-merchant-usage-tracking.php';
     100            require_once MERCHANT_DIR . 'inc/usage-tracking/class-merchant-send-usage-task.php';
     101
     102            /*
     103             * Action Scheduler requires a special loading procedure.
     104             * Load on plugins_loaded to ensure it's available before init.
     105             *
     106             * @since {VERSION}
     107             */
     108            add_action(
     109                'plugins_loaded',
     110                static function() {
     111                   
     112                    //Check if Action Scheduler is already loaded.
     113                    if ( function_exists( 'as_schedule_recurring_action' ) ) {
     114                        return;
     115                    }
     116
     117                    require_once MERCHANT_DIR . 'vendor/woocommerce/action-scheduler/action-scheduler.php';
     118                },
     119            );
    96120
    97121            // Modules (free and pro).
  • merchant/trunk/inc/compatibility/class-merchant-ohio-theme.php

    r3259457 r3421339  
    180180                    }
    181181                }
     182
     183                if ( Merchant_Modules::is_module_active( Merchant_Complementary_Products::MODULE_ID ) ) {
     184                    // Complementary products
     185                    add_action( 'woocommerce_ajax_added_to_cart', array( $this, 'complementary_products_support' ) );
     186                }
    182187            }
    183188        }
     
    204209                body .cart_item .product-total .variation p {
    205210                    margin: 0;
     211                }
     212                body.wp-theme-ohio .merchant-cart-offers .merchant-cart-offers-container{
     213                    position: static;
    206214                }
    207215            ';
     
    287295            return $css;
    288296        }
    289     }
     297
     298        /**
     299         * Get the variation ID from attributes for a variable product.
     300         *
     301         * @param int $product_id The variable product ID.
     302         * @param array $variation_data The selected variation attributes.
     303         *
     304         * @return int The variation ID or 0 if not found.
     305         */
     306        private function get_variation_id_from_attributes( $product_id, $variation_data ) {
     307            // Get the product object.
     308            $product = wc_get_product( $product_id );
     309            if ( ! $product || $product->get_type() !== 'variable' ) {
     310                return 0;
     311            }
     312
     313            // Ensure variation data keys are prefixed correctly.
     314            $formatted_variation_data = array();
     315            foreach ( $variation_data as $key => $value ) {
     316                // If the key doesn't start with 'attribute_', assume it's the attribute name and prefix it.
     317                $formatted_key                              = strpos( $key, 'attribute_' ) === 0 ? $key : 'attribute_' . sanitize_title( $key );
     318                $formatted_variation_data[ $formatted_key ] = sanitize_text_field( $value );
     319            }
     320
     321            // Get available variations for comparison (optional debugging).
     322            $available_variations = $product->get_available_variations();
     323            $data_store           = WC_Data_Store::load( 'product' );
     324            $variation_id         = $data_store->find_matching_product_variation( $product, $formatted_variation_data );
     325
     326            /**
     327             * Filter the variation ID found for a complementary product.
     328             *
     329             * @param int $variation_id The found variation ID (0 if not found).
     330             * @param int $product_id The variable product ID.
     331             * @param array $formatted_variation_data The formatted variation attributes.
     332             * @param array $available_variations The available variations for the product.
     333             *
     334             * @since 2.2.1
     335             */
     336            return apply_filters( 'merchant_ohio_complementary_products_variation_id',
     337                    (int) $variation_id,
     338                    $product_id,
     339                    $formatted_variation_data,
     340                    $available_variations
     341            );
     342        }
     343
     344        /**
     345         * Add support for complementary products module with Ohio theme custom add to cart action.
     346         *
     347         * @param int $cart_product_id The ID of the product added to cart.
     348         *
     349         * @return void
     350         * @throws Exception When the cart fails to add the product.
     351         */
     352        public function complementary_products_support( $cart_product_id ) {
     353            if ( ! $this->should_handle_complementary_products() ) {
     354                return;
     355            }
     356
     357            $request = $this->get_complementary_request_data();
     358            if ( ! $request ) {
     359                return;
     360            }
     361
     362            $cart      = WC()->cart;
     363            $cart_item = $this->find_parent_cart_item( $cart, $cart_product_id, $request['variation_id'] );
     364
     365            if ( ! $cart_item ) {
     366                return;
     367            }
     368
     369            $this->mark_parent_cart_item(
     370                    $cart,
     371                    $cart_item['key'],
     372                    $cart_item['data'],
     373                    $request['campaign_id']
     374            );
     375
     376            $this->add_complementary_products_to_cart(
     377                    $cart,
     378                    $cart_product_id,
     379                    $cart_item['key'],
     380                    $request['campaign_id'],
     381                    $request['products'],
     382                    $request['quantity']
     383            );
     384        }
     385
     386        /**
     387         * Check if complementary products logic should run.
     388         *
     389         * @return bool
     390         */
     391        private function should_handle_complementary_products() {
     392            if ( ! Merchant_Modules::is_module_active( Merchant_Complementary_Products::MODULE_ID ) ) {
     393                return false;
     394            }
     395
     396            if ( ! merchant_is_ohio_active() ) {
     397                return false;
     398            }
     399
     400            if ( empty( $_POST['complementary_offer_products'] ) || '[]' === $_POST['complementary_offer_products'] ) {
     401                return false;
     402            }
     403
     404            if (
     405                    ! isset( $_POST['complementary_offer_products_nonce'] )
     406                    || ! wp_verify_nonce(
     407                            sanitize_text_field( wp_unslash( $_POST['complementary_offer_products_nonce'] ) ),
     408                            'complementary_offer_products'
     409                    )
     410            ) {
     411                return false;
     412            }
     413
     414            return true;
     415        }
     416
     417        /**
     418         * Read and sanitize complementary products request data.
     419         *
     420         * We are ignoring nonce verification here because it is already verified in should_handle_complementary_products().
     421         *
     422         * @return array|null
     423         */
     424        private function get_complementary_request_data() {
     425            if ( ! isset( $_POST['complementary_offer_products'] ) ) { //phpcs:ignore WordPress.Security.NonceVerification.Missing
     426                return null;
     427            }
     428            //phpcs:ignore WordPress.Security.NonceVerification.Missing
     429            $complementary_products_json = sanitize_text_field( wp_unslash( $_POST['complementary_offer_products'] ) );
     430            $complementary_products      = json_decode( $complementary_products_json, true );
     431
     432            if ( ! is_array( $complementary_products ) || empty( $complementary_products ) ) {
     433                return null;
     434            }
     435
     436            //phpcs:ignore WordPress.Security.NonceVerification.Missing
     437            if ( ! isset( $_POST['complementary_offer_id'] ) ) {
     438                return null;
     439            }
     440
     441            //phpcs:ignore WordPress.Security.NonceVerification.Missing
     442            $quantity = isset( $_POST['quantity'] ) ? absint( wp_unslash( $_POST['quantity'] ) ) : 1;
     443
     444            //phpcs:ignore WordPress.Security.NonceVerification.Missing
     445            $variation_id = isset( $_POST['variation_id'] ) ? absint( wp_unslash( $_POST['variation_id'] ) ) : 0;
     446
     447            return array(
     448                    'products'     => $complementary_products,
     449                    //phpcs:ignore WordPress.Security.NonceVerification.Missing
     450                    'campaign_id'  => sanitize_text_field( wp_unslash( $_POST['complementary_offer_id'] ) ),
     451                    'quantity'     => $quantity,
     452                    'variation_id' => $variation_id,
     453            );
     454        }
     455
     456        /**
     457         * Find the parent cart item (main product) in the cart.
     458         *
     459         * @param WC_Cart $cart Cart instance.
     460         * @param int $product_id Product ID added to cart.
     461         * @param int $variation_id Variation ID (if any).
     462         *
     463         * @return array|null {
     464         * @type string $key
     465         * @type array $data
     466         * }
     467         */
     468        private function find_parent_cart_item( WC_Cart $cart, $product_id, $variation_id ) {
     469            $cart_items = $cart->get_cart();
     470
     471            foreach ( $cart_items as $key => $cart_item ) {
     472                if ( $variation_id && isset( $cart_item['variation_id'] ) && (int) $cart_item['variation_id'] === (int) $variation_id ) {
     473                    return array(
     474                            'key'  => $key,
     475                            'data' => $cart_item,
     476                    );
     477                }
     478
     479                if ( ! $variation_id && isset( $cart_item['product_id'] ) && (int) $cart_item['product_id'] === (int) $product_id ) {
     480                    return array(
     481                            'key'  => $key,
     482                            'data' => $cart_item,
     483                    );
     484                }
     485            }
     486
     487            return null;
     488        }
     489
     490        /**
     491         * Mark the parent cart item with complementary metadata.
     492         *
     493         * @param WC_Cart $cart Cart instance.
     494         * @param string $cart_item_key Cart item key.
     495         * @param array $cart_item_data Existing cart item data.
     496         * @param string $campaign_id Campaign/offer ID.
     497         *
     498         * @return void
     499         */
     500        private function mark_parent_cart_item( WC_Cart $cart, $cart_item_key, array $cart_item_data, $campaign_id ) {
     501            $cart_item_data['is_complementary_parent'] = true;
     502            $cart_item_data['merchant_added_via']      = 'complementary_products';
     503            $cart_item_data['merchant_module_id']      = Merchant_Complementary_Products::MODULE_ID;
     504            $cart_item_data['complementary_offer_id']  = $campaign_id;
     505
     506            $cart->cart_contents[ $cart_item_key ] = array_merge( $cart->cart_contents[ $cart_item_key ], $cart_item_data );
     507        }
     508
     509        /**
     510         * Add all complementary products to the cart.
     511         *
     512         * @param WC_Cart $cart
     513         * @param int $main_product_id
     514         * @param string $parent_cart_item_key
     515         * @param string $campaign_id
     516         * @param array $complementary_products
     517         * @param int $quantity
     518         *
     519         * @return void
     520         */
     521        private function add_complementary_products_to_cart(
     522                WC_Cart $cart,
     523                $main_product_id,
     524                $parent_cart_item_key,
     525                $campaign_id,
     526                $complementary_products,
     527                $quantity
     528        ) {
     529            foreach ( $complementary_products as $comp_product ) {
     530                $this->add_single_complementary_product(
     531                        $cart,
     532                        $main_product_id,
     533                        $parent_cart_item_key,
     534                        $campaign_id,
     535                        $comp_product,
     536                        $quantity
     537                );
     538            }
     539        }
     540
     541        /**
     542         * Add a single complementary product to the cart.
     543         *
     544         * @param WC_Cart $cart
     545         * @param int $main_product_id
     546         * @param string $parent_cart_item_key
     547         * @param string $campaign_id
     548         * @param array $comp_product
     549         * @param int $quantity
     550         *
     551         * @return void
     552         */
     553        private function add_single_complementary_product(
     554                WC_Cart $cart,
     555                $main_product_id,
     556                $parent_cart_item_key,
     557                $campaign_id,
     558                array $comp_product,
     559                $quantity
     560        ) {
     561            $comp_product_id     = absint( $comp_product['product_id'] );
     562            $comp_product_object = wc_get_product( $comp_product_id );
     563
     564            if ( ! $comp_product_object ) {
     565                wc_add_notice(
     566                        sprintf(
     567                                /* translators: %s: Product ID */
     568                                __( 'Complementary product with ID "%s" does not exist.', 'merchant' ),
     569                                $comp_product_id
     570                        ),
     571                        'error'
     572                );
     573
     574                return;
     575            }
     576
     577            $product_type   = sanitize_text_field( $comp_product['product_type'] );
     578            $variation_data = $this->sanitize_variation_data(
     579                    isset( $comp_product['variation_data'] ) ? $comp_product['variation_data'] : array()
     580            );
     581
     582            $comp_variation_id = 0;
     583            if ( 'variable' === $product_type && ! empty( $variation_data ) ) {
     584                $comp_variation_id = $this->get_variation_id_from_attributes( $comp_product_id, $variation_data );
     585                if ( ! $comp_variation_id ) {
     586                    wc_add_notice(
     587                            sprintf(
     588                            /* translators: %s: Product name */
     589                                    __( 'Invalid variation selected for complementary product "%s".', 'merchant' ),
     590                                    $comp_product_object->get_name()
     591                            ),
     592                            'error'
     593                    );
     594
     595                    return;
     596                }
     597            }
     598
     599            $comp_cart_item_data = array(
     600                    'complementary_main_product' => $main_product_id,
     601                    'complementary_parent'       => $parent_cart_item_key,
     602                    'complementary_offer_id'     => $campaign_id,
     603                    'merchant_added_via'         => 'complementary_products',
     604                    'merchant_module_id'         => Merchant_Complementary_Products::MODULE_ID,
     605                    'is_complementary'           => true,
     606            );
     607
     608            $added_to_cart = $cart->add_to_cart(
     609                    $comp_product_id,
     610                    $quantity,
     611                    $comp_variation_id,
     612                    $variation_data,
     613                    $comp_cart_item_data
     614            );
     615
     616            if ( ! $added_to_cart ) {
     617                wc_add_notice(
     618                        sprintf(
     619                        /* translators: %s: Product name */
     620                                __( 'Failed to add complementary product "%s" to the cart.', 'merchant' ),
     621                                $comp_product_object->get_name()
     622                        ),
     623                        'error'
     624                );
     625            }
     626        }
     627
     628        /**
     629         * Sanitize variation data array.
     630         *
     631         * @param array $variation_data
     632         *
     633         * @return array
     634         */
     635        private function sanitize_variation_data( array $variation_data ) {
     636            $sanitized = array();
     637
     638            foreach ( $variation_data as $key => $value ) {
     639                $sanitized_key               = sanitize_key( $key );
     640                $sanitized_value             = map_deep( $value, 'sanitize_text_field' );
     641                $sanitized[ $sanitized_key ] = $sanitized_value;
     642            }
     643
     644            return $sanitized;
     645        }
     646    }
    290647
    291648    add_action( 'init', function() {
  • merchant/trunk/inc/modules/buy-x-get-y/admin/options.php

    r3379075 r3421339  
    288288                            ),
    289289                        ),
    290 
    291 
    292 
    293 
    294 
    295290                        array(
    296291                            'id'      => 'min_quantity',
    297292                            'type'    => 'number',
    298                             'min'     => 0,
     293                            'min'     => 1,
    299294                            'step'    => 1,
    300295                            'title'   => esc_html__( 'Quantity', 'merchant' ),
     
    318313                        ),
    319314                        array(
     315                            'id'      => 'quantity_mode',
     316                            'type'    => 'select',
     317                            'title'   => esc_html__( 'Gift quantity', 'merchant' ),
     318                            'desc'    => esc_html__( 'Choose the quantity of the gift product.', 'merchant' ),
     319                            'options' => array(
     320                                'one_product' => esc_html__( 'The gift is always a single product', 'merchant' ),
     321                                'matches_x'   => esc_html__( 'Gift quantity matches the purchased product quantity', 'merchant' ),
     322                                'custom'      => esc_html__( 'Custom quantity', 'merchant' ),
     323                            ),
     324                            'default' => 'custom',
     325                        ),
     326                        array(
    320327                            'id'      => 'quantity',
    321328                            'type'    => 'number',
    322                             'min'     => 0,
     329                            'min'     => 1,
    323330                            'step'    => 1,
    324331                            'title'   => esc_html__( 'Quantity', 'merchant' ),
    325332                            'default' => 3,
     333                            'conditions' => array(
     334                                'relation' => 'AND',
     335                                'terms'    => array(
     336                                    array(
     337                                        'field'    => 'quantity_mode',
     338                                        'operator' => '===',
     339                                        'value'    => 'custom',
     340                                    ),
     341                                ),
     342                            ),
    326343                        ),
    327344                        array(
  • merchant/trunk/inc/modules/free-shipping-progress-bar/class-free-shipping-progress-bar.php

    r3232601 r3421339  
    3939     */
    4040    public function __construct() {
     41        // WooCommerce only.
     42        $this->wc_only = true;
     43
     44        // Module id.
     45        $this->module_id = self::MODULE_ID;
     46
    4147        parent::__construct();
    4248
    4349        // Module section.
    4450        $this->module_section = 'boost-revenue';
    45 
    46         // Module id.
    47         $this->module_id = self::MODULE_ID;
    4851
    4952        // Module default settings.
     
    9194                'merchantFreeShippingProgressBar',
    9295                array(
    93                     'amount'  => wc_price( 15 ),
     96                        'amount' => function_exists( 'wc_price' ) ? wc_price( 15 ) : '$15',
    9497                    'presets' => array(
    9598                        'custom'        => array(
     
    301304                    /* translators: %s: Amount. */
    302305                        __( 'You are %s away from free shipping.', 'merchant' ),
    303                         wc_price( 15 )
     306                            function_exists( 'wc_price' ) ? wc_price( 15 ) : '$15'
    304307                    ),
    305308                    merchant_kses_allowed_tags( array( 'bdi' ) )
  • merchant/trunk/languages/merchant.pot

    r3403526 r3421339  
    99"Language-Team: aThemes <[email protected]>\n"
    1010"Last-Translator: aThemes <[email protected]>\n"
    11 "POT-Creation-Date: 2025-11-26 15:45+0000\n"
     11"POT-Creation-Date: 2025-12-16 17:25+0000\n"
    1212"Report-Msgid-Bugs-To: https://athemes.com/contact/\n"
    1313"X-Poedit-Basepath: ..\n"
     
    1818"Plural-Forms: nplurals=2; plural=(n != 1);\n"
    1919
    20 #: admin/class-merchant-admin-loader.php:144, inc/class-merchant-loader.php:249, admin/classes/class-merchant-admin-menu.php:281, admin/classes/class-merchant-admin-menu.php:282, admin/classes/class-merchant-admin-menu.php:372, admin/classes/class-merchant-admin-menu.php:375, inc/modules/address-autocomplete/admin/options.php:27, inc/modules/agree-to-terms-checkbox/admin/options.php:28, inc/modules/auto-external-links/admin/options.php:16, inc/modules/buy-now/admin/options.php:14, inc/modules/cart-count-favicon/admin/options.php:16, inc/modules/cart-reserved-timer/admin/options.php:30, inc/modules/checkout/admin/options.php:27, inc/modules/clear-cart/admin/options.php:16, inc/modules/cookie-banner/admin/options.php:14, inc/modules/countdown-timer/admin/options.php:14, inc/modules/inactive-tab-message/admin/options.php:16, inc/modules/login-popup/admin/options.php:15, inc/modules/payment-logos/admin/options.php:33, inc/modules/product-audio/admin/options.php:15, inc/modules/product-brand-image/admin/options.php:15, inc/modules/product-labels/admin/options.php:44, inc/modules/product-navigation-links/admin/options.php:16, inc/modules/product-swatches/admin/options.php:17, inc/modules/product-video/admin/options.php:15, inc/modules/quick-social-links/admin/options.php:16, inc/modules/quick-view/admin/options.php:17, inc/modules/real-time-search/admin/options.php:14, inc/modules/reasons-to-buy/admin/options.php:14, inc/modules/recently-viewed-products/admin/options.php:15, inc/modules/size-chart/admin/options.php:15, inc/modules/spending-goal/admin/options.php:15, inc/modules/sticky-add-to-cart/admin/options.php:15, inc/modules/stock-scarcity/admin/options.php:16, inc/modules/trust-badges/admin/options.php:45
     20#: admin/class-merchant-admin-loader.php:144, inc/class-merchant-loader.php:273, admin/classes/class-merchant-admin-menu.php:281, admin/classes/class-merchant-admin-menu.php:282, admin/classes/class-merchant-admin-menu.php:372, admin/classes/class-merchant-admin-menu.php:375, inc/modules/address-autocomplete/admin/options.php:27, inc/modules/agree-to-terms-checkbox/admin/options.php:28, inc/modules/auto-external-links/admin/options.php:16, inc/modules/buy-now/admin/options.php:14, inc/modules/cart-count-favicon/admin/options.php:16, inc/modules/cart-reserved-timer/admin/options.php:30, inc/modules/checkout/admin/options.php:27, inc/modules/clear-cart/admin/options.php:16, inc/modules/cookie-banner/admin/options.php:14, inc/modules/countdown-timer/admin/options.php:14, inc/modules/inactive-tab-message/admin/options.php:16, inc/modules/login-popup/admin/options.php:15, inc/modules/payment-logos/admin/options.php:33, inc/modules/product-audio/admin/options.php:15, inc/modules/product-brand-image/admin/options.php:15, inc/modules/product-labels/admin/options.php:44, inc/modules/product-navigation-links/admin/options.php:16, inc/modules/product-swatches/admin/options.php:17, inc/modules/product-video/admin/options.php:15, inc/modules/quick-social-links/admin/options.php:16, inc/modules/quick-view/admin/options.php:17, inc/modules/real-time-search/admin/options.php:14, inc/modules/reasons-to-buy/admin/options.php:14, inc/modules/recently-viewed-products/admin/options.php:15, inc/modules/size-chart/admin/options.php:15, inc/modules/spending-goal/admin/options.php:15, inc/modules/sticky-add-to-cart/admin/options.php:15, inc/modules/stock-scarcity/admin/options.php:16, inc/modules/trust-badges/admin/options.php:45
    2121msgid "Settings"
    2222msgstr ""
    2323
    24 #: inc/class-merchant-loader.php:185
     24#: inc/class-merchant-loader.php:209
    2525msgid "View Merchant documentation"
    2626msgstr ""
    2727
    28 #: inc/class-merchant-loader.php:185
     28#: inc/class-merchant-loader.php:209
    2929msgid "Docs"
    3030msgstr ""
    3131
    32 #: inc/class-merchant-loader.php:189
     32#: inc/class-merchant-loader.php:213
    3333msgid "View Merchant plugin site"
    3434msgstr ""
    3535
    36 #: inc/class-merchant-loader.php:189
     36#: inc/class-merchant-loader.php:213
    3737msgid "Visit plugin site"
    3838msgstr ""
    3939
    40 #: inc/class-merchant-loader.php:192
     40#: inc/class-merchant-loader.php:216
    4141msgid "View Merchant changelog"
    4242msgstr ""
    4343
    44 #: inc/class-merchant-loader.php:192
     44#: inc/class-merchant-loader.php:216
    4545msgid "Changelog"
    4646msgstr ""
    4747
    48 #: inc/class-merchant-loader.php:232
     48#: inc/class-merchant-loader.php:256
    4949msgid "Upgrade to Merchant Pro"
    5050msgstr ""
    5151
    52 #: inc/class-merchant-loader.php:233
     52#: inc/class-merchant-loader.php:257
    5353msgid "Get Merchant Pro"
    5454msgstr ""
    5555
    56 #: inc/class-merchant-loader.php:248
     56#: inc/class-merchant-loader.php:272
    5757msgid "Go to Merchant Settings page"
    5858msgstr ""
    5959
    60 #: inc/class-merchant-loader.php:385
     60#: inc/class-merchant-loader.php:409
    6161msgid "Copied!"
    6262msgstr ""
     
    15991599msgstr ""
    16001600
     1601#. translators: %s: Product ID
     1602#: inc/compatibility/class-merchant-ohio-theme.php:568
     1603msgid "Complementary product with ID \"%s\" does not exist."
     1604msgstr ""
     1605
     1606#. translators: %s: Product name
     1607#: inc/compatibility/class-merchant-ohio-theme.php:589
     1608msgid "Invalid variation selected for complementary product \"%s\"."
     1609msgstr ""
     1610
     1611#. translators: %s: Product name
     1612#: inc/compatibility/class-merchant-ohio-theme.php:620
     1613msgid "Failed to add complementary product \"%s\" to the cart."
     1614msgstr ""
     1615
    16011616#. translators: %s: module id
    16021617#: inc/modules/class-add-module.php:259
     
    16041619msgstr ""
    16051620
     1621#: inc/usage-tracking/class-merchant-usage-tracking.php:125
     1622msgid "Improve Merchant"
     1623msgstr ""
     1624
     1625#: inc/usage-tracking/class-merchant-usage-tracking.php:126
     1626msgid "By allowing us to track usage data, we can better help you, as we will know which WordPress configurations, themes, and plugins we should test. No sensitive data is collected."
     1627msgstr ""
     1628
    16061629#: inc/modules/add-to-cart-text/class-add-to-cart-text.php:46, inc/modules/add-to-cart-text/class-add-to-cart-text.php:47, inc/modules/add-to-cart-text/class-add-to-cart-text.php:49, inc/modules/countdown-timer/class-countdown-timer.php:225, inc/modules/free-gifts/class-free-gifts.php:261, templates/modules/frequently-bought-together/single-product.php:151, templates/modules/volume-discounts/admin-preview-tiered-radio.php:190, templates/modules/volume-discounts/single-product-radio.php:261, templates/modules/volume-discounts/single-product.php:242, inc/modules/add-to-cart-text/admin/options.php:22, inc/modules/add-to-cart-text/admin/options.php:46, inc/modules/add-to-cart-text/admin/options.php:86, inc/modules/complementary-products/admin/options.php:537, inc/modules/complementary-products/admin/options.php:661, inc/modules/frequently-bought-together/admin/options.php:607, inc/modules/frequently-bought-together/admin/options.php:705, inc/modules/frequently-bought-together/admin/options.php:838
    16071630msgid "Add to cart"
     
    16121635msgstr ""
    16131636
    1614 #: inc/modules/add-to-cart-text/class-add-to-cart-text.php:52, templates/modules/buy-x-get-y/single-product.php:203, inc/modules/add-to-cart-text/admin/options.php:106
     1637#: inc/modules/add-to-cart-text/class-add-to-cart-text.php:52, templates/modules/buy-x-get-y/single-product.php:215, inc/modules/add-to-cart-text/admin/options.php:106
    16151638msgid "Out of stock"
    16161639msgstr ""
     
    18041827msgstr ""
    18051828
    1806 #: inc/modules/animated-add-to-cart/class-animated-add-to-cart.php:185, inc/modules/buy-x-get-y/class-buy-x-get-y.php:253, inc/modules/frequently-bought-together/class-frequently-bought-together.php:219, inc/modules/quick-view/class-quick-view.php:386, inc/modules/volume-discounts/class-volume-discounts.php:373, templates/modules/buy-x-get-y/single-product.php:238, inc/modules/buy-x-get-y/admin/options.php:549, inc/modules/buy-x-get-y/admin/options.php:678, inc/modules/buy-x-get-y/admin/options.php:740, inc/modules/buy-x-get-y/admin/options.php:803, inc/modules/complementary-products/admin/options.php:599, inc/modules/frequently-bought-together/admin/options.php:759, inc/modules/volume-discounts/admin/options.php:717, inc/modules/volume-discounts/admin/options.php:781, inc/modules/volume-discounts/admin/options.php:853, templates/modules/complementary-products/admin-preview/cart.php:36
     1829#: inc/modules/animated-add-to-cart/class-animated-add-to-cart.php:185, inc/modules/buy-x-get-y/class-buy-x-get-y.php:253, inc/modules/frequently-bought-together/class-frequently-bought-together.php:219, inc/modules/quick-view/class-quick-view.php:386, inc/modules/volume-discounts/class-volume-discounts.php:373, templates/modules/buy-x-get-y/single-product.php:250, inc/modules/buy-x-get-y/admin/options.php:566, inc/modules/buy-x-get-y/admin/options.php:695, inc/modules/buy-x-get-y/admin/options.php:757, inc/modules/buy-x-get-y/admin/options.php:820, inc/modules/complementary-products/admin/options.php:599, inc/modules/frequently-bought-together/admin/options.php:759, inc/modules/volume-discounts/admin/options.php:717, inc/modules/volume-discounts/admin/options.php:781, inc/modules/volume-discounts/admin/options.php:853, templates/modules/complementary-products/admin-preview/cart.php:36
    18071830msgid "Add To Cart"
    18081831msgstr ""
     
    18521875msgstr ""
    18531876
    1854 #: inc/modules/buy-x-get-y/class-buy-x-get-y.php:252, inc/modules/buy-x-get-y/class-buy-x-get-y.php:297, inc/modules/buy-x-get-y/class-buy-x-get-y.php:336, inc/modules/frequently-bought-together/class-frequently-bought-together.php:259, inc/modules/frequently-bought-together/class-frequently-bought-together.php:301, inc/modules/volume-discounts/class-volume-discounts.php:300, inc/modules/volume-discounts/class-volume-discounts.php:337, inc/modules/buy-x-get-y/admin/options.php:662, inc/modules/buy-x-get-y/admin/options.php:725, inc/modules/buy-x-get-y/admin/options.php:787
     1877#: inc/modules/buy-x-get-y/class-buy-x-get-y.php:252, inc/modules/buy-x-get-y/class-buy-x-get-y.php:297, inc/modules/buy-x-get-y/class-buy-x-get-y.php:336, inc/modules/frequently-bought-together/class-frequently-bought-together.php:259, inc/modules/frequently-bought-together/class-frequently-bought-together.php:301, inc/modules/volume-discounts/class-volume-discounts.php:300, inc/modules/volume-discounts/class-volume-discounts.php:337, inc/modules/buy-x-get-y/admin/options.php:679, inc/modules/buy-x-get-y/admin/options.php:742, inc/modules/buy-x-get-y/admin/options.php:804
    18551878msgid "with {discount} off"
    18561879msgstr ""
     
    19401963msgstr ""
    19411964
    1942 #: inc/modules/clear-cart/class-clear-cart.php:238, inc/modules/buy-x-get-y/admin/options.php:300, inc/modules/buy-x-get-y/admin/options.php:324, inc/modules/volume-discounts/admin/options.php:349
     1965#: inc/modules/clear-cart/class-clear-cart.php:238, inc/modules/buy-x-get-y/admin/options.php:295, inc/modules/buy-x-get-y/admin/options.php:331, inc/modules/volume-discounts/admin/options.php:349
    19431966msgid "Quantity"
    19441967msgstr ""
     
    20802103msgstr ""
    20812104
    2082 #: inc/modules/free-shipping-progress-bar/class-free-shipping-progress-bar.php:271
     2105#: inc/modules/free-shipping-progress-bar/class-free-shipping-progress-bar.php:274
    20832106msgid "You need to setup free shipping rules with a minimum order value, to do that go to WooCommerce > Settings > Shipping menu in the left sidebar of your WordPress admin area and configure your free shipping method."
    20842107msgstr ""
    20852108
    2086 #: inc/modules/free-shipping-progress-bar/class-free-shipping-progress-bar.php:278
     2109#: inc/modules/free-shipping-progress-bar/class-free-shipping-progress-bar.php:281
    20872110msgid "Add Shipping"
    20882111msgstr ""
    20892112
    20902113#. translators: %s: Amount.
    2091 #: inc/modules/free-shipping-progress-bar/class-free-shipping-progress-bar.php:302
     2114#: inc/modules/free-shipping-progress-bar/class-free-shipping-progress-bar.php:305
    20922115msgid "You are %s away from free shipping."
    20932116msgstr ""
     
    28732896msgstr ""
    28742897
    2875 #: templates/modules/buy-x-get-y/single-product.php:78, inc/modules/buy-x-get-y/admin/options.php:509
     2898#: templates/modules/buy-x-get-y/single-product.php:78, inc/modules/buy-x-get-y/admin/options.php:526
    28762899msgid "Buy One Get One"
    28772900msgstr ""
     
    28832906
    28842907#. translators: 1. quantity 2. discount value
    2885 #: templates/modules/buy-x-get-y/single-product.php:148, templates/modules/added-to-cart-popup/common/buy-x-get-y.php:116
     2908#: templates/modules/buy-x-get-y/single-product.php:157, templates/modules/added-to-cart-popup/common/buy-x-get-y.php:116
    28862909msgid "Get %1$s with %2$s off"
    28872910msgstr ""
    28882911
    28892912#. translators: 1. Attribute name
    2890 #: templates/modules/buy-x-get-y/single-product.php:224, templates/modules/frequently-bought-together/single-product.php:87, templates/modules/volume-discounts/single-product-radio.php:240, templates/modules/volume-discounts/single-product.php:221
     2913#: templates/modules/buy-x-get-y/single-product.php:236, templates/modules/frequently-bought-together/single-product.php:87, templates/modules/volume-discounts/single-product-radio.php:240, templates/modules/volume-discounts/single-product.php:221
    28912914msgid "Select %s"
    28922915msgstr ""
     
    31163139msgstr ""
    31173140
    3118 #: inc/modules/added-to-cart-popup/admin/options.php:262, inc/modules/buy-x-get-y/admin/options.php:417, inc/modules/complementary-products/admin/options.php:392, inc/modules/free-gifts/admin/options.php:340, inc/modules/free-shipping-progress-bar/admin/options.php:135, inc/modules/frequently-bought-together/admin/options.php:452, inc/modules/pre-orders/admin/options.php:397, inc/modules/side-cart/admin/options.php:244, inc/modules/spending-goal/admin/options.php:194, inc/modules/storewide-sale/admin/options.php:356, inc/modules/volume-discounts/admin/options.php:428
     3141#: inc/modules/added-to-cart-popup/admin/options.php:262, inc/modules/buy-x-get-y/admin/options.php:434, inc/modules/complementary-products/admin/options.php:392, inc/modules/free-gifts/admin/options.php:340, inc/modules/free-shipping-progress-bar/admin/options.php:135, inc/modules/frequently-bought-together/admin/options.php:452, inc/modules/pre-orders/admin/options.php:397, inc/modules/side-cart/admin/options.php:244, inc/modules/spending-goal/admin/options.php:194, inc/modules/storewide-sale/admin/options.php:356, inc/modules/volume-discounts/admin/options.php:428
    31193142msgid "Exclusion List"
    31203143msgstr ""
     
    35723595msgstr ""
    35733596
    3574 #: inc/modules/advanced-reviews/admin/options.php:466, inc/modules/advanced-reviews/admin/options.php:590, inc/modules/advanced-reviews/admin/options.php:699, inc/modules/advanced-reviews/admin/options.php:786, inc/modules/buy-x-get-y/admin/options.php:517, inc/modules/buy-x-get-y/admin/options.php:533, inc/modules/buy-x-get-y/admin/options.php:647, inc/modules/buy-x-get-y/admin/options.php:663, inc/modules/buy-x-get-y/admin/options.php:711, inc/modules/buy-x-get-y/admin/options.php:726, inc/modules/buy-x-get-y/admin/options.php:760, inc/modules/buy-x-get-y/admin/options.php:788, inc/modules/free-shipping-progress-bar/admin/options.php:40, inc/modules/free-shipping-progress-bar/admin/options.php:56, inc/modules/frequently-bought-together/admin/options.php:577, inc/modules/frequently-bought-together/admin/options.php:675, inc/modules/frequently-bought-together/admin/options.php:744, inc/modules/frequently-bought-together/admin/options.php:778, inc/modules/frequently-bought-together/admin/options.php:806, inc/modules/frequently-bought-together/admin/options.php:823, inc/modules/login-popup/admin/options.php:47, inc/modules/product-labels/admin/options.php:103, inc/modules/volume-discounts/admin/options.php:529, inc/modules/volume-discounts/admin/options.php:543, inc/modules/volume-discounts/admin/options.php:701, inc/modules/volume-discounts/admin/options.php:750, inc/modules/volume-discounts/admin/options.php:766, inc/modules/volume-discounts/admin/options.php:801, inc/modules/volume-discounts/admin/options.php:830
     3597#: inc/modules/advanced-reviews/admin/options.php:466, inc/modules/advanced-reviews/admin/options.php:590, inc/modules/advanced-reviews/admin/options.php:699, inc/modules/advanced-reviews/admin/options.php:786, inc/modules/buy-x-get-y/admin/options.php:534, inc/modules/buy-x-get-y/admin/options.php:550, inc/modules/buy-x-get-y/admin/options.php:664, inc/modules/buy-x-get-y/admin/options.php:680, inc/modules/buy-x-get-y/admin/options.php:728, inc/modules/buy-x-get-y/admin/options.php:743, inc/modules/buy-x-get-y/admin/options.php:777, inc/modules/buy-x-get-y/admin/options.php:805, inc/modules/free-shipping-progress-bar/admin/options.php:40, inc/modules/free-shipping-progress-bar/admin/options.php:56, inc/modules/frequently-bought-together/admin/options.php:577, inc/modules/frequently-bought-together/admin/options.php:675, inc/modules/frequently-bought-together/admin/options.php:744, inc/modules/frequently-bought-together/admin/options.php:778, inc/modules/frequently-bought-together/admin/options.php:806, inc/modules/frequently-bought-together/admin/options.php:823, inc/modules/login-popup/admin/options.php:47, inc/modules/product-labels/admin/options.php:103, inc/modules/volume-discounts/admin/options.php:529, inc/modules/volume-discounts/admin/options.php:543, inc/modules/volume-discounts/admin/options.php:701, inc/modules/volume-discounts/admin/options.php:750, inc/modules/volume-discounts/admin/options.php:766, inc/modules/volume-discounts/admin/options.php:801, inc/modules/volume-discounts/admin/options.php:830
    35753598msgid "You can use these codes in the content."
    35763599msgstr ""
     
    37623785msgstr ""
    37633786
    3764 #: inc/modules/advanced-reviews/admin/options.php:986, inc/modules/buy-x-get-y/admin/options.php:695, inc/modules/buy-x-get-y/admin/options.php:774, inc/modules/clear-cart/admin/options.php:101, inc/modules/complementary-products/admin/options.php:555, inc/modules/complementary-products/admin/options.php:617, inc/modules/free-shipping-progress-bar/admin/options.php:207, inc/modules/frequently-bought-together/admin/options.php:722, inc/modules/frequently-bought-together/admin/options.php:792, inc/modules/pre-orders/admin/options.php:480, inc/modules/product-navigation-links/admin/options.php:45, inc/modules/volume-discounts/admin/options.php:734, inc/modules/volume-discounts/admin/options.php:816
     3787#: inc/modules/advanced-reviews/admin/options.php:986, inc/modules/buy-x-get-y/admin/options.php:712, inc/modules/buy-x-get-y/admin/options.php:791, inc/modules/clear-cart/admin/options.php:101, inc/modules/complementary-products/admin/options.php:555, inc/modules/complementary-products/admin/options.php:617, inc/modules/free-shipping-progress-bar/admin/options.php:207, inc/modules/frequently-bought-together/admin/options.php:722, inc/modules/frequently-bought-together/admin/options.php:792, inc/modules/pre-orders/admin/options.php:480, inc/modules/product-navigation-links/admin/options.php:45, inc/modules/volume-discounts/admin/options.php:734, inc/modules/volume-discounts/admin/options.php:816
    37653788msgid "Placement"
    37663789msgstr ""
     
    38553878msgstr ""
    38563879
    3857 #: inc/modules/advanced-reviews/admin/options.php:1206, inc/modules/advanced-reviews/admin/options.php:1211, inc/modules/buy-x-get-y/admin/options.php:824, inc/modules/buy-x-get-y/admin/options.php:829, inc/modules/cart-reserved-timer/admin/options.php:103, inc/modules/cart-reserved-timer/admin/options.php:108, inc/modules/clear-cart/admin/options.php:315, inc/modules/clear-cart/admin/options.php:320, inc/modules/complementary-products/admin/options.php:814, inc/modules/complementary-products/admin/options.php:819, inc/modules/countdown-timer/admin/options.php:336, inc/modules/countdown-timer/admin/options.php:341, inc/modules/frequently-bought-together/admin/options.php:861, inc/modules/frequently-bought-together/admin/options.php:866, inc/modules/payment-logos/admin/options.php:125, inc/modules/payment-logos/admin/options.php:130, inc/modules/product-audio/admin/options.php:34, inc/modules/product-audio/admin/options.php:39, inc/modules/product-brand-image/admin/options.php:82, inc/modules/product-brand-image/admin/options.php:87, inc/modules/product-bundles/admin/options.php:158, inc/modules/product-bundles/admin/options.php:163, inc/modules/product-labels/admin/options.php:541, inc/modules/product-labels/admin/options.php:546, inc/modules/product-navigation-links/admin/options.php:144, inc/modules/product-navigation-links/admin/options.php:149, inc/modules/product-video/admin/options.php:52, inc/modules/product-video/admin/options.php:57, inc/modules/quick-social-links/admin/options.php:419, inc/modules/quick-social-links/admin/options.php:424, inc/modules/quick-view/admin/options.php:445, inc/modules/quick-view/admin/options.php:450, inc/modules/real-time-search/admin/options.php:112, inc/modules/real-time-search/admin/options.php:117, inc/modules/reasons-to-buy/admin/options.php:374, inc/modules/reasons-to-buy/admin/options.php:379, inc/modules/recently-viewed-products/admin/options.php:215, inc/modules/recently-viewed-products/admin/options.php:220, inc/modules/size-chart/admin/options.php:215, inc/modules/size-chart/admin/options.php:220, inc/modules/stock-scarcity/admin/options.php:188, inc/modules/stock-scarcity/admin/options.php:193, inc/modules/trust-badges/admin/options.php:144, inc/modules/trust-badges/admin/options.php:149, inc/modules/volume-discounts/admin/options.php:901, inc/modules/volume-discounts/admin/options.php:906, inc/modules/wait-list/admin/options.php:150, inc/modules/wait-list/admin/options.php:155, inc/modules/wishlist/admin/options.php:488, inc/modules/wishlist/admin/options.php:493
     3880#: inc/modules/advanced-reviews/admin/options.php:1206, inc/modules/advanced-reviews/admin/options.php:1211, inc/modules/buy-x-get-y/admin/options.php:841, inc/modules/buy-x-get-y/admin/options.php:846, inc/modules/cart-reserved-timer/admin/options.php:103, inc/modules/cart-reserved-timer/admin/options.php:108, inc/modules/clear-cart/admin/options.php:315, inc/modules/clear-cart/admin/options.php:320, inc/modules/complementary-products/admin/options.php:814, inc/modules/complementary-products/admin/options.php:819, inc/modules/countdown-timer/admin/options.php:336, inc/modules/countdown-timer/admin/options.php:341, inc/modules/frequently-bought-together/admin/options.php:861, inc/modules/frequently-bought-together/admin/options.php:866, inc/modules/payment-logos/admin/options.php:125, inc/modules/payment-logos/admin/options.php:130, inc/modules/product-audio/admin/options.php:34, inc/modules/product-audio/admin/options.php:39, inc/modules/product-brand-image/admin/options.php:82, inc/modules/product-brand-image/admin/options.php:87, inc/modules/product-bundles/admin/options.php:158, inc/modules/product-bundles/admin/options.php:163, inc/modules/product-labels/admin/options.php:541, inc/modules/product-labels/admin/options.php:546, inc/modules/product-navigation-links/admin/options.php:144, inc/modules/product-navigation-links/admin/options.php:149, inc/modules/product-video/admin/options.php:52, inc/modules/product-video/admin/options.php:57, inc/modules/quick-social-links/admin/options.php:419, inc/modules/quick-social-links/admin/options.php:424, inc/modules/quick-view/admin/options.php:445, inc/modules/quick-view/admin/options.php:450, inc/modules/real-time-search/admin/options.php:112, inc/modules/real-time-search/admin/options.php:117, inc/modules/reasons-to-buy/admin/options.php:374, inc/modules/reasons-to-buy/admin/options.php:379, inc/modules/recently-viewed-products/admin/options.php:215, inc/modules/recently-viewed-products/admin/options.php:220, inc/modules/size-chart/admin/options.php:215, inc/modules/size-chart/admin/options.php:220, inc/modules/stock-scarcity/admin/options.php:188, inc/modules/stock-scarcity/admin/options.php:193, inc/modules/trust-badges/admin/options.php:144, inc/modules/trust-badges/admin/options.php:149, inc/modules/volume-discounts/admin/options.php:901, inc/modules/volume-discounts/admin/options.php:906, inc/modules/wait-list/admin/options.php:150, inc/modules/wait-list/admin/options.php:155, inc/modules/wishlist/admin/options.php:488, inc/modules/wishlist/admin/options.php:493
    38583881msgid "Use shortcode"
    38593882msgstr ""
    38603883
    3861 #: inc/modules/advanced-reviews/admin/options.php:1217, inc/modules/buy-x-get-y/admin/options.php:835, inc/modules/cart-reserved-timer/admin/options.php:114, inc/modules/complementary-products/admin/options.php:825, inc/modules/countdown-timer/admin/options.php:347, inc/modules/frequently-bought-together/admin/options.php:872, inc/modules/payment-logos/admin/options.php:136, inc/modules/product-audio/admin/options.php:45, inc/modules/product-brand-image/admin/options.php:93, inc/modules/product-bundles/admin/options.php:169, inc/modules/product-labels/admin/options.php:552, inc/modules/product-navigation-links/admin/options.php:155, inc/modules/product-video/admin/options.php:63, inc/modules/reasons-to-buy/admin/options.php:385, inc/modules/recently-viewed-products/admin/options.php:226, inc/modules/size-chart/admin/options.php:226, inc/modules/stock-scarcity/admin/options.php:199, inc/modules/trust-badges/admin/options.php:155, inc/modules/volume-discounts/admin/options.php:912, inc/modules/wait-list/admin/options.php:161, inc/modules/wishlist/admin/options.php:499
     3884#: inc/modules/advanced-reviews/admin/options.php:1217, inc/modules/buy-x-get-y/admin/options.php:852, inc/modules/cart-reserved-timer/admin/options.php:114, inc/modules/complementary-products/admin/options.php:825, inc/modules/countdown-timer/admin/options.php:347, inc/modules/frequently-bought-together/admin/options.php:872, inc/modules/payment-logos/admin/options.php:136, inc/modules/product-audio/admin/options.php:45, inc/modules/product-brand-image/admin/options.php:93, inc/modules/product-bundles/admin/options.php:169, inc/modules/product-labels/admin/options.php:552, inc/modules/product-navigation-links/admin/options.php:155, inc/modules/product-video/admin/options.php:63, inc/modules/reasons-to-buy/admin/options.php:385, inc/modules/recently-viewed-products/admin/options.php:226, inc/modules/size-chart/admin/options.php:226, inc/modules/stock-scarcity/admin/options.php:199, inc/modules/trust-badges/admin/options.php:155, inc/modules/volume-discounts/admin/options.php:912, inc/modules/wait-list/admin/options.php:161, inc/modules/wishlist/admin/options.php:499
    38623885msgid "If you are using a page builder or a theme that supports shortcodes, then you can output the module using the shortcode above. This might be useful if, for example, you find that you want to control the position of the module output more precisely than with the module settings. Note that the shortcodes can only be used on single product pages."
    38633886msgstr ""
    38643887
    3865 #: inc/modules/advanced-reviews/admin/options.php:1223, inc/modules/buy-x-get-y/admin/options.php:841, inc/modules/cart-reserved-timer/admin/options.php:119, inc/modules/clear-cart/admin/options.php:333, inc/modules/complementary-products/admin/options.php:831, inc/modules/countdown-timer/admin/options.php:352, inc/modules/free-shipping-progress-bar/admin/options.php:595, inc/modules/free-shipping-progress-bar/admin/options.php:770, inc/modules/free-shipping-progress-bar/admin/options.php:879, inc/modules/frequently-bought-together/admin/options.php:878, inc/modules/payment-logos/admin/options.php:141, inc/modules/product-audio/admin/options.php:50, inc/modules/product-brand-image/admin/options.php:98, inc/modules/product-bundles/admin/options.php:175, inc/modules/product-labels/admin/options.php:557, inc/modules/product-navigation-links/admin/options.php:160, inc/modules/product-video/admin/options.php:68, inc/modules/quick-social-links/admin/options.php:435, inc/modules/quick-view/admin/options.php:461, inc/modules/real-time-search/admin/options.php:128, inc/modules/reasons-to-buy/admin/options.php:390, inc/modules/recently-viewed-products/admin/options.php:231, inc/modules/size-chart/admin/options.php:231, inc/modules/stock-scarcity/admin/options.php:207, inc/modules/trust-badges/admin/options.php:160, inc/modules/volume-discounts/admin/options.php:918, inc/modules/wait-list/admin/options.php:166, inc/modules/wishlist/admin/options.php:504
     3888#: inc/modules/advanced-reviews/admin/options.php:1223, inc/modules/buy-x-get-y/admin/options.php:858, inc/modules/cart-reserved-timer/admin/options.php:119, inc/modules/clear-cart/admin/options.php:333, inc/modules/complementary-products/admin/options.php:831, inc/modules/countdown-timer/admin/options.php:352, inc/modules/free-shipping-progress-bar/admin/options.php:595, inc/modules/free-shipping-progress-bar/admin/options.php:770, inc/modules/free-shipping-progress-bar/admin/options.php:879, inc/modules/frequently-bought-together/admin/options.php:878, inc/modules/payment-logos/admin/options.php:141, inc/modules/product-audio/admin/options.php:50, inc/modules/product-brand-image/admin/options.php:98, inc/modules/product-bundles/admin/options.php:175, inc/modules/product-labels/admin/options.php:557, inc/modules/product-navigation-links/admin/options.php:160, inc/modules/product-video/admin/options.php:68, inc/modules/quick-social-links/admin/options.php:435, inc/modules/quick-view/admin/options.php:461, inc/modules/real-time-search/admin/options.php:128, inc/modules/reasons-to-buy/admin/options.php:390, inc/modules/recently-viewed-products/admin/options.php:231, inc/modules/size-chart/admin/options.php:231, inc/modules/stock-scarcity/admin/options.php:207, inc/modules/trust-badges/admin/options.php:160, inc/modules/volume-discounts/admin/options.php:918, inc/modules/wait-list/admin/options.php:166, inc/modules/wishlist/admin/options.php:504
    38663889msgid "Shortcode text"
    38673890msgstr ""
     
    38993922msgstr ""
    39003923
    3901 #: inc/modules/buy-now/admin/options.php:21, inc/modules/buy-x-get-y/admin/options.php:548, inc/modules/buy-x-get-y/admin/options.php:677, inc/modules/buy-x-get-y/admin/options.php:739, inc/modules/buy-x-get-y/admin/options.php:802, inc/modules/complementary-products/admin/options.php:536, inc/modules/complementary-products/admin/options.php:598, inc/modules/complementary-products/admin/options.php:660, inc/modules/cookie-banner/admin/options.php:55, inc/modules/frequently-bought-together/admin/options.php:606, inc/modules/frequently-bought-together/admin/options.php:704, inc/modules/frequently-bought-together/admin/options.php:758, inc/modules/frequently-bought-together/admin/options.php:837, inc/modules/pre-orders/admin/options.php:466, inc/modules/quick-view/admin/options.php:36, inc/modules/side-cart/admin/options.php:436, inc/modules/volume-discounts/admin/options.php:716, inc/modules/volume-discounts/admin/options.php:780, inc/modules/volume-discounts/admin/options.php:852
     3924#: inc/modules/buy-now/admin/options.php:21, inc/modules/buy-x-get-y/admin/options.php:565, inc/modules/buy-x-get-y/admin/options.php:694, inc/modules/buy-x-get-y/admin/options.php:756, inc/modules/buy-x-get-y/admin/options.php:819, inc/modules/complementary-products/admin/options.php:536, inc/modules/complementary-products/admin/options.php:598, inc/modules/complementary-products/admin/options.php:660, inc/modules/cookie-banner/admin/options.php:55, inc/modules/frequently-bought-together/admin/options.php:606, inc/modules/frequently-bought-together/admin/options.php:704, inc/modules/frequently-bought-together/admin/options.php:758, inc/modules/frequently-bought-together/admin/options.php:837, inc/modules/pre-orders/admin/options.php:466, inc/modules/quick-view/admin/options.php:36, inc/modules/side-cart/admin/options.php:436, inc/modules/volume-discounts/admin/options.php:716, inc/modules/volume-discounts/admin/options.php:780, inc/modules/volume-discounts/admin/options.php:852
    39023925msgid "Button text"
    39033926msgstr ""
     
    39473970msgstr ""
    39483971
    3949 #: inc/modules/buy-now/admin/options.php:98, inc/modules/buy-x-get-y/admin/options.php:568, inc/modules/clear-cart/admin/options.php:301, inc/modules/payment-logos/admin/options.php:59, inc/modules/product-labels/admin/options.php:225, inc/modules/trust-badges/admin/options.php:71
     3972#: inc/modules/buy-now/admin/options.php:98, inc/modules/buy-x-get-y/admin/options.php:585, inc/modules/clear-cart/admin/options.php:301, inc/modules/payment-logos/admin/options.php:59, inc/modules/product-labels/admin/options.php:225, inc/modules/trust-badges/admin/options.php:71
    39503973msgid "Font size"
    39513974msgstr ""
     
    41514174msgstr ""
    41524175
    4153 #: inc/modules/buy-x-get-y/admin/options.php:301
     4176#: inc/modules/buy-x-get-y/admin/options.php:296
    41544177msgid "The minimum quantity that customers should purchase to get the offer"
    41554178msgstr ""
    41564179
    4157 #: inc/modules/buy-x-get-y/admin/options.php:307
     4180#: inc/modules/buy-x-get-y/admin/options.php:302
    41584181msgid "Customer Gets"
    41594182msgstr ""
    41604183
    4161 #: inc/modules/buy-x-get-y/admin/options.php:309
     4184#: inc/modules/buy-x-get-y/admin/options.php:304
    41624185msgid "Select the products that the customer will get when they purchase the minimum required quantity."
    41634186msgstr ""
    41644187
    4165 #: inc/modules/buy-x-get-y/admin/options.php:314, inc/modules/frequently-bought-together/admin/options.php:357
     4188#: inc/modules/buy-x-get-y/admin/options.php:309, inc/modules/frequently-bought-together/admin/options.php:357
    41664189msgid "Display the offer on all products in the bundle"
    41674190msgstr ""
    41684191
    4169 #: inc/modules/buy-x-get-y/admin/options.php:330, inc/modules/pre-orders/admin/options.php:294
     4192#: inc/modules/buy-x-get-y/admin/options.php:317
     4193msgid "Gift quantity"
     4194msgstr ""
     4195
     4196#: inc/modules/buy-x-get-y/admin/options.php:318
     4197msgid "Choose the quantity of the gift product."
     4198msgstr ""
     4199
     4200#: inc/modules/buy-x-get-y/admin/options.php:320
     4201msgid "The gift is always a single product"
     4202msgstr ""
     4203
     4204#: inc/modules/buy-x-get-y/admin/options.php:321
     4205msgid "Gift quantity matches the purchased product quantity"
     4206msgstr ""
     4207
     4208#: inc/modules/buy-x-get-y/admin/options.php:322
     4209msgid "Custom quantity"
     4210msgstr ""
     4211
     4212#: inc/modules/buy-x-get-y/admin/options.php:347, inc/modules/pre-orders/admin/options.php:294
    41704213msgid "Discount Type"
    41714214msgstr ""
    41724215
    4173 #: inc/modules/buy-x-get-y/admin/options.php:332
     4216#: inc/modules/buy-x-get-y/admin/options.php:349
    41744217msgid "Percentage Discount"
    41754218msgstr ""
    41764219
    4177 #: inc/modules/buy-x-get-y/admin/options.php:333
     4220#: inc/modules/buy-x-get-y/admin/options.php:350
    41784221msgid "Fixed Discount"
    41794222msgstr ""
    41804223
    4181 #: inc/modules/buy-x-get-y/admin/options.php:334
     4224#: inc/modules/buy-x-get-y/admin/options.php:351
    41824225msgid "Free shipping"
    41834226msgstr ""
    41844227
    4185 #: inc/modules/buy-x-get-y/admin/options.php:361, inc/modules/frequently-bought-together/admin/options.php:405, inc/modules/storewide-sale/admin/options.php:310, inc/modules/volume-discounts/admin/options.php:374
     4228#: inc/modules/buy-x-get-y/admin/options.php:378, inc/modules/frequently-bought-together/admin/options.php:405, inc/modules/storewide-sale/admin/options.php:310, inc/modules/volume-discounts/admin/options.php:374
    41864229msgid "Apply discount to"
    41874230msgstr ""
    41884231
    4189 #: inc/modules/buy-x-get-y/admin/options.php:363, inc/modules/frequently-bought-together/admin/options.php:407, inc/modules/storewide-sale/admin/options.php:312, inc/modules/volume-discounts/admin/options.php:376
     4232#: inc/modules/buy-x-get-y/admin/options.php:380, inc/modules/frequently-bought-together/admin/options.php:407, inc/modules/storewide-sale/admin/options.php:312, inc/modules/volume-discounts/admin/options.php:376
    41904233msgid "Regular Price"
    41914234msgstr ""
    41924235
    4193 #: inc/modules/buy-x-get-y/admin/options.php:364, inc/modules/frequently-bought-together/admin/options.php:408, inc/modules/product-bundles/admin/options.php:79, inc/modules/storewide-sale/admin/options.php:313, inc/modules/volume-discounts/admin/options.php:377
     4236#: inc/modules/buy-x-get-y/admin/options.php:381, inc/modules/frequently-bought-together/admin/options.php:408, inc/modules/product-bundles/admin/options.php:79, inc/modules/storewide-sale/admin/options.php:313, inc/modules/volume-discounts/admin/options.php:377
    41944237msgid "Sale Price"
    41954238msgstr ""
    41964239
    4197 #: inc/modules/buy-x-get-y/admin/options.php:382, inc/modules/complementary-products/admin/options.php:358, inc/modules/free-gifts/admin/options.php:305, inc/modules/free-shipping-progress-bar/admin/options.php:84, inc/modules/frequently-bought-together/admin/options.php:417, inc/modules/pre-orders/admin/options.php:362, inc/modules/spending-goal/admin/options.php:159, inc/modules/storewide-sale/admin/options.php:321, inc/modules/volume-discounts/admin/options.php:393
     4240#: inc/modules/buy-x-get-y/admin/options.php:399, inc/modules/complementary-products/admin/options.php:358, inc/modules/free-gifts/admin/options.php:305, inc/modules/free-shipping-progress-bar/admin/options.php:84, inc/modules/frequently-bought-together/admin/options.php:417, inc/modules/pre-orders/admin/options.php:362, inc/modules/spending-goal/admin/options.php:159, inc/modules/storewide-sale/admin/options.php:321, inc/modules/volume-discounts/admin/options.php:393
    41984241msgid "User Condition"
    41994242msgstr ""
    42004243
    4201 #: inc/modules/buy-x-get-y/admin/options.php:384, inc/modules/complementary-products/admin/options.php:360, inc/modules/free-gifts/admin/options.php:307, inc/modules/free-shipping-progress-bar/admin/options.php:86, inc/modules/frequently-bought-together/admin/options.php:419, inc/modules/pre-orders/admin/options.php:364, inc/modules/spending-goal/admin/options.php:161, inc/modules/storewide-sale/admin/options.php:323, inc/modules/volume-discounts/admin/options.php:395
     4244#: inc/modules/buy-x-get-y/admin/options.php:401, inc/modules/complementary-products/admin/options.php:360, inc/modules/free-gifts/admin/options.php:307, inc/modules/free-shipping-progress-bar/admin/options.php:86, inc/modules/frequently-bought-together/admin/options.php:419, inc/modules/pre-orders/admin/options.php:364, inc/modules/spending-goal/admin/options.php:161, inc/modules/storewide-sale/admin/options.php:323, inc/modules/volume-discounts/admin/options.php:395
    42024245msgid "All Users"
    42034246msgstr ""
    42044247
    4205 #: inc/modules/buy-x-get-y/admin/options.php:385, inc/modules/complementary-products/admin/options.php:361, inc/modules/free-gifts/admin/options.php:308, inc/modules/free-shipping-progress-bar/admin/options.php:87, inc/modules/frequently-bought-together/admin/options.php:420, inc/modules/pre-orders/admin/options.php:365, inc/modules/spending-goal/admin/options.php:162, inc/modules/storewide-sale/admin/options.php:324, inc/modules/volume-discounts/admin/options.php:396
     4248#: inc/modules/buy-x-get-y/admin/options.php:402, inc/modules/complementary-products/admin/options.php:361, inc/modules/free-gifts/admin/options.php:308, inc/modules/free-shipping-progress-bar/admin/options.php:87, inc/modules/frequently-bought-together/admin/options.php:420, inc/modules/pre-orders/admin/options.php:365, inc/modules/spending-goal/admin/options.php:162, inc/modules/storewide-sale/admin/options.php:324, inc/modules/volume-discounts/admin/options.php:396
    42064249msgid "Selected Users"
    42074250msgstr ""
    42084251
    4209 #: inc/modules/buy-x-get-y/admin/options.php:386, inc/modules/complementary-products/admin/options.php:362, inc/modules/free-gifts/admin/options.php:309, inc/modules/free-shipping-progress-bar/admin/options.php:88, inc/modules/frequently-bought-together/admin/options.php:421, inc/modules/pre-orders/admin/options.php:366, inc/modules/spending-goal/admin/options.php:163, inc/modules/storewide-sale/admin/options.php:325, inc/modules/volume-discounts/admin/options.php:397
     4252#: inc/modules/buy-x-get-y/admin/options.php:403, inc/modules/complementary-products/admin/options.php:362, inc/modules/free-gifts/admin/options.php:309, inc/modules/free-shipping-progress-bar/admin/options.php:88, inc/modules/frequently-bought-together/admin/options.php:421, inc/modules/pre-orders/admin/options.php:366, inc/modules/spending-goal/admin/options.php:163, inc/modules/storewide-sale/admin/options.php:325, inc/modules/volume-discounts/admin/options.php:397
    42104253msgid "Selected Roles"
    42114254msgstr ""
    42124255
    4213 #: inc/modules/buy-x-get-y/admin/options.php:394, inc/modules/complementary-products/admin/options.php:369, inc/modules/free-gifts/admin/options.php:317, inc/modules/free-shipping-progress-bar/admin/options.php:96, inc/modules/frequently-bought-together/admin/options.php:429, inc/modules/pre-orders/admin/options.php:374, inc/modules/quick-social-links/admin/options.php:304, inc/modules/spending-goal/admin/options.php:171, inc/modules/storewide-sale/admin/options.php:333, inc/modules/volume-discounts/admin/options.php:405
     4256#: inc/modules/buy-x-get-y/admin/options.php:411, inc/modules/complementary-products/admin/options.php:369, inc/modules/free-gifts/admin/options.php:317, inc/modules/free-shipping-progress-bar/admin/options.php:96, inc/modules/frequently-bought-together/admin/options.php:429, inc/modules/pre-orders/admin/options.php:374, inc/modules/quick-social-links/admin/options.php:304, inc/modules/spending-goal/admin/options.php:171, inc/modules/storewide-sale/admin/options.php:333, inc/modules/volume-discounts/admin/options.php:405
    42144257msgid "User Roles"
    42154258msgstr ""
    42164259
    4217 #: inc/modules/buy-x-get-y/admin/options.php:395, inc/modules/complementary-products/admin/options.php:370, inc/modules/free-gifts/admin/options.php:318, inc/modules/free-shipping-progress-bar/admin/options.php:97, inc/modules/frequently-bought-together/admin/options.php:430, inc/modules/spending-goal/admin/options.php:172, inc/modules/storewide-sale/admin/options.php:334, inc/modules/volume-discounts/admin/options.php:406
     4260#: inc/modules/buy-x-get-y/admin/options.php:412, inc/modules/complementary-products/admin/options.php:370, inc/modules/free-gifts/admin/options.php:318, inc/modules/free-shipping-progress-bar/admin/options.php:97, inc/modules/frequently-bought-together/admin/options.php:430, inc/modules/spending-goal/admin/options.php:172, inc/modules/storewide-sale/admin/options.php:334, inc/modules/volume-discounts/admin/options.php:406
    42184261msgid "This will limit the offer to users with these roles."
    42194262msgstr ""
    42204263
    4221 #: inc/modules/buy-x-get-y/admin/options.php:406, inc/modules/complementary-products/admin/options.php:381, inc/modules/free-gifts/admin/options.php:329, inc/modules/free-shipping-progress-bar/admin/options.php:116, inc/modules/frequently-bought-together/admin/options.php:441, inc/modules/pre-orders/admin/options.php:386, inc/modules/spending-goal/admin/options.php:183, inc/modules/storewide-sale/admin/options.php:345, inc/modules/volume-discounts/admin/options.php:417
     4264#: inc/modules/buy-x-get-y/admin/options.php:423, inc/modules/complementary-products/admin/options.php:381, inc/modules/free-gifts/admin/options.php:329, inc/modules/free-shipping-progress-bar/admin/options.php:116, inc/modules/frequently-bought-together/admin/options.php:441, inc/modules/pre-orders/admin/options.php:386, inc/modules/spending-goal/admin/options.php:183, inc/modules/storewide-sale/admin/options.php:345, inc/modules/volume-discounts/admin/options.php:417
    42224265msgid "Users"
    42234266msgstr ""
    42244267
    4225 #: inc/modules/buy-x-get-y/admin/options.php:407, inc/modules/complementary-products/admin/options.php:382, inc/modules/free-gifts/admin/options.php:330, inc/modules/free-shipping-progress-bar/admin/options.php:117, inc/modules/frequently-bought-together/admin/options.php:442, inc/modules/spending-goal/admin/options.php:184, inc/modules/storewide-sale/admin/options.php:346, inc/modules/volume-discounts/admin/options.php:418
     4268#: inc/modules/buy-x-get-y/admin/options.php:424, inc/modules/complementary-products/admin/options.php:382, inc/modules/free-gifts/admin/options.php:330, inc/modules/free-shipping-progress-bar/admin/options.php:117, inc/modules/frequently-bought-together/admin/options.php:442, inc/modules/spending-goal/admin/options.php:184, inc/modules/storewide-sale/admin/options.php:346, inc/modules/volume-discounts/admin/options.php:418
    42264269msgid "This will limit the offer to the selected customers."
    42274270msgstr ""
    42284271
    4229 #: inc/modules/buy-x-get-y/admin/options.php:418, inc/modules/free-gifts/admin/options.php:341, inc/modules/free-shipping-progress-bar/admin/options.php:136, inc/modules/pre-orders/admin/options.php:398, inc/modules/storewide-sale/admin/options.php:357, inc/modules/volume-discounts/admin/options.php:429
     4272#: inc/modules/buy-x-get-y/admin/options.php:435, inc/modules/free-gifts/admin/options.php:341, inc/modules/free-shipping-progress-bar/admin/options.php:136, inc/modules/pre-orders/admin/options.php:398, inc/modules/storewide-sale/admin/options.php:357, inc/modules/volume-discounts/admin/options.php:429
    42304273msgid "Select the users that will not show the offer."
    42314274msgstr ""
    42324275
    4233 #: inc/modules/buy-x-get-y/admin/options.php:435, inc/modules/complementary-products/admin/options.php:410, inc/modules/free-gifts/admin/options.php:358, inc/modules/free-shipping-progress-bar/admin/options.php:153, inc/modules/frequently-bought-together/admin/options.php:470, inc/modules/pre-orders/admin/options.php:415, inc/modules/spending-goal/admin/options.php:237, inc/modules/storewide-sale/admin/options.php:374, inc/modules/volume-discounts/admin/options.php:446
     4276#: inc/modules/buy-x-get-y/admin/options.php:452, inc/modules/complementary-products/admin/options.php:410, inc/modules/free-gifts/admin/options.php:358, inc/modules/free-shipping-progress-bar/admin/options.php:153, inc/modules/frequently-bought-together/admin/options.php:470, inc/modules/pre-orders/admin/options.php:415, inc/modules/spending-goal/admin/options.php:237, inc/modules/storewide-sale/admin/options.php:374, inc/modules/volume-discounts/admin/options.php:446
    42344277msgid "Exclude Roles"
    42354278msgstr ""
    42364279
    4237 #: inc/modules/buy-x-get-y/admin/options.php:436, inc/modules/complementary-products/admin/options.php:411, inc/modules/free-gifts/admin/options.php:359, inc/modules/free-shipping-progress-bar/admin/options.php:154, inc/modules/frequently-bought-together/admin/options.php:471, inc/modules/pre-orders/admin/options.php:416, inc/modules/spending-goal/admin/options.php:238, inc/modules/storewide-sale/admin/options.php:375, inc/modules/volume-discounts/admin/options.php:447
     4280#: inc/modules/buy-x-get-y/admin/options.php:453, inc/modules/complementary-products/admin/options.php:411, inc/modules/free-gifts/admin/options.php:359, inc/modules/free-shipping-progress-bar/admin/options.php:154, inc/modules/frequently-bought-together/admin/options.php:471, inc/modules/pre-orders/admin/options.php:416, inc/modules/spending-goal/admin/options.php:238, inc/modules/storewide-sale/admin/options.php:375, inc/modules/volume-discounts/admin/options.php:447
    42384281msgid "This will exclude the offer for users with these roles."
    42394282msgstr ""
    42404283
    4241 #: inc/modules/buy-x-get-y/admin/options.php:461, inc/modules/complementary-products/admin/options.php:436, inc/modules/free-gifts/admin/options.php:384, inc/modules/free-shipping-progress-bar/admin/options.php:179, inc/modules/frequently-bought-together/admin/options.php:496, inc/modules/pre-orders/admin/options.php:441, inc/modules/spending-goal/admin/options.php:212, inc/modules/storewide-sale/admin/options.php:400, inc/modules/volume-discounts/admin/options.php:472
     4284#: inc/modules/buy-x-get-y/admin/options.php:478, inc/modules/complementary-products/admin/options.php:436, inc/modules/free-gifts/admin/options.php:384, inc/modules/free-shipping-progress-bar/admin/options.php:179, inc/modules/frequently-bought-together/admin/options.php:496, inc/modules/pre-orders/admin/options.php:441, inc/modules/spending-goal/admin/options.php:212, inc/modules/storewide-sale/admin/options.php:400, inc/modules/volume-discounts/admin/options.php:472
    42424285msgid "Exclude Users"
    42434286msgstr ""
    42444287
    4245 #: inc/modules/buy-x-get-y/admin/options.php:462, inc/modules/complementary-products/admin/options.php:437, inc/modules/free-gifts/admin/options.php:385, inc/modules/free-shipping-progress-bar/admin/options.php:180, inc/modules/frequently-bought-together/admin/options.php:497, inc/modules/pre-orders/admin/options.php:442, inc/modules/spending-goal/admin/options.php:213, inc/modules/storewide-sale/admin/options.php:401, inc/modules/volume-discounts/admin/options.php:473
     4288#: inc/modules/buy-x-get-y/admin/options.php:479, inc/modules/complementary-products/admin/options.php:437, inc/modules/free-gifts/admin/options.php:385, inc/modules/free-shipping-progress-bar/admin/options.php:180, inc/modules/frequently-bought-together/admin/options.php:497, inc/modules/pre-orders/admin/options.php:442, inc/modules/spending-goal/admin/options.php:213, inc/modules/storewide-sale/admin/options.php:401, inc/modules/volume-discounts/admin/options.php:473
    42464289msgid "This will exclude the offer for the selected customers."
    42474290msgstr ""
    42484291
    4249 #: inc/modules/buy-x-get-y/admin/options.php:486, inc/modules/complementary-products/admin/options.php:461, inc/modules/frequently-bought-together/admin/options.php:521, inc/modules/volume-discounts/admin/options.php:497
     4292#: inc/modules/buy-x-get-y/admin/options.php:503, inc/modules/complementary-products/admin/options.php:461, inc/modules/frequently-bought-together/admin/options.php:521, inc/modules/volume-discounts/admin/options.php:497
    42504293msgid "Product Single Page"
    42514294msgstr ""
    42524295
    4253 #: inc/modules/buy-x-get-y/admin/options.php:487, inc/modules/volume-discounts/admin/options.php:498
     4296#: inc/modules/buy-x-get-y/admin/options.php:504, inc/modules/volume-discounts/admin/options.php:498
    42544297msgid "Use these settings to control how bulk discount offers appear on product pages."
    42554298msgstr ""
    42564299
    4257 #: inc/modules/buy-x-get-y/admin/options.php:496, inc/modules/complementary-products/admin/options.php:472, inc/modules/frequently-bought-together/admin/options.php:532, inc/modules/reasons-to-buy/admin/options.php:292, inc/modules/volume-discounts/admin/options.php:507
     4300#: inc/modules/buy-x-get-y/admin/options.php:513, inc/modules/complementary-products/admin/options.php:472, inc/modules/frequently-bought-together/admin/options.php:532, inc/modules/reasons-to-buy/admin/options.php:292, inc/modules/volume-discounts/admin/options.php:507
    42584301msgid "Placement on product page"
    42594302msgstr ""
    42604303
    4261 #: inc/modules/buy-x-get-y/admin/options.php:498, inc/modules/volume-discounts/admin/options.php:510
     4304#: inc/modules/buy-x-get-y/admin/options.php:515, inc/modules/volume-discounts/admin/options.php:510
    42624305msgid "After add to cart"
    42634306msgstr ""
    42644307
    4265 #: inc/modules/buy-x-get-y/admin/options.php:499, inc/modules/volume-discounts/admin/options.php:509
     4308#: inc/modules/buy-x-get-y/admin/options.php:516, inc/modules/volume-discounts/admin/options.php:509
    42664309msgid "Before add to cart"
    42674310msgstr ""
    42684311
    4269 #: inc/modules/buy-x-get-y/admin/options.php:508, inc/modules/buy-x-get-y/admin/options.php:645, inc/modules/buy-x-get-y/admin/options.php:709, inc/modules/buy-x-get-y/admin/options.php:758, inc/modules/complementary-products/admin/options.php:485, inc/modules/complementary-products/admin/options.php:569, inc/modules/frequently-bought-together/admin/options.php:736, inc/modules/volume-discounts/admin/options.php:519, inc/modules/volume-discounts/admin/options.php:699, inc/modules/volume-discounts/admin/options.php:748, inc/modules/volume-discounts/admin/options.php:799
     4312#: inc/modules/buy-x-get-y/admin/options.php:525, inc/modules/buy-x-get-y/admin/options.php:662, inc/modules/buy-x-get-y/admin/options.php:726, inc/modules/buy-x-get-y/admin/options.php:775, inc/modules/complementary-products/admin/options.php:485, inc/modules/complementary-products/admin/options.php:569, inc/modules/frequently-bought-together/admin/options.php:736, inc/modules/volume-discounts/admin/options.php:519, inc/modules/volume-discounts/admin/options.php:699, inc/modules/volume-discounts/admin/options.php:748, inc/modules/volume-discounts/admin/options.php:799
    42704313msgid "Offer title"
    42714314msgstr ""
    42724315
    4273 #: inc/modules/buy-x-get-y/admin/options.php:515
     4316#: inc/modules/buy-x-get-y/admin/options.php:532
    42744317msgid "Buy label"
    42754318msgstr ""
    42764319
    4277 #: inc/modules/buy-x-get-y/admin/options.php:516
     4320#: inc/modules/buy-x-get-y/admin/options.php:533
    42784321msgid "Buy {quantity}"
    42794322msgstr ""
    42804323
    42814324#. translators: %1$s: bogo offered product quantity
    4282 #: inc/modules/buy-x-get-y/admin/options.php:520, inc/modules/buy-x-get-y/admin/options.php:650
     4325#: inc/modules/buy-x-get-y/admin/options.php:537, inc/modules/buy-x-get-y/admin/options.php:667
    42834326msgid "<strong>%1$s:</strong> to show offered product quantity"
    42844327msgstr ""
    42854328
    4286 #: inc/modules/buy-x-get-y/admin/options.php:531
     4329#: inc/modules/buy-x-get-y/admin/options.php:548
    42874330msgid "Get label"
    42884331msgstr ""
    42894332
    4290 #: inc/modules/buy-x-get-y/admin/options.php:532
     4333#: inc/modules/buy-x-get-y/admin/options.php:549
    42914334msgid "Get {quantity} with {discount} off"
    42924335msgstr ""
    42934336
    42944337#. translators: %1$s: bogo offered product quantity, %2$s: bogo offer discount
    4295 #: inc/modules/buy-x-get-y/admin/options.php:536
     4338#: inc/modules/buy-x-get-y/admin/options.php:553
    42964339msgid "<strong>%1$s:</strong> to show offered product quantity<br><strong>%2$s:</strong> to show offer discount"
    42974340msgstr ""
    42984341
    4299 #: inc/modules/buy-x-get-y/admin/options.php:556
     4342#: inc/modules/buy-x-get-y/admin/options.php:573
    43004343msgid "Font weight"
    43014344msgstr ""
    43024345
    4303 #: inc/modules/buy-x-get-y/admin/options.php:558, inc/modules/stock-scarcity/admin/options.php:156, inc/modules/volume-discounts/admin/options.php:607
     4346#: inc/modules/buy-x-get-y/admin/options.php:575, inc/modules/stock-scarcity/admin/options.php:156, inc/modules/volume-discounts/admin/options.php:607
    43044347msgid "Light"
    43054348msgstr ""
    43064349
    4307 #: inc/modules/buy-x-get-y/admin/options.php:559, inc/modules/product-labels/admin/options.php:239, inc/modules/stock-scarcity/admin/options.php:157, inc/modules/volume-discounts/admin/options.php:608
     4350#: inc/modules/buy-x-get-y/admin/options.php:576, inc/modules/product-labels/admin/options.php:239, inc/modules/stock-scarcity/admin/options.php:157, inc/modules/volume-discounts/admin/options.php:608
    43084351msgid "Normal"
    43094352msgstr ""
    43104353
    4311 #: inc/modules/buy-x-get-y/admin/options.php:560, inc/modules/product-labels/admin/options.php:241, inc/modules/stock-scarcity/admin/options.php:158, inc/modules/volume-discounts/admin/options.php:609
     4354#: inc/modules/buy-x-get-y/admin/options.php:577, inc/modules/product-labels/admin/options.php:241, inc/modules/stock-scarcity/admin/options.php:158, inc/modules/volume-discounts/admin/options.php:609
    43124355msgid "Bold"
    43134356msgstr ""
    43144357
    4315 #: inc/modules/buy-x-get-y/admin/options.php:579, inc/modules/size-chart/admin/options.php:74, inc/modules/volume-discounts/admin/options.php:617
     4358#: inc/modules/buy-x-get-y/admin/options.php:596, inc/modules/size-chart/admin/options.php:74, inc/modules/volume-discounts/admin/options.php:617
    43164359msgid "Title text color"
    43174360msgstr ""
    43184361
    4319 #: inc/modules/buy-x-get-y/admin/options.php:586, inc/modules/free-gifts/admin/options.php:717, inc/modules/volume-discounts/admin/options.php:673
     4362#: inc/modules/buy-x-get-y/admin/options.php:603, inc/modules/free-gifts/admin/options.php:717, inc/modules/volume-discounts/admin/options.php:673
    43204363msgid "Label background color"
    43214364msgstr ""
    43224365
    4323 #: inc/modules/buy-x-get-y/admin/options.php:593, inc/modules/free-gifts/admin/options.php:724, inc/modules/volume-discounts/admin/options.php:680
     4366#: inc/modules/buy-x-get-y/admin/options.php:610, inc/modules/free-gifts/admin/options.php:724, inc/modules/volume-discounts/admin/options.php:680
    43244367msgid "Label text color"
    43254368msgstr ""
    43264369
    4327 #: inc/modules/buy-x-get-y/admin/options.php:600
     4370#: inc/modules/buy-x-get-y/admin/options.php:617
    43284371msgid "Arrow background color"
    43294372msgstr ""
    43304373
    4331 #: inc/modules/buy-x-get-y/admin/options.php:607
     4374#: inc/modules/buy-x-get-y/admin/options.php:624
    43324375msgid "Arrow text color"
    43334376msgstr ""
    43344377
    4335 #: inc/modules/buy-x-get-y/admin/options.php:615
     4378#: inc/modules/buy-x-get-y/admin/options.php:632
    43364379msgid "Offer border color"
    43374380msgstr ""
    43384381
    4339 #: inc/modules/buy-x-get-y/admin/options.php:622
     4382#: inc/modules/buy-x-get-y/admin/options.php:639
    43404383msgid "Offer border Radius"
    43414384msgstr ""
    43424385
    4343 #: inc/modules/buy-x-get-y/admin/options.php:634, inc/modules/clear-cart/admin/options.php:107, inc/modules/complementary-products/admin/options.php:510, inc/modules/free-shipping-progress-bar/admin/options.php:723, inc/modules/frequently-bought-together/admin/options.php:648, inc/modules/volume-discounts/admin/options.php:688
     4386#: inc/modules/buy-x-get-y/admin/options.php:651, inc/modules/clear-cart/admin/options.php:107, inc/modules/complementary-products/admin/options.php:510, inc/modules/free-shipping-progress-bar/admin/options.php:723, inc/modules/frequently-bought-together/admin/options.php:648, inc/modules/volume-discounts/admin/options.php:688
    43444387msgid "Cart Page"
    43454388msgstr ""
    43464389
    4347 #: inc/modules/buy-x-get-y/admin/options.php:635, inc/modules/volume-discounts/admin/options.php:689
     4390#: inc/modules/buy-x-get-y/admin/options.php:652, inc/modules/volume-discounts/admin/options.php:689
    43484391msgid "Use these settings to control how bulk discount offers appear on the cart page."
    43494392msgstr ""
    43504393
    4351 #: inc/modules/buy-x-get-y/admin/options.php:646, inc/modules/buy-x-get-y/admin/options.php:710
     4394#: inc/modules/buy-x-get-y/admin/options.php:663, inc/modules/buy-x-get-y/admin/options.php:727
    43524395msgid "You are eligible to get {offer_quantity}x"
    43534396msgstr ""
    43544397
    4355 #: inc/modules/buy-x-get-y/admin/options.php:661, inc/modules/buy-x-get-y/admin/options.php:724, inc/modules/buy-x-get-y/admin/options.php:786, inc/modules/complementary-products/admin/options.php:644, inc/modules/frequently-bought-together/admin/options.php:742, inc/modules/frequently-bought-together/admin/options.php:804, inc/modules/volume-discounts/admin/options.php:764, inc/modules/volume-discounts/admin/options.php:828
     4398#: inc/modules/buy-x-get-y/admin/options.php:678, inc/modules/buy-x-get-y/admin/options.php:741, inc/modules/buy-x-get-y/admin/options.php:803, inc/modules/complementary-products/admin/options.php:644, inc/modules/frequently-bought-together/admin/options.php:742, inc/modules/frequently-bought-together/admin/options.php:804, inc/modules/volume-discounts/admin/options.php:764, inc/modules/volume-discounts/admin/options.php:828
    43564399msgid "Discount text"
    43574400msgstr ""
     
    43594402#. translators: %1$s: bogo Discount amount
    43604403#. translators: %1$s: Discount amount
    4361 #: inc/modules/buy-x-get-y/admin/options.php:666, inc/modules/buy-x-get-y/admin/options.php:729, inc/modules/buy-x-get-y/admin/options.php:791, inc/modules/frequently-bought-together/admin/options.php:580, inc/modules/frequently-bought-together/admin/options.php:678, inc/modules/frequently-bought-together/admin/options.php:781
     4404#: inc/modules/buy-x-get-y/admin/options.php:683, inc/modules/buy-x-get-y/admin/options.php:746, inc/modules/buy-x-get-y/admin/options.php:808, inc/modules/frequently-bought-together/admin/options.php:580, inc/modules/frequently-bought-together/admin/options.php:678, inc/modules/frequently-bought-together/admin/options.php:781
    43624405msgid "<strong>%1$s:</strong> to show discount amount"
    43634406msgstr ""
    43644407
    4365 #: inc/modules/buy-x-get-y/admin/options.php:685, inc/modules/complementary-products/admin/options.php:545, inc/modules/free-shipping-progress-bar/admin/options.php:832, inc/modules/frequently-bought-together/admin/options.php:712, inc/modules/volume-discounts/admin/options.php:724
     4408#: inc/modules/buy-x-get-y/admin/options.php:702, inc/modules/complementary-products/admin/options.php:545, inc/modules/free-shipping-progress-bar/admin/options.php:832, inc/modules/frequently-bought-together/admin/options.php:712, inc/modules/volume-discounts/admin/options.php:724
    43664409msgid "Checkout Page"
    43674410msgstr ""
    43684411
    4369 #: inc/modules/buy-x-get-y/admin/options.php:686
     4412#: inc/modules/buy-x-get-y/admin/options.php:703
    43704413msgid "Use these settings to control how Buy X get Y offers appear on the checkout page."
    43714414msgstr ""
    43724415
    4373 #: inc/modules/buy-x-get-y/admin/options.php:697, inc/modules/complementary-products/admin/options.php:557, inc/modules/frequently-bought-together/admin/options.php:724, inc/modules/volume-discounts/admin/options.php:736
     4416#: inc/modules/buy-x-get-y/admin/options.php:714, inc/modules/complementary-products/admin/options.php:557, inc/modules/frequently-bought-together/admin/options.php:724, inc/modules/volume-discounts/admin/options.php:736
    43744417msgid "Before Billing Details"
    43754418msgstr ""
    43764419
    4377 #: inc/modules/buy-x-get-y/admin/options.php:698, inc/modules/complementary-products/admin/options.php:558, inc/modules/frequently-bought-together/admin/options.php:725, inc/modules/volume-discounts/admin/options.php:737
     4420#: inc/modules/buy-x-get-y/admin/options.php:715, inc/modules/complementary-products/admin/options.php:558, inc/modules/frequently-bought-together/admin/options.php:725, inc/modules/volume-discounts/admin/options.php:737
    43784421msgid "After Billing Details"
    43794422msgstr ""
    43804423
    4381 #: inc/modules/buy-x-get-y/admin/options.php:699, inc/modules/complementary-products/admin/options.php:559, inc/modules/frequently-bought-together/admin/options.php:726, inc/modules/volume-discounts/admin/options.php:738
     4424#: inc/modules/buy-x-get-y/admin/options.php:716, inc/modules/complementary-products/admin/options.php:559, inc/modules/frequently-bought-together/admin/options.php:726, inc/modules/volume-discounts/admin/options.php:738
    43824425msgid "Before Order Details"
    43834426msgstr ""
    43844427
    4385 #: inc/modules/buy-x-get-y/admin/options.php:700, inc/modules/complementary-products/admin/options.php:560, inc/modules/frequently-bought-together/admin/options.php:727, inc/modules/volume-discounts/admin/options.php:739
     4428#: inc/modules/buy-x-get-y/admin/options.php:717, inc/modules/complementary-products/admin/options.php:560, inc/modules/frequently-bought-together/admin/options.php:727, inc/modules/volume-discounts/admin/options.php:739
    43864429msgid "Before Payment Gateways"
    43874430msgstr ""
    43884431
    4389 #: inc/modules/buy-x-get-y/admin/options.php:701, inc/modules/complementary-products/admin/options.php:561, inc/modules/frequently-bought-together/admin/options.php:728, inc/modules/volume-discounts/admin/options.php:740
     4432#: inc/modules/buy-x-get-y/admin/options.php:718, inc/modules/complementary-products/admin/options.php:561, inc/modules/frequently-bought-together/admin/options.php:728, inc/modules/volume-discounts/admin/options.php:740
    43904433msgid "Before Order Placement Button"
    43914434msgstr ""
    43924435
    4393 #: inc/modules/buy-x-get-y/admin/options.php:702, inc/modules/complementary-products/admin/options.php:562, inc/modules/frequently-bought-together/admin/options.php:729, inc/modules/volume-discounts/admin/options.php:741
     4436#: inc/modules/buy-x-get-y/admin/options.php:719, inc/modules/complementary-products/admin/options.php:562, inc/modules/frequently-bought-together/admin/options.php:729, inc/modules/volume-discounts/admin/options.php:741
    43944437msgid "After Order Placement Button"
    43954438msgstr ""
     
    43974440#. translators: %1$s: bogo offer quantity
    43984441#. translators: %1$s: bogo {offer_quantity} tag
    4399 #: inc/modules/buy-x-get-y/admin/options.php:714, inc/modules/buy-x-get-y/admin/options.php:763
     4442#: inc/modules/buy-x-get-y/admin/options.php:731, inc/modules/buy-x-get-y/admin/options.php:780
    44004443msgid "<strong>%1$s:</strong> to show offer quantity"
    44014444msgstr ""
    44024445
    4403 #: inc/modules/buy-x-get-y/admin/options.php:747, inc/modules/volume-discounts/admin/options.php:788
     4446#: inc/modules/buy-x-get-y/admin/options.php:764, inc/modules/volume-discounts/admin/options.php:788
    44044447msgid "Thank You Page"
    44054448msgstr ""
    44064449
    4407 #: inc/modules/buy-x-get-y/admin/options.php:748
     4450#: inc/modules/buy-x-get-y/admin/options.php:765
    44084451msgid "Use these settings to control how Buy X get Y offers appear on the thank you page."
    44094452msgstr ""
    44104453
    4411 #: inc/modules/buy-x-get-y/admin/options.php:759
     4454#: inc/modules/buy-x-get-y/admin/options.php:776
    44124455msgid "Last chance to get {offer_quantity}x"
    44134456msgstr ""
    44144457
    4415 #: inc/modules/buy-x-get-y/admin/options.php:776, inc/modules/complementary-products/admin/options.php:619, inc/modules/frequently-bought-together/admin/options.php:794, inc/modules/volume-discounts/admin/options.php:818
     4458#: inc/modules/buy-x-get-y/admin/options.php:793, inc/modules/complementary-products/admin/options.php:619, inc/modules/frequently-bought-together/admin/options.php:794, inc/modules/volume-discounts/admin/options.php:818
    44164459msgid "On Top"
    44174460msgstr ""
    44184461
    4419 #: inc/modules/buy-x-get-y/admin/options.php:777, inc/modules/complementary-products/admin/options.php:620, inc/modules/frequently-bought-together/admin/options.php:795, inc/modules/volume-discounts/admin/options.php:819
     4462#: inc/modules/buy-x-get-y/admin/options.php:794, inc/modules/complementary-products/admin/options.php:620, inc/modules/frequently-bought-together/admin/options.php:795, inc/modules/volume-discounts/admin/options.php:819
    44204463msgid "Before Order details"
    44214464msgstr ""
    44224465
    4423 #: inc/modules/buy-x-get-y/admin/options.php:778, inc/modules/complementary-products/admin/options.php:621, inc/modules/frequently-bought-together/admin/options.php:796, inc/modules/volume-discounts/admin/options.php:820
     4466#: inc/modules/buy-x-get-y/admin/options.php:795, inc/modules/complementary-products/admin/options.php:621, inc/modules/frequently-bought-together/admin/options.php:796, inc/modules/volume-discounts/admin/options.php:820
    44244467msgid "After Order details"
    44254468msgstr ""
    44264469
    4427 #: inc/modules/buy-x-get-y/admin/options.php:813
     4470#: inc/modules/buy-x-get-y/admin/options.php:830
    44284471msgid "Buy 1 Get 1"
    44294472msgstr ""
  • merchant/trunk/merchant.php

    r3403526 r3421339  
    44 * Plugin URI:  https://athemes.com/merchant
    55 * Description: All-in-one WooCommerce plugin for pre-orders, product labels, buy now, quick view, discount rules and more.
    6  * Version:     2.2.0
     6 * Version:     2.2.1
    77 * Author:      aThemes
    88 * Author URI:  https://athemes.com
     
    2525
    2626// Merchant constants.
    27 define( 'MERCHANT_VERSION', '2.2.0' );
     27define( 'MERCHANT_VERSION', '2.2.1' );
    2828define( 'MERCHANT_DB_VERSION', '1.1.0' ); // Update only when the database structure changes. In inc/classes/class-merchant-db-tables.php
    2929define( 'MERCHANT_FILE', __FILE__ );
  • merchant/trunk/readme.txt

    r3403526 r3421339  
    44Tested up to: 6.8
    55Requires PHP: 7.3
    6 Stable tag: 2.2.0
     6Stable tag: 2.2.1
    77Contributors: aThemes
    88License: GPLv3 or later
     
    219219
    220220== Changelog ==
     221= 2.2.1 =
     222* Added - Compatibility layer for complementary products module in Ohio theme
     223* Added - Usage tracking integration
     224* Fixed - Console error that occurred when the module trigger was set to specific products
     225
    221226= 2.2.0 =
    222227* Added - Product Labels: Added support to display multiple labels on product images
  • merchant/trunk/templates/modules/buy-x-get-y/single-product.php

    r3320812 r3421339  
    131131                            $discount = $offer['discount_type'] === 'percentage' ? $offer['discount'] . '%' : wc_price( $offer['discount'] );
    132132                        }
     133                        $quantity_mode = $offer['quantity_mode'] ?? 'custom';
     134                        if ( 'one_product' === $quantity_mode ) {
     135                            $gift_quantity = 1;
     136                        } elseif ( 'matches_x' === $quantity_mode ) {
     137                            $gift_quantity = isset( $offer['min_quantity'] ) ? (int) $offer['min_quantity'] : 0;
     138                        } else {
     139                            $gift_quantity = isset( $offer['quantity'] ) ? (int) $offer['quantity'] : 3;
     140                        }
    133141
    134142                        echo isset( $offer['product_single_page']['get_label'] )
     
    139147                                ),
    140148                                array(
    141                                     $offer['quantity'],
     149                                    $gift_quantity,
    142150                                    $discount,
    143151                                ),
     
    145153                            ), merchant_kses_allowed_tags( array( 'bdi' ) ) )
    146154                            : wp_kses(
    147                             /* Translators: 1. quantity 2. discount value*/
    148                                 sprintf( __( 'Get %1$s with %2$s off', 'merchant' ), $offer['quantity'], $discount ),
     155                                sprintf(
     156                                    /* Translators: 1. quantity 2. discount value*/
     157                                    __( 'Get %1$s with %2$s off', 'merchant' ),
     158                                    $gift_quantity,
     159                                    $discount
     160                                ),
    149161                                merchant_kses_allowed_tags( array( 'bdi' ) )
    150162                            );
  • merchant/trunk/vendor/autoload.php

    r3403526 r3421339  
    2020require_once __DIR__ . '/composer/autoload_real.php';
    2121
    22 return ComposerAutoloaderInit428dd28dc866dff721ebd6f2d2321d91::getLoader();
     22return ComposerAutoloaderInit73fbbad9bebbf60b976ff0c360fa95c8::getLoader();
  • merchant/trunk/vendor/composer/autoload_real.php

    r3403526 r3421339  
    33// autoload_real.php @generated by Composer
    44
    5 class ComposerAutoloaderInit428dd28dc866dff721ebd6f2d2321d91
     5class ComposerAutoloaderInit73fbbad9bebbf60b976ff0c360fa95c8
    66{
    77    private static $loader;
     
    2323        }
    2424
    25         spl_autoload_register(array('ComposerAutoloaderInit428dd28dc866dff721ebd6f2d2321d91', 'loadClassLoader'), true, true);
     25        require __DIR__ . '/platform_check.php';
     26
     27        spl_autoload_register(array('ComposerAutoloaderInit73fbbad9bebbf60b976ff0c360fa95c8', 'loadClassLoader'), true, true);
    2628        self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
    27         spl_autoload_unregister(array('ComposerAutoloaderInit428dd28dc866dff721ebd6f2d2321d91', 'loadClassLoader'));
     29        spl_autoload_unregister(array('ComposerAutoloaderInit73fbbad9bebbf60b976ff0c360fa95c8', 'loadClassLoader'));
    2830
    2931        require __DIR__ . '/autoload_static.php';
    30         call_user_func(\Composer\Autoload\ComposerStaticInit428dd28dc866dff721ebd6f2d2321d91::getInitializer($loader));
     32        call_user_func(\Composer\Autoload\ComposerStaticInit73fbbad9bebbf60b976ff0c360fa95c8::getInitializer($loader));
    3133
    3234        $loader->register(true);
  • merchant/trunk/vendor/composer/autoload_static.php

    r3403526 r3421339  
    55namespace Composer\Autoload;
    66
    7 class ComposerStaticInit428dd28dc866dff721ebd6f2d2321d91
     7class ComposerStaticInit73fbbad9bebbf60b976ff0c360fa95c8
    88{
    99    public static $classMap = array (
     
    1414    {
    1515        return \Closure::bind(function () use ($loader) {
    16             $loader->classMap = ComposerStaticInit428dd28dc866dff721ebd6f2d2321d91::$classMap;
     16            $loader->classMap = ComposerStaticInit73fbbad9bebbf60b976ff0c360fa95c8::$classMap;
    1717
    1818        }, null, ClassLoader::class);
  • merchant/trunk/vendor/composer/installed.json

    r3403526 r3421339  
    11{
    2     "packages": [],
     2    "packages": [
     3        {
     4            "name": "woocommerce/action-scheduler",
     5            "version": "3.9.3",
     6            "version_normalized": "3.9.3.0",
     7            "source": {
     8                "type": "git",
     9                "url": "https://github.com/woocommerce/action-scheduler.git",
     10                "reference": "c58cdbab17651303d406cd3b22cf9d75c71c986c"
     11            },
     12            "dist": {
     13                "type": "zip",
     14                "url": "https://api.github.com/repos/woocommerce/action-scheduler/zipball/c58cdbab17651303d406cd3b22cf9d75c71c986c",
     15                "reference": "c58cdbab17651303d406cd3b22cf9d75c71c986c",
     16                "shasum": ""
     17            },
     18            "require": {
     19                "php": ">=7.2"
     20            },
     21            "require-dev": {
     22                "phpunit/phpunit": "^8.5",
     23                "woocommerce/woocommerce-sniffs": "0.1.0",
     24                "wp-cli/wp-cli": "~2.5.0",
     25                "yoast/phpunit-polyfills": "^2.0"
     26            },
     27            "time": "2025-07-15T09:32:30+00:00",
     28            "type": "wordpress-plugin",
     29            "extra": {
     30                "scripts-description": {
     31                    "test": "Run unit tests",
     32                    "phpcs": "Analyze code against the WordPress coding standards with PHP_CodeSniffer",
     33                    "phpcbf": "Fix coding standards warnings/errors automatically with PHP Code Beautifier"
     34                }
     35            },
     36            "installation-source": "dist",
     37            "notification-url": "https://packagist.org/downloads/",
     38            "license": [
     39                "GPL-3.0-or-later"
     40            ],
     41            "description": "Action Scheduler for WordPress and WooCommerce",
     42            "homepage": "https://actionscheduler.org/",
     43            "support": {
     44                "issues": "https://github.com/woocommerce/action-scheduler/issues",
     45                "source": "https://github.com/woocommerce/action-scheduler/tree/3.9.3"
     46            },
     47            "install-path": "../woocommerce/action-scheduler"
     48        }
     49    ],
    350    "dev": false,
    451    "dev-package-names": []
  • merchant/trunk/vendor/composer/installed.php

    r3403526 r3421339  
    22    'root' => array(
    33        'name' => 'athemes/merchant',
    4         'pretty_version' => 'v2.2.0',
    5         'version' => '2.2.0.0',
    6         'reference' => '75930b3d7e625817809660409f5dbab869e068a4',
     4        'pretty_version' => 'v2.2.1',
     5        'version' => '2.2.1.0',
     6        'reference' => '41a3e6901c1c074efde05163063b69c92e7fa6f1',
    77        'type' => 'library',
    88        'install_path' => __DIR__ . '/../../',
     
    1212    'versions' => array(
    1313        'athemes/merchant' => array(
    14             'pretty_version' => 'v2.2.0',
    15             'version' => '2.2.0.0',
    16             'reference' => '75930b3d7e625817809660409f5dbab869e068a4',
     14            'pretty_version' => 'v2.2.1',
     15            'version' => '2.2.1.0',
     16            'reference' => '41a3e6901c1c074efde05163063b69c92e7fa6f1',
    1717            'type' => 'library',
    1818            'install_path' => __DIR__ . '/../../',
     
    2020            'dev_requirement' => false,
    2121        ),
     22        'woocommerce/action-scheduler' => array(
     23            'pretty_version' => '3.9.3',
     24            'version' => '3.9.3.0',
     25            'reference' => 'c58cdbab17651303d406cd3b22cf9d75c71c986c',
     26            'type' => 'wordpress-plugin',
     27            'install_path' => __DIR__ . '/../woocommerce/action-scheduler',
     28            'aliases' => array(),
     29            'dev_requirement' => false,
     30        ),
    2231    ),
    2332);
Note: See TracChangeset for help on using the changeset viewer.