mirror of
https://github.com/pronamic/woocommerce-subscriptions.git
synced 2025-10-07 10:04:03 +00:00
819 lines
31 KiB
JavaScript
Executable File
819 lines
31 KiB
JavaScript
Executable File
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();
|
|
$.showOrHideStockFields();
|
|
|
|
// 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();
|
|
$.showOrHideStockFields();
|
|
}
|
|
|
|
// Restore the sale price row width to half
|
|
$('.sale_price_dates_fields').prev('.form-row').removeClass('form-row-full').addClass('form-row-last');
|
|
}
|
|
},
|
|
showOrHideStockFields : function(){
|
|
if ( $( 'input#_manage_stock' ).is( ':checked' ) ) {
|
|
$( 'div.stock_fields' ).show();
|
|
} else {
|
|
$( 'div.stock_fields' ).hide();
|
|
}
|
|
},
|
|
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($('<option></option>').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($('<option></option>').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($('<option></option>').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.length ) && 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('<span id="sale-price-period" style="display: none;"></span>');
|
|
|
|
// 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' ) ),
|
|
$syncRenewals = $( document.getElementById( 'woocommerce_subscriptions_sync_payments' ) );
|
|
|
|
// We're on the Subscriptions settings page
|
|
if ( $allowSwitching.length > 0 ) {
|
|
var allowSwitchingEnabled = $allowSwitching.find( 'input:checked' ).length,
|
|
$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 ( 0 === allowSwitchingEnabled ) {
|
|
$switchSettingsRows.hide();
|
|
}
|
|
|
|
$allowSwitching.find( 'input' ).on( 'change', function() {
|
|
|
|
var isEnabled = $allowSwitching.find( 'input:checked' ).length;
|
|
|
|
if ( 0 === isEnabled ) {
|
|
$switchSettingsRows.fadeOut();
|
|
} else if ( 0 === allowSwitchingEnabled ) { // switching was previously disabled, so settings will be hidden
|
|
$switchSettingsRows.fadeIn();
|
|
}
|
|
allowSwitchingEnabled = isEnabled;
|
|
} );
|
|
|
|
// 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();
|
|
|
|
/*
|
|
* Handles enabling and disabling PayPal Standard for Subscriptions.
|
|
*/
|
|
var wcs_paypal_standard_settings = {
|
|
|
|
init: function() {
|
|
if ( 0 === $( '#woocommerce_paypal_enabled' ).length ) {
|
|
return;
|
|
}
|
|
|
|
$( '#woocommerce_paypal_enabled' ).on( 'change', this.paypal_enabled_change );
|
|
$( '#woocommerce_paypal_enabled_for_subscriptions' ).on( 'change', this.paypal_for_subscriptions_enabled );
|
|
this.paypal_enabled_change();
|
|
},
|
|
|
|
/**
|
|
* Show and hide the enable PayPal for Subscriptions checkbox when PayPal is enabled or disabled.
|
|
*/
|
|
paypal_enabled_change: function() {
|
|
var $enabled_for_subscriptions_element = $( '#woocommerce_paypal_enabled_for_subscriptions' ).closest( 'tr' );
|
|
|
|
if ( $( '#woocommerce_paypal_enabled' ).is( ':checked' ) ) {
|
|
$enabled_for_subscriptions_element.show();
|
|
} else {
|
|
$enabled_for_subscriptions_element.hide();
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Display a confirm dialog when PayPal for Subscriptions is enabled (checked).
|
|
*/
|
|
paypal_for_subscriptions_enabled: function() {
|
|
if ( $( this ).is( ':checked' ) && ! confirm( WCSubscriptions.enablePayPalWarning ) ) {
|
|
$( this ).removeAttr( 'checked' );
|
|
}
|
|
}
|
|
};
|
|
wcs_paypal_standard_settings.init();
|
|
|
|
});
|