"use strict"; var bulkoperations_selected_attributes = []; var woobe_bulkoperations_xhr = null;//current ajax request (for cancel) var woobe_bulkoperations_user_cancel = false;//current ajax request (for cancel) jQuery(function ($) { jQuery('.woobe_tools_panel_newvars_btn').on('click', function () { var popup = jQuery('#bulkoperations_popup'); jQuery(popup).show(); jQuery('.woobe-modal-close-bulkoperations').off('click'); jQuery('.woobe-modal-close-bulkoperations').on('click', function () { jQuery(popup).hide(); }); //*** jQuery('#bulkoperations_attributes').chosen({ width: '100%' }).trigger("chosen:updated"); jQuery('#bulkoperations_attributes').off('change'); jQuery('#bulkoperations_attributes').on('change',function () { if (jQuery(this).val() && bulkoperations_selected_attributes.length < jQuery(this).val().length) { //add //https://stackoverflow.com/questions/1187518/how-to-get-the-difference-between-two-arrays-in-javascript var diff = jQuery(jQuery(this).val()).not(bulkoperations_selected_attributes).get(); bulkoperations_selected_attributes = jQuery(this).val(); var new_attribute = diff[0]; var new_attribute_label = jQuery(this).find('option[value="' + new_attribute + '"]').text(); jQuery('.bulkoperations_generate_combinations_btn').show(); //*** woobe_message(lang.loading, 'warning'); const nonce = jQuery('#woobe_bulkoperations_nonce').val(); jQuery.ajax({ method: "POST", url: ajaxurl, data: { action: 'woobe_bulkoperations_get_att_terms', attribute: new_attribute, bulkoperations_nonce: nonce }, success: function (terms) { woobe_message(lang.loaded, 'notice'); var select_id = 'bulkoperations_t_' + new_attribute; jQuery('#bulkoperations_attributes_terms').append('<li><select multiple="" id="' + select_id + '" data-attribute="' + new_attribute + '" data-placeholder="' + new_attribute_label + '"></select><a href="#" class="button '+ select_id + '_select">' + lang.select_all + '</a> <a href="#" class="button '+ select_id + '_remove">'+lang.deselect_all+'</a></li>'); __woobe_fill_select(select_id, JSON.parse(terms)); jQuery('#' + select_id).chosen({ width: '100%' }); jQuery('.' + select_id + '_select').on('click', function(evt){ evt.preventDefault(); jQuery('#' + select_id + ' option').prop('selected', true); jQuery('#' + select_id).trigger("chosen:updated");; return false; }); jQuery('.' + select_id + '_remove').on('click', function(evt){ evt.preventDefault(); jQuery('#' + select_id + ' option').prop('selected', false); jQuery('#' + select_id).trigger("chosen:updated");; return false; }); } }); } else { //remove if (jQuery(this).val()) { bulkoperations_selected_attributes = jQuery(this).val(); } else { bulkoperations_selected_attributes = []; } //*** if (bulkoperations_selected_attributes.length === 0) { jQuery('#bulkoperations_attributes_terms').html(''); jQuery('.bulkoperations_generate_combinations_btn').hide(); jQuery('#bulkoperations_step_3').hide(); } else { jQuery('#bulkoperations_attributes_terms select').each(function (i, s) { var tax = jQuery(this).data('attribute'); if (jQuery.inArray(tax, bulkoperations_selected_attributes) === -1) { jQuery(this).chosen("destroy").parent().remove(); } }); } } }); return false; }); //*** }); function bulkoperations_generate_combinations() { //console.log(lang); woobe_message(lang.bulkoperations.generating, 'warning', 30000); var data = []; var labels = []; jQuery('#bulkoperations_attributes_combos').empty(); //bulkoperations_attributes_terms jQuery('#bulkoperations_attributes_terms select').each(function (i, sel) { var vals = jQuery(sel).val(); if (!vals) { return; } vals = vals.map(function (x) { return parseInt(x, 10); }); data[jQuery(sel).data('attribute')] = vals; jQuery.each(jQuery(sel).find('option'), function (i, o) { if (jQuery.inArray(parseInt(jQuery(o).val(), 10), vals) > -1) { labels[parseInt(jQuery(o).val(), 10)] = jQuery(o).text(); } }); }); //*** var variants = []; //lets generate possible variants Object.keys(data).map(function (objectKey, index) { variants.push(data[objectKey]); }); const nonce = jQuery('#woobe_bulkoperations_nonce').val(); jQuery.ajax({ method: "POST", url: ajaxurl, data: { action: 'woobe_bulkoperations_get_possible_combos', arrays: variants, bulkoperations_nonce: nonce }, success: function (combinations) { combinations = JSON.parse(combinations); if (combinations.length > 0) { var li_tpl = jQuery('#bulkoperations_attributes_combo_tpl').html(); for (var i = 0; i < combinations.length; i++) { if (combinations[i].length) { var st1 = ''; var st2 = ''; for (var y = 0; y < combinations[i].length; y++) { if (y > 0) { st1 += ' | '; st2 += ','; } st1 += labels[combinations[i][y]]; st2 += combinations[i][y]; } var li = li_tpl; li = li.replace(/__LABEL__/gi, st1); li = li.replace(/__DATA_TERMS__/gi, st2); li = li.replace(/__ID__/gi, woobe_get_random_string(8)); jQuery('#bulkoperations_attributes_combos').append(li); } } } jQuery('#bulkoperations_attributes_combos').parent().find('h4 span').html(jQuery('#bulkoperations_attributes_combos li').length); jQuery("#bulkoperations_attributes_combos").sortable({ items: "li:not(.unsortable)", update: function (event, ui) {}, opacity: 0.8, cursor: "crosshair", handle: '.woobe_drag_and_drope', placeholder: 'woobe-options-highlight' }); //*** woobe_message(lang.bulkoperations.generated, 'notice'); jQuery('#bulkoperations_step_3').show(); } }); return false; } function bulkoperations_generate_variations() { if (confirm(lang.sure)) { var checked = jQuery('#bulkoperations_attributes_combos').find('input:checked'); var combinations = []; if (checked.length > 0) { woobe_bulkoperations_is_going(); jQuery('.bulkoperations_generate_variations_btn').hide(); jQuery('.woobe_bulkoperations_terminate_btn').show(); woobe_set_progress('woobe_bulkoperations_progress', 0); //*** jQuery(checked).each(function (i, o) { var tmp = jQuery(o).data('terms') + ''; tmp = tmp.split(','); tmp = tmp.map(function (x) { return parseInt(x, 10); }); combinations.push(tmp); }); //*** if (woobe_checked_products.length > 0) { __woobe_bulkoperations_products(woobe_checked_products, 0, combinations); } else { const nonce = jQuery('#woobe_bulkoperations_nonce').val(); woobe_bulkoperations_xhr = jQuery.ajax({ method: "POST", url: ajaxurl, data: { action: 'woobe_bulkoperations_get_prod_count', filter_current_key: woobe_filter_current_key, bulkoperations_nonce: nonce }, success: function (products_ids) { products_ids = JSON.parse(products_ids); if (products_ids.length) { __woobe_bulkoperations_products(products_ids, 0, combinations); } }, error: function () { if (!woobe_bulkoperations_user_cancel) { alert(lang.error); woobe_bulkoperations_terminate(); } woobe_bulkoperations_is_going(false); } }); } } else { woobe_message(lang.bulkoperations.no_combinations, 'warning', 3000); } } return false; } //*** //service function __woobe_bulkoperations_products(products, start, combinations) { var step = 2; var products_ids = products.slice(start, start + step); const nonce = jQuery('#woobe_bulkoperations_nonce').val(); woobe_bulkoperations_xhr = jQuery.ajax({ method: "POST", url: ajaxurl, data: { action: 'woobe_bulkoperations_apply_combinations', products_ids: products_ids, combinations: combinations, bulkoperations_nonce: nonce }, success: function (e) { //console.log(JSON.parse(e)); if ((start + step) > products.length) { woobe_message(lang.bulkoperations.finished, 'notice', 10000); //https://datatables.net/reference/api/draw() data_table.draw('page'); jQuery('.bulkoperations_generate_variations_btn').show(); jQuery('.woobe_bulkoperations_terminate_btn').hide(); woobe_set_progress('woobe_bulkoperations_progress', 100); jQuery(document).trigger('woobe_bulkoperations_completed'); woobe_bulkoperations_is_going(false); } else { //show % woobe_set_progress('woobe_bulkoperations_progress', (start + step) * 100 / products.length); __woobe_bulkoperations_products(products, start + step, combinations); } }, error: function () { if (!woobe_bulkoperations_user_cancel) { alert(lang.error); woobe_bulkoperations_terminate(); } woobe_bulkoperations_is_going(false); } }); } function woobe_bulkoperations_terminate() { if (confirm(lang.sure)) { woobe_bulkoperations_user_cancel = true; woobe_bulkoperations_xhr.abort(); woobe_hide_progress('woobe_bulkoperations_progress'); jQuery('.bulkoperations_generate_variations_btn').show(); jQuery('.woobe_bulkoperations_terminate_btn').hide(); woobe_message(lang.canceled, 'error'); woobe_bulkoperations_user_cancel = false; woobe_bulkoperations_is_going(false); } } function woobe_bulkoperations_is_going(go = true) { if (go) { jQuery('#wp-admin-bar-root-default').append("<li id='woobe_bulkoperations_is_going'>" + lang.bulkoperations.going + "</li>"); } else { jQuery('#woobe_bulkoperations_is_going').remove(); } //any way some operations been done jQuery(document).trigger('woobe_page_field_updated', [0, 0, 0]); }