Changeset 2962513
- Timestamp:
- 09/04/2023 11:38:13 AM (3 years ago)
- Location:
- variation-duplicator-for-woocommerce
- Files:
-
- 19 added
- 7 edited
-
tags/2.0.8 (added)
-
tags/2.0.8/README.txt (added)
-
tags/2.0.8/assets (added)
-
tags/2.0.8/assets/css (added)
-
tags/2.0.8/assets/css/variation-duplicator-for-woocommerce.css (added)
-
tags/2.0.8/assets/css/variation-duplicator-for-woocommerce.min.css (added)
-
tags/2.0.8/assets/js (added)
-
tags/2.0.8/assets/js/variation-duplicator-for-woocommerce.js (added)
-
tags/2.0.8/assets/js/variation-duplicator-for-woocommerce.min.js (added)
-
tags/2.0.8/includes (added)
-
tags/2.0.8/includes/class-variation-duplicator-for-woocommerce-backend.php (added)
-
tags/2.0.8/includes/class-variation-duplicator-for-woocommerce-compatibility.php (added)
-
tags/2.0.8/includes/class-variation-duplicator-for-woocommerce-variation-clone.php (added)
-
tags/2.0.8/includes/class-variation-duplicator-for-woocommerce-variation-image-clone.php (added)
-
tags/2.0.8/includes/class-variation-duplicator-for-woocommerce.php (added)
-
tags/2.0.8/includes/html-variation-duplicator-form.php (added)
-
tags/2.0.8/languages (added)
-
tags/2.0.8/languages/variation-duplicator-for-woocommerce.pot (added)
-
tags/2.0.8/variation-duplicator-for-woocommerce.php (added)
-
trunk/README.txt (modified) (2 diffs)
-
trunk/assets/css/variation-duplicator-for-woocommerce.css (modified) (1 diff)
-
trunk/assets/js/variation-duplicator-for-woocommerce.js (modified) (9 diffs)
-
trunk/assets/js/variation-duplicator-for-woocommerce.min.js (modified) (1 diff)
-
trunk/includes/class-variation-duplicator-for-woocommerce-variation-clone.php (modified) (7 diffs)
-
trunk/languages/variation-duplicator-for-woocommerce.pot (modified) (2 diffs)
-
trunk/variation-duplicator-for-woocommerce.php (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
variation-duplicator-for-woocommerce/trunk/README.txt
r2897695 r2962513 3 3 Tags: woocommerce variations duplicate, variation image duplicate, product variation image duplicate, product variation image copy, variation images clone 4 4 Requires PHP: 7.4 5 Stable tag: 2.0. 75 Stable tag: 2.0.8 6 6 Requires at least: 5.6 7 Tested up to: 6. 27 Tested up to: 6.3 8 8 WC requires at least: 5.6 9 WC tested up to: 7.59 WC tested up to: 8.0 10 10 License: GPLv3 11 11 License URI: http://www.gnu.org/licenses/gpl-3.0.html … … 79 79 == Changelog == 80 80 81 = 2.0. 7 - 12-04-2023 =81 = 2.0.8 - 24-08-2023 = 82 82 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 84 89 * Add: WooCommerce 7.5+ compatibility 85 * Add: WooCommerce H igh-Performance Order Storagecompatibility90 * Add: WooCommerce HPOS compatibility 86 91 87 92 = 2.0.6 - 12-12-2022 = -
variation-duplicator-for-woocommerce/trunk/assets/css/variation-duplicator-for-woocommerce.css
r2897695 r2962513 3 3 * 4 4 * Author: Emran Ahmed ( emran.bd.08@gmail.com ) 5 * Date: 4/12/2023, 3:01:12PM5 * Date: 9/4/2023, 5:34:39 PM 6 6 * Released under the GPLv3 license. 7 7 */ -
variation-duplicator-for-woocommerce/trunk/assets/js/variation-duplicator-for-woocommerce.js
r2897695 r2962513 3 3 * 4 4 * Author: Emran Ahmed ( emran.bd.08@gmail.com ) 5 * Date: 4/12/2023, 3:01:12PM5 * Date: 9/4/2023, 5:34:39 PM 6 6 * Released under the GPLv3 license. 7 7 */ … … 32 32 var _this = this; 33 33 34 this.setOption();34 // this.setOption() 35 35 this.events(); 36 36 $('#woocommerce-product-data').on('woocommerce_variations_loaded', function () { … … 42 42 }); 43 43 $('#variable_product_options').on('woocommerce_variations_added', function () { 44 _this.setCloneWrapper(); 45 46 _this.setOption(); 44 _this.setCloneWrapper(); //this.setOption() 45 47 46 48 47 _this.events(); … … 167 166 $(document).on('woocommerce_variations_added', '#variable_product_options', this.clean); 168 167 $(document).on('woocommerce_variations_removed', '#woocommerce-product-data', this.clean); 168 $(document).on('click', '#variation-duplicator-for-woocommerce-action-button', this.duplicate); 169 169 170 170 var events = $._data(document.body, 'events')['change']; … … 177 177 $(document.body).on('change input', '#variable_product_options .woocommerce_variations :input:not(.no-track-change)', input_change_callback.handler); // Re Init 178 178 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 179 188 $('#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 183 191 }).on('woocommerce_variations_input_changed', function (event) { 184 192 var _this4 = this; … … 191 199 } 192 200 }, { 201 key: "duplicate", 202 value: function duplicate() { 203 $('select#field_to_edit').val('woo_variation_duplicate').trigger('change'); 204 } 205 }, { 193 206 key: "setHowTo", 194 207 value: function setHowTo() { 208 var button = $('#variable_product_options_inner').find('#variation-duplicator-for-woocommerce-action-button'); 195 209 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 } 204 217 } 205 218 }, { … … 218 231 var $clonable = $('input.variation_is_cloneable:checked'); 219 232 var checked = $clonable.length; 233 var variationsWrapper = $('#variable_product_options').find('.woocommerce_variations'); 220 234 221 235 if (checked < 1) { … … 244 258 245 259 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); 247 263 } 248 264 … … 253 269 value: function cloneableClick(event) { 254 270 if ($(this).is(':checked')) { 255 $('select#field_to_edit').val('woo_variation_duplicate').trigger('change');256 271 $(this).closest('label.clone-checkbox').addClass('checked'); 257 $('#varia ble_product_options_inner').find('.variation-duplicator-for-woocommerce-works').addClass('show');272 $('#variation-duplicator-for-woocommerce-action-button').prop('disabled', false); 258 273 } else { 259 274 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); 262 276 } 263 277 -
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 1 1 <?php 2 2 3 3 defined( 'ABSPATH' ) or die( 'Keep Silent' ); 4 4 5 5 if ( ! class_exists( 'Variation_Duplicator_For_Woocommerce_Variation_Clone', false ) ): 6 6 7 7 class Variation_Duplicator_For_Woocommerce_Variation_Clone { 8 8 9 9 protected static $_instance = null; 10 10 11 11 public static function instance() { 12 12 if ( is_null( self::$_instance ) ) { 13 13 self::$_instance = new self(); 14 14 } 15 15 16 16 return self::$_instance; 17 17 } 18 18 19 19 public function __construct() { 20 20 $this->hooks(); 21 21 do_action( 'variation_duplicator_for_woocommerce_variation_clone_loaded', $this ); 22 22 } 23 23 24 24 public function hooks() { 25 25 add_action( 'woocommerce_variation_header', array( $this, 'add_checkbox' ) ); … … 28 28 add_action( 'woocommerce_bulk_edit_variations', array( $this, 'clone' ), 10, 4 ); 29 29 add_action( 'woocommerce_variable_product_before_variations', array( $this, 'instruction' ) ); 30 30 31 31 remove_action( 'wp_ajax_woocommerce_load_variations', array( 'WC_AJAX', 'load_variations' ) ); 32 32 add_action( 'wp_ajax_woocommerce_load_variations', array( $this, 'load_variations' ) ); 33 33 } 34 34 35 35 public function notice() { 36 36 $results = get_transient( 'woo_variation_duplicator_cloned_ids' ); 37 37 $limit_exceed = get_transient( 'woo_variation_duplicator_exceed_clone_limit' ); 38 38 39 39 if ( $results ) { 40 40 $message = sprintf( esc_html__( 'Variation: #%s cloned.', 'variation-duplicator-for-woocommerce' ), implode( ', #', $results ) ); … … 42 42 delete_transient( 'woo_variation_duplicator_cloned_ids' ); 43 43 } 44 44 45 45 if ( $limit_exceed ) { 46 46 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' ) ); … … 48 48 } 49 49 } 50 50 51 51 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>' ); 53 56 } 54 57 55 58 public function load_variations() { 56 59 ob_start(); 57 60 58 61 check_ajax_referer( 'load-variations', 'security' ); 59 62 60 63 if ( ! current_user_can( 'edit_products' ) || empty( $_POST[ 'product_id' ] ) ) { 61 64 wp_die( - 1 ); 62 65 } 63 66 64 67 // Set $post global so its available, like within the admin screens. 65 68 global $post; 66 69 67 70 $loop = 0; 68 71 $product_id = absint( $_POST[ 'product_id' ] ); … … 83 86 'return' => 'objects', 84 87 ) ); 85 88 86 89 if ( $variations ) { 87 90 do_action( 'woo_variation_duplicator_load_variations', $product_object, $variations ); 88 91 wc_render_invalid_variation_notice( $product_object ); 89 92 90 93 foreach ( $variations as $variation_object ) { 91 94 $variation_id = $variation_object->get_id(); … … 96 99 } 97 100 } 98 101 99 102 wp_die(); 100 103 } 101 104 102 105 public function add_checkbox( $variation ) { 103 106 104 107 if ( apply_filters( 'disable_variation_duplicator_for_woocommerce_variation_clone', false, $variation ) ) { 105 108 return true; 106 109 } 107 110 108 111 printf( '<label class="clone-checkbox"> 109 112 <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> 110 113 %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' ) ) ); 111 114 } 112 115 113 116 public function add_dropdown() { 114 117 115 118 if ( apply_filters( 'disable_variation_duplicator_for_woocommerce_variation_clone', false, null ) ) { 116 119 return true; 117 120 } 118 121 119 122 printf( '<option class="woo_variation_duplicate_option" value="woo_variation_duplicate">%s</option>', esc_html__( 'Duplicate variations', 'variation-duplicator-for-woocommerce' ) ); 120 123 } 121 124 122 125 public function clone( $bulk_action, $data, $product_id, $variations ) { 123 126 if ( 'woo_variation_duplicate' === $bulk_action && isset( $data[ 'items' ] ) && ! empty( $data[ 'items' ] ) ) { … … 126 129 $clone_limit = absint( apply_filters( 'woo_variation_duplicator_clone_limit', 9 ) ); 127 130 $times = ( $get_limit > $clone_limit ) ? 1 : $get_limit; 128 131 129 132 if ( $exceed ) { 130 133 set_transient( 'woo_variation_duplicator_exceed_clone_limit', 1 ); 131 134 } 132 135 133 136 $variation_ids = array_map( 'absint', $data[ 'items' ] ); 134 137 $cloned_ids = []; 135 138 136 139 foreach ( $variation_ids as $variation_id ) { 137 140 for ( $i = 1; $i <= $times; $i ++ ) { 138 141 // Main Variation 139 142 $variation_object = wc_get_product_object( 'variation', $variation_id ); 140 143 141 144 $cloned_variation_object = wc_get_product_object( 'variation', $variation_id ); 142 145 $cloned_variation_object->set_props( [ 'id' => 0 ] ); 143 146 $cloned_variation_object->set_parent_id( $product_id ); 144 147 $cloned_variation_id = $cloned_variation_object->save(); 145 148 146 149 array_push( $cloned_ids, $cloned_variation_id ); 147 150 148 151 do_action( 'woo_variation_duplicator_variation_save', $cloned_variation_id, $variation_id, $cloned_variation_object, $variation_object, $variation_ids, $i ); 149 152 } 150 153 } 151 154 152 155 do_action( 'woo_variation_duplicator_variation_saved', $variation_ids, $cloned_ids, $product_id ); 153 156 clean_post_cache( $product_id ); 154 157 155 158 set_transient( 'woo_variation_duplicator_cloned_ids', $cloned_ids ); 156 159 } 157 160 } 158 161 } 159 162 160 163 endif; -
variation-duplicator-for-woocommerce/trunk/languages/variation-duplicator-for-woocommerce.pot
r2897695 r2962513 8 8 "Content-Transfer-Encoding: 8bit\n" 9 9 "Language-Team: Emran Ahmed\n" 10 "POT-Creation-Date: 2023-0 4-12 09:01+0000\n"10 "POT-Creation-Date: 2023-09-04 11:34+0000\n" 11 11 "X-Poedit-Basepath: ..\n" 12 12 "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" … … 42 42 msgstr "" 43 43 44 #: ../includes/class-variation-duplicator-for-woocommerce-variation-clone.php:5 245 msgid " Check how variation duplicator works."44 #: ../includes/class-variation-duplicator-for-woocommerce-variation-clone.php:53 45 msgid "Bulk duplicate" 46 46 msgstr "" 47 47 48 #: ../includes/class-variation-duplicator-for-woocommerce-variation-clone.php:11 048 #: ../includes/class-variation-duplicator-for-woocommerce-variation-clone.php:113 49 49 msgid "Duplicate" 50 50 msgstr "" 51 51 52 #: ../includes/class-variation-duplicator-for-woocommerce-variation-clone.php:11 052 #: ../includes/class-variation-duplicator-for-woocommerce-variation-clone.php:113 53 53 msgid "Save before duplicate" 54 54 msgstr "" 55 55 56 #: ../includes/class-variation-duplicator-for-woocommerce-variation-clone.php:11 056 #: ../includes/class-variation-duplicator-for-woocommerce-variation-clone.php:113 57 57 msgid "If you want to duplicate this variation you have to save this variation first." 58 58 msgstr "" 59 59 60 #: ../includes/class-variation-duplicator-for-woocommerce-variation-clone.php:1 1960 #: ../includes/class-variation-duplicator-for-woocommerce-variation-clone.php:122 61 61 msgid "Duplicate variations" 62 62 msgstr "" -
variation-duplicator-for-woocommerce/trunk/variation-duplicator-for-woocommerce.php
r2897695 r2962513 6 6 * Author: Emran Ahmed 7 7 * Domain Path: /languages 8 * Version: 2.0. 78 * Version: 2.0.8 9 9 * Requires PHP: 7.4 10 10 * Requires at least: 5.6 11 * Tested up to: 6. 211 * Tested up to: 6.3 12 12 * WC requires at least: 5.6 13 * WC tested up to: 7.513 * WC tested up to: 8.0 14 14 * Text Domain: variation-duplicator-for-woocommerce 15 15 * Author URI: https://getwooplugins.com/ … … 18 18 defined( 'ABSPATH' ) or die( 'Keep Silent' ); 19 19 20 if ( ! defined( 'VARIATION_DUPLICATOR_FOR_WOOCOMMERCE_PLUGIN_VERSION' ) ) { 21 define( 'VARIATION_DUPLICATOR_FOR_WOOCOMMERCE_PLUGIN_VERSION', '2.0.8' ); 22 } 23 20 24 if ( ! defined( 'VARIATION_DUPLICATOR_FOR_WOOCOMMERCE_PLUGIN_FILE' ) ) { 21 25 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' );26 26 } 27 27
Note: See TracChangeset
for help on using the changeset viewer.