Plugin Directory

Changeset 2962513


Ignore:
Timestamp:
09/04/2023 11:38:13 AM (3 years ago)
Author:
EmranAhmed
Message:

Update to 2.0.8

Location:
variation-duplicator-for-woocommerce
Files:
19 added
7 edited

Legend:

Unmodified
Added
Removed
  • variation-duplicator-for-woocommerce/trunk/README.txt

    r2897695 r2962513  
    33Tags: woocommerce variations duplicate, variation image duplicate, product variation image duplicate, product variation image copy, variation images clone
    44Requires PHP: 7.4
    5 Stable tag: 2.0.7
     5Stable tag: 2.0.8
    66Requires at least: 5.6
    7 Tested up to: 6.2
     7Tested up to: 6.3
    88WC requires at least: 5.6
    9 WC tested up to: 7.5
     9WC tested up to: 8.0
    1010License: GPLv3
    1111License URI: http://www.gnu.org/licenses/gpl-3.0.html
     
    7979== Changelog ==
    8080
    81 = 2.0.7 - 12-04-2023 =
     81= 2.0.8 - 24-08-2023 =
    8282
    83 * Add: WordPress 6.2 compatibility
     83* Add: WordPress 6.3+ compatibility
     84* Add: WooCommerce 8.0+ compatibility
     85
     86= 2.0.7 - 13-04-2023 =
     87
     88* Add: WordPress 6.2+ compatibility
    8489* Add: WooCommerce 7.5+ compatibility
    85 * Add: WooCommerce High-Performance Order Storage compatibility
     90* Add: WooCommerce HPOS compatibility
    8691
    8792= 2.0.6 - 12-12-2022 =
  • variation-duplicator-for-woocommerce/trunk/assets/css/variation-duplicator-for-woocommerce.css

    r2897695 r2962513  
    33 *
    44 * Author: Emran Ahmed ( emran.bd.08@gmail.com )
    5  * Date: 4/12/2023, 3:01:12 PM
     5 * Date: 9/4/2023, 5:34:39 PM
    66 * Released under the GPLv3 license.
    77 */
  • variation-duplicator-for-woocommerce/trunk/assets/js/variation-duplicator-for-woocommerce.js

    r2897695 r2962513  
    33 *
    44 * Author: Emran Ahmed ( emran.bd.08@gmail.com )
    5  * Date: 4/12/2023, 3:01:12 PM
     5 * Date: 9/4/2023, 5:34:39 PM
    66 * Released under the GPLv3 license.
    77 */
     
    3232        var _this = this;
    3333
    34         this.setOption();
     34        // this.setOption()
    3535        this.events();
    3636        $('#woocommerce-product-data').on('woocommerce_variations_loaded', function () {
     
    4242        });
    4343        $('#variable_product_options').on('woocommerce_variations_added', function () {
    44           _this.setCloneWrapper();
    45 
    46           _this.setOption();
     44          _this.setCloneWrapper(); //this.setOption()
     45
    4746
    4847          _this.events();
     
    167166        $(document).on('woocommerce_variations_added', '#variable_product_options', this.clean);
    168167        $(document).on('woocommerce_variations_removed', '#woocommerce-product-data', this.clean);
     168        $(document).on('click', '#variation-duplicator-for-woocommerce-action-button', this.duplicate);
    169169
    170170        var events = $._data(document.body, 'events')['change'];
     
    177177        $(document.body).on('change input', '#variable_product_options .woocommerce_variations :input:not(.no-track-change)', input_change_callback.handler); // Re Init
    178178
     179        $('.wc-metaboxes-wrapper').on('click', 'button.add_variation_manually', function () {
     180          $('.variation-duplicator-for-woocommerce-notice').remove();
     181        });
     182        $('#woocommerce-product-data').on('woocommerce_variations_loaded', function () {
     183          _this3.setHowTo();
     184
     185          $('#variation-duplicator-for-woocommerce-action-button').prop('disabled', true);
     186        }); // No longer exists on wc 7.8 ( Update: But again available on 8.0.0 )
     187
    179188        $('#variable_product_options').on('woocommerce_variations_added', function () {
    180           _this3.setHowTo();
    181 
    182           $('select.variation_actions').off('woo_variation_duplicate_ajax_data').on('woo_variation_duplicate_ajax_data', _this3.ajaxData);
     189          _this3.setHowTo(); //$('select.variation_actions').off('woo_variation_duplicate_ajax_data').on('woo_variation_duplicate_ajax_data', this.ajaxData)
     190
    183191        }).on('woocommerce_variations_input_changed', function (event) {
    184192          var _this4 = this;
     
    191199      }
    192200    }, {
     201      key: "duplicate",
     202      value: function duplicate() {
     203        $('select#field_to_edit').val('woo_variation_duplicate').trigger('change');
     204      }
     205    }, {
    193206      key: "setHowTo",
    194207      value: function setHowTo() {
     208        var button = $('#variable_product_options_inner').find('#variation-duplicator-for-woocommerce-action-button');
    195209        var actionsWrapper = $('#variable_product_options_inner .toolbar-top').find('.do_variation_action');
    196         $('#variable_product_options_inner').find('.variation-duplicator-for-woocommerce-works').insertAfter(actionsWrapper);
    197         $('select#field_to_edit').on('change', function () {
    198           if ($(this).val() === 'woo_variation_duplicate') {
    199             $('#variable_product_options_inner').find('.variation-duplicator-for-woocommerce-works').addClass('show');
    200           } else {
    201             $('#variable_product_options_inner').find('.variation-duplicator-for-woocommerce-works').removeClass('show');
    202           }
    203         });
     210        var selectBox = $('select#field_to_edit'); //$('#variable_product_options_inner').find('.variation-duplicator-for-woocommerce-works').insertAfter(actionsWrapper)
     211
     212        if (actionsWrapper.length > 0) {
     213          button.insertAfter(actionsWrapper);
     214        } else {
     215          button.insertAfter(selectBox);
     216        }
    204217      }
    205218    }, {
     
    218231        var $clonable = $('input.variation_is_cloneable:checked');
    219232        var checked = $clonable.length;
     233        var variationsWrapper = $('#variable_product_options').find('.woocommerce_variations');
    220234
    221235        if (checked < 1) {
     
    244258
    245259        for (var $i = 0; $i < total; $i++) {
    246           $('#variable_product_options').trigger('woocommerce_variations_added', 1);
     260          // $('#variable_product_options').trigger('woocommerce_variations_added', 1)
     261          var totalVariation = parseInt(variationsWrapper.attr('data-total'), 10) + 1;
     262          variationsWrapper.attr('data-total', totalVariation);
    247263        }
    248264
     
    253269      value: function cloneableClick(event) {
    254270        if ($(this).is(':checked')) {
    255           $('select#field_to_edit').val('woo_variation_duplicate').trigger('change');
    256271          $(this).closest('label.clone-checkbox').addClass('checked');
    257           $('#variable_product_options_inner').find('.variation-duplicator-for-woocommerce-works').addClass('show');
     272          $('#variation-duplicator-for-woocommerce-action-button').prop('disabled', false);
    258273        } else {
    259274          if ($('input.variation_is_cloneable:checked').length < 1) {
    260             $('#variable_product_options_inner').find('.variation-duplicator-for-woocommerce-works').removeClass('show');
    261             $('select#field_to_edit').val('add_variation').trigger('change');
     275            $('#variation-duplicator-for-woocommerce-action-button').prop('disabled', true);
    262276          }
    263277
  • variation-duplicator-for-woocommerce/trunk/assets/js/variation-duplicator-for-woocommerce.min.js

    r2764329 r2962513  
    1 !function(){var e,o={259:function(){function e(e,o){if(!(e instanceof o))throw new TypeError("Cannot call a class as a function")}function o(e,o){for(var t=0;t<o.length;t++){var i=o[t];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function t(e,t,i){return t&&o(e.prototype,t),i&&o(e,i),Object.defineProperty(e,"prototype",{writable:!1}),e}jQuery((function(o){"use strict";var i=function(){function i(){e(this,i)}return t(i,null,[{key:"init",value:function(){var e=this;this.setOption(),this.events(),o("#woocommerce-product-data").on("woocommerce_variations_loaded",(function(){e.setCloneWrapper(),e.setSelect2()})),o("#variable_product_options").on("woocommerce_variations_added",(function(){e.setCloneWrapper(),e.setOption(),e.events(),e.setSelect2()}))}},{key:"setCloneWrapper",value:function(){o(".woocommerce_variation").each((function(){var e=o(this).find(".options:first");o(this).find(".woo-variable-image-duplicator-wrapper").insertBefore(e)}))}},{key:"setSelect2",value:function(){var e=this;try{o(":input.variable-image-duplicate-select").filter(":not(.enhanced)").each((function(t,i){var a={minimumResultsForSearch:10,allowClear:!!o(i).data("allow_clear"),placeholder:o(i).data("placeholder"),templateResult:e.imgCloneFormFormat,templateSelection:e.imgCloneFormFormat};o(i).select2(a).addClass("enhanced")}))}catch(e){console.log("Select2 Error: ",e)}}},{key:"imgCloneFormFormat",value:function(e){if(!e.id)return e.text;var t=o(e.element).data("thumbnail_url");return t?o('<img class="variation-duplicator-thumbnail-image-preview" src="'+t+'" alt=" '+e.text+'" width="30" height="30"/> <span class="variation-duplicator-thumbnail-image-text">'+e.text+"</span>"):e.text}},{key:"setOption",value:function(){var e=o("#field_to_edit"),t=e.find("option:first");e.find("option.woo_variation_duplicate_option").insertAfter(t)}},{key:"events",value:function(){o("#variable_product_options").on("click",":input.variable-image-duplicate-type",this.chooseType).on("click","button.select_all_variations",this.selectAll).on("click","button.select_no_variations",this.selectNone).on("change",":input.upload_image_id",this.clearChooseType)}},{key:"clearChooseType",value:function(e){o(this).closest(".woocommerce_variable_attributes").find(".woo-variable-image-duplicator-wrapper .variable_image_duplicate_type_form_field :radio").prop("checked",!1),o(this).closest(".woocommerce_variable_attributes").find(".woo-variable-image-duplicator-wrapper .variable-list").removeClass("show")}},{key:"chooseType",value:function(e){var t=o(this).val();if(o(this).closest(".woo-variable-image-duplicator-wrapper").find(".variable-list").removeClass("show"),"to"===t){var i=parseInt(o(this).closest(".woocommerce_variation").find(":input.upload_image_id").val(),10);if(isNaN(i)||i<1)return void o(this).closest(".woo-variable-image-duplicator-wrapper").find(".variable-image-duplicate-to-notice").addClass("show")}o(this).closest(".woo-variable-image-duplicator-wrapper").find(".variable-image-duplicate-"+t).addClass("show")}},{key:"selectAll",value:function(e){e.preventDefault(),o(this).closest("p").find("select > option").prop("selected",!0),o(this).closest("p").find("select").trigger("change")}},{key:"selectNone",value:function(e){e.preventDefault(),o(this).closest("p").find("select > option").prop("selected",!1),o(this).closest("p").find("select").trigger("change")}}]),i}(),a=function(){function i(){e(this,i)}return t(i,null,[{key:"init",value:function(){var e=this;this.setHowTo(),o(document).on("click","input.variation_is_cloneable",this.cloneableClick),o(document).on("change","input.variation_is_cloneable",this.cloneableChange),o("select.variation_actions").on("woo_variation_duplicate_ajax_data",this.ajaxData),o(document).on("woocommerce_variations_added","#variable_product_options",this.clean),o(document).on("woocommerce_variations_removed","#woocommerce-product-data",this.clean);var t=o._data(document.body,"events").change.filter((function(e){return"#variable_product_options .woocommerce_variations :input"===e.selector}))[0];o(document.body).off("change input","#variable_product_options .woocommerce_variations :input"),o(document.body).on("change input","#variable_product_options .woocommerce_variations :input:not(.no-track-change)",t.handler),o("#variable_product_options").on("woocommerce_variations_added",(function(){e.setHowTo(),o("select.variation_actions").off("woo_variation_duplicate_ajax_data").on("woo_variation_duplicate_ajax_data",e.ajaxData)})).on("woocommerce_variations_input_changed",(function(e){var t=this;_.delay((function(){o(t).find(".variation-needs-update input.variation_is_cloneable").prop("checked",!1)}),1)}))}},{key:"setHowTo",value:function(){var e=o("#variable_product_options_inner .toolbar-top").find(".do_variation_action");o("#variable_product_options_inner").find(".variation-duplicator-for-woocommerce-works").insertAfter(e),o("select#field_to_edit").on("change",(function(){"woo_variation_duplicate"===o(this).val()?o("#variable_product_options_inner").find(".variation-duplicator-for-woocommerce-works").addClass("show"):o("#variable_product_options_inner").find(".variation-duplicator-for-woocommerce-works").removeClass("show")}))}},{key:"clean",value:function(){o(".woocommerce-notice-invalid-variation, .woo-variation-duplicator-notice").remove()}},{key:"ajaxData",value:function(e){var t={items:[],times:1,exceed:!1},i=o("input.variation_is_cloneable:checked");if(i.length<1)return alert(WooVariationDuplicator.noCheckedText),e.clone={};if(i.each((function(){t.items.push(o(this).val())})),!(t.items.length>0))return e.clone={};var a=Number(window.prompt(WooVariationDuplicator.limitText,1));if(isNaN(a))return e.clone={};t.times=a>Number(WooVariationDuplicator.limit)?1:a,t.exceed=a>Number(WooVariationDuplicator.limit);for(var n=t.times*t.items.length,r=0;r<n;r++)o("#variable_product_options").trigger("woocommerce_variations_added",1);return e.clone=t}},{key:"cloneableClick",value:function(e){o(this).is(":checked")?(o("select#field_to_edit").val("woo_variation_duplicate").trigger("change"),o(this).closest("label.clone-checkbox").addClass("checked"),o("#variable_product_options_inner").find(".variation-duplicator-for-woocommerce-works").addClass("show")):(o("input.variation_is_cloneable:checked").length<1&&(o("#variable_product_options_inner").find(".variation-duplicator-for-woocommerce-works").removeClass("show"),o("select#field_to_edit").val("add_variation").trigger("change")),o(this).closest("label.clone-checkbox").removeClass("checked"))}},{key:"cloneableChange",value:function(e){o(this).closest(".wc-metaboxes-wrapper").find(".wc-metabox > .wc-metabox-content").hide(),o(this).closest(".woocommerce_variations").find(".woocommerce_variation.open").removeClass("open").addClass("closed")}}]),i}();i.init(),a.init()}))},845:function(){}},t={};function i(e){var a=t[e];if(void 0!==a)return a.exports;var n=t[e]={exports:{}};return o[e](n,n.exports,i),n.exports}i.m=o,e=[],i.O=function(o,t,a,n){if(!t){var r=1/0;for(u=0;u<e.length;u++){t=e[u][0],a=e[u][1],n=e[u][2];for(var c=!0,l=0;l<t.length;l++)(!1&n||r>=n)&&Object.keys(i.O).every((function(e){return i.O[e](t[l])}))?t.splice(l--,1):(c=!1,n<r&&(r=n));if(c){e.splice(u--,1);var s=a();void 0!==s&&(o=s)}}return o}n=n||0;for(var u=e.length;u>0&&e[u-1][2]>n;u--)e[u]=e[u-1];e[u]=[t,a,n]},i.o=function(e,o){return Object.prototype.hasOwnProperty.call(e,o)},function(){var e={934:0,261:0};i.O.j=function(o){return 0===e[o]};var o=function(o,t){var a,n,r=t[0],c=t[1],l=t[2],s=0;if(r.some((function(o){return 0!==e[o]}))){for(a in c)i.o(c,a)&&(i.m[a]=c[a]);if(l)var u=l(i)}for(o&&o(t);s<r.length;s++)n=r[s],i.o(e,n)&&e[n]&&e[n][0](),e[n]=0;return i.O(u)},t=self.webpackChunkvariation_duplicator_for_woocommerce=self.webpackChunkvariation_duplicator_for_woocommerce||[];t.forEach(o.bind(null,0)),t.push=o.bind(null,t.push.bind(t))}(),i.O(void 0,[261],(function(){return i(259)}));var a=i.O(void 0,[261],(function(){return i(845)}));a=i.O(a)}();
     1!function(){var e,o={259:function(){function e(e,o){if(!(e instanceof o))throw new TypeError("Cannot call a class as a function")}function o(e,o){for(var t=0;t<o.length;t++){var i=o[t];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function t(e,t,i){return t&&o(e.prototype,t),i&&o(e,i),Object.defineProperty(e,"prototype",{writable:!1}),e}jQuery((function(o){"use strict";var i=function(){function i(){e(this,i)}return t(i,null,[{key:"init",value:function(){var e=this;this.events(),o("#woocommerce-product-data").on("woocommerce_variations_loaded",(function(){e.setCloneWrapper(),e.setSelect2()})),o("#variable_product_options").on("woocommerce_variations_added",(function(){e.setCloneWrapper(),e.events(),e.setSelect2()}))}},{key:"setCloneWrapper",value:function(){o(".woocommerce_variation").each((function(){var e=o(this).find(".options:first");o(this).find(".woo-variable-image-duplicator-wrapper").insertBefore(e)}))}},{key:"setSelect2",value:function(){var e=this;try{o(":input.variable-image-duplicate-select").filter(":not(.enhanced)").each((function(t,i){var a={minimumResultsForSearch:10,allowClear:!!o(i).data("allow_clear"),placeholder:o(i).data("placeholder"),templateResult:e.imgCloneFormFormat,templateSelection:e.imgCloneFormFormat};o(i).select2(a).addClass("enhanced")}))}catch(e){console.log("Select2 Error: ",e)}}},{key:"imgCloneFormFormat",value:function(e){if(!e.id)return e.text;var t=o(e.element).data("thumbnail_url");return t?o('<img class="variation-duplicator-thumbnail-image-preview" src="'+t+'" alt=" '+e.text+'" width="30" height="30"/> <span class="variation-duplicator-thumbnail-image-text">'+e.text+"</span>"):e.text}},{key:"setOption",value:function(){var e=o("#field_to_edit"),t=e.find("option:first");e.find("option.woo_variation_duplicate_option").insertAfter(t)}},{key:"events",value:function(){o("#variable_product_options").on("click",":input.variable-image-duplicate-type",this.chooseType).on("click","button.select_all_variations",this.selectAll).on("click","button.select_no_variations",this.selectNone).on("change",":input.upload_image_id",this.clearChooseType)}},{key:"clearChooseType",value:function(e){o(this).closest(".woocommerce_variable_attributes").find(".woo-variable-image-duplicator-wrapper .variable_image_duplicate_type_form_field :radio").prop("checked",!1),o(this).closest(".woocommerce_variable_attributes").find(".woo-variable-image-duplicator-wrapper .variable-list").removeClass("show")}},{key:"chooseType",value:function(e){var t=o(this).val();if(o(this).closest(".woo-variable-image-duplicator-wrapper").find(".variable-list").removeClass("show"),"to"===t){var i=parseInt(o(this).closest(".woocommerce_variation").find(":input.upload_image_id").val(),10);if(isNaN(i)||i<1)return void o(this).closest(".woo-variable-image-duplicator-wrapper").find(".variable-image-duplicate-to-notice").addClass("show")}o(this).closest(".woo-variable-image-duplicator-wrapper").find(".variable-image-duplicate-"+t).addClass("show")}},{key:"selectAll",value:function(e){e.preventDefault(),o(this).closest("p").find("select > option").prop("selected",!0),o(this).closest("p").find("select").trigger("change")}},{key:"selectNone",value:function(e){e.preventDefault(),o(this).closest("p").find("select > option").prop("selected",!1),o(this).closest("p").find("select").trigger("change")}}]),i}(),a=function(){function i(){e(this,i)}return t(i,null,[{key:"init",value:function(){var e=this;this.setHowTo(),o(document).on("click","input.variation_is_cloneable",this.cloneableClick),o(document).on("change","input.variation_is_cloneable",this.cloneableChange),o("select.variation_actions").on("woo_variation_duplicate_ajax_data",this.ajaxData),o(document).on("woocommerce_variations_added","#variable_product_options",this.clean),o(document).on("woocommerce_variations_removed","#woocommerce-product-data",this.clean),o(document).on("click","#variation-duplicator-for-woocommerce-action-button",this.duplicate);var t=o._data(document.body,"events").change.filter((function(e){return"#variable_product_options .woocommerce_variations :input"===e.selector}))[0];o(document.body).off("change input","#variable_product_options .woocommerce_variations :input"),o(document.body).on("change input","#variable_product_options .woocommerce_variations :input:not(.no-track-change)",t.handler),o(".wc-metaboxes-wrapper").on("click","button.add_variation_manually",(function(){o(".variation-duplicator-for-woocommerce-notice").remove()})),o("#woocommerce-product-data").on("woocommerce_variations_loaded",(function(){e.setHowTo(),o("#variation-duplicator-for-woocommerce-action-button").prop("disabled",!0)})),o("#variable_product_options").on("woocommerce_variations_added",(function(){e.setHowTo()})).on("woocommerce_variations_input_changed",(function(e){var t=this;_.delay((function(){o(t).find(".variation-needs-update input.variation_is_cloneable").prop("checked",!1)}),1)}))}},{key:"duplicate",value:function(){o("select#field_to_edit").val("woo_variation_duplicate").trigger("change")}},{key:"setHowTo",value:function(){var e=o("#variable_product_options_inner").find("#variation-duplicator-for-woocommerce-action-button"),t=o("#variable_product_options_inner .toolbar-top").find(".do_variation_action"),i=o("select#field_to_edit");t.length>0?e.insertAfter(t):e.insertAfter(i)}},{key:"clean",value:function(){o(".woocommerce-notice-invalid-variation, .woo-variation-duplicator-notice").remove()}},{key:"ajaxData",value:function(e){var t={items:[],times:1,exceed:!1},i=o("input.variation_is_cloneable:checked"),a=i.length,n=o("#variable_product_options").find(".woocommerce_variations");if(a<1)return alert(WooVariationDuplicator.noCheckedText),e.clone={};if(i.each((function(){t.items.push(o(this).val())})),!(t.items.length>0))return e.clone={};var r=Number(window.prompt(WooVariationDuplicator.limitText,1));if(isNaN(r))return e.clone={};t.times=r>Number(WooVariationDuplicator.limit)?1:r,t.exceed=r>Number(WooVariationDuplicator.limit);for(var c=t.times*t.items.length,l=0;l<c;l++){var s=parseInt(n.attr("data-total"),10)+1;n.attr("data-total",s)}return e.clone=t}},{key:"cloneableClick",value:function(e){o(this).is(":checked")?(o(this).closest("label.clone-checkbox").addClass("checked"),o("#variation-duplicator-for-woocommerce-action-button").prop("disabled",!1)):(o("input.variation_is_cloneable:checked").length<1&&o("#variation-duplicator-for-woocommerce-action-button").prop("disabled",!0),o(this).closest("label.clone-checkbox").removeClass("checked"))}},{key:"cloneableChange",value:function(e){o(this).closest(".wc-metaboxes-wrapper").find(".wc-metabox > .wc-metabox-content").hide(),o(this).closest(".woocommerce_variations").find(".woocommerce_variation.open").removeClass("open").addClass("closed")}}]),i}();i.init(),a.init()}))},845:function(){}},t={};function i(e){var a=t[e];if(void 0!==a)return a.exports;var n=t[e]={exports:{}};return o[e](n,n.exports,i),n.exports}i.m=o,e=[],i.O=function(o,t,a,n){if(!t){var r=1/0;for(u=0;u<e.length;u++){t=e[u][0],a=e[u][1],n=e[u][2];for(var c=!0,l=0;l<t.length;l++)(!1&n||r>=n)&&Object.keys(i.O).every((function(e){return i.O[e](t[l])}))?t.splice(l--,1):(c=!1,n<r&&(r=n));if(c){e.splice(u--,1);var s=a();void 0!==s&&(o=s)}}return o}n=n||0;for(var u=e.length;u>0&&e[u-1][2]>n;u--)e[u]=e[u-1];e[u]=[t,a,n]},i.o=function(e,o){return Object.prototype.hasOwnProperty.call(e,o)},function(){var e={934:0,261:0};i.O.j=function(o){return 0===e[o]};var o=function(o,t){var a,n,r=t[0],c=t[1],l=t[2],s=0;if(r.some((function(o){return 0!==e[o]}))){for(a in c)i.o(c,a)&&(i.m[a]=c[a]);if(l)var u=l(i)}for(o&&o(t);s<r.length;s++)n=r[s],i.o(e,n)&&e[n]&&e[n][0](),e[n]=0;return i.O(u)},t=self.webpackChunkvariation_duplicator_for_woocommerce=self.webpackChunkvariation_duplicator_for_woocommerce||[];t.forEach(o.bind(null,0)),t.push=o.bind(null,t.push.bind(t))}(),i.O(void 0,[261],(function(){return i(259)}));var a=i.O(void 0,[261],(function(){return i(845)}));a=i.O(a)}();
  • variation-duplicator-for-woocommerce/trunk/includes/class-variation-duplicator-for-woocommerce-variation-clone.php

    r2764329 r2962513  
    11<?php
    2    
     2
    33    defined( 'ABSPATH' ) or die( 'Keep Silent' );
    4    
     4
    55    if ( ! class_exists( 'Variation_Duplicator_For_Woocommerce_Variation_Clone', false ) ):
    6        
     6
    77        class Variation_Duplicator_For_Woocommerce_Variation_Clone {
    8            
     8
    99            protected static $_instance = null;
    10            
     10
    1111            public static function instance() {
    1212                if ( is_null( self::$_instance ) ) {
    1313                    self::$_instance = new self();
    1414                }
    15                
     15
    1616                return self::$_instance;
    1717            }
    18            
     18
    1919            public function __construct() {
    2020                $this->hooks();
    2121                do_action( 'variation_duplicator_for_woocommerce_variation_clone_loaded', $this );
    2222            }
    23            
     23
    2424            public function hooks() {
    2525                add_action( 'woocommerce_variation_header', array( $this, 'add_checkbox' ) );
     
    2828                add_action( 'woocommerce_bulk_edit_variations', array( $this, 'clone' ), 10, 4 );
    2929                add_action( 'woocommerce_variable_product_before_variations', array( $this, 'instruction' ) );
    30                
     30
    3131                remove_action( 'wp_ajax_woocommerce_load_variations', array( 'WC_AJAX', 'load_variations' ) );
    3232                add_action( 'wp_ajax_woocommerce_load_variations', array( $this, 'load_variations' ) );
    3333            }
    34            
     34
    3535            public function notice() {
    3636                $results      = get_transient( 'woo_variation_duplicator_cloned_ids' );
    3737                $limit_exceed = get_transient( 'woo_variation_duplicator_exceed_clone_limit' );
    38                
     38
    3939                if ( $results ) {
    4040                    $message = sprintf( esc_html__( 'Variation: #%s cloned.', 'variation-duplicator-for-woocommerce' ), implode( ', #', $results ) );
     
    4242                    delete_transient( 'woo_variation_duplicator_cloned_ids' );
    4343                }
    44                
     44
    4545                if ( $limit_exceed ) {
    4646                    printf( '<div class="inline notice variation-duplicator-for-woocommerce-notice error"><p>%s</p></div>', esc_html__( 'Variation clone limit exceed.', 'variation-duplicator-for-woocommerce' ) );
     
    4848                }
    4949            }
    50            
     50
    5151            public function instruction() {
    52                 printf( '<a target="_blank" href="https://getwooplugins.com/documentation/variation-duplicator-for-woocommerce/#duplicate-variation-in-a-click" title="%s" class="variation-duplicator-for-woocommerce-works">%s</a>', esc_html__( 'Check how variation duplicator works.', 'variation-duplicator-for-woocommerce' ), '<span class="dashicons dashicons-editor-help"></span>' );
     52
     53                printf( '<button id="variation-duplicator-for-woocommerce-action-button" disabled type="button" class="button">%s</button>', esc_html__( 'Bulk duplicate', 'variation-duplicator-for-woocommerce' ) );
     54
     55                // printf( '<a target="_blank" href="https://getwooplugins.com/documentation/variation-duplicator-for-woocommerce/#duplicate-variation-in-a-click" title="%s" class="variation-duplicator-for-woocommerce-works">%s</a>', esc_html__( 'Check how variation duplicator works.', 'variation-duplicator-for-woocommerce' ), '<span class="dashicons dashicons-editor-help"></span>' );
    5356            }
    54            
     57
    5558            public function load_variations() {
    5659                ob_start();
    57                
     60
    5861                check_ajax_referer( 'load-variations', 'security' );
    59                
     62
    6063                if ( ! current_user_can( 'edit_products' ) || empty( $_POST[ 'product_id' ] ) ) {
    6164                    wp_die( - 1 );
    6265                }
    63                
     66
    6467                // Set $post global so its available, like within the admin screens.
    6568                global $post;
    66                
     69
    6770                $loop           = 0;
    6871                $product_id     = absint( $_POST[ 'product_id' ] );
     
    8386                                                       'return'  => 'objects',
    8487                                                   ) );
    85                
     88
    8689                if ( $variations ) {
    8790                    do_action( 'woo_variation_duplicator_load_variations', $product_object, $variations );
    8891                    wc_render_invalid_variation_notice( $product_object );
    89                    
     92
    9093                    foreach ( $variations as $variation_object ) {
    9194                        $variation_id   = $variation_object->get_id();
     
    9699                    }
    97100                }
    98                
     101
    99102                wp_die();
    100103            }
    101            
     104
    102105            public function add_checkbox( $variation ) {
    103                
     106
    104107                if ( apply_filters( 'disable_variation_duplicator_for_woocommerce_variation_clone', false, $variation ) ) {
    105108                    return true;
    106109                }
    107                
     110
    108111                printf( '<label class="clone-checkbox">
    109112<input class="no-track-change variation_is_cloneable" type="checkbox" name="variation_is_cloneable[]" value="%d"><span class="clone-text" data-clone-text="%s" data-clone-save-text="%s"></span>
    110113%s </label> ', esc_attr( absint( $variation->ID ) ), esc_attr__( 'Duplicate', 'variation-duplicator-for-woocommerce' ), esc_attr__( 'Save before duplicate', 'variation-duplicator-for-woocommerce' ), wc_help_tip( esc_attr__( 'If you want to duplicate this variation you have to save this variation first.', 'variation-duplicator-for-woocommerce' ) ) );
    111114            }
    112            
     115
    113116            public function add_dropdown() {
    114                
     117
    115118                if ( apply_filters( 'disable_variation_duplicator_for_woocommerce_variation_clone', false, null ) ) {
    116119                    return true;
    117120                }
    118                
     121
    119122                printf( '<option class="woo_variation_duplicate_option" value="woo_variation_duplicate">%s</option>', esc_html__( 'Duplicate variations', 'variation-duplicator-for-woocommerce' ) );
    120123            }
    121            
     124
    122125            public function clone( $bulk_action, $data, $product_id, $variations ) {
    123126                if ( 'woo_variation_duplicate' === $bulk_action && isset( $data[ 'items' ] ) && ! empty( $data[ 'items' ] ) ) {
     
    126129                    $clone_limit = absint( apply_filters( 'woo_variation_duplicator_clone_limit', 9 ) );
    127130                    $times       = ( $get_limit > $clone_limit ) ? 1 : $get_limit;
    128                    
     131
    129132                    if ( $exceed ) {
    130133                        set_transient( 'woo_variation_duplicator_exceed_clone_limit', 1 );
    131134                    }
    132                    
     135
    133136                    $variation_ids = array_map( 'absint', $data[ 'items' ] );
    134137                    $cloned_ids    = [];
    135                    
     138
    136139                    foreach ( $variation_ids as $variation_id ) {
    137140                        for ( $i = 1; $i <= $times; $i ++ ) {
    138141                            // Main Variation
    139142                            $variation_object = wc_get_product_object( 'variation', $variation_id );
    140                            
     143
    141144                            $cloned_variation_object = wc_get_product_object( 'variation', $variation_id );
    142145                            $cloned_variation_object->set_props( [ 'id' => 0 ] );
    143146                            $cloned_variation_object->set_parent_id( $product_id );
    144147                            $cloned_variation_id = $cloned_variation_object->save();
    145                            
     148
    146149                            array_push( $cloned_ids, $cloned_variation_id );
    147                            
     150
    148151                            do_action( 'woo_variation_duplicator_variation_save', $cloned_variation_id, $variation_id, $cloned_variation_object, $variation_object, $variation_ids, $i );
    149152                        }
    150153                    }
    151                    
     154
    152155                    do_action( 'woo_variation_duplicator_variation_saved', $variation_ids, $cloned_ids, $product_id );
    153156                    clean_post_cache( $product_id );
    154                    
     157
    155158                    set_transient( 'woo_variation_duplicator_cloned_ids', $cloned_ids );
    156159                }
    157160            }
    158161        }
    159    
     162
    160163    endif;
  • variation-duplicator-for-woocommerce/trunk/languages/variation-duplicator-for-woocommerce.pot

    r2897695 r2962513  
    88"Content-Transfer-Encoding: 8bit\n"
    99"Language-Team: Emran Ahmed\n"
    10 "POT-Creation-Date: 2023-04-12 09:01+0000\n"
     10"POT-Creation-Date: 2023-09-04 11:34+0000\n"
    1111"X-Poedit-Basepath: ..\n"
    1212"X-Poedit-KeywordsList: __;_e;_ex:1,2c;_n:1,2;_n_noop:1,2;_nx:1,2,4c;_nx_noop:1,2,3c;_x:1,2c;esc_attr__;esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c\n"
     
    4242msgstr ""
    4343
    44 #: ../includes/class-variation-duplicator-for-woocommerce-variation-clone.php:52
    45 msgid "Check how variation duplicator works."
     44#: ../includes/class-variation-duplicator-for-woocommerce-variation-clone.php:53
     45msgid "Bulk duplicate"
    4646msgstr ""
    4747
    48 #: ../includes/class-variation-duplicator-for-woocommerce-variation-clone.php:110
     48#: ../includes/class-variation-duplicator-for-woocommerce-variation-clone.php:113
    4949msgid "Duplicate"
    5050msgstr ""
    5151
    52 #: ../includes/class-variation-duplicator-for-woocommerce-variation-clone.php:110
     52#: ../includes/class-variation-duplicator-for-woocommerce-variation-clone.php:113
    5353msgid "Save before duplicate"
    5454msgstr ""
    5555
    56 #: ../includes/class-variation-duplicator-for-woocommerce-variation-clone.php:110
     56#: ../includes/class-variation-duplicator-for-woocommerce-variation-clone.php:113
    5757msgid "If you want to duplicate this variation you have to save this variation first."
    5858msgstr ""
    5959
    60 #: ../includes/class-variation-duplicator-for-woocommerce-variation-clone.php:119
     60#: ../includes/class-variation-duplicator-for-woocommerce-variation-clone.php:122
    6161msgid "Duplicate variations"
    6262msgstr ""
  • variation-duplicator-for-woocommerce/trunk/variation-duplicator-for-woocommerce.php

    r2897695 r2962513  
    66     * Author: Emran Ahmed
    77     * Domain Path: /languages
    8      * Version: 2.0.7
     8     * Version: 2.0.8
    99     * Requires PHP: 7.4
    1010     * Requires at least: 5.6
    11      * Tested up to: 6.2
     11     * Tested up to: 6.3
    1212     * WC requires at least: 5.6
    13      * WC tested up to: 7.5
     13     * WC tested up to: 8.0
    1414     * Text Domain: variation-duplicator-for-woocommerce
    1515     * Author URI: https://getwooplugins.com/
     
    1818    defined( 'ABSPATH' ) or die( 'Keep Silent' );
    1919   
     20    if ( ! defined( 'VARIATION_DUPLICATOR_FOR_WOOCOMMERCE_PLUGIN_VERSION' ) ) {
     21        define( 'VARIATION_DUPLICATOR_FOR_WOOCOMMERCE_PLUGIN_VERSION', '2.0.8' );
     22    }
     23   
    2024    if ( ! defined( 'VARIATION_DUPLICATOR_FOR_WOOCOMMERCE_PLUGIN_FILE' ) ) {
    2125        define( 'VARIATION_DUPLICATOR_FOR_WOOCOMMERCE_PLUGIN_FILE', __FILE__ );
    22     }
    23    
    24     if ( ! defined( 'VARIATION_DUPLICATOR_FOR_WOOCOMMERCE_PLUGIN_VERSION' ) ) {
    25         define( 'VARIATION_DUPLICATOR_FOR_WOOCOMMERCE_PLUGIN_VERSION', '2.0.7' );
    2626    }
    2727   
Note: See TracChangeset for help on using the changeset viewer.