Plugin Directory

Changeset 2864583


Ignore:
Timestamp:
02/13/2023 04:55:03 PM (3 years ago)
Author:
shadim
Message:

Tagging version 1.3.6

Location:
faire-for-woocommerce
Files:
2 added
13 edited
1 copied

Legend:

Unmodified
Added
Removed
  • faire-for-woocommerce/tags/1.3.6/assets/scripts/admin_settings.js

    r2838583 r2864583  
    297297            .always(
    298298                () => productTaxonomyManualSyncButton.prop('disabled', false)
     299            );
     300        });
     301    }
     302
     303  /**
     304     * Manages manual unlinking of products.
     305     */
     306    const manageProductUnlinkingManualSync = () => {
     307        const {
     308            ajaxUrl,
     309            nonceManualSyncProductUnlinking,
     310            productUnlinkingManualSyncMsg,
     311            productUnlinkingManualSyncSuccessMsg,
     312            productUnlinkingManualSyncFailMsg
     313        } = faireAdminSettings;
     314
     315        const productUnlinkingManualSyncButton = $(
     316            `#${prefix}${plugin}_product_unlinking_manual_sync`
     317        );
     318
     319        // Handles click on product unlinking button.
     320        productUnlinkingManualSyncButton.on('click', function () {
     321            // Add an element to display request results messages.
     322            const productUnlinkingSyncMsgElem = addMsgElement(
     323                $(this),
     324                'faire_product_unlinking_sync_manual_msg'
     325            );
     326
     327            // Start product unlinking.
     328            productUnlinkingSyncMsgElem.html(productUnlinkingManualSyncMsg);
     329            productUnlinkingManualSyncButton.prop('disabled', true);
     330
     331            $.post(
     332                ajaxUrl,
     333                {
     334                    action: 'faire_product_unlinking_manual_sync',
     335                    nonce: nonceManualSyncProductUnlinking,
     336                },
     337                response => {
     338                    if ( response.data !== undefined && response.data.status === 'success' ) {
     339
     340            if ( response.data.info !== undefined && response.data.info.length > 0 ) {
     341              productUnlinkingSyncMsgElem.html(response.data.info);
     342            } else {
     343              productUnlinkingSyncMsgElem.html(productUnlinkingManualSyncSuccessMsg);
     344            }
     345                    } else {
     346                        productUnlinkingSyncMsgElem.html(productUnlinkingManualSyncFailMsg);
     347                    }
     348                }
     349            )
     350            .fail(
     351                response => {
     352                    if (response.responseText !== undefined) {
     353                        productUnlinkingSyncMsgElem.html(productUnlinkingManualSyncFailMsg);
     354                        // eslint-disable-next-line no-console
     355                        console.error(response.responseText);
     356                    }
     357                }
     358            )
     359            .always(
     360                () => productUnlinkingManualSyncButton.prop('disabled', false)
    299361            );
    300362        });
     
    629691        // Inits manage products manual sync.
    630692        manageProductsManualSync();
     693    // Inits manage products unlinking manual sync.
     694        manageProductUnlinkingManualSync();
    631695        // Inits manage products taxonomy manual sync.
    632696        manageProductTaxonomyManualSync();
  • faire-for-woocommerce/tags/1.3.6/dist/scripts/admin_settings.js

    r2838583 r2864583  
    1 !function(){"use strict";var n,t,a,c,o;n=window.jQuery,t="woocommerce_",a="faire_wc_integration",c=function(t,a){var c=n("#".concat(a));return c.length||(c=t.after('<p id="'.concat(a,'"></p>')).next("#".concat(a))),c},o=function(){var c=faireAdminSettings.productsManualSyncLinkExistingMsg,o=n("#".concat(t).concat(a,"_product_sync_mode")),i=n("#".concat(t).concat(a,"_initial_setup_products_exist")),e=function(){n("#".concat(t).concat(a,"_product_sync_schedule_num, #").concat(t).concat(a,"_product_sync_schedule_time")).closest("tr").toggle("sync_scheduled"===o.val())};o.on("change",(function(n){if(!function(){if("do_not_sync"!==o.val()&&1===parseInt(i.val())){if(!confirm(c))return!1;i.val("")}return!0}())return o.val("do_not_sync").trigger("change"),n.preventDefault(),!1;e()})),e()},n(document).ready((function(){var i,e,r,s,d,l,u,_,p,f,m,g,y,v,S,h,b,A;-1!==window.location.href.indexOf("section=".concat(a))&&(o(),i=n(".".concat(t).concat(a,"_product_pricing_policy")),e=n(".".concat(t).concat(a,"_product_pricing_policy:checked")),r=n("#".concat(t).concat(a,"_product_wholesale_multiplier")),s=n("#".concat(t).concat(a,"_product_wholesale_percentage")),d=function(t){r.closest("tr").toggle("wholesale_multiplier"===n(t).val()),s.closest("tr").toggle("wholesale_percentage"===n(t).val())},i.on("click",(function(){d(this)})),d(e),l=n("#".concat(t).concat(a,"_product_wholesale_map")),u=function(){n("#".concat(t).concat(a,"_product_wholesale_map_field")).closest("tr").toggle(l.is(":checked"))},l.on("click",(function(){u()})),u(),_=faireAdminSettings.ajaxUrl,p=faireAdminSettings.nonceManualSyncProducts,f=faireAdminSettings.productsManualSyncMsg,m=faireAdminSettings.productsManualSyncLinkExistingMsg,g=n("#".concat(t).concat(a,"_product_sync_manual")),y=n("#".concat(t).concat(a,"_initial_setup_products_exist")),g.on("click",(function(){if(1===parseInt(y.val())){if(!confirm(m))return!1;y.val("")}var t=c(n(this),"products_manual_sync_msg");t.html(f),g.prop("disabled",!0),n.post(_,{action:"faire_products_manual_sync",nonce:p},(function(n){t.html(""),void 0!==n.data&&Array.isArray(n.data)&&t.html(n.data.join("<br>"))})).fail((function(n){return t.val(void 0===n.data?"":n.data)})).always((function(){return g.prop("disabled",!1)}))})),function(){var o=faireAdminSettings.ajaxUrl,i=faireAdminSettings.nonceManualSyncProductTaxonomy,e=faireAdminSettings.productTaxonomyManualSyncMsg,r=faireAdminSettings.productTaxonomyManualSyncSuccessMsg,s=faireAdminSettings.productTaxonomyManualSyncFailMsg,d=n("#".concat(t).concat(a,"_product_taxonomy_sync_manual"));d.on("click",(function(){var t=c(n(this),"faire_product_taxonomy_manual_sync_msg");t.html(e),d.prop("disabled",!0),n.post(o,{action:"faire_product_taxonomy_manual_sync",nonce:i},(function(n){void 0!==n.data&&"success"===n.data.status?t.html(r):t.html(s)})).fail((function(n){void 0!==n.responseText&&(t.html(s),console.error(n.responseText))})).always((function(){return d.prop("disabled",!1)}))}))}(),function(){var o=faireAdminSettings.ajaxUrl,i=faireAdminSettings.nonceManualSyncProductLinking,e=faireAdminSettings.productLinkingManualSyncMsg,r=faireAdminSettings.productLinkingManualSyncFailed,s=n("#".concat(t).concat(a,"_product_linking_sync_manual")),d=n("#".concat(t).concat(a,"_product_linking_create_products_csv")),l=n("#".concat(t).concat(a,"_product_linking_create_variations_csv")),u=n("#".concat(t).concat(a,"_initial_setup_products_exist"));s.on("click",(function(){var _=c(n(this),"product_linking_sync_results"),p=n("#".concat(t).concat(a,"_product_linking_sync_results"));_.html(e),s.prop("disabled",!0),n.post(o,{action:"faire_product_linking_manual_sync",nonce:i},(function(n){_.html("");var t=void 0===n.data||void 0===n.data.message?"":n.data.message;p.val(t),void 0!==n.data&&(u.val(""),!0===n.data.products_csv?(d.attr("disabled",!1),d.addClass("button-secondary").removeClass("disabled")):(d.attr("disabled",!0),d.removeClass("button-secondary").addClass("disabled")),!0===n.data.variations_csv?(l.attr("disabled",!1),l.addClass("button-secondary").removeClass("disabled")):(l.attr("disabled",!0),l.removeClass("button-secondary").addClass("disabled")))})).fail((function(n){void 0===n.responseJSON.data?(_.html(r),console.error(n)):_.html(n.responseJSON.data)})).always((function(){return s.prop("disabled",!1)}))}))}(),n("#".concat(t).concat(a,"_product_linking_create_products_csv")).on("click",(function(){window.location=window.location+"&wc_faire_link_products_csv=yes"})),n("#".concat(t).concat(a,"_product_linking_create_variations_csv")).on("click",(function(){window.location=window.location+"&wc_faire_link_variations_csv=yes"})),function(){var o=faireAdminSettings.ajaxUrl,i=faireAdminSettings.nonceManualSyncBrand,e=faireAdminSettings.brandManualSyncMsg,r=faireAdminSettings.brandManualSyncSuccessMsg,s=faireAdminSettings.brandManualSyncFailMsg,d=n("#".concat(t).concat(a,"_brand_sync_manual")),l=n("#".concat(t).concat(a,"_brand_locale")),u=n("#".concat(t).concat(a,"_brand_currency"));d.on("click",(function(){var t=c(n(this),"faire_brand_manual_sync_msg");t.html(e),d.prop("disabled",!0),n.post(o,{action:"faire_brand_manual_sync",nonce:i},(function(n){void 0!==n.data&&"success"===n.data.status?(t.html(r),void 0!==n.data.brand.locale&&l.val(n.data.brand.locale),void 0!==n.data.brand.currency&&u.val(n.data.brand.currency)):t.html(s)})).fail((function(n){void 0!==n.responseText&&(t.html(s),console.error(n.responseText))})).always((function(){return d.prop("disabled",!1)}))}))}(),function(){var o=faireAdminSettings.ajaxUrl,i=faireAdminSettings.nonceManualSyncOrders,e=faireAdminSettings.ordersManualSyncMsg,r=faireAdminSettings.ordersManualSyncFailed,s=n("#".concat(t).concat(a,"_order_sync_manual"));s.on("click",(function(){var d=c(n(this),"order_sync_results"),l=n("#".concat(t).concat(a,"_order_sync_results"));d.html(e),s.prop("disabled",!0),n.post(o,{action:"faire_orders_manual_sync",nonce:i},(function(n){d.html(""),l.val(void 0===n.data?"":n.data)})).fail((function(n){void 0===n.responseJSON.data?(d.html(r),console.error(n)):d.html(n.responseJSON.data)})).always((function(){return s.prop("disabled",!1)}))}))}(),v=n("#".concat(t).concat(a,"_order_sync_mode")),S=function(){var c="sync_scheduled"===v.val();n("#".concat(t).concat(a,"_order_sync_schedule_num")).closest("tr").toggle(c),n("#".concat(t).concat(a,"_order_sync_schedule_time")).closest("tr").toggle(c)},v.on("change",(function(){S()})),S(),function(){var o=faireAdminSettings.ajaxUrl,i=faireAdminSettings.nonceApiTestConnection,e=faireAdminSettings.testingApiConnectionMsg,r=faireAdminSettings.apiKeyEmptyError,s=n("#".concat(t).concat(a,"_test_api_connection"));s.on("click",(function(){if(!s.prop("disabled")){var d=c(n(this),"connection_test_msg");if(!n(n("#".concat(t).concat(a,"_api_key"))).val().trim())return d.html(r),void s.prop("disabled",!1);d.html(e),s.prop("disabled",!0),n.post(o,{action:"faire_test_api_connection",nonce:i},(function(n){return d.html(n.data)})).fail((function(n){return d.html(n.responseJSON.data)})).always((function(){return s.prop("disabled",!1)}))}}))}(),h=n("#".concat(t).concat(a,"_initial_setup")),b="".concat(t).concat(a,"_initial_setup_trigger"),A=n("#mainform button[type=submit]"),h.on("click",(function(){n("<input>").attr({type:"hidden",name:b,value:"yes"}).insertAfter(A),A.trigger("click")})))}))}();
     1!function(){"use strict";var n,t,a,c,o;n=window.jQuery,t="woocommerce_",a="faire_wc_integration",c=function(t,a){var c=n("#".concat(a));return c.length||(c=t.after('<p id="'.concat(a,'"></p>')).next("#".concat(a))),c},o=function(){var c=faireAdminSettings.productsManualSyncLinkExistingMsg,o=n("#".concat(t).concat(a,"_product_sync_mode")),i=n("#".concat(t).concat(a,"_initial_setup_products_exist")),e=function(){n("#".concat(t).concat(a,"_product_sync_schedule_num, #").concat(t).concat(a,"_product_sync_schedule_time")).closest("tr").toggle("sync_scheduled"===o.val())};o.on("change",(function(n){if(!function(){if("do_not_sync"!==o.val()&&1===parseInt(i.val())){if(!confirm(c))return!1;i.val("")}return!0}())return o.val("do_not_sync").trigger("change"),n.preventDefault(),!1;e()})),e()},n(document).ready((function(){var i,e,r,s,d,l,u,_,p,f,m,g,y,v,S,h,b,k;-1!==window.location.href.indexOf("section=".concat(a))&&(o(),i=n(".".concat(t).concat(a,"_product_pricing_policy")),e=n(".".concat(t).concat(a,"_product_pricing_policy:checked")),r=n("#".concat(t).concat(a,"_product_wholesale_multiplier")),s=n("#".concat(t).concat(a,"_product_wholesale_percentage")),d=function(t){r.closest("tr").toggle("wholesale_multiplier"===n(t).val()),s.closest("tr").toggle("wholesale_percentage"===n(t).val())},i.on("click",(function(){d(this)})),d(e),l=n("#".concat(t).concat(a,"_product_wholesale_map")),u=function(){n("#".concat(t).concat(a,"_product_wholesale_map_field")).closest("tr").toggle(l.is(":checked"))},l.on("click",(function(){u()})),u(),_=faireAdminSettings.ajaxUrl,p=faireAdminSettings.nonceManualSyncProducts,f=faireAdminSettings.productsManualSyncMsg,m=faireAdminSettings.productsManualSyncLinkExistingMsg,g=n("#".concat(t).concat(a,"_product_sync_manual")),y=n("#".concat(t).concat(a,"_initial_setup_products_exist")),g.on("click",(function(){if(1===parseInt(y.val())){if(!confirm(m))return!1;y.val("")}var t=c(n(this),"products_manual_sync_msg");t.html(f),g.prop("disabled",!0),n.post(_,{action:"faire_products_manual_sync",nonce:p},(function(n){t.html(""),void 0!==n.data&&Array.isArray(n.data)&&t.html(n.data.join("<br>"))})).fail((function(n){return t.val(void 0===n.data?"":n.data)})).always((function(){return g.prop("disabled",!1)}))})),function(){var o=faireAdminSettings.ajaxUrl,i=faireAdminSettings.nonceManualSyncProductUnlinking,e=faireAdminSettings.productUnlinkingManualSyncMsg,r=faireAdminSettings.productUnlinkingManualSyncSuccessMsg,s=faireAdminSettings.productUnlinkingManualSyncFailMsg,d=n("#".concat(t).concat(a,"_product_unlinking_manual_sync"));d.on("click",(function(){var t=c(n(this),"faire_product_unlinking_sync_manual_msg");t.html(e),d.prop("disabled",!0),n.post(o,{action:"faire_product_unlinking_manual_sync",nonce:i},(function(n){void 0!==n.data&&"success"===n.data.status?void 0!==n.data.info&&n.data.info.length>0?t.html(n.data.info):t.html(r):t.html(s)})).fail((function(n){void 0!==n.responseText&&(t.html(s),console.error(n.responseText))})).always((function(){return d.prop("disabled",!1)}))}))}(),function(){var o=faireAdminSettings.ajaxUrl,i=faireAdminSettings.nonceManualSyncProductTaxonomy,e=faireAdminSettings.productTaxonomyManualSyncMsg,r=faireAdminSettings.productTaxonomyManualSyncSuccessMsg,s=faireAdminSettings.productTaxonomyManualSyncFailMsg,d=n("#".concat(t).concat(a,"_product_taxonomy_sync_manual"));d.on("click",(function(){var t=c(n(this),"faire_product_taxonomy_manual_sync_msg");t.html(e),d.prop("disabled",!0),n.post(o,{action:"faire_product_taxonomy_manual_sync",nonce:i},(function(n){void 0!==n.data&&"success"===n.data.status?t.html(r):t.html(s)})).fail((function(n){void 0!==n.responseText&&(t.html(s),console.error(n.responseText))})).always((function(){return d.prop("disabled",!1)}))}))}(),function(){var o=faireAdminSettings.ajaxUrl,i=faireAdminSettings.nonceManualSyncProductLinking,e=faireAdminSettings.productLinkingManualSyncMsg,r=faireAdminSettings.productLinkingManualSyncFailed,s=n("#".concat(t).concat(a,"_product_linking_sync_manual")),d=n("#".concat(t).concat(a,"_product_linking_create_products_csv")),l=n("#".concat(t).concat(a,"_product_linking_create_variations_csv")),u=n("#".concat(t).concat(a,"_initial_setup_products_exist"));s.on("click",(function(){var _=c(n(this),"product_linking_sync_results"),p=n("#".concat(t).concat(a,"_product_linking_sync_results"));_.html(e),s.prop("disabled",!0),n.post(o,{action:"faire_product_linking_manual_sync",nonce:i},(function(n){_.html("");var t=void 0===n.data||void 0===n.data.message?"":n.data.message;p.val(t),void 0!==n.data&&(u.val(""),!0===n.data.products_csv?(d.attr("disabled",!1),d.addClass("button-secondary").removeClass("disabled")):(d.attr("disabled",!0),d.removeClass("button-secondary").addClass("disabled")),!0===n.data.variations_csv?(l.attr("disabled",!1),l.addClass("button-secondary").removeClass("disabled")):(l.attr("disabled",!0),l.removeClass("button-secondary").addClass("disabled")))})).fail((function(n){void 0===n.responseJSON.data?(_.html(r),console.error(n)):_.html(n.responseJSON.data)})).always((function(){return s.prop("disabled",!1)}))}))}(),n("#".concat(t).concat(a,"_product_linking_create_products_csv")).on("click",(function(){window.location=window.location+"&wc_faire_link_products_csv=yes"})),n("#".concat(t).concat(a,"_product_linking_create_variations_csv")).on("click",(function(){window.location=window.location+"&wc_faire_link_variations_csv=yes"})),function(){var o=faireAdminSettings.ajaxUrl,i=faireAdminSettings.nonceManualSyncBrand,e=faireAdminSettings.brandManualSyncMsg,r=faireAdminSettings.brandManualSyncSuccessMsg,s=faireAdminSettings.brandManualSyncFailMsg,d=n("#".concat(t).concat(a,"_brand_sync_manual")),l=n("#".concat(t).concat(a,"_brand_locale")),u=n("#".concat(t).concat(a,"_brand_currency"));d.on("click",(function(){var t=c(n(this),"faire_brand_manual_sync_msg");t.html(e),d.prop("disabled",!0),n.post(o,{action:"faire_brand_manual_sync",nonce:i},(function(n){void 0!==n.data&&"success"===n.data.status?(t.html(r),void 0!==n.data.brand.locale&&l.val(n.data.brand.locale),void 0!==n.data.brand.currency&&u.val(n.data.brand.currency)):t.html(s)})).fail((function(n){void 0!==n.responseText&&(t.html(s),console.error(n.responseText))})).always((function(){return d.prop("disabled",!1)}))}))}(),function(){var o=faireAdminSettings.ajaxUrl,i=faireAdminSettings.nonceManualSyncOrders,e=faireAdminSettings.ordersManualSyncMsg,r=faireAdminSettings.ordersManualSyncFailed,s=n("#".concat(t).concat(a,"_order_sync_manual"));s.on("click",(function(){var d=c(n(this),"order_sync_results"),l=n("#".concat(t).concat(a,"_order_sync_results"));d.html(e),s.prop("disabled",!0),n.post(o,{action:"faire_orders_manual_sync",nonce:i},(function(n){d.html(""),l.val(void 0===n.data?"":n.data)})).fail((function(n){void 0===n.responseJSON.data?(d.html(r),console.error(n)):d.html(n.responseJSON.data)})).always((function(){return s.prop("disabled",!1)}))}))}(),v=n("#".concat(t).concat(a,"_order_sync_mode")),S=function(){var c="sync_scheduled"===v.val();n("#".concat(t).concat(a,"_order_sync_schedule_num")).closest("tr").toggle(c),n("#".concat(t).concat(a,"_order_sync_schedule_time")).closest("tr").toggle(c)},v.on("change",(function(){S()})),S(),function(){var o=faireAdminSettings.ajaxUrl,i=faireAdminSettings.nonceApiTestConnection,e=faireAdminSettings.testingApiConnectionMsg,r=faireAdminSettings.apiKeyEmptyError,s=n("#".concat(t).concat(a,"_test_api_connection"));s.on("click",(function(){if(!s.prop("disabled")){var d=c(n(this),"connection_test_msg");if(!n(n("#".concat(t).concat(a,"_api_key"))).val().trim())return d.html(r),void s.prop("disabled",!1);d.html(e),s.prop("disabled",!0),n.post(o,{action:"faire_test_api_connection",nonce:i},(function(n){return d.html(n.data)})).fail((function(n){return d.html(n.responseJSON.data)})).always((function(){return s.prop("disabled",!1)}))}}))}(),h=n("#".concat(t).concat(a,"_initial_setup")),b="".concat(t).concat(a,"_initial_setup_trigger"),k=n("#mainform button[type=submit]"),h.on("click",(function(){n("<input>").attr({type:"hidden",name:b,value:"yes"}).insertAfter(k),k.trigger("click")})))}))}();
    22//# sourceMappingURL=admin_settings.js.map
  • faire-for-woocommerce/tags/1.3.6/dist/scripts/admin_settings.js.map

    r2838583 r2864583  
    1 {"mappings":"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","sources":["assets/scripts/admin_settings.js"],"sourcesContent":["/* global faireAdminSettings */\n\n'use strict';\n\n(function ($) {\n\tconst prefix = 'woocommerce_';\n\tconst plugin = 'faire_wc_integration';\n\n\t/**\n\t * Adds a DOM element with an ID, after one given.\n\t *\n\t * @param {Object} baseElement DOM Element after which the new element will be added.\n\t * @param {string} elementId   ID for the new DOM element.\n\t *\n\t * @return {Object} New DOM element.\n\t */\n\tconst addMsgElement = (baseElement, elementId) => {\n\t\tlet newElement = $(`#${elementId}`);\n\t\tif (!newElement.length) {\n\t\t\tnewElement = baseElement\n\t\t\t\t.after(`<p id=\"${elementId}\"></p>`)\n\t\t\t\t.next(`#${elementId}`);\n\t\t}\n\n\t\treturn newElement;\n\t};\n\n\t/**\n\t * Manages product sync mode fields.\n\t */\n\tconst manageProductSyncMode = () => {\n\t\tconst { productsManualSyncLinkExistingMsg } =\n\t\t\tfaireAdminSettings;\n\n\t\tconst productSyncMode = $(`#${prefix}${plugin}_product_sync_mode`);\n\n\t\tconst existingProductsFoundOnIntialSetup = $(\n\t\t\t`#${prefix}${plugin}_initial_setup_products_exist`\n\t\t);\n\n\t\tconst allowSelectCheckProductLinkingWarning = () => {\n\t\t\tif ( productSyncMode.val() !== 'do_not_sync' ) {\n\t\t\t\t// Maybe display product linking warning \n\t\t\t\tif ( parseInt(existingProductsFoundOnIntialSetup.val()) === 1 ) {\n\t\t\t\t\tif ( ! confirm( productsManualSyncLinkExistingMsg ) ) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\texistingProductsFoundOnIntialSetup.val(''); // turn off flag if user continued anyway\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\n\t\t// Set visibility of product sync schedule fields.\n\t\tconst setSyncScheduleFieldsVisibility = () => {\n\t\t\t$(\n\t\t\t\t`#${prefix}${plugin}_product_sync_schedule_num, #${prefix}${plugin}_product_sync_schedule_time`\n\t\t\t)\n\t\t\t\t.closest('tr')\n\t\t\t\t.toggle(productSyncMode.val() === 'sync_scheduled');\n\t\t};\n\n\t\t// Handle changes to product sync mode select field.\n\t\tproductSyncMode.on('change', function (e) {\n\t\t\tif ( ! allowSelectCheckProductLinkingWarning() ) {\n\t\t\t\tproductSyncMode.val( 'do_not_sync' ).trigger('change');\n\t\t\t\te.preventDefault();\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tsetSyncScheduleFieldsVisibility();\n\t\t});\n\n\t\tsetSyncScheduleFieldsVisibility();\n\t};\n\n\tconst manageProductPricingPolicy = () => {\n\t\tconst productPricePolicy = $(`.${prefix}${plugin}_product_pricing_policy`);\n\t\tconst productPricePolicyChecked = $(`.${prefix}${plugin}_product_pricing_policy:checked`);\n\t\tconst productWholeSaleMultiplier = $(`#${prefix}${plugin}_product_wholesale_multiplier`);\n\t\tconst productWholeSalePercentage = $(`#${prefix}${plugin}_product_wholesale_percentage`);\n\n\t\tconst setProductWholesaleFieldsVisibility = (target) => {\n\t\t\tproductWholeSaleMultiplier\n\t\t\t\t.closest('tr')\n\t\t\t\t.toggle($(target).val() === 'wholesale_multiplier');\n\n\t\t\tproductWholeSalePercentage\n\t\t\t\t.closest('tr')\n\t\t\t\t.toggle($(target).val() === 'wholesale_percentage');\n\t\t}\n\n\t\t// Handle click on product policy radio buttons.\n\t\tproductPricePolicy.on('click', function () {\n\t\t\tsetProductWholesaleFieldsVisibility(this);\n\t\t});\n\n\t\tsetProductWholesaleFieldsVisibility(productPricePolicyChecked);\n\t}\n\n\t/**\n\t * Manages product wholesale mapping.\n\t */\n\tconst manageProductWholesaleMapField = () => {\n\t\tconst productWholesaleMapped = $(\n\t\t\t`#${prefix}${plugin}_product_wholesale_map`\n\t\t);\n\n\t\t// Set visibility of product wholesale map field.\n\t\tconst setProductWholesaleMapFieldVisibility = function () {\n\t\t\t$(`#${prefix}${plugin}_product_wholesale_map_field`)\n\t\t\t\t.closest('tr')\n\t\t\t\t.toggle(productWholesaleMapped.is(':checked'));\n\t\t};\n\n\t\t// Handle click on product wholesale map checkbox.\n\t\tproductWholesaleMapped.on('click', function () {\n\t\t\tsetProductWholesaleMapFieldVisibility();\n\t\t});\n\n\t\tsetProductWholesaleMapFieldVisibility();\n\t};\n\n\t/**\n\t * Implements API connection test functionality.\n\t */\n\tconst testApiConnection = () => {\n\t\tconst {\n\t\t\tajaxUrl,\n\t\t\tnonceApiTestConnection,\n\t\t\ttestingApiConnectionMsg,\n\t\t\tapiKeyEmptyError,\n\t\t} = faireAdminSettings;\n\n\t\tconst testApiConnectionButton = $(\n\t\t\t`#${prefix}${plugin}_test_api_connection`\n\t\t);\n\n\t\t// Handles click on API connection test button.\n\t\ttestApiConnectionButton.on('click', function () {\n\t\t\tif (testApiConnectionButton.prop('disabled')) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Add an element to display connection test messages.\n\t\t\tconst connectionTestMsgElem = addMsgElement(\n\t\t\t\t$(this),\n\t\t\t\t'connection_test_msg'\n\t\t\t);\n\n\t\t\t// API key field should not be empty.\n\t\t\tconst apiKeyField = $($(`#${prefix}${plugin}_api_key`));\n\t\t\tif (!apiKeyField.val().trim()) {\n\t\t\t\t// noinspection JSUnresolvedVariable\n\t\t\t\tconnectionTestMsgElem.html(apiKeyEmptyError);\n\t\t\t\ttestApiConnectionButton.prop('disabled', false);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Start testing the API connection.\n\t\t\tconnectionTestMsgElem.html(testingApiConnectionMsg);\n\t\t\ttestApiConnectionButton.prop('disabled', true);\n\n\t\t\t$.post(\n\t\t\t\tajaxUrl,\n\t\t\t\t{\n\t\t\t\t\taction: 'faire_test_api_connection',\n\t\t\t\t\tnonce: nonceApiTestConnection,\n\t\t\t\t},\n\t\t\t\tresponse => connectionTestMsgElem.html(response.data)\n\t\t\t)\n\t\t\t.fail(\n\t\t\t\t// noinspection JSUnresolvedVariable\n\t\t\t\tresponse => connectionTestMsgElem.html(response.responseJSON.data)\n\t\t\t)\n\t\t\t.always(\n\t\t\t\t() => testApiConnectionButton.prop('disabled', false)\n\t\t\t);\n\t\t});\n\t};\n\n\t/**\n\t * Manages manual syncing of products.\n\t */\n\tconst manageProductsManualSync = () => {\n\t\tconst { ajaxUrl, nonceManualSyncProducts, productsManualSyncMsg, productsManualSyncLinkExistingMsg } =\n\t\t\tfaireAdminSettings;\n\n\t\tconst productsManualSyncButton = $(\n\t\t\t`#${prefix}${plugin}_product_sync_manual`\n\t\t);\n\n\t\tconst existingProductsFoundOnIntialSetup = $(\n\t\t\t`#${prefix}${plugin}_initial_setup_products_exist`\n\t\t);\n\n\t\t// Handles click on products sync button.\n\t\tproductsManualSyncButton.on('click', function () {\n\n\t\t\t// Maybe display product linking warning \n\t\t\tif ( parseInt(existingProductsFoundOnIntialSetup.val()) === 1 ) {\n\t\t\t\tif ( ! confirm( productsManualSyncLinkExistingMsg ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t} else {\n\t\t\t\t\texistingProductsFoundOnIntialSetup.val(''); // turn off flag if user continued anyway\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add an element to display request results messages.\n\t\t\tconst productsSyncMsgElem = addMsgElement(\n\t\t\t\t$(this),\n\t\t\t\t'products_manual_sync_msg'\n\t\t\t);\n\n\t\t\t// Start syncing products.\n\t\t\tproductsSyncMsgElem.html(productsManualSyncMsg);\n\t\t\tproductsManualSyncButton.prop('disabled', true);\n\n\t\t\t$.post(\n\t\t\t\tajaxUrl,\n\t\t\t\t{\n\t\t\t\t\taction: 'faire_products_manual_sync',\n\t\t\t\t\tnonce: nonceManualSyncProducts,\n\t\t\t\t},\n\t\t\t\tresponse => {\n\t\t\t\t\tproductsSyncMsgElem.html('');\n\t\t\t\t\tif (\n\t\t\t\t\t\tresponse.data !== undefined &&\n\t\t\t\t\t\tArray.isArray(response.data)\n\t\t\t\t\t) {\n\t\t\t\t\t\tproductsSyncMsgElem.html(response.data.join('<br>'));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t)\n\t\t\t.fail(\n\t\t\t\tresponse => productsSyncMsgElem.val(\n\t\t\t\t\t\tresponse.data === undefined ? '' : response.data\n\t\t\t\t\t)\n\t\t\t)\n\t\t\t.always(\n\t\t\t\t() => productsManualSyncButton.prop('disabled', false)\n\t\t\t);\n\t\t});\n\t};\n\n\t/**\n\t * Manages manual syncing of product taxonomy.\n\t */\n\tconst manageProductTaxonomyManualSync = () => {\n\t\tconst {\n\t\t\tajaxUrl,\n\t\t\tnonceManualSyncProductTaxonomy,\n\t\t\tproductTaxonomyManualSyncMsg,\n\t\t\tproductTaxonomyManualSyncSuccessMsg,\n\t\t\tproductTaxonomyManualSyncFailMsg\n\t\t} = faireAdminSettings;\n\n\t\tconst productTaxonomyManualSyncButton = $(\n\t\t\t`#${prefix}${plugin}_product_taxonomy_sync_manual`\n\t\t);\n\n\t\t// Handles click on taxonomy sync button.\n\t\tproductTaxonomyManualSyncButton.on('click', function () {\n\t\t\t// Add an element to display request results messages.\n\t\t\tconst productTaxonomySyncMsgElem = addMsgElement(\n\t\t\t\t$(this),\n\t\t\t\t'faire_product_taxonomy_manual_sync_msg'\n\t\t\t);\n\n\t\t\t// Start syncing product taxonomy.\n\t\t\tproductTaxonomySyncMsgElem.html(productTaxonomyManualSyncMsg);\n\t\t\tproductTaxonomyManualSyncButton.prop('disabled', true);\n\n\t\t\t$.post(\n\t\t\t\tajaxUrl,\n\t\t\t\t{\n\t\t\t\t\taction: 'faire_product_taxonomy_manual_sync',\n\t\t\t\t\tnonce: nonceManualSyncProductTaxonomy,\n\t\t\t\t},\n\t\t\t\tresponse => {\n\t\t\t\t\tif ( response.data !== undefined && response.data.status === 'success' ) {\n\t\t\t\t\t\tproductTaxonomySyncMsgElem.html(productTaxonomyManualSyncSuccessMsg);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tproductTaxonomySyncMsgElem.html(productTaxonomyManualSyncFailMsg);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t)\n\t\t\t.fail(\n\t\t\t\tresponse => {\n\t\t\t\t\tif (response.responseText !== undefined) {\n\t\t\t\t\t\tproductTaxonomySyncMsgElem.html(productTaxonomyManualSyncFailMsg);\n\t\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\t\tconsole.error(response.responseText);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t)\n\t\t\t.always(\n\t\t\t\t() => productTaxonomyManualSyncButton.prop('disabled', false)\n\t\t\t);\n\t\t});\n\t}\n\n\n\t/**\n\t * Manages manual product linking sync.\n\t */\n\t const manageProductLinkingManualSync = () => {\n\t\tconst {\n\t\t\tajaxUrl,\n\t\t\tnonceManualSyncProductLinking,\n\t\t\tproductLinkingManualSyncMsg,\n\t\t\tproductLinkingManualSyncFailed\n\t\t} = faireAdminSettings;\n\n\t\tconst productLinkingManualSyncButton = $(\n\t\t\t`#${prefix}${plugin}_product_linking_sync_manual`\n\t\t);\n\n\t\tconst downloadProductLinkingButton = $(\n\t\t\t`#${prefix}${plugin}_product_linking_create_products_csv`\n\t\t);\n\n\t\tconst downloadVariationsLinkingButton = $(\n\t\t\t`#${prefix}${plugin}_product_linking_create_variations_csv`\n\t\t);\n\n\t\tconst existingProductsFoundOnIntialSetup = $(\n\t\t\t`#${prefix}${plugin}_initial_setup_products_exist`\n\t\t);\n\n\t\t// Handles click on product linking sync button.\n\t\tproductLinkingManualSyncButton.on('click', function () {\n\t\t\t\n\t\t\t// Add an element to display manual product linking sync messages.\n\t\t\t// Add an element to display connection test messages.\n\t\t\tconst productLinkingSyncMsgElem = addMsgElement(\n\t\t\t\t$(this),\n\t\t\t\t'product_linking_sync_results'\n\t\t\t);\n\n\t\t\tconst productLinkingSyncResults = $(\n\t\t\t\t`#${prefix}${plugin}_product_linking_sync_results`\n\t\t\t);\n\n\t\t\t// Start product linking.\n\t\t\tproductLinkingSyncMsgElem.html(productLinkingManualSyncMsg);\n\t\t\tproductLinkingManualSyncButton.prop('disabled', true);\n\n\t\t\t$.post(\n\t\t\t\tajaxUrl,\n\t\t\t\t{\n\t\t\t\t\taction: 'faire_product_linking_manual_sync',\n\t\t\t\t\tnonce: nonceManualSyncProductLinking,\n\t\t\t\t},\n\t\t\t\tresponse => {\n\t\t\t\t\tproductLinkingSyncMsgElem.html('');\n\n\t\t\t\t\tlet message = ( response.data === undefined || response.data.message === undefined) ? '' : response.data.message;\n\t\t\t\t\tproductLinkingSyncResults.val( message );\n\n\t\t\t\t\t//Enable disable download csv buttons \n\t\t\t\t\tif ( response.data !== undefined ) {\n\n\t\t\t\t\t\texistingProductsFoundOnIntialSetup.val(''); //Reset product linking before sync flag \n\n\t\t\t\t\t\tif ( response.data.products_csv === true ) {\n\t\t\t\t\t\t\tdownloadProductLinkingButton.attr('disabled', false);\n\t\t\t\t\t\t\tdownloadProductLinkingButton.addClass('button-secondary').removeClass('disabled');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdownloadProductLinkingButton.attr('disabled', true);\n\t\t\t\t\t\t\tdownloadProductLinkingButton.removeClass('button-secondary').addClass('disabled');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( response.data.variations_csv === true ) {\n\t\t\t\t\t\t\tdownloadVariationsLinkingButton.attr('disabled', false); \n\t\t\t\t\t\t\tdownloadVariationsLinkingButton.addClass('button-secondary').removeClass('disabled');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdownloadVariationsLinkingButton.attr('disabled', true); \n\t\t\t\t\t\t\tdownloadVariationsLinkingButton.removeClass('button-secondary').addClass('disabled');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t)\n\t\t\t.fail(\n\t\t\t\tresponse => {\n\t\t\t\t\tif (response.responseJSON.data !== undefined) {\n\t\t\t\t\t\tproductLinkingSyncMsgElem.html(response.responseJSON.data);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tproductLinkingSyncMsgElem.html(productLinkingManualSyncFailed);\n\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\tconsole.error(response);\n\t\t\t\t}\n\t\t\t)\n\t\t\t.always(() => productLinkingManualSyncButton.prop('disabled', false));\n\t\t});\n\t};\n\n\t/**\n\t * Manages manual syncing of the brand.\n\t */\n\tconst manageBrandManualSync = () => {\n\t\tconst {\n\t\t\tajaxUrl,\n\t\t\tnonceManualSyncBrand,\n\t\t\tbrandManualSyncMsg,\n\t\t\tbrandManualSyncSuccessMsg,\n\t\t\tbrandManualSyncFailMsg\n\t\t} = faireAdminSettings;\n\n\t\tconst brandManualSyncButton = $(\n\t\t\t`#${prefix}${plugin}_brand_sync_manual`\n\t\t);\n\n\t\tconst brandSyncInputLocaleElem = $(\n\t\t\t`#${prefix}${plugin}_brand_locale`\n\t\t);\n\n\t\tconst brandSyncInputCurrencyElem = $(\n\t\t\t`#${prefix}${plugin}_brand_currency`\n\t\t);\n\n\t\t// Handles click on brand sync button.\n\t\tbrandManualSyncButton.on('click', function () {\n\t\t\t// Add an element to display request results messages.\n\t\t\tconst brandSyncMsgElem = addMsgElement(\n\t\t\t\t$(this),\n\t\t\t\t'faire_brand_manual_sync_msg'\n\t\t\t);\n\n\t\t\t// Start syncing brand.\n\t\t\tbrandSyncMsgElem.html(brandManualSyncMsg);\n\t\t\tbrandManualSyncButton.prop('disabled', true);\n\n\t\t\t$.post(\n\t\t\t\tajaxUrl,\n\t\t\t\t{\n\t\t\t\t\taction: 'faire_brand_manual_sync',\n\t\t\t\t\tnonce: nonceManualSyncBrand,\n\t\t\t\t},\n\t\t\t\tresponse => {\n\t\t\t\t\tif ( response.data === undefined || response.data.status !== 'success' ) {\n\t\t\t\t\t\tbrandSyncMsgElem.html(brandManualSyncFailMsg);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tbrandSyncMsgElem.html(brandManualSyncSuccessMsg);\n\t\t\t        if ( response.data.brand.locale !== undefined ) {\n\t\t\t            brandSyncInputLocaleElem.val( response.data.brand.locale );\n\t\t\t        }\n\t\t\t        if ( response.data.brand.currency !== undefined ) {\n\t\t\t            brandSyncInputCurrencyElem.val( response.data.brand.currency );\n\t\t\t        }\n\t\t\t\t}\n\t\t\t)\n\t\t\t.fail(\n\t\t\t\tresponse => {\n\t\t\t\t\tif (response.responseText !== undefined) {\n\t\t\t\t\t\tbrandSyncMsgElem.html(brandManualSyncFailMsg);\n\t\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\t\tconsole.error(response.responseText);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t)\n\t\t\t.always(\n\t\t\t\t() => brandManualSyncButton.prop('disabled', false)\n\t\t\t);\n\t\t});\n\t}\n\n\t/**\n\t * Manages manual syncing of orders.\n\t */\n\tconst manageOrdersManualSync = () => {\n\t\tconst {\n\t\t\tajaxUrl,\n\t\t\tnonceManualSyncOrders,\n\t\t\tordersManualSyncMsg,\n\t\t\tordersManualSyncFailed\n\t\t} = faireAdminSettings;\n\n\t\tconst ordersManualSyncButton = $(\n\t\t\t`#${prefix}${plugin}_order_sync_manual`\n\t\t);\n\n\t\t// Handles click on orders sync button.\n\t\tordersManualSyncButton.on('click', function () {\n\t\t\t// Add an element to display manual orders sync messages.\n\t\t\t// Add an element to display connection test messages.\n\t\t\tconst ordersSyncMsgElem = addMsgElement(\n\t\t\t\t$(this),\n\t\t\t\t'order_sync_results'\n\t\t\t);\n\n\t\t\tconst ordersSyncResults = $(\n\t\t\t\t`#${prefix}${plugin}_order_sync_results`\n\t\t\t);\n\n\t\t\t// Start syncing orders.\n\t\t\tordersSyncMsgElem.html(ordersManualSyncMsg);\n\t\t\tordersManualSyncButton.prop('disabled', true);\n\n\t\t\t$.post(\n\t\t\t\tajaxUrl,\n\t\t\t\t{\n\t\t\t\t\taction: 'faire_orders_manual_sync',\n\t\t\t\t\tnonce: nonceManualSyncOrders,\n\t\t\t\t},\n\t\t\t\tresponse => {\n\t\t\t\t\tordersSyncMsgElem.html('');\n\t\t\t\t\tordersSyncResults.val(\n\t\t\t\t\t\tresponse.data === undefined ? '' : response.data\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t)\n\t\t\t.fail(\n\t\t\t\tresponse => {\n\t\t\t\t\tif (response.responseJSON.data !== undefined) {\n\t\t\t\t\t\tordersSyncMsgElem.html(response.responseJSON.data);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tordersSyncMsgElem.html(ordersManualSyncFailed);\n\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\tconsole.error(response);\n\t\t\t\t}\n\t\t\t)\n\t\t\t.always(() => ordersManualSyncButton.prop('disabled', false));\n\t\t});\n\t};\n\n\t/**\n\t * Inits manage of settings for orders scheduled syncing.\n\t */\n\tconst manageOrdersSyncScheduleSettings = () => {\n\t\tconst orderSyncMode = $(`#${prefix}${plugin}_order_sync_mode`);\n\n\t\tconst setOrderScheduleSyncSettingsVisibility = function () {\n\t\t\tconst visible = orderSyncMode.val() === 'sync_scheduled';\n\n\t\t\t$(`#${prefix}${plugin}_order_sync_schedule_num`)\n\t\t\t\t.closest('tr')\n\t\t\t\t.toggle(visible);\n\t\t\t$(`#${prefix}${plugin}_order_sync_schedule_time`)\n\t\t\t\t.closest('tr')\n\t\t\t\t.toggle(visible);\n\t\t};\n\n\t\t// Handle click on skip order scheduled syncing checkbox.\n\t\torderSyncMode.on('change', function () {\n\t\t\tsetOrderScheduleSyncSettingsVisibility();\n\t\t});\n\n\t\tsetOrderScheduleSyncSettingsVisibility();\n\t};\n\n\t/**\n\t * Manages finish setup button.\n\t */\n\tconst manageFinishSetupButton = () => {\n\n\t\tconst finishSetupButton = $(\n\t\t\t`#${prefix}${plugin}_initial_setup`\n\t\t);\n\n\t\tconst initialSetupInputName = `${prefix}${plugin}_initial_setup_trigger`;\n\n\t\tconst formSubmitButton = $(\n\t\t\t`#mainform button[type=submit]`\n\t\t);\n\n\t\t// Handles click on products sync button.\n\t\tfinishSetupButton.on('click', function () {\n\n\t\t\t// Add hidden input so we can trigger initial setup\n\t\t\t$('<input>').attr({\n\t\t\t\ttype: 'hidden',\n\t    \t\tname: initialSetupInputName,\n\t\t\t\tvalue: 'yes'\n\t\t\t}).insertAfter( formSubmitButton );\n\n\t\t\t// Submit form\n\t\t\tformSubmitButton.trigger('click');\n\t\t});\n\t};\n\n\t/**\n\t * Manages Download product linking CSV button.\n\t */\n\t const manageDownloadProductLinkingCSVButton = () => {\n\n\t\tconst downloadProductLinkingButton = $(\n\t\t\t`#${prefix}${plugin}_product_linking_create_products_csv`\n\t\t);\n\n\t\t// Handles click on  download csv button.\n\t\tdownloadProductLinkingButton.on('click', function () {\n\n\t\t\twindow.location = window.location + '&wc_faire_link_products_csv=yes';\n\n\t\t});\n\t};\n\n\t/**\n\t * Manages Download variations linking CSV button.\n\t */\n\t const manageDownloadVariationsLinkingCSVButton = () => {\n\n\t\tconst downloadVariationsLinkingButton = $(\n\t\t\t`#${prefix}${plugin}_product_linking_create_variations_csv`\n\t\t);\n\n\t\t// Handles click on download csv button.\n\t\tdownloadVariationsLinkingButton.on('click', function () {\n\n\t\t\twindow.location = window.location + '&wc_faire_link_variations_csv=yes';\n\n\t\t});\n\t};\n\n\t$(document).ready(() => {\n\t\t// Ensure current page is WooCommerce Faire integration settings.\n\t\tif (window.location.href.indexOf(`section=${plugin}`) === -1) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Inits manage product sync mode.\n\t\tmanageProductSyncMode();\n\t\tmanageProductPricingPolicy();\n\t\t// Inits manage product wholesale mapping.\n\t\tmanageProductWholesaleMapField();\n\t\t// Inits manage products manual sync.\n\t\tmanageProductsManualSync();\n\t\t// Inits manage products taxonomy manual sync.\n\t\tmanageProductTaxonomyManualSync();\n\t\t// Inits manage products linking manual sync.\n\t\tmanageProductLinkingManualSync();\n\t\t// Init download product linking csv button click.\n\t\tmanageDownloadProductLinkingCSVButton();\n\t\t// Init download variations linking csv button click.\n\t\tmanageDownloadVariationsLinkingCSVButton();\n\t\t// Inits manage brand manual sync.\n\t\tmanageBrandManualSync();\n\t\t// Inits manage orders manual sync.\n\t\tmanageOrdersManualSync();\n\t\t// Inits manage of settings for orders scheduled syncing.\n\t\tmanageOrdersSyncScheduleSettings();\n\t\t// Inits API test connection functionality.\n\t\ttestApiConnection();\n\t\t// Init finish setup button click.\n\t\tmanageFinishSetupButton();\n\t});\n})(window.jQuery);\n"],"names":["$","prefix","plugin","addMsgElement","manageProductSyncMode","window","jQuery","baseElement","elementId","newElement","concat","length","after","next","productsManualSyncLinkExistingMsg","faireAdminSettings","productSyncMode","existingProductsFoundOnIntialSetup","setSyncScheduleFieldsVisibility","closest","toggle","val","on","e","parseInt","confirm","allowSelectCheckProductLinkingWarning","trigger","preventDefault","document","ready","productPricePolicy","productPricePolicyChecked","productWholeSaleMultiplier","productWholeSalePercentage","setProductWholesaleFieldsVisibility","productWholesaleMapped","setProductWholesaleMapFieldVisibility","ajaxUrl","nonceManualSyncProducts","productsManualSyncMsg","productsManualSyncButton","orderSyncMode","setOrderScheduleSyncSettingsVisibility","finishSetupButton","initialSetupInputName","formSubmitButton","location","href","indexOf","target","this","is","productsSyncMsgElem","html","prop","post","action","nonce","response","undefined","data","Array","isArray","join","fail","always","nonceManualSyncProductTaxonomy","productTaxonomyManualSyncMsg","productTaxonomyManualSyncSuccessMsg","productTaxonomyManualSyncFailMsg","productTaxonomyManualSyncButton","productTaxonomySyncMsgElem","status","responseText","console","error","manageProductTaxonomyManualSync","nonceManualSyncProductLinking","productLinkingManualSyncMsg","productLinkingManualSyncFailed","productLinkingManualSyncButton","downloadProductLinkingButton","downloadVariationsLinkingButton","productLinkingSyncMsgElem","productLinkingSyncResults","message","products_csv","attr","addClass","removeClass","variations_csv","responseJSON","manageProductLinkingManualSync","nonceManualSyncBrand","brandManualSyncMsg","brandManualSyncSuccessMsg","brandManualSyncFailMsg","brandManualSyncButton","brandSyncInputLocaleElem","brandSyncInputCurrencyElem","brandSyncMsgElem","brand","locale","currency","manageBrandManualSync","nonceManualSyncOrders","ordersManualSyncMsg","ordersManualSyncFailed","ordersManualSyncButton","ordersSyncMsgElem","ordersSyncResults","manageOrdersManualSync","visible","nonceApiTestConnection","testingApiConnectionMsg","apiKeyEmptyError","testApiConnectionButton","connectionTestMsgElem","trim","testApiConnection","type","name","value","insertAfter"],"version":3,"file":"admin_settings.js.map"}
     1{"mappings":"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","sources":["assets/scripts/admin_settings.js"],"sourcesContent":["/* global faireAdminSettings */\n\n'use strict';\n\n(function ($) {\n\tconst prefix = 'woocommerce_';\n\tconst plugin = 'faire_wc_integration';\n\n\t/**\n\t * Adds a DOM element with an ID, after one given.\n\t *\n\t * @param {Object} baseElement DOM Element after which the new element will be added.\n\t * @param {string} elementId   ID for the new DOM element.\n\t *\n\t * @return {Object} New DOM element.\n\t */\n\tconst addMsgElement = (baseElement, elementId) => {\n\t\tlet newElement = $(`#${elementId}`);\n\t\tif (!newElement.length) {\n\t\t\tnewElement = baseElement\n\t\t\t\t.after(`<p id=\"${elementId}\"></p>`)\n\t\t\t\t.next(`#${elementId}`);\n\t\t}\n\n\t\treturn newElement;\n\t};\n\n\t/**\n\t * Manages product sync mode fields.\n\t */\n\tconst manageProductSyncMode = () => {\n\t\tconst { productsManualSyncLinkExistingMsg } =\n\t\t\tfaireAdminSettings;\n\n\t\tconst productSyncMode = $(`#${prefix}${plugin}_product_sync_mode`);\n\n\t\tconst existingProductsFoundOnIntialSetup = $(\n\t\t\t`#${prefix}${plugin}_initial_setup_products_exist`\n\t\t);\n\n\t\tconst allowSelectCheckProductLinkingWarning = () => {\n\t\t\tif ( productSyncMode.val() !== 'do_not_sync' ) {\n\t\t\t\t// Maybe display product linking warning \n\t\t\t\tif ( parseInt(existingProductsFoundOnIntialSetup.val()) === 1 ) {\n\t\t\t\t\tif ( ! confirm( productsManualSyncLinkExistingMsg ) ) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\texistingProductsFoundOnIntialSetup.val(''); // turn off flag if user continued anyway\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\n\t\t// Set visibility of product sync schedule fields.\n\t\tconst setSyncScheduleFieldsVisibility = () => {\n\t\t\t$(\n\t\t\t\t`#${prefix}${plugin}_product_sync_schedule_num, #${prefix}${plugin}_product_sync_schedule_time`\n\t\t\t)\n\t\t\t\t.closest('tr')\n\t\t\t\t.toggle(productSyncMode.val() === 'sync_scheduled');\n\t\t};\n\n\t\t// Handle changes to product sync mode select field.\n\t\tproductSyncMode.on('change', function (e) {\n\t\t\tif ( ! allowSelectCheckProductLinkingWarning() ) {\n\t\t\t\tproductSyncMode.val( 'do_not_sync' ).trigger('change');\n\t\t\t\te.preventDefault();\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tsetSyncScheduleFieldsVisibility();\n\t\t});\n\n\t\tsetSyncScheduleFieldsVisibility();\n\t};\n\n\tconst manageProductPricingPolicy = () => {\n\t\tconst productPricePolicy = $(`.${prefix}${plugin}_product_pricing_policy`);\n\t\tconst productPricePolicyChecked = $(`.${prefix}${plugin}_product_pricing_policy:checked`);\n\t\tconst productWholeSaleMultiplier = $(`#${prefix}${plugin}_product_wholesale_multiplier`);\n\t\tconst productWholeSalePercentage = $(`#${prefix}${plugin}_product_wholesale_percentage`);\n\n\t\tconst setProductWholesaleFieldsVisibility = (target) => {\n\t\t\tproductWholeSaleMultiplier\n\t\t\t\t.closest('tr')\n\t\t\t\t.toggle($(target).val() === 'wholesale_multiplier');\n\n\t\t\tproductWholeSalePercentage\n\t\t\t\t.closest('tr')\n\t\t\t\t.toggle($(target).val() === 'wholesale_percentage');\n\t\t}\n\n\t\t// Handle click on product policy radio buttons.\n\t\tproductPricePolicy.on('click', function () {\n\t\t\tsetProductWholesaleFieldsVisibility(this);\n\t\t});\n\n\t\tsetProductWholesaleFieldsVisibility(productPricePolicyChecked);\n\t}\n\n\t/**\n\t * Manages product wholesale mapping.\n\t */\n\tconst manageProductWholesaleMapField = () => {\n\t\tconst productWholesaleMapped = $(\n\t\t\t`#${prefix}${plugin}_product_wholesale_map`\n\t\t);\n\n\t\t// Set visibility of product wholesale map field.\n\t\tconst setProductWholesaleMapFieldVisibility = function () {\n\t\t\t$(`#${prefix}${plugin}_product_wholesale_map_field`)\n\t\t\t\t.closest('tr')\n\t\t\t\t.toggle(productWholesaleMapped.is(':checked'));\n\t\t};\n\n\t\t// Handle click on product wholesale map checkbox.\n\t\tproductWholesaleMapped.on('click', function () {\n\t\t\tsetProductWholesaleMapFieldVisibility();\n\t\t});\n\n\t\tsetProductWholesaleMapFieldVisibility();\n\t};\n\n\t/**\n\t * Implements API connection test functionality.\n\t */\n\tconst testApiConnection = () => {\n\t\tconst {\n\t\t\tajaxUrl,\n\t\t\tnonceApiTestConnection,\n\t\t\ttestingApiConnectionMsg,\n\t\t\tapiKeyEmptyError,\n\t\t} = faireAdminSettings;\n\n\t\tconst testApiConnectionButton = $(\n\t\t\t`#${prefix}${plugin}_test_api_connection`\n\t\t);\n\n\t\t// Handles click on API connection test button.\n\t\ttestApiConnectionButton.on('click', function () {\n\t\t\tif (testApiConnectionButton.prop('disabled')) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Add an element to display connection test messages.\n\t\t\tconst connectionTestMsgElem = addMsgElement(\n\t\t\t\t$(this),\n\t\t\t\t'connection_test_msg'\n\t\t\t);\n\n\t\t\t// API key field should not be empty.\n\t\t\tconst apiKeyField = $($(`#${prefix}${plugin}_api_key`));\n\t\t\tif (!apiKeyField.val().trim()) {\n\t\t\t\t// noinspection JSUnresolvedVariable\n\t\t\t\tconnectionTestMsgElem.html(apiKeyEmptyError);\n\t\t\t\ttestApiConnectionButton.prop('disabled', false);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Start testing the API connection.\n\t\t\tconnectionTestMsgElem.html(testingApiConnectionMsg);\n\t\t\ttestApiConnectionButton.prop('disabled', true);\n\n\t\t\t$.post(\n\t\t\t\tajaxUrl,\n\t\t\t\t{\n\t\t\t\t\taction: 'faire_test_api_connection',\n\t\t\t\t\tnonce: nonceApiTestConnection,\n\t\t\t\t},\n\t\t\t\tresponse => connectionTestMsgElem.html(response.data)\n\t\t\t)\n\t\t\t.fail(\n\t\t\t\t// noinspection JSUnresolvedVariable\n\t\t\t\tresponse => connectionTestMsgElem.html(response.responseJSON.data)\n\t\t\t)\n\t\t\t.always(\n\t\t\t\t() => testApiConnectionButton.prop('disabled', false)\n\t\t\t);\n\t\t});\n\t};\n\n\t/**\n\t * Manages manual syncing of products.\n\t */\n\tconst manageProductsManualSync = () => {\n\t\tconst { ajaxUrl, nonceManualSyncProducts, productsManualSyncMsg, productsManualSyncLinkExistingMsg } =\n\t\t\tfaireAdminSettings;\n\n\t\tconst productsManualSyncButton = $(\n\t\t\t`#${prefix}${plugin}_product_sync_manual`\n\t\t);\n\n\t\tconst existingProductsFoundOnIntialSetup = $(\n\t\t\t`#${prefix}${plugin}_initial_setup_products_exist`\n\t\t);\n\n\t\t// Handles click on products sync button.\n\t\tproductsManualSyncButton.on('click', function () {\n\n\t\t\t// Maybe display product linking warning \n\t\t\tif ( parseInt(existingProductsFoundOnIntialSetup.val()) === 1 ) {\n\t\t\t\tif ( ! confirm( productsManualSyncLinkExistingMsg ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t} else {\n\t\t\t\t\texistingProductsFoundOnIntialSetup.val(''); // turn off flag if user continued anyway\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add an element to display request results messages.\n\t\t\tconst productsSyncMsgElem = addMsgElement(\n\t\t\t\t$(this),\n\t\t\t\t'products_manual_sync_msg'\n\t\t\t);\n\n\t\t\t// Start syncing products.\n\t\t\tproductsSyncMsgElem.html(productsManualSyncMsg);\n\t\t\tproductsManualSyncButton.prop('disabled', true);\n\n\t\t\t$.post(\n\t\t\t\tajaxUrl,\n\t\t\t\t{\n\t\t\t\t\taction: 'faire_products_manual_sync',\n\t\t\t\t\tnonce: nonceManualSyncProducts,\n\t\t\t\t},\n\t\t\t\tresponse => {\n\t\t\t\t\tproductsSyncMsgElem.html('');\n\t\t\t\t\tif (\n\t\t\t\t\t\tresponse.data !== undefined &&\n\t\t\t\t\t\tArray.isArray(response.data)\n\t\t\t\t\t) {\n\t\t\t\t\t\tproductsSyncMsgElem.html(response.data.join('<br>'));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t)\n\t\t\t.fail(\n\t\t\t\tresponse => productsSyncMsgElem.val(\n\t\t\t\t\t\tresponse.data === undefined ? '' : response.data\n\t\t\t\t\t)\n\t\t\t)\n\t\t\t.always(\n\t\t\t\t() => productsManualSyncButton.prop('disabled', false)\n\t\t\t);\n\t\t});\n\t};\n\n\t/**\n\t * Manages manual syncing of product taxonomy.\n\t */\n\tconst manageProductTaxonomyManualSync = () => {\n\t\tconst {\n\t\t\tajaxUrl,\n\t\t\tnonceManualSyncProductTaxonomy,\n\t\t\tproductTaxonomyManualSyncMsg,\n\t\t\tproductTaxonomyManualSyncSuccessMsg,\n\t\t\tproductTaxonomyManualSyncFailMsg\n\t\t} = faireAdminSettings;\n\n\t\tconst productTaxonomyManualSyncButton = $(\n\t\t\t`#${prefix}${plugin}_product_taxonomy_sync_manual`\n\t\t);\n\n\t\t// Handles click on taxonomy sync button.\n\t\tproductTaxonomyManualSyncButton.on('click', function () {\n\t\t\t// Add an element to display request results messages.\n\t\t\tconst productTaxonomySyncMsgElem = addMsgElement(\n\t\t\t\t$(this),\n\t\t\t\t'faire_product_taxonomy_manual_sync_msg'\n\t\t\t);\n\n\t\t\t// Start syncing product taxonomy.\n\t\t\tproductTaxonomySyncMsgElem.html(productTaxonomyManualSyncMsg);\n\t\t\tproductTaxonomyManualSyncButton.prop('disabled', true);\n\n\t\t\t$.post(\n\t\t\t\tajaxUrl,\n\t\t\t\t{\n\t\t\t\t\taction: 'faire_product_taxonomy_manual_sync',\n\t\t\t\t\tnonce: nonceManualSyncProductTaxonomy,\n\t\t\t\t},\n\t\t\t\tresponse => {\n\t\t\t\t\tif ( response.data !== undefined && response.data.status === 'success' ) {\n\t\t\t\t\t\tproductTaxonomySyncMsgElem.html(productTaxonomyManualSyncSuccessMsg);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tproductTaxonomySyncMsgElem.html(productTaxonomyManualSyncFailMsg);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t)\n\t\t\t.fail(\n\t\t\t\tresponse => {\n\t\t\t\t\tif (response.responseText !== undefined) {\n\t\t\t\t\t\tproductTaxonomySyncMsgElem.html(productTaxonomyManualSyncFailMsg);\n\t\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\t\tconsole.error(response.responseText);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t)\n\t\t\t.always(\n\t\t\t\t() => productTaxonomyManualSyncButton.prop('disabled', false)\n\t\t\t);\n\t\t});\n\t}\n\n  /**\n\t * Manages manual unlinking of products.\n\t */\n\tconst manageProductUnlinkingManualSync = () => {\n\t\tconst {\n\t\t\tajaxUrl,\n\t\t\tnonceManualSyncProductUnlinking,\n\t\t\tproductUnlinkingManualSyncMsg,\n\t\t\tproductUnlinkingManualSyncSuccessMsg,\n\t\t\tproductUnlinkingManualSyncFailMsg\n\t\t} = faireAdminSettings;\n\n\t\tconst productUnlinkingManualSyncButton = $(\n\t\t\t`#${prefix}${plugin}_product_unlinking_manual_sync`\n\t\t);\n\n\t\t// Handles click on product unlinking button.\n\t\tproductUnlinkingManualSyncButton.on('click', function () {\n\t\t\t// Add an element to display request results messages.\n\t\t\tconst productUnlinkingSyncMsgElem = addMsgElement(\n\t\t\t\t$(this),\n\t\t\t\t'faire_product_unlinking_sync_manual_msg'\n\t\t\t);\n\n\t\t\t// Start product unlinking.\n\t\t\tproductUnlinkingSyncMsgElem.html(productUnlinkingManualSyncMsg);\n\t\t\tproductUnlinkingManualSyncButton.prop('disabled', true);\n\n\t\t\t$.post(\n\t\t\t\tajaxUrl,\n\t\t\t\t{\n\t\t\t\t\taction: 'faire_product_unlinking_manual_sync',\n\t\t\t\t\tnonce: nonceManualSyncProductUnlinking,\n\t\t\t\t},\n\t\t\t\tresponse => {\n\t\t\t\t\tif ( response.data !== undefined && response.data.status === 'success' ) {\n\n            if ( response.data.info !== undefined && response.data.info.length > 0 ) {\n              productUnlinkingSyncMsgElem.html(response.data.info);\n            } else {\n              productUnlinkingSyncMsgElem.html(productUnlinkingManualSyncSuccessMsg);\n            }\n\t\t\t\t\t} else {\n\t\t\t\t\t\tproductUnlinkingSyncMsgElem.html(productUnlinkingManualSyncFailMsg);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t)\n\t\t\t.fail(\n\t\t\t\tresponse => {\n\t\t\t\t\tif (response.responseText !== undefined) {\n\t\t\t\t\t\tproductUnlinkingSyncMsgElem.html(productUnlinkingManualSyncFailMsg);\n\t\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\t\tconsole.error(response.responseText);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t)\n\t\t\t.always(\n\t\t\t\t() => productUnlinkingManualSyncButton.prop('disabled', false)\n\t\t\t);\n\t\t});\n\t}\n\n\n\t/**\n\t * Manages manual product linking sync.\n\t */\n\t const manageProductLinkingManualSync = () => {\n\t\tconst {\n\t\t\tajaxUrl,\n\t\t\tnonceManualSyncProductLinking,\n\t\t\tproductLinkingManualSyncMsg,\n\t\t\tproductLinkingManualSyncFailed\n\t\t} = faireAdminSettings;\n\n\t\tconst productLinkingManualSyncButton = $(\n\t\t\t`#${prefix}${plugin}_product_linking_sync_manual`\n\t\t);\n\n\t\tconst downloadProductLinkingButton = $(\n\t\t\t`#${prefix}${plugin}_product_linking_create_products_csv`\n\t\t);\n\n\t\tconst downloadVariationsLinkingButton = $(\n\t\t\t`#${prefix}${plugin}_product_linking_create_variations_csv`\n\t\t);\n\n\t\tconst existingProductsFoundOnIntialSetup = $(\n\t\t\t`#${prefix}${plugin}_initial_setup_products_exist`\n\t\t);\n\n\t\t// Handles click on product linking sync button.\n\t\tproductLinkingManualSyncButton.on('click', function () {\n\t\t\t\n\t\t\t// Add an element to display manual product linking sync messages.\n\t\t\t// Add an element to display connection test messages.\n\t\t\tconst productLinkingSyncMsgElem = addMsgElement(\n\t\t\t\t$(this),\n\t\t\t\t'product_linking_sync_results'\n\t\t\t);\n\n\t\t\tconst productLinkingSyncResults = $(\n\t\t\t\t`#${prefix}${plugin}_product_linking_sync_results`\n\t\t\t);\n\n\t\t\t// Start product linking.\n\t\t\tproductLinkingSyncMsgElem.html(productLinkingManualSyncMsg);\n\t\t\tproductLinkingManualSyncButton.prop('disabled', true);\n\n\t\t\t$.post(\n\t\t\t\tajaxUrl,\n\t\t\t\t{\n\t\t\t\t\taction: 'faire_product_linking_manual_sync',\n\t\t\t\t\tnonce: nonceManualSyncProductLinking,\n\t\t\t\t},\n\t\t\t\tresponse => {\n\t\t\t\t\tproductLinkingSyncMsgElem.html('');\n\n\t\t\t\t\tlet message = ( response.data === undefined || response.data.message === undefined) ? '' : response.data.message;\n\t\t\t\t\tproductLinkingSyncResults.val( message );\n\n\t\t\t\t\t//Enable disable download csv buttons \n\t\t\t\t\tif ( response.data !== undefined ) {\n\n\t\t\t\t\t\texistingProductsFoundOnIntialSetup.val(''); //Reset product linking before sync flag \n\n\t\t\t\t\t\tif ( response.data.products_csv === true ) {\n\t\t\t\t\t\t\tdownloadProductLinkingButton.attr('disabled', false);\n\t\t\t\t\t\t\tdownloadProductLinkingButton.addClass('button-secondary').removeClass('disabled');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdownloadProductLinkingButton.attr('disabled', true);\n\t\t\t\t\t\t\tdownloadProductLinkingButton.removeClass('button-secondary').addClass('disabled');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( response.data.variations_csv === true ) {\n\t\t\t\t\t\t\tdownloadVariationsLinkingButton.attr('disabled', false); \n\t\t\t\t\t\t\tdownloadVariationsLinkingButton.addClass('button-secondary').removeClass('disabled');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdownloadVariationsLinkingButton.attr('disabled', true); \n\t\t\t\t\t\t\tdownloadVariationsLinkingButton.removeClass('button-secondary').addClass('disabled');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t)\n\t\t\t.fail(\n\t\t\t\tresponse => {\n\t\t\t\t\tif (response.responseJSON.data !== undefined) {\n\t\t\t\t\t\tproductLinkingSyncMsgElem.html(response.responseJSON.data);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tproductLinkingSyncMsgElem.html(productLinkingManualSyncFailed);\n\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\tconsole.error(response);\n\t\t\t\t}\n\t\t\t)\n\t\t\t.always(() => productLinkingManualSyncButton.prop('disabled', false));\n\t\t});\n\t};\n\n\t/**\n\t * Manages manual syncing of the brand.\n\t */\n\tconst manageBrandManualSync = () => {\n\t\tconst {\n\t\t\tajaxUrl,\n\t\t\tnonceManualSyncBrand,\n\t\t\tbrandManualSyncMsg,\n\t\t\tbrandManualSyncSuccessMsg,\n\t\t\tbrandManualSyncFailMsg\n\t\t} = faireAdminSettings;\n\n\t\tconst brandManualSyncButton = $(\n\t\t\t`#${prefix}${plugin}_brand_sync_manual`\n\t\t);\n\n\t\tconst brandSyncInputLocaleElem = $(\n\t\t\t`#${prefix}${plugin}_brand_locale`\n\t\t);\n\n\t\tconst brandSyncInputCurrencyElem = $(\n\t\t\t`#${prefix}${plugin}_brand_currency`\n\t\t);\n\n\t\t// Handles click on brand sync button.\n\t\tbrandManualSyncButton.on('click', function () {\n\t\t\t// Add an element to display request results messages.\n\t\t\tconst brandSyncMsgElem = addMsgElement(\n\t\t\t\t$(this),\n\t\t\t\t'faire_brand_manual_sync_msg'\n\t\t\t);\n\n\t\t\t// Start syncing brand.\n\t\t\tbrandSyncMsgElem.html(brandManualSyncMsg);\n\t\t\tbrandManualSyncButton.prop('disabled', true);\n\n\t\t\t$.post(\n\t\t\t\tajaxUrl,\n\t\t\t\t{\n\t\t\t\t\taction: 'faire_brand_manual_sync',\n\t\t\t\t\tnonce: nonceManualSyncBrand,\n\t\t\t\t},\n\t\t\t\tresponse => {\n\t\t\t\t\tif ( response.data === undefined || response.data.status !== 'success' ) {\n\t\t\t\t\t\tbrandSyncMsgElem.html(brandManualSyncFailMsg);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tbrandSyncMsgElem.html(brandManualSyncSuccessMsg);\n\t\t\t        if ( response.data.brand.locale !== undefined ) {\n\t\t\t            brandSyncInputLocaleElem.val( response.data.brand.locale );\n\t\t\t        }\n\t\t\t        if ( response.data.brand.currency !== undefined ) {\n\t\t\t            brandSyncInputCurrencyElem.val( response.data.brand.currency );\n\t\t\t        }\n\t\t\t\t}\n\t\t\t)\n\t\t\t.fail(\n\t\t\t\tresponse => {\n\t\t\t\t\tif (response.responseText !== undefined) {\n\t\t\t\t\t\tbrandSyncMsgElem.html(brandManualSyncFailMsg);\n\t\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\t\tconsole.error(response.responseText);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t)\n\t\t\t.always(\n\t\t\t\t() => brandManualSyncButton.prop('disabled', false)\n\t\t\t);\n\t\t});\n\t}\n\n\t/**\n\t * Manages manual syncing of orders.\n\t */\n\tconst manageOrdersManualSync = () => {\n\t\tconst {\n\t\t\tajaxUrl,\n\t\t\tnonceManualSyncOrders,\n\t\t\tordersManualSyncMsg,\n\t\t\tordersManualSyncFailed\n\t\t} = faireAdminSettings;\n\n\t\tconst ordersManualSyncButton = $(\n\t\t\t`#${prefix}${plugin}_order_sync_manual`\n\t\t);\n\n\t\t// Handles click on orders sync button.\n\t\tordersManualSyncButton.on('click', function () {\n\t\t\t// Add an element to display manual orders sync messages.\n\t\t\t// Add an element to display connection test messages.\n\t\t\tconst ordersSyncMsgElem = addMsgElement(\n\t\t\t\t$(this),\n\t\t\t\t'order_sync_results'\n\t\t\t);\n\n\t\t\tconst ordersSyncResults = $(\n\t\t\t\t`#${prefix}${plugin}_order_sync_results`\n\t\t\t);\n\n\t\t\t// Start syncing orders.\n\t\t\tordersSyncMsgElem.html(ordersManualSyncMsg);\n\t\t\tordersManualSyncButton.prop('disabled', true);\n\n\t\t\t$.post(\n\t\t\t\tajaxUrl,\n\t\t\t\t{\n\t\t\t\t\taction: 'faire_orders_manual_sync',\n\t\t\t\t\tnonce: nonceManualSyncOrders,\n\t\t\t\t},\n\t\t\t\tresponse => {\n\t\t\t\t\tordersSyncMsgElem.html('');\n\t\t\t\t\tordersSyncResults.val(\n\t\t\t\t\t\tresponse.data === undefined ? '' : response.data\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t)\n\t\t\t.fail(\n\t\t\t\tresponse => {\n\t\t\t\t\tif (response.responseJSON.data !== undefined) {\n\t\t\t\t\t\tordersSyncMsgElem.html(response.responseJSON.data);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tordersSyncMsgElem.html(ordersManualSyncFailed);\n\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\tconsole.error(response);\n\t\t\t\t}\n\t\t\t)\n\t\t\t.always(() => ordersManualSyncButton.prop('disabled', false));\n\t\t});\n\t};\n\n\t/**\n\t * Inits manage of settings for orders scheduled syncing.\n\t */\n\tconst manageOrdersSyncScheduleSettings = () => {\n\t\tconst orderSyncMode = $(`#${prefix}${plugin}_order_sync_mode`);\n\n\t\tconst setOrderScheduleSyncSettingsVisibility = function () {\n\t\t\tconst visible = orderSyncMode.val() === 'sync_scheduled';\n\n\t\t\t$(`#${prefix}${plugin}_order_sync_schedule_num`)\n\t\t\t\t.closest('tr')\n\t\t\t\t.toggle(visible);\n\t\t\t$(`#${prefix}${plugin}_order_sync_schedule_time`)\n\t\t\t\t.closest('tr')\n\t\t\t\t.toggle(visible);\n\t\t};\n\n\t\t// Handle click on skip order scheduled syncing checkbox.\n\t\torderSyncMode.on('change', function () {\n\t\t\tsetOrderScheduleSyncSettingsVisibility();\n\t\t});\n\n\t\tsetOrderScheduleSyncSettingsVisibility();\n\t};\n\n\t/**\n\t * Manages finish setup button.\n\t */\n\tconst manageFinishSetupButton = () => {\n\n\t\tconst finishSetupButton = $(\n\t\t\t`#${prefix}${plugin}_initial_setup`\n\t\t);\n\n\t\tconst initialSetupInputName = `${prefix}${plugin}_initial_setup_trigger`;\n\n\t\tconst formSubmitButton = $(\n\t\t\t`#mainform button[type=submit]`\n\t\t);\n\n\t\t// Handles click on products sync button.\n\t\tfinishSetupButton.on('click', function () {\n\n\t\t\t// Add hidden input so we can trigger initial setup\n\t\t\t$('<input>').attr({\n\t\t\t\ttype: 'hidden',\n\t    \t\tname: initialSetupInputName,\n\t\t\t\tvalue: 'yes'\n\t\t\t}).insertAfter( formSubmitButton );\n\n\t\t\t// Submit form\n\t\t\tformSubmitButton.trigger('click');\n\t\t});\n\t};\n\n\t/**\n\t * Manages Download product linking CSV button.\n\t */\n\t const manageDownloadProductLinkingCSVButton = () => {\n\n\t\tconst downloadProductLinkingButton = $(\n\t\t\t`#${prefix}${plugin}_product_linking_create_products_csv`\n\t\t);\n\n\t\t// Handles click on  download csv button.\n\t\tdownloadProductLinkingButton.on('click', function () {\n\n\t\t\twindow.location = window.location + '&wc_faire_link_products_csv=yes';\n\n\t\t});\n\t};\n\n\t/**\n\t * Manages Download variations linking CSV button.\n\t */\n\t const manageDownloadVariationsLinkingCSVButton = () => {\n\n\t\tconst downloadVariationsLinkingButton = $(\n\t\t\t`#${prefix}${plugin}_product_linking_create_variations_csv`\n\t\t);\n\n\t\t// Handles click on download csv button.\n\t\tdownloadVariationsLinkingButton.on('click', function () {\n\n\t\t\twindow.location = window.location + '&wc_faire_link_variations_csv=yes';\n\n\t\t});\n\t};\n\n\t$(document).ready(() => {\n\t\t// Ensure current page is WooCommerce Faire integration settings.\n\t\tif (window.location.href.indexOf(`section=${plugin}`) === -1) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Inits manage product sync mode.\n\t\tmanageProductSyncMode();\n\t\tmanageProductPricingPolicy();\n\t\t// Inits manage product wholesale mapping.\n\t\tmanageProductWholesaleMapField();\n\t\t// Inits manage products manual sync.\n\t\tmanageProductsManualSync();\n    // Inits manage products unlinking manual sync.\n\t\tmanageProductUnlinkingManualSync();\n\t\t// Inits manage products taxonomy manual sync.\n\t\tmanageProductTaxonomyManualSync();\n\t\t// Inits manage products linking manual sync.\n\t\tmanageProductLinkingManualSync();\n\t\t// Init download product linking csv button click.\n\t\tmanageDownloadProductLinkingCSVButton();\n\t\t// Init download variations linking csv button click.\n\t\tmanageDownloadVariationsLinkingCSVButton();\n\t\t// Inits manage brand manual sync.\n\t\tmanageBrandManualSync();\n\t\t// Inits manage orders manual sync.\n\t\tmanageOrdersManualSync();\n\t\t// Inits manage of settings for orders scheduled syncing.\n\t\tmanageOrdersSyncScheduleSettings();\n\t\t// Inits API test connection functionality.\n\t\ttestApiConnection();\n\t\t// Init finish setup button click.\n\t\tmanageFinishSetupButton();\n\t});\n})(window.jQuery);\n"],"names":["$","prefix","plugin","addMsgElement","manageProductSyncMode","window","jQuery","baseElement","elementId","newElement","concat","length","after","next","productsManualSyncLinkExistingMsg","faireAdminSettings","productSyncMode","existingProductsFoundOnIntialSetup","setSyncScheduleFieldsVisibility","closest","toggle","val","on","e","parseInt","confirm","allowSelectCheckProductLinkingWarning","trigger","preventDefault","document","ready","productPricePolicy","productPricePolicyChecked","productWholeSaleMultiplier","productWholeSalePercentage","setProductWholesaleFieldsVisibility","productWholesaleMapped","setProductWholesaleMapFieldVisibility","ajaxUrl","nonceManualSyncProducts","productsManualSyncMsg","productsManualSyncButton","orderSyncMode","setOrderScheduleSyncSettingsVisibility","finishSetupButton","initialSetupInputName","formSubmitButton","location","href","indexOf","target","this","is","productsSyncMsgElem","html","prop","post","action","nonce","response","undefined","data","Array","isArray","join","fail","always","nonceManualSyncProductUnlinking","productUnlinkingManualSyncMsg","productUnlinkingManualSyncSuccessMsg","productUnlinkingManualSyncFailMsg","productUnlinkingManualSyncButton","productUnlinkingSyncMsgElem","status","info","responseText","console","error","manageProductUnlinkingManualSync","nonceManualSyncProductTaxonomy","productTaxonomyManualSyncMsg","productTaxonomyManualSyncSuccessMsg","productTaxonomyManualSyncFailMsg","productTaxonomyManualSyncButton","productTaxonomySyncMsgElem","manageProductTaxonomyManualSync","nonceManualSyncProductLinking","productLinkingManualSyncMsg","productLinkingManualSyncFailed","productLinkingManualSyncButton","downloadProductLinkingButton","downloadVariationsLinkingButton","productLinkingSyncMsgElem","productLinkingSyncResults","message","products_csv","attr","addClass","removeClass","variations_csv","responseJSON","manageProductLinkingManualSync","nonceManualSyncBrand","brandManualSyncMsg","brandManualSyncSuccessMsg","brandManualSyncFailMsg","brandManualSyncButton","brandSyncInputLocaleElem","brandSyncInputCurrencyElem","brandSyncMsgElem","brand","locale","currency","manageBrandManualSync","nonceManualSyncOrders","ordersManualSyncMsg","ordersManualSyncFailed","ordersManualSyncButton","ordersSyncMsgElem","ordersSyncResults","manageOrdersManualSync","visible","nonceApiTestConnection","testingApiConnectionMsg","apiKeyEmptyError","testApiConnectionButton","connectionTestMsgElem","trim","testApiConnection","type","name","value","insertAfter"],"version":3,"file":"admin_settings.js.map"}
  • faire-for-woocommerce/tags/1.3.6/faire-for-woocommerce.php

    r2853863 r2864583  
    55 * Author: Faire
    66 * Author URI: https://faire.com/
    7  * Version: 1.3.4
     7 * Version: 1.3.6
    88 *
    99 * This program is free software: you can redistribute it and/or modify
     
    2929}
    3030
    31 const VERSION = '1.3.4';
     31const VERSION = '1.3.6';
    3232
    3333if ( ! defined( 'FAIRE_WC_PLUGIN_FILE' ) ) {
  • faire-for-woocommerce/tags/1.3.6/readme.txt

    r2853863 r2864583  
    44Requires at least: 4.7
    55Tested up to: 6.0
    6 Stable tag: 1.3.3
     6Stable tag: 1.3.6
    77Requires PHP: 7.4
    88WC requires at least: 6.0
     
    7474== Changelog ==
    7575
     76= 1.3.6 =
     77* Added product unlinking
     78
     79= 1.3.5 =
     80* Fixed country code in imported orders had format ISO_3166-1 alpha-3.
     81* Minor fixes to code format in class settings.
     82
    7683= 1.3.4 =
    7784* Fixed orders sync should import orders 30 days back only first time.
  • faire-for-woocommerce/tags/1.3.6/src/admin/class-assets.php

    r2838583 r2864583  
    8383                    'brandManualSyncSuccessMsg' => __( 'Brand profile successfully synced.', 'faire-for-woocommerce' ),
    8484                    'brandManualSyncFailMsg'    => __( 'Brand profile syncing failed.', 'faire-for-woocommerce' ),
     85          // Product unlinking manual sync.
     86                    'nonceManualSyncProductUnlinking'      => wp_create_nonce( 'faire_product_unlinking_sync' ),
     87                    'productUnlinkingManualSyncMsg'        => __( 'Unlinking products...', 'faire-for-woocommerce' ),
     88                    'productUnlinkingManualSyncSuccessMsg' => __( 'Products successfully unlinked.', 'faire-for-woocommerce' ),
     89                    'productUnlinkingManualSyncFailMsg'    => __( 'Unlinking products failed.', 'faire-for-woocommerce' ),
    8590                )
    8691            );
  • faire-for-woocommerce/tags/1.3.6/src/admin/class-settings.php

    r2838583 r2864583  
    88namespace Faire\Wc\Admin;
    99
     10use Faire\Wc\Country;
    1011use WC_Settings_API;
    1112
     
    291292     */
    292293    public function get_order_sync_skip_orders_create(): bool {
    293     if ( TRUE === $this->get_suppress_currency_matching() ) {
    294       return TRUE;
    295     }
     294        if ( TRUE === $this->get_suppress_currency_matching() ) {
     295            return TRUE;
     296        }
    296297        return $this->get_option( 'order_sync_skip_orders_create', 'no' ) === 'yes';
    297298    }
     
    400401        );
    401402    }
    402    
     403
    403404    /**
    404405     * Saves the initial setup found existing products
     
    478479        // phpcs:ignore WordPress.PHP.YodaConditions.NotYoda
    479480        $locale_matches = explode( '_', $wp_locale )[0] === explode( '_', $brand_locale )[0];
    480     if ( TRUE === $this->get_suppress_currency_matching() ) {
    481       return $locale_matches;
    482     } else {
    483       return $locale_matches && ( $this->get_brand_currency() === get_woocommerce_currency() );
    484     }
    485     }
    486    
     481        if ( TRUE === $this->get_suppress_currency_matching() ) {
     482            return $locale_matches;
     483        } else {
     484            return $locale_matches && ( $this->get_brand_currency() === get_woocommerce_currency() );
     485        }
     486    }
     487
    487488    /**
    488489     * Get the 3 letter ISO country code for current WC shop base country code (2 letter ISO)
     
    492493    public function get_shop_iso3_country_code(): string {
    493494        $country_iso2 = WC()->countries->get_base_country();
    494         return $this->convert_country_iso2_to_iso3( $country_iso2 );
     495        return Country::convert_country_iso2_to_iso3( $country_iso2 );
    495496    }
    496497
     
    505506        return in_array( $country_iso2, $eu_countries ) ? true : false;
    506507    }
    507    
    508     /**
    509      * Get iso3 for iso2 country code
    510      *
    511      * @return string
    512      */
    513     public function convert_country_iso2_to_iso3( string $country ): string {
    514         $countries = apply_filters( 'faire_wc_country_iso2_to_iso3', array(
    515             'AF' => 'AFG', // Afghanistan.
    516             'AX' => 'ALA', // Aland Islands.
    517             'AL' => 'ALB', // Albania.
    518             'DZ' => 'DZA', // Algeria.
    519             'AS' => 'ASM', // American Samoa.
    520             'AD' => 'AND', // Andorra.
    521             'AO' => 'AGO', // Angola.
    522             'AI' => 'AIA', // Anguilla.
    523             'AQ' => 'ATA', // Antarctica.
    524             'AG' => 'ATG', // Antigua and Barbuda.
    525             'AR' => 'ARG', // Argentina.
    526             'AM' => 'ARM', // Armenia.
    527             'AW' => 'ABW', // Aruba.
    528             'AU' => 'AUS', // Australia.
    529             'AT' => 'AUT', // Austria.
    530             'AZ' => 'AZE', // Azerbaijan.
    531             'BS' => 'BHS', // Bahamas.
    532             'BH' => 'BHR', // Bahrain.
    533             'BD' => 'BGD', // Bangladesh.
    534             'BB' => 'BRB', // Barbados.
    535             'BY' => 'BLR', // Belarus.
    536             'BE' => 'BEL', // Belgium.
    537             'BZ' => 'BLZ', // Belize.
    538             'BJ' => 'BEN', // Benin.
    539             'BM' => 'BMU', // Bermuda.
    540             'BT' => 'BTN', // Bhutan.
    541             'BO' => 'BOL', // Bolivia.
    542             'BQ' => 'BES', // Bonaire, Saint Estatius and Saba.
    543             'BA' => 'BIH', // Bosnia and Herzegovina.
    544             'BW' => 'BWA', // Botswana.
    545             'BV' => 'BVT', // Bouvet Islands.
    546             'BR' => 'BRA', // Brazil.
    547             'IO' => 'IOT', // British Indian Ocean Territory.
    548             'BN' => 'BRN', // Brunei.
    549             'BG' => 'BGR', // Bulgaria.
    550             'BF' => 'BFA', // Burkina Faso.
    551             'BI' => 'BDI', // Burundi.
    552             'KH' => 'KHM', // Cambodia.
    553             'CM' => 'CMR', // Cameroon.
    554             'CA' => 'CAN', // Canada.
    555             'CV' => 'CPV', // Cape Verde.
    556             'KY' => 'CYM', // Cayman Islands.
    557             'CF' => 'CAF', // Central African Republic.
    558             'TD' => 'TCD', // Chad.
    559             'CL' => 'CHL', // Chile.
    560             'CN' => 'CHN', // China.
    561             'CX' => 'CXR', // Christmas Island.
    562             'CC' => 'CCK', // Cocos (Keeling) Islands.
    563             'CO' => 'COL', // Colombia.
    564             'KM' => 'COM', // Comoros.
    565             'CG' => 'COG', // Congo.
    566             'CD' => 'COD', // Congo, Democratic Republic of the.
    567             'CK' => 'COK', // Cook Islands.
    568             'CR' => 'CRI', // Costa Rica.
    569             'CI' => 'CIV', // Côte d\'Ivoire.
    570             'HR' => 'HRV', // Croatia.
    571             'CU' => 'CUB', // Cuba.
    572             'CW' => 'CUW', // Curaçao.
    573             'CY' => 'CYP', // Cyprus.
    574             'CZ' => 'CZE', // Czech Republic.
    575             'DK' => 'DNK', // Denmark.
    576             'DJ' => 'DJI', // Djibouti.
    577             'DM' => 'DMA', // Dominica.
    578             'DO' => 'DOM', // Dominican Republic.
    579             'EC' => 'ECU', // Ecuador.
    580             'EG' => 'EGY', // Egypt.
    581             'SV' => 'SLV', // El Salvador.
    582             'GQ' => 'GNQ', // Equatorial Guinea.
    583             'ER' => 'ERI', // Eritrea.
    584             'EE' => 'EST', // Estonia.
    585             'ET' => 'ETH', // Ethiopia.
    586             'FK' => 'FLK', // Falkland Islands.
    587             'FO' => 'FRO', // Faroe Islands.
    588             'FJ' => 'FIJ', // Fiji.
    589             'FI' => 'FIN', // Finland.
    590             'FR' => 'FRA', // France.
    591             'GF' => 'GUF', // French Guiana.
    592             'PF' => 'PYF', // French Polynesia.
    593             'TF' => 'ATF', // French Southern Territories.
    594             'GA' => 'GAB', // Gabon.
    595             'GM' => 'GMB', // Gambia.
    596             'GE' => 'GEO', // Georgia.
    597             'DE' => 'DEU', // Germany.
    598             'GH' => 'GHA', // Ghana.
    599             'GI' => 'GIB', // Gibraltar.
    600             'GR' => 'GRC', // Greece.
    601             'GL' => 'GRL', // Greenland.
    602             'GD' => 'GRD', // Grenada.
    603             'GP' => 'GLP', // Guadeloupe.
    604             'GU' => 'GUM', // Guam.
    605             'GT' => 'GTM', // Guatemala.
    606             'GG' => 'GGY', // Guernsey.
    607             'GN' => 'GIN', // Guinea.
    608             'GW' => 'GNB', // Guinea-Bissau.
    609             'GY' => 'GUY', // Guyana.
    610             'HT' => 'HTI', // Haiti.
    611             'HM' => 'HMD', // Heard Island and McDonald Islands.
    612             'VA' => 'VAT', // Holy See (Vatican City State).
    613             'HN' => 'HND', // Honduras.
    614             'HK' => 'HKG', // Hong Kong.
    615             'HU' => 'HUN', // Hungary.
    616             'IS' => 'ISL', // Iceland.
    617             'IN' => 'IND', // India.
    618             'ID' => 'IDN', // Indonesia.
    619             'IR' => 'IRN', // Iran.
    620             'IQ' => 'IRQ', // Iraq.
    621             'IE' => 'IRL', // Republic of Ireland.
    622             'IM' => 'IMN', // Isle of Man.
    623             'IL' => 'ISR', // Israel.
    624             'IT' => 'ITA', // Italy.
    625             'JM' => 'JAM', // Jamaica.
    626             'JP' => 'JPN', // Japan.
    627             'JE' => 'JEY', // Jersey.
    628             'JO' => 'JOR', // Jordan.
    629             'KZ' => 'KAZ', // Kazakhstan.
    630             'KE' => 'KEN', // Kenya.
    631             'KI' => 'KIR', // Kiribati.
    632             'KP' => 'PRK', // Korea, Democratic People's Republic of.
    633             'KR' => 'KOR', // Korea, Republic of (South).
    634             'KW' => 'KWT', // Kuwait.
    635             'KG' => 'KGZ', // Kyrgyzstan.
    636             'LA' => 'LAO', // Laos.
    637             'LV' => 'LVA', // Latvia.
    638             'LB' => 'LBN', // Lebanon.
    639             'LS' => 'LSO', // Lesotho.
    640             'LR' => 'LBR', // Liberia.
    641             'LY' => 'LBY', // Libya.
    642             'LI' => 'LIE', // Liechtenstein.
    643             'LT' => 'LTU', // Lithuania.
    644             'LU' => 'LUX', // Luxembourg.
    645             'MO' => 'MAC', // Macao S.A.R., China.
    646             'MK' => 'MKD', // Macedonia.
    647             'MG' => 'MDG', // Madagascar.
    648             'MW' => 'MWI', // Malawi.
    649             'MY' => 'MYS', // Malaysia.
    650             'MV' => 'MDV', // Maldives.
    651             'ML' => 'MLI', // Mali.
    652             'MT' => 'MLT', // Malta.
    653             'MH' => 'MHL', // Marshall Islands.
    654             'MQ' => 'MTQ', // Martinique.
    655             'MR' => 'MRT', // Mauritania.
    656             'MU' => 'MUS', // Mauritius.
    657             'YT' => 'MYT', // Mayotte.
    658             'MX' => 'MEX', // Mexico.
    659             'FM' => 'FSM', // Micronesia.
    660             'MD' => 'MDA', // Moldova.
    661             'MC' => 'MCO', // Monaco.
    662             'MN' => 'MNG', // Mongolia.
    663             'ME' => 'MNE', // Montenegro.
    664             'MS' => 'MSR', // Montserrat.
    665             'MA' => 'MAR', // Morocco.
    666             'MZ' => 'MOZ', // Mozambique.
    667             'MM' => 'MMR', // Myanmar.
    668             'NA' => 'NAM', // Namibia.
    669             'NR' => 'NRU', // Nauru.
    670             'NP' => 'NPL', // Nepal.
    671             'NL' => 'NLD', // Netherlands.
    672             'AN' => 'ANT', // Netherlands Antilles.
    673             'NC' => 'NCL', // New Caledonia.
    674             'NZ' => 'NZL', // New Zealand.
    675             'NI' => 'NIC', // Nicaragua.
    676             'NE' => 'NER', // Niger.
    677             'NG' => 'NGA', // Nigeria.
    678             'NU' => 'NIU', // Niue.
    679             'NF' => 'NFK', // Norfolk Island.
    680             'MP' => 'MNP', // Northern Mariana Islands.
    681             'NO' => 'NOR', // Norway.
    682             'OM' => 'OMN', // Oman.
    683             'PK' => 'PAK', // Pakistan.
    684             'PW' => 'PLW', // Palau.
    685             'PS' => 'PSE', // Palestinian Territory.
    686             'PA' => 'PAN', // Panama.
    687             'PG' => 'PNG', // Papua New Guinea.
    688             'PY' => 'PRY', // Paraguay.
    689             'PE' => 'PER', // Peru.
    690             'PH' => 'PHL', // Philippines.
    691             'PN' => 'PCN', // Pitcairn.
    692             'PL' => 'POL', // Poland.
    693             'PT' => 'PRT', // Portugal.
    694             'PR' => 'PRI', // Puerto Rico.
    695             'QA' => 'QAT', // Qatar.
    696             'RE' => 'REU', // Reunion.
    697             'RO' => 'ROU', // Romania.
    698             'RU' => 'RUS', // Russia.
    699             'RW' => 'RWA', // Rwanda.
    700             'BL' => 'BLM', // Saint Barthelemy.
    701             'SH' => 'SHN', // Saint Helena.
    702             'KN' => 'KNA', // Saint Kitts and Nevis.
    703             'LC' => 'LCA', // Saint Lucia.
    704             'MF' => 'MAF', // Saint Martin (French part).
    705             'SX' => 'SXM', // Sint Maarten / Saint Matin (Dutch part).
    706             'PM' => 'SPM', // Saint Pierre and Miquelon.
    707             'VC' => 'VCT', // Saint Vincent and the Grenadines.
    708             'WS' => 'WSM', // Samoa.
    709             'SM' => 'SMR', // San Marino.
    710             'ST' => 'STP', // Sao Tome and Principe.
    711             'SA' => 'SAU', // Saudi Arabia.
    712             'SN' => 'SEN', // Senegal.
    713             'RS' => 'SRB', // Serbia.
    714             'SC' => 'SYC', // Seychelles.
    715             'SL' => 'SLE', // Sierra Leone.
    716             'SG' => 'SGP', // Singapore.
    717             'SK' => 'SVK', // Slovakia.
    718             'SI' => 'SVN', // Slovenia.
    719             'SB' => 'SLB', // Solomon Islands.
    720             'SO' => 'SOM', // Somalia.
    721             'ZA' => 'ZAF', // South Africa.
    722             'GS' => 'SGS', // South Georgia/Sandwich Islands.
    723             'SS' => 'SSD', // South Sudan.
    724             'ES' => 'ESP', // Spain.
    725             'LK' => 'LKA', // Sri Lanka.
    726             'SD' => 'SDN', // Sudan.
    727             'SR' => 'SUR', // Suriname.
    728             'SJ' => 'SJM', // Svalbard and Jan Mayen.
    729             'SZ' => 'SWZ', // Swaziland.
    730             'SE' => 'SWE', // Sweden.
    731             'CH' => 'CHE', // Switzerland.
    732             'SY' => 'SYR', // Syria.
    733             'TW' => 'TWN', // Taiwan.
    734             'TJ' => 'TJK', // Tajikistan.
    735             'TZ' => 'TZA', // Tanzania.
    736             'TH' => 'THA', // Thailand.
    737             'TL' => 'TLS', // Timor-Leste.
    738             'TG' => 'TGO', // Togo.
    739             'TK' => 'TKL', // Tokelau.
    740             'TO' => 'TON', // Tonga.
    741             'TT' => 'TTO', // Trinidad and Tobago.
    742             'TN' => 'TUN', // Tunisia.
    743             'TR' => 'TUR', // Turkey.
    744             'TM' => 'TKM', // Turkmenistan.
    745             'TC' => 'TCA', // Turks and Caicos Islands.
    746             'TV' => 'TUV', // Tuvalu.
    747             'UG' => 'UGA', // Uganda.
    748             'UA' => 'UKR', // Ukraine.
    749             'AE' => 'ARE', // United Arab Emirates.
    750             'GB' => 'GBR', // United Kingdom.
    751             'US' => 'USA', // United States.
    752             'UM' => 'UMI', // United States Minor Outlying Islands.
    753             'UY' => 'URY', // Uruguay.
    754             'UZ' => 'UZB', // Uzbekistan.
    755             'VU' => 'VUT', // Vanuatu.
    756             'VE' => 'VEN', // Venezuela.
    757             'VN' => 'VNM', // Vietnam.
    758             'VG' => 'VGB', // Virgin Islands, British.
    759             'VI' => 'VIR', // Virgin Island, U.S..
    760             'WF' => 'WLF', // Wallis and Futuna.
    761             'EH' => 'ESH', // Western Sahara.
    762             'YE' => 'YEM', // Yemen.
    763             'ZM' => 'ZMB', // Zambia.
    764             'ZW' => 'ZWE', // Zimbabwe.
    765         ) );
    766         return isset( $countries[ $country ] ) ? $countries[ $country ] : $country;
    767     }
    768508
    769509    /**
     
    807547    }
    808548
    809   /**
     549    /**
    810550     * Determine faire geo constraint country or country_group based on WC base country
    811551     *
     
    837577    }
    838578
    839   /**
     579    /**
    840580     * Optional override to suppress currency matching WC and Faire
    841581     *
  • faire-for-woocommerce/tags/1.3.6/src/admin/class-wc-integration-faire.php

    r2853863 r2864583  
    1919use Faire\Wc\Sync\Sync_Brand;
    2020use Faire\Wc\Sync\Sync_Product_Linking;
     21use Faire\Wc\Sync\Sync_Product_Unlinking;
    2122use Faire\Wc\Admin\Settings;
    2223
     
    106107                new Sync_Product_Linking( new Product_Api(), new Settings() ),
    107108                'ajax_product_linking_manual_sync',
     109            )
     110        );
     111
     112    // Handles the Ajax call to unlink products
     113        add_action(
     114            'wp_ajax_faire_product_unlinking_manual_sync',
     115            array(
     116                new Sync_Product_Unlinking( new Settings() ),
     117                'ajax_product_unlinking_sync',
    108118            )
    109119        );
     
    551561                'desc_tip'    => true,
    552562            ),
    553            
     563      // Faire product unlinking sync.
     564            'product_unlinking_title'                   => array(
     565                'title'       => __( 'Unlink products', 'faire-for-woocommerce' ),
     566                'type'        => 'title',
     567                'description' => __( 'Removes all links between wordpress products and faire products.', 'faire-for-woocommerce' ),
     568            ),
     569            'product_unlinking_manual_sync'             => array(
     570                'title'             => __( 'Manual Unlink', 'faire-for-woocommerce' ),
     571                'label'             => __( 'Unlink all products now', 'faire-for-woocommerce' ),
     572                'type'              => 'button',
     573                'description'       => __( 'Unlink all wordpress products with faire products and variations.', 'faire-for-woocommerce' ),
     574                'desc_tip'          => true,
     575            ),
    554576        );
    555577    }
  • faire-for-woocommerce/tags/1.3.6/src/class-faire.php

    r2838583 r2864583  
    206206            array( $this, 'handle_products_custom_query_var' ),
    207207            10,
     208            2
     209        );
     210
     211    // Extends WC_Product_Query to allow retrieving products that have Faire product IDs
     212        add_filter(
     213            'woocommerce_product_data_store_cpt_get_products_query',
     214            array( $this, 'handle_products_faire_meta_exists_custom_query_var' ),
     215            11,
    208216            2
    209217        );
     
    330338    }
    331339
     340  /**
     341     * Handles custom query vars to get products.
     342     *
     343     * @param array $query - Args for WP_Query.
     344     * @param array $query_vars - Query vars from WC_Product_Query.
     345     *
     346     * @return array modified $query
     347     */
     348    public function handle_products_faire_meta_exists_custom_query_var(
     349        array $query,
     350        array $query_vars
     351    ): array {
     352        $settings    = new Settings();
     353       
     354    if ( isset( $query_vars['_faire_id_exists'] ) && '' !== $query_vars['_faire_id_exists'] ) {
     355      $query['meta_query'][] = array(
     356          'key'     => $settings->get_meta_faire_product_id(),
     357          'value'   => '',
     358          'compare' => '!=',
     359      );
     360    }
     361
     362        return $query;
     363    }
     364
    332365    /**
    333366     * Load Localisation files.
  • faire-for-woocommerce/tags/1.3.6/src/sync/class-sync-product-linking.php

    r2853863 r2864583  
    1515use Faire\Wc\Sync\Sync_Product_Scheduler;
    1616use Faire\Wc\Utils;
    17 use Faire\Wc\Woocommerce\Product as WC_Product;
    1817
    1918if ( ! defined( 'ABSPATH' ) ) {
     
    4443     */
    4544    private Settings $settings;
     45
     46  /**
     47     * The scheduler.
     48     *
     49     * @var Sync_Product_Scheduler
     50     */
     51    private Sync_Product_Scheduler $scheduler;
    4652
    4753    /**
     
    172178        $result = array();
    173179
     180    $args         = array();
    174181        $default_args = array(
    175182            'page'  => 1,
     
    947954                $row['In stock?'] = 1;
    948955            }
    949             $row['Stock'] = ( isset($faire_variant->available_quantity) && $faire_product->variants[0]->available_quantity !== '' ) ? $faire_product->variants[0]->available_quantity : ''; // Leave empy string for no stock management
     956            $row['Stock'] = ( isset($faire_product->variants[0]->available_quantity) && $faire_product->variants[0]->available_quantity !== '' ) ? $faire_product->variants[0]->available_quantity : ''; // Leave empy string for no stock management
    950957
    951958            $image_array = [];
     
    12561263
    12571264        $product_rows = $this->get_products_create_csv();
    1258         foreach ( $product_rows as $rows ) {
    1259             $parent_product = null; // reset for every row group
    1260             foreach ( $rows as $row ) {
    1261                 if ( 'simple' === $row['Type'] || 'variable' === $row['Type'] ) {
    1262                     $product = null;
    1263                     try {
    1264                         $product = $this->create_product( $row );
    1265                     } catch ( \WC_Data_Exception $e ) {
    1266                         error_log('create_product WC_Data_Exception: '.$e->getMessage() );
    1267                     }
    1268                     if ( $product ) {
    1269                         $parent_product = $product; // Set parent id for use on variations (if nay)
    1270                         $results[] = Utils::create_import_success_entry(
    1271                             sprintf(
    1272                                 __( 'Created faire product %s as product id %s.', 'faire-for-woocommerce' ),
    1273                                 '"'.$row['Name'].'"',
    1274                                 $product->get_id()
    1275                             )
    1276                         );
    1277                     } else {
    1278                         $results[] = Utils::create_import_error_entry(
    1279                             sprintf(
    1280                                 __( 'Failed to create faire product %s as product.', 'faire-for-woocommerce' ),
    1281                                 '"'.$row['Name'].'"',
    1282                             )
    1283                         );
    1284                     }
    1285                 } elseif ( 'variation' === $row['Type'] ) {
    1286 
    1287                      // If we have a parent from a previous parent row
    1288                     if ( $parent_product ) {
    1289                         $row['Parent'] = 'id:'.$parent_product->get_id();
    1290                     }
    1291 
    1292                     $variation = null;
    1293                     try {
    1294                         $variation = $this->create_variation( $row, $parent_product );
    1295                     } catch ( \WC_Data_Exception $e ) {
    1296                         error_log('create_variation WC_Data_Exception: '.$e->getMessage() );
    1297                     }
    1298                     if ( $variation ) {
    1299                         $results[] = Utils::create_import_success_entry(
    1300                             sprintf(
    1301                                 __( 'Created faire variant %s on product id %s.', 'faire-for-woocommerce' ),
    1302                                 '"'.$row['Name'].'"',
    1303                                 $variation->get_id()
    1304                             )
    1305                         );
    1306                     } else {
    1307                         $results[] = Utils::create_import_error_entry(
    1308                             sprintf(
    1309                                 __( 'Failed to create faire variant %s on product %s.', 'faire-for-woocommerce' ),
    1310                                 '"'.$row['Name'].'"',
    1311                                 $row['Parent']
    1312                             )
    1313                         );
    1314                     }
    1315                 }
    1316             }
    1317         }   
     1265    if ( $product_rows ) {
     1266      foreach ( $product_rows as $rows ) {
     1267        $parent_product = null; // reset for every row group
     1268        foreach ( $rows as $row ) {
     1269          if ( 'simple' === $row['Type'] || 'variable' === $row['Type'] ) {
     1270            $product = null;
     1271            try {
     1272              $product = $this->create_product( $row );
     1273            } catch ( \WC_Data_Exception $e ) {
     1274              error_log('create_product WC_Data_Exception: '.$e->getMessage() );
     1275            }
     1276            if ( $product ) {
     1277              $parent_product = $product; // Set parent id for use on variations (if nay)
     1278              $results[] = Utils::create_import_success_entry(
     1279                sprintf(
     1280                  __( 'Created faire product %s as product id %s.', 'faire-for-woocommerce' ),
     1281                  '"'.$row['Name'].'"',
     1282                  $product->get_id()
     1283                )
     1284              );
     1285            } else {
     1286              $results[] = Utils::create_import_error_entry(
     1287                sprintf(
     1288                  __( 'Failed to create faire product %s as product.', 'faire-for-woocommerce' ),
     1289                  '"'.$row['Name'].'"',
     1290                )
     1291              );
     1292            }
     1293          } elseif ( 'variation' === $row['Type'] ) {
     1294
     1295            // If we have a parent from a previous parent row
     1296            if ( $parent_product ) {
     1297              $row['Parent'] = 'id:'.$parent_product->get_id();
     1298            }
     1299
     1300            $variation = null;
     1301            try {
     1302              $variation = $this->create_variation( $row, $parent_product );
     1303            } catch ( \WC_Data_Exception $e ) {
     1304              error_log('create_variation WC_Data_Exception: '.$e->getMessage() );
     1305            }
     1306            if ( $variation ) {
     1307              $results[] = Utils::create_import_success_entry(
     1308                sprintf(
     1309                  __( 'Created faire variant %s on product id %s.', 'faire-for-woocommerce' ),
     1310                  '"'.$row['Name'].'"',
     1311                  $variation->get_id()
     1312                )
     1313              );
     1314            } else {
     1315              $results[] = Utils::create_import_error_entry(
     1316                sprintf(
     1317                  __( 'Failed to create faire variant %s on product %s.', 'faire-for-woocommerce' ),
     1318                  '"'.$row['Name'].'"',
     1319                  $row['Parent']
     1320                )
     1321              );
     1322            }
     1323          }
     1324        }
     1325      }
     1326    }
    13181327        return $results;
    13191328    }
     
    13271336        $results = [];
    13281337        $product_rows = $this->get_variants_create_csv();
    1329         foreach ( $product_rows as $rows ) {
    1330             foreach ( $rows as $row ) {
    1331                 $variation = null;
    1332                 try {
    1333                     $variation = $this->create_variation( $row );
    1334                 } catch ( \WC_Data_Exception $e ) {
    1335                     error_log('create_variation WC_Data_Exception: '.$e->getMessage() );
    1336                 }
    1337                
    1338                 if ( $variation ) {
    1339                     $results[] = Utils::create_import_success_entry(
    1340                         sprintf(
    1341                             __( 'Created faire variant %s on product id %s.', 'faire-for-woocommerce' ),
    1342                             $faire_variant->id,
    1343                             $variation->get_id()
    1344                         )
    1345                     );
    1346                 } else {
    1347                     $results[] = Utils::create_import_error_entry(
    1348                         sprintf(
    1349                             __( 'Failed to create faire variant %s on product %s.', 'faire-for-woocommerce' ),
    1350                             $faire_variant->id,
    1351                             $row['Parent']
    1352                         )
    1353                     );
    1354                 }
    1355             }
    1356         }   
     1338    if ( $product_rows ) {
     1339      foreach ( $product_rows as $rows ) {
     1340        foreach ( $rows as $row ) {
     1341          $variation = null;
     1342          try {
     1343            $variation = $this->create_variation( $row );
     1344          } catch ( \WC_Data_Exception $e ) {
     1345            error_log('create_variation WC_Data_Exception: '.$e->getMessage() );
     1346          }
     1347         
     1348          if ( $variation ) {
     1349            $results[] = Utils::create_import_success_entry(
     1350              sprintf(
     1351                __( 'Created faire variant on product id %s.', 'faire-for-woocommerce' ),
     1352                $variation->get_id()
     1353              )
     1354            );
     1355          } else {
     1356            $results[] = Utils::create_import_error_entry(
     1357              sprintf(
     1358                __( 'Failed to create faire variant on product %s.', 'faire-for-woocommerce' ),
     1359                $row['Parent']
     1360              )
     1361            );
     1362          }
     1363        }
     1364      }
     1365    }
    13571366        return $results;
    13581367    }
  • faire-for-woocommerce/tags/1.3.6/src/sync/class-sync-product.php

    r2853863 r2864583  
    1414use Faire\Wc\Utils;
    1515use Faire\Wc\Sync\Sync_Product_Scheduler;
     16use Faire\Wc\Sync\Sync_Product_Unlinking;
    1617
    1718if ( ! defined( 'ABSPATH' ) ) {
     
    257258     */
    258259    public function bulk_actions( $actions ) {
    259         $actions['faire_unpublished'] = __( 'Change Faire lifecycle state to unpublished', 'faire-for-woocommerce' );
    260         $actions['faire_published']   = __( 'Change Faire lifecycle state to published', 'faire-for-woocommerce' );
    261         $actions['faire_draft']       = __( 'Change Faire lifecycle state to draft', 'faire-for-woocommerce' );
     260        $actions['faire_unpublished']     = __( 'Change Faire lifecycle state to unpublished', 'faire-for-woocommerce' );
     261        $actions['faire_published']       = __( 'Change Faire lifecycle state to published', 'faire-for-woocommerce' );
     262        $actions['faire_draft']           = __( 'Change Faire lifecycle state to draft', 'faire-for-woocommerce' );
     263    $actions['faire_unlink_product']  = __( 'Unlink from Faire product', 'faire-for-woocommerce' );
    262264        return $actions;
    263265    }
    264266
    265267    /**
    266      * Make the action from selected orders.
     268     * Handle WP Admin products bulk actions
    267269     */
    268270    public function handle_bulk_actions( $redirect_to, $action, $post_ids ) {
    269         if ( ! in_array( $action, array( 'faire_unpublished', 'faire_published', 'faire_draft' ), true ) ) {
     271        if ( ! in_array( $action, array( 'faire_unpublished', 'faire_published', 'faire_draft', 'faire_unlink_product' ), true ) ) {
    270272            return $redirect_to;
    271273        }
     
    274276        $bulk_lifecycle_state = '';
    275277
    276         if ( 'faire_unpublished' === $action ) {
    277             $bulk_lifecycle_state = 'UNPUBLISHED';
    278         } elseif ( 'faire_published' === $action ) {
    279             $bulk_lifecycle_state = 'PUBLISHED';
    280         } elseif ( 'faire_draft' === $action ) {
    281             $bulk_lifecycle_state = 'DRAFT';
    282         }
    283 
    284         foreach ( $post_ids as $post_id ) {
    285                 $product = wc_get_product( $post_id );
    286 
    287             if ( 'simple' === $product->get_type() ) {
    288                 $product->update_meta_data( 'woocommerce_faire_product_lifecycle_state', $bulk_lifecycle_state );
    289                 $product->save();
    290             } elseif ( 'variable' === $product->get_type() ) {
    291                 // Save child variation lifecycle state.
    292                 $variations = $product->get_children(); // use get_children instead of get_available_variations() so that all are returned.
    293                 if ( $variations ) {
    294                     foreach ( $variations as $variation_id ) {
    295                         $variation = wc_get_product( $variation_id );
    296                         if ( $variation ) {
    297                             $variation->update_meta_data( 'woocommerce_faire_product_variation_lifecycle_state', $bulk_lifecycle_state );
    298                             $variation->save();
    299                         }
    300                     }
    301                 }
    302                 // Save parent product lifecycle state.
    303                 $product->update_meta_data( 'woocommerce_faire_product_lifecycle_state', $bulk_lifecycle_state );
    304                 $product->save();
    305             }
    306 
    307             $processed_ids[] = $post_id;
    308         }
    309 
     278    // Handle bulk lifecycle changes
     279    if ( in_array( $action, array('faire_unpublished', 'faire_published', 'faire_draft' ) ) ) {
     280
     281      if ( 'faire_unpublished' === $action ) {
     282        $bulk_lifecycle_state = 'UNPUBLISHED';
     283      } elseif ( 'faire_published' === $action ) {
     284        $bulk_lifecycle_state = 'PUBLISHED';
     285      } elseif ( 'faire_draft' === $action ) {
     286        $bulk_lifecycle_state = 'DRAFT';
     287      }
     288 
     289      foreach ( $post_ids as $post_id ) {
     290        $product = wc_get_product( $post_id );
     291 
     292        if ( 'simple' === $product->get_type() ) {
     293          $product->update_meta_data( 'woocommerce_faire_product_lifecycle_state', $bulk_lifecycle_state );
     294          $product->save();
     295        } elseif ( 'variable' === $product->get_type() ) {
     296          // Save child variation lifecycle state.
     297          $variations = $product->get_children(); // use get_children instead of get_available_variations() so that all are returned.
     298          if ( $variations ) {
     299            foreach ( $variations as $variation_id ) {
     300              $variation = wc_get_product( $variation_id );
     301              if ( $variation ) {
     302                $variation->update_meta_data( 'woocommerce_faire_product_variation_lifecycle_state', $bulk_lifecycle_state );
     303                $variation->save();
     304              }
     305            }
     306          }
     307          // Save parent product lifecycle state.
     308          $product->update_meta_data( 'woocommerce_faire_product_lifecycle_state', $bulk_lifecycle_state );
     309          $product->save();
     310        }
     311 
     312        $processed_ids[] = $post_id;
     313      }
     314
     315    } elseif ( 'faire_unlink_product' === $action ) { // Handle bulk unlink product
     316 
     317      $unlinking = new Sync_Product_Unlinking( $this->settings );
     318      $unlinked_ids = $unlinking->unlink_products( $post_ids );
     319
     320      $processed_ids = $unlinked_ids;
     321    }
     322   
    310323        $redirect_to = add_query_arg(
    311324            array(
     
    321334
    322335    /**
    323      * Undocumented function
     336     * Show an admin message after bulk actions
    324337     *
    325338     * @return void
     
    343356            // translators: %s single product, %s product count.
    344357            $message = sprintf( _n( '%s product set Lifecycle State to Draft.', '%s products set Lifecycle State to Draft.', $count, 'faire-for-woocommerce' ), $count );
     358        } elseif ( 'faire_unlink_product' === $action ) {
     359            // translators: %s single product, %s product count.
     360            $message = sprintf( _n( '%s products unlinked.', '%s products were unlinked.', $count, 'faire-for-woocommerce' ), $count );
    345361        }
    346362        $output = $message ? sprintf( '<div id="message" class="updated fade"><p>%s</p></div>', $message ) : '';
  • faire-for-woocommerce/tags/1.3.6/src/woocommerce/class-order.php

    r2849950 r2864583  
    99
    1010use Exception;
     11use Faire\Wc\Country;
    1112use Faire\Wc\Faire\Order as Faire_Order;
    1213use Faire\Wc\Faire\Order_Status as Faire_Order_Status;
     
    223224            'state'      => $address->state_code ?? '',
    224225            'postcode'   => $address->postal_code,
    225             'country'    => $address->country_code,
     226            'country'    => Country::convert_country_iso3_to_iso2( $address->country_code ),
    226227        );
    227228
  • faire-for-woocommerce/trunk/readme.txt

    r2853863 r2864583  
    44Requires at least: 4.7
    55Tested up to: 6.0
    6 Stable tag: 1.3.4
     6Stable tag: 1.3.6
    77Requires PHP: 7.4
    88WC requires at least: 6.0
Note: See TracChangeset for help on using the changeset viewer.