jQuery(document).ready(function($){ $.extend({ getParameterByName: function(name) { name = name.replace(/[\[]/, '\\\[').replace(/[\]]/, '\\\]'); var regexS = '[\\?&]' + name + '=([^&#]*)'; var regex = new RegExp(regexS); var results = regex.exec(window.location.search); if(results == null) { return ''; } else { return decodeURIComponent(results[1].replace(/\+/g, ' ')); } }, showHideSubscriptionMeta: function(){ if ($('select#product-type').val()==WCSubscriptions.productType) { $('.show_if_simple').show(); $('.grouping_options').hide(); $('.options_group.pricing ._regular_price_field').hide(); $('#sale-price-period').show(); $('.hide_if_subscription').hide(); $( 'input#_manage_stock' ).change(); if('day' == $('#_subscription_period').val()) { $('.subscription_sync').hide(); } } else { $('.options_group.pricing ._regular_price_field').show(); $('#sale-price-period').hide(); } }, showHideVariableSubscriptionMeta: function(){ // In order for WooCommerce not to show the stock_status_field on variable subscriptions, make sure it has the hide if variable subscription class. $( 'p.stock_status_field' ).addClass( 'hide_if_variable-subscription' ); if ($('select#product-type').val()=='variable-subscription') { $( 'input#_downloadable' ).prop( 'checked', false ); $( 'input#_virtual' ).removeAttr( 'checked' ); $('.show_if_variable').show(); $('.hide_if_variable').hide(); $('.show_if_variable-subscription').show(); $('.hide_if_variable-subscription').hide(); $( 'input#_manage_stock' ).change(); // Make the sale price row full width $('.sale_price_dates_fields').prev('.form-row').addClass('form-row-full').removeClass('form-row-last'); } else { if ( 'variable' === $('select#product-type').val() ) { $( '.show_if_variable-subscription' ).hide(); $( '.show_if_variable' ).show(); $( '.hide_if_variable' ).hide(); $( 'input#_manage_stock' ).change(); } // Restore the sale price row width to half $('.sale_price_dates_fields').prev('.form-row').removeClass('form-row-full').addClass('form-row-last'); } }, setSubscriptionLengths: function(){ $('[name^="_subscription_length"], [name^="variable_subscription_length"]').each(function(){ var $lengthElement = $(this), selectedLength = $lengthElement.val(), hasSelectedLength = false, matches = $lengthElement.attr('name').match(/\[(.*?)\]/), periodSelector, interval; if (matches) { // Variation periodSelector = '[name="variable_subscription_period['+matches[1]+']"]'; billingInterval = parseInt($('[name="variable_subscription_period_interval['+matches[1]+']"]').val()); } else { periodSelector = '#_subscription_period'; billingInterval = parseInt($('#_subscription_period_interval').val()); } $lengthElement.empty(); $.each(WCSubscriptions.subscriptionLengths[ $(periodSelector).val() ], function(length,description) { if(parseInt(length) == 0 || 0 == (parseInt(length) % billingInterval)) { $lengthElement.append($('').attr('value',length).text(description)); } }); $lengthElement.children('option').each(function(){ if (this.value == selectedLength) { hasSelectedLength = true; return false; } }); if(hasSelectedLength){ $lengthElement.val(selectedLength); } else { $lengthElement.val(0); } }); }, setTrialPeriods: function(){ $('[name^="_subscription_trial_length"], [name^="variable_subscription_trial_length"]').each(function(){ var $trialLengthElement = $(this), trialLength = $trialLengthElement.val(), matches = $trialLengthElement.attr('name').match(/\[(.*?)\]/), periodStrings; if (matches) { // Variation $trialPeriodElement = $('[name="variable_subscription_trial_period['+matches[1]+']"]'); } else { $trialPeriodElement = $('#_subscription_trial_period'); } selectedTrialPeriod = $trialPeriodElement.val(); $trialPeriodElement.empty(); if( parseInt(trialLength) == 1 ) { periodStrings = WCSubscriptions.trialPeriodSingular; } else { periodStrings = WCSubscriptions.trialPeriodPlurals; } $.each(periodStrings, function(key,description) { $trialPeriodElement.append($('').attr('value',key).text(description)); }); $trialPeriodElement.val(selectedTrialPeriod); }); }, setSalePeriod: function(){ $('#sale-price-period').fadeOut(80,function(){ $('#sale-price-period').text($('#_subscription_period_interval option:selected').text()+' '+$('#_subscription_period option:selected').text()); $('#sale-price-period').fadeIn(180); }); }, setSyncOptions: function(periodField) { if ( typeof periodField != 'undefined' ) { if ($('select#product-type').val()=='variable-subscription') { var $container = periodField.closest('.woocommerce_variable_attributes').find('.variable_subscription_sync'); } else { $container = periodField.closest('#general_product_data').find('.subscription_sync') } var $syncWeekMonthContainer = $container.find('.subscription_sync_week_month'), $syncWeekMonthSelect = $syncWeekMonthContainer.find('select'), $syncAnnualContainer = $container.find('.subscription_sync_annual'), $varSubField = $container.find('[name^="variable_subscription_payment_sync_date"]'), billingPeriod; if ($varSubField.length > 0) { // Variation var matches = $varSubField.attr('name').match(/\[(.*?)\]/); $subscriptionPeriodElement = $('[name="variable_subscription_period['+matches[1]+']"]'); } else { $subscriptionPeriodElement = $('#_subscription_period'); } billingPeriod = $subscriptionPeriodElement.val(); if('day'==billingPeriod) { $syncWeekMonthSelect.val(0); $syncAnnualContainer.find('input[type="number"]').val(0); } else { if('year'==billingPeriod) { // Make sure the year sync fields are reset $syncAnnualContainer.find('input[type="number"]').val(0); // And the week/month field has no option selected $syncWeekMonthSelect.val(0); } else { // Make sure the year sync value is 0 $syncAnnualContainer.find('input[type="number"]').val(0); // And the week/month field has the appropriate options $syncWeekMonthSelect.empty(); $.each(WCSubscriptions.syncOptions[billingPeriod], function(key,description) { $syncWeekMonthSelect.append($('').attr('value',key).text(description)); }); } } } }, showHideSyncOptions: function(){ if($('#_subscription_payment_sync_date').length > 0 || $('.wc_input_subscription_payment_sync').length > 0){ $('.subscription_sync, .variable_subscription_sync').each(function(){ // loop through all sync field groups var $syncWeekMonthContainer = $(this).find('.subscription_sync_week_month'), $syncWeekMonthSelect = $syncWeekMonthContainer.find('select'), $syncAnnualContainer = $(this).find('.subscription_sync_annual'), $varSubField = $(this).find('[name^="variable_subscription_payment_sync_date"]'), $slideSwitch = false, // stop the general sync field group sliding down if editing a variable subscription billingPeriod; if ($varSubField.length > 0) { // Variation var matches = $varSubField.attr('name').match(/\[(.*?)\]/); $subscriptionPeriodElement = $('[name="variable_subscription_period['+matches[1]+']"]'); if ($('select#product-type').val()=='variable-subscription') { $slideSwitch = true; } } else { $subscriptionPeriodElement = $('#_subscription_period'); if ($('select#product-type').val()==WCSubscriptions.productType) { $slideSwitch = true; } } billingPeriod = $subscriptionPeriodElement.val(); if('day'==billingPeriod) { $(this).slideUp(400); } else { if ( $slideSwitch ) { $(this).slideDown(400); if('year'==billingPeriod) { // Make sure the year sync fields are visible $syncAnnualContainer.slideDown(400); // And the week/month field is hidden $syncWeekMonthContainer.slideUp(400); } else { // Make sure the year sync fields are hidden $syncAnnualContainer.slideUp(400); // And the week/month field is visible $syncWeekMonthContainer.slideDown(400); } } } }); } }, moveSubscriptionVariationFields: function(){ $('#variable_product_options .variable_subscription_pricing').not('wcs_moved').each(function(){ var $regularPriceRow = $(this).siblings('.variable_pricing'), $trialSignUpRow = $(this).siblings('.variable_subscription_trial_sign_up'), $saleDatesRow; $saleDatesRow = $(this).siblings('.variable_pricing'); // Add the subscription price fields above the standard price fields $(this).insertBefore($regularPriceRow); $trialSignUpRow.insertBefore($(this)); // Replace the regular price field with the trial period field $regularPriceRow.children(':first').addClass('hide_if_variable-subscription'); $(this).addClass('wcs_moved'); }); }, getVariationBulkEditValue: function(variation_action){ var value; switch( variation_action ) { case 'variable_subscription_period': case 'variable_subscription_trial_period': value = prompt( WCSubscriptions.bulkEditPeriodMessage ); break; case 'variable_subscription_period_interval': value = prompt( WCSubscriptions.bulkEditIntervalhMessage ); break; case 'variable_subscription_trial_length': case 'variable_subscription_length': value = prompt( WCSubscriptions.bulkEditLengthMessage ); break; case 'variable_subscription_sign_up_fee': value = prompt( woocommerce_admin_meta_boxes_variations.i18n_enter_a_value ); value = accounting.unformat( value, woocommerce_admin.mon_decimal_point ); break; } return value; }, disableEnableOneTimeShipping: function() { var is_synced_or_has_trial = false; if ( 'variable-subscription' == $( 'select#product-type' ).val() ) { var variations = $( '.woocommerce_variations .woocommerce_variation' ), variations_checked = {}, number_of_pages = $( '.woocommerce_variations' ).attr( 'data-total_pages' ); $(variations).each(function() { var period_field = $( this ).find( '.wc_input_subscription_period' ), variation_index = $( period_field ).attr( 'name' ).match(/\[(.*?)\]/), variation_id = $( '[name="variable_post_id['+variation_index[1]+']"]' ).val(), period = period_field.val(), trial = $( this ).find( '.wc_input_subscription_trial_length' ).val(), sync_date = 0; if ( 0 != trial ) { is_synced_or_has_trial = true; // break return false; } if ( $( this ).find( '.variable_subscription_sync' ).length ) { if ( 'month' == period || 'week' == period ) { sync_date = $( '[name="variable_subscription_payment_sync_date['+variation_index[1]+']"]' ).val(); } else if ( 'year' == period ) { sync_date = $( '[name="variable_subscription_payment_sync_date_day['+variation_index[1]+']"]' ).val(); } if ( 0 != sync_date ) { is_synced_or_has_trial = true; // break return false; } } variations_checked[ variation_index[1] ] = variation_id; }); // if we haven't found a variation synced or with a trial at this point check the backend for other product variations if ( ( number_of_pages > 1 || 0 == variations.size() ) && false == is_synced_or_has_trial ) { var data = { action: 'wcs_product_has_trial_or_is_synced', product_id: woocommerce_admin_meta_boxes_variations.post_id, variations_checked: variations_checked, nonce: WCSubscriptions.oneTimeShippingCheckNonce, }; $.ajax({ url: WCSubscriptions.ajaxUrl, data: data, type: 'POST', success : function( response ) { $( '#_subscription_one_time_shipping' ).prop( 'disabled', response.is_synced_or_has_trial ); // trigger an event now we have determined the one time shipping availability, in case we need to update the backend $( '#_subscription_one_time_shipping' ).trigger( 'subscription_one_time_shipping_updated', [ response.is_synced_or_has_trial ] ); } }); } else { // trigger an event now we have determined the one time shipping availability, in case we need to update the backend $( '#_subscription_one_time_shipping' ).trigger( 'subscription_one_time_shipping_updated', [ is_synced_or_has_trial ] ); } } else { var trial = $( '#general_product_data #_subscription_trial_length' ).val(); if ( 0 != trial ) { is_synced_or_has_trial = true; } if ( $( '.subscription_sync' ).length && false == is_synced_or_has_trial ) { var period = $( '#_subscription_period' ).val(), sync_date = 0; if ( 'month' == period || 'week' == period ) { sync_date = $( '#_subscription_payment_sync_date' ).val(); } else if ( 'year' == period ) { sync_date = $( '#_subscription_payment_sync_date_day' ).val(); } if ( 0 != sync_date ) { is_synced_or_has_trial = true; } } } $( '#_subscription_one_time_shipping' ).prop( 'disabled', is_synced_or_has_trial ); }, showHideSubscriptionsPanels: function() { var tab = $( 'div.panel-wrap' ).find( 'ul.wc-tabs li' ).eq( 0 ).find( 'a' ); var panel = tab.attr( 'href' ); var visible = $( panel ).children( '.options_group' ).filter( function() { return 'none' != $( this ).css( 'display' ); }); if ( 0 != visible.length ) { tab.click().parent().show(); } }, maybeDisableRemoveLinks: function() { $( '#variable_product_options .woocommerce_variation' ).each( function() { var $removeLink = $( this ).find( '.remove_variation' ); var can_remove_variation = ( '1' === $( this ).find( 'input.wcs-can-remove-variation').val() ); var $msg = $( this ).find( '.wcs-can-not-remove-variation-msg' ); if ( ! can_remove_variation ) { $msg.text( $removeLink.text() ); $removeLink.replaceWith( $msg ); } } ); }, }); $('.options_group.pricing ._sale_price_field .description').prepend(''); // Move the subscription pricing section to the same location as the normal pricing section $('.options_group.subscription_pricing').not('.variable_subscription_pricing .options_group.subscription_pricing').insertBefore($('.options_group.pricing:first')); $('.show_if_subscription.clear').insertAfter($('.options_group.subscription_pricing')); // Move the subscription variation pricing section to a better location in the DOM on load if($('#variable_product_options .variable_subscription_pricing').length > 0) { $.moveSubscriptionVariationFields(); } // When a variation is added $('#woocommerce-product-data').on('woocommerce_variations_added woocommerce_variations_loaded',function(){ $.moveSubscriptionVariationFields(); $.showHideVariableSubscriptionMeta(); $.showHideSyncOptions(); $.setSubscriptionLengths(); }); if($('.options_group.pricing').length > 0) { $.setSalePeriod(); $.showHideSubscriptionMeta(); $.showHideVariableSubscriptionMeta(); $.setSubscriptionLengths(); $.setTrialPeriods(); $.showHideSyncOptions(); $.disableEnableOneTimeShipping(); $.showHideSubscriptionsPanels(); } // Update subscription ranges when subscription period or interval is changed $('#woocommerce-product-data').on('change','[name^="_subscription_period"], [name^="_subscription_period_interval"], [name^="variable_subscription_period"], [name^="variable_subscription_period_interval"]',function(){ $.setSubscriptionLengths(); $.showHideSyncOptions(); $.setSyncOptions( $(this) ); $.setSalePeriod(); $.disableEnableOneTimeShipping(); }); $('#woocommerce-product-data').on('propertychange keyup input paste change','[name^="_subscription_trial_length"], [name^="variable_subscription_trial_length"]',function(){ $.setTrialPeriods(); }); $('body').bind('woocommerce-product-type-change',function(){ $.showHideSubscriptionMeta(); $.showHideVariableSubscriptionMeta(); $.showHideSyncOptions(); $.showHideSubscriptionsPanels(); }); $('input#_downloadable, input#_virtual').change(function(){ $.showHideSubscriptionMeta(); $.showHideVariableSubscriptionMeta(); }); // Make sure the "Used for variations" checkbox is visible when adding attributes to a variable subscription $('body').on('woocommerce_added_attribute', function(){ $.showHideVariableSubscriptionMeta(); }); if($.getParameterByName('select_subscription')=='true'){ $('select#product-type option[value="'+WCSubscriptions.productType+'"]').attr('selected', 'selected'); $('select#product-type').select().change(); } // Before saving a subscription product, validate the trial period $('#post').submit(function(e){ if ( WCSubscriptions.subscriptionLengths !== undefined ){ var trialLength = $('#_subscription_trial_length').val(), selectedTrialPeriod = $('#_subscription_trial_period').val(); if ( parseInt(trialLength) >= WCSubscriptions.subscriptionLengths[selectedTrialPeriod].length ) { alert(WCSubscriptions.trialTooLongMessages[selectedTrialPeriod]); $('#ajax-loading').hide(); $('#publish').removeClass('button-primary-disabled'); e.preventDefault(); } } }); // Notify store manager that deleting an order via the Orders screen also deletes subscriptions associated with the orders $('#posts-filter').submit(function(){ if($('[name="post_type"]').val()=='shop_order'&&($('[name="action"]').val()=='trash'||$('[name="action2"]').val()=='trash')){ var containsSubscription = false; $('[name="post[]"]:checked').each(function(){ if(true===$('.contains_subscription',$('#post-'+$(this).val())).data('contains_subscription')){ containsSubscription = true; } return (false === containsSubscription); }); if(containsSubscription){ return confirm(WCSubscriptions.bulkTrashWarning); } } }); $('.order_actions .submitdelete').click(function(){ if($('[name="contains_subscription"]').val()=='true'){ return confirm(WCSubscriptions.trashWarning); } }); $( '#variable_product_options' ).on( 'click', '.delete.wcs-can-not-remove-variation-msg', function( e ) { e.preventDefault(); e.stopPropagation(); } ); // Notify the store manager that trashing an order via the admin orders table row action also deletes the associated subscription if it exists $( '.row-actions .submitdelete' ).click( function() { var order = $( this ).closest( '.type-shop_order' ).attr( 'id' ); if ( true === $( '.contains_subscription', $( '#' + order ) ).data( 'contains_subscription' ) ) { return confirm( WCSubscriptions.trashWarning ); } }); $(window).load(function(){ if($('[name="contains_subscription"]').length > 0 && $('[name="contains_subscription"]').val()=='true'){ // Show the Recurring Order Totals meta box in WC 2.2 $('#woocommerce-order-totals').show(); } else { $('#woocommerce-order-totals').hide(); } }); // Editing a variable product $('#variable_product_options').on('change','[name^="variable_regular_price"]',function(){ var matches = $(this).attr('name').match(/\[(.*?)\]/); if (matches) { var loopIndex = matches[1]; $('[name="variable_subscription_price['+loopIndex+']"]').val($(this).val()); } }); // Editing a variable product $('#variable_product_options').on('change','[name^="variable_subscription_price"]',function(){ var matches = $(this).attr('name').match(/\[(.*?)\]/); if (matches) { var loopIndex = matches[1]; $('[name="variable_regular_price['+loopIndex+']"]').val($(this).val()); } }); // Update hidden regular price when subscription price is update on simple products $('#general_product_data').on('change', '[name^="_subscription_price"]', function() { $('[name="_regular_price"]').val($(this).val()); }); // Notify store manager that deleting an user via the Users screen also removed them from any subscriptions. $('.users-php .submitdelete').on('click',function(){ return confirm(WCSubscriptions.deleteUserWarning); }); // WC 2.4+ variation bulk edit handling $('select.variation_actions').on('variable_subscription_sign_up_fee_ajax_data variable_subscription_period_interval_ajax_data variable_subscription_period_ajax_data variable_subscription_trial_period_ajax_data variable_subscription_trial_length_ajax_data variable_subscription_length_ajax_data', function(event, data) { bulk_action = event.type.replace(/_ajax_data/g,''); value = $.getVariationBulkEditValue( bulk_action ); if ( 'variable_subscription_trial_length' == bulk_action ) { // After variations have their trial length bulk updated in the backend, flag the One Time Shipping field as needing to be updated $( '#_subscription_one_time_shipping' ).addClass( 'wcs_ots_needs_update' ); } if ( value != null ) { data.value = value; } return data; }); var $allowSwitching = $( document.getElementById( 'woocommerce_subscriptions_allow_switching' ) ); var $syncRenewals = $( document.getElementById( 'woocommerce_subscriptions_sync_payments' ) ); // We're on the Subscriptions settings page if ( $allowSwitching.length > 0 ) { var allowSwitchingVal = $allowSwitching.val(), $switchSettingsRows = $allowSwitching.parents( 'tr' ).siblings( 'tr' ), $prorateFirstRenewal = $( document.getElementById( 'woocommerce_subscriptions_prorate_synced_payments' ) ), $syncRows = $syncRenewals.parents( 'tr' ).siblings( 'tr' ), $daysNoFeeRow = $( document.getElementById( 'woocommerce_subscriptions_days_no_fee' ) ).parents( 'tr' ), $suspensionExtensionRow = $( '#woocommerce_subscriptions_recoup_suspension' ).parents( 'tr' ); // No animation for initial hiding when switching is disabled. if ( 'no' === allowSwitchingVal ) { $switchSettingsRows.hide(); } $allowSwitching.on( 'change', function() { if ( 'no' === $( this ).val() ) { $switchSettingsRows.fadeOut(); } else if ( 'no' === allowSwitchingVal ) { // switching was previously disabled, so settings will be hidden $switchSettingsRows.fadeIn(); } allowSwitchingVal = $( this ).val(); } ); // Show/hide suspension extension setting $( '#woocommerce_subscriptions_max_customer_suspensions' ).on( 'change', function() { if ( $( this ).val() > 0 ) { $suspensionExtensionRow.show(); } else { $suspensionExtensionRow.hide(); } } ).change(); // No animation when initially hiding prorated rows. if ( ! $syncRenewals.is( ':checked' ) ) { $syncRows.hide(); } else if ( 'recurring' !== $prorateFirstRenewal.val() ) { $daysNoFeeRow.hide(); } // Animate showing and hiding the synchronization rows. $syncRenewals.on( 'change', function(){ if ( $( this ).is( ':checked' ) ) { $syncRows.not( $daysNoFeeRow ).fadeIn(); $prorateFirstRenewal.change(); } else { $syncRows.fadeOut(); } } ); // Watch the Prorate First Renewal field for changes. $prorateFirstRenewal.on( 'change', function() { if ( 'recurring' === $( this ).val() ) { $daysNoFeeRow.fadeIn(); } else { $daysNoFeeRow.fadeOut(); } } ); } // Don't display the variation notice for variable subscription products $( 'body' ).on( 'woocommerce-display-product-type-alert', function(e, select_val) { if (select_val=='variable-subscription') { return false; } }); $('.wcs_payment_method_selector').on('change', function() { var payment_method = $(this).val(); $('.wcs_payment_method_meta_fields').hide(); $('#wcs_' + payment_method + '_fields').show(); }); // After variations have been saved/updated in the backend, flag the One Time Shipping field as needing to be updated $( '#woocommerce-product-data' ).on( 'woocommerce_variations_saved', function() { $( '#_subscription_one_time_shipping' ).addClass( 'wcs_ots_needs_update' ); }); // After variations have been loaded and if the One Time Shipping field needs updating, check if One Time Shipping is still available $( '#woocommerce-product-data' ).on( 'woocommerce_variations_loaded', function() { if ( $( '.wcs_ots_needs_update' ).length ) { $.disableEnableOneTimeShipping(); } }); // After variations have been loaded, check which ones are tied to subscriptions to prevent them from being deleted. $( '#woocommerce-product-data' ).on( 'woocommerce_variations_loaded', function() { $.maybeDisableRemoveLinks(); } ); // Triggered by $.disableEnableOneTimeShipping() after One Time shipping has been enabled or disabled for variations. // If the One Time Shipping field needs updating, send the ajax request to update the product setting in the backend $( '#_subscription_one_time_shipping' ).on( 'subscription_one_time_shipping_updated', function( event, is_synced_or_has_trial ) { if ( $( '.wcs_ots_needs_update' ).length ) { var data = { action: 'wcs_update_one_time_shipping', product_id: woocommerce_admin_meta_boxes_variations.post_id, one_time_shipping_enabled: ! is_synced_or_has_trial, one_time_shipping_selected: $( '#_subscription_one_time_shipping' ).prop( 'checked' ), nonce: WCSubscriptions.oneTimeShippingCheckNonce, }; $.ajax({ url: WCSubscriptions.ajaxUrl, data: data, type: 'POST', success : function( response ) { // remove the flag requiring the one time shipping field to be updated $( '#_subscription_one_time_shipping' ).removeClass( 'wcs_ots_needs_update' ); $( '#_subscription_one_time_shipping' ).prop( 'checked', response.one_time_shipping == 'yes' ? true : false ); } }); } }); $( '#general_product_data, #variable_product_options' ).on( 'change', '[class^="wc_input_subscription_payment_sync"], [class^="wc_input_subscription_trial_length"]', function() { $.disableEnableOneTimeShipping(); }); /** * Prevents removal of variations in use by a subscription. */ var wcs_prevent_variation_removal = { init: function() { if ( 0 === $( '#woocommerce-product-data' ).length ) { return; } $( 'body' ).on( 'woocommerce-product-type-change', this.product_type_change ); $( '#variable_product_options' ).on( 'reload', this.product_type_change ); $( 'select.variation_actions' ).on( 'delete_all_no_subscriptions_ajax_data', this.bulk_action_data ); this.product_type_change(); }, product_type_change: function() { var product_type = $( '#product-type' ).val(); var $variation_actions = $( 'select.variation_actions' ); var $delete_all = $variation_actions.find( 'option[value="delete_all"], option[value="delete_all_no_subscriptions"]' ); if ( 'variable-subscription' === product_type && 'delete_all' === $delete_all.val() ) { $delete_all.data( 'wcs_original_wc_label', $delete_all.text() ) .attr( 'value', 'delete_all_no_subscriptions' ) .text( WCSubscriptions.bulkDeleteOptionLabel ); } else if ( 'variable-subscription' !== product_type && 'delete_all_no_subscriptions' === $delete_all.val() ) { $delete_all.text( $delete_all.data( 'wcs_original_wc_label' ) ) .attr( 'value', 'delete_all' ); } }, bulk_action_data: function( event, data ) { if ( window.confirm( woocommerce_admin_meta_boxes_variations.i18n_delete_all_variations ) ) { if ( window.confirm( woocommerce_admin_meta_boxes_variations.i18n_last_warning ) ) { data.allowed = true; // do_variation_action() in woocommerce/assets/js/admin/meta-boxes-product-variation.js doesn't // allow us to do anything after the AJAX request, so we need to listen to all AJAX requests for a // little while to update the quantity and refresh the variation list. $( document ).bind( 'ajaxComplete', wcs_prevent_variation_removal.update_qty_after_removal ); } } return data; }, update_qty_after_removal: function( event, jqXHR, ajaxOptions ) { var $variations = $( '#variable_product_options .woocommerce_variations' ); var removed; // Not our bulk edit request. Ignore. if ( -1 === ajaxOptions.data.indexOf( 'action=woocommerce_bulk_edit_variations' ) || -1 === ajaxOptions.data.indexOf( 'bulk_action=delete_all_no_subscriptions' ) ) { return; } // Unbind so this doesn't get called every time an AJAX request is performed. $( document ).unbind( 'ajaxComplete', wcs_prevent_variation_removal.update_qty_after_removal ); // Update variation quantity. removed = ( 'OK' === jqXHR.statusText ) ? parseInt( jqXHR.responseText, 10 ) : 0; $variations.attr( 'data-total', Math.max( 0, parseInt( $variations.attr( 'data-total' ), 10 ) - removed ) ); $( '#variable_product_options' ).trigger( 'reload' ); }, }; wcs_prevent_variation_removal.init(); /* * Prevents changing of the product type for subscription products in use by a subscription. */ var wcs_prevent_product_type_change = { init: function() { if ( 'yes' !== WCSubscriptions.productHasSubscriptions ) { return; } var $select = $( 'select#product-type' ); var $options = $select.find( 'option' ); var $selection = $options.filter( 'option:selected' ); if ( 'subscription' !== $selection.val() && 'variable-subscription' !== $selection.val() ) { return; } $options.not( $selection ).prop( 'disabled', true ); $select.addClass( 'tips' ).attr( 'data-tip', WCSubscriptions.productTypeWarning ); }, }; wcs_prevent_product_type_change.init(); });