Easy Digital Downloads - Version 2.9.4

Version Description

Download this release

Release Info

Developer cklosows
Plugin Icon 128x128 Easy Digital Downloads
Version 2.9.4
Comparing to
See all releases

Code changes from version 2.9.3 to 2.9.4

assets/js/edd-ajax.js CHANGED
@@ -11,9 +11,11 @@ jQuery(document).ready(function ($) {
11
  item = $this.data('cart-item'),
12
  action = $this.data('action'),
13
  id = $this.data('download-id'),
 
14
  data = {
15
  action: action,
16
- cart_item: item
 
17
  };
18
 
19
  $.ajax({
@@ -46,7 +48,6 @@ jQuery(document).ready(function ($) {
46
  });
47
  });
48
 
49
-
50
  // Check to see if the purchase form(s) for this download is present on this page
51
  if( $( '[id^=edd_purchase_' + id + ']' ).length ) {
52
  $( '[id^=edd_purchase_' + id + '] .edd_go_to_checkout' ).hide();
@@ -113,6 +114,7 @@ jQuery(document).ready(function ($) {
113
  var download = $this.data('download-id');
114
  var variable_price = $this.data('variable-price');
115
  var price_mode = $this.data('price-mode');
 
116
  var item_price_ids = [];
117
  var free_items = true;
118
 
@@ -170,7 +172,8 @@ jQuery(document).ready(function ($) {
170
  action: action,
171
  download_id: download,
172
  price_ids : item_price_ids,
173
- post_data: $(form).serialize()
 
174
  };
175
 
176
  $.ajax({
@@ -289,8 +292,10 @@ jQuery(document).ready(function ($) {
289
  $('#edd_checkout_form_wrap').on('click', '.edd_checkout_register_login', function () {
290
  var $this = $(this),
291
  data = {
292
- action: $this.data('action')
 
293
  };
 
294
  // Show the ajax loader
295
  $('.edd-cart-ajax').show();
296
 
@@ -318,7 +323,8 @@ jQuery(document).ready(function ($) {
318
  action : 'edd_process_checkout_login',
319
  edd_ajax : 1,
320
  edd_user_login : $('#edd_login_fields #edd_user_login').val(),
321
- edd_user_pass : $('#edd_login_fields #edd_user_pass').val()
 
322
  };
323
 
324
  $.post(edd_global_vars.ajaxurl, data, function(data) {
@@ -432,12 +438,14 @@ jQuery(document).ready(function ($) {
432
  }
433
 
434
  if( 'card_state' != $this.attr('id') ) {
 
435
 
436
  // If the country field has changed, we need to update the state/province field
437
  var postData = {
438
  action: 'edd_get_shop_states',
439
  country: $this.val(),
440
  field_name: field_name,
 
441
  };
442
 
443
  $.ajax({
@@ -501,7 +509,8 @@ function edd_load_gateway( payment_mode ) {
501
  jQuery('.edd-cart-ajax').show();
502
  jQuery('#edd_purchase_form_wrap').html('<span class="edd-loading-ajax edd-loading"></span>');
503
 
504
- var url = edd_scripts.ajaxurl;
 
505
 
506
  if ( url.indexOf( '?' ) > 0 ) {
507
  url = url + '&';
@@ -511,7 +520,7 @@ function edd_load_gateway( payment_mode ) {
511
 
512
  url = url + 'payment-mode=' + payment_mode;
513
 
514
- jQuery.post(url, { action: 'edd_load_gateway', edd_payment_mode: payment_mode },
515
  function(response){
516
  jQuery('#edd_purchase_form_wrap').html(response);
517
  jQuery('.edd-no-js').hide();
11
  item = $this.data('cart-item'),
12
  action = $this.data('action'),
13
  id = $this.data('download-id'),
14
+ nonce = $this.data('nonce'),
15
  data = {
16
  action: action,
17
+ cart_item: item,
18
+ nonce: nonce
19
  };
20
 
21
  $.ajax({
48
  });
49
  });
50
 
 
51
  // Check to see if the purchase form(s) for this download is present on this page
52
  if( $( '[id^=edd_purchase_' + id + ']' ).length ) {
53
  $( '[id^=edd_purchase_' + id + '] .edd_go_to_checkout' ).hide();
114
  var download = $this.data('download-id');
115
  var variable_price = $this.data('variable-price');
116
  var price_mode = $this.data('price-mode');
117
+ var nonce = $this.data('nonce');
118
  var item_price_ids = [];
119
  var free_items = true;
120
 
172
  action: action,
173
  download_id: download,
174
  price_ids : item_price_ids,
175
+ post_data: $(form).serialize(),
176
+ nonce: nonce,
177
  };
178
 
179
  $.ajax({
292
  $('#edd_checkout_form_wrap').on('click', '.edd_checkout_register_login', function () {
293
  var $this = $(this),
294
  data = {
295
+ action: $this.data('action'),
296
+ nonce: $this.data('nonce'),
297
  };
298
+
299
  // Show the ajax loader
300
  $('.edd-cart-ajax').show();
301
 
323
  action : 'edd_process_checkout_login',
324
  edd_ajax : 1,
325
  edd_user_login : $('#edd_login_fields #edd_user_login').val(),
326
+ edd_user_pass : $('#edd_login_fields #edd_user_pass').val(),
327
+ edd_login_nonce : $('#edd_login_nonce').val(),
328
  };
329
 
330
  $.post(edd_global_vars.ajaxurl, data, function(data) {
438
  }
439
 
440
  if( 'card_state' != $this.attr('id') ) {
441
+ var nonce = $(this).data('nonce');
442
 
443
  // If the country field has changed, we need to update the state/province field
444
  var postData = {
445
  action: 'edd_get_shop_states',
446
  country: $this.val(),
447
  field_name: field_name,
448
+ nonce: nonce,
449
  };
450
 
451
  $.ajax({
509
  jQuery('.edd-cart-ajax').show();
510
  jQuery('#edd_purchase_form_wrap').html('<span class="edd-loading-ajax edd-loading"></span>');
511
 
512
+ var nonce = jQuery('#edd-gateway-' + payment_mode).data(payment_mode+'-nonce');
513
+ var url = edd_scripts.ajaxurl;
514
 
515
  if ( url.indexOf( '?' ) > 0 ) {
516
  url = url + '&';
520
 
521
  url = url + 'payment-mode=' + payment_mode;
522
 
523
+ jQuery.post(url, { action: 'edd_load_gateway', edd_payment_mode: payment_mode, nonce: nonce },
524
  function(response){
525
  jQuery('#edd_purchase_form_wrap').html(response);
526
  jQuery('.edd-no-js').hide();
assets/js/edd-ajax.min.js CHANGED
@@ -1 +1 @@
1
- var edd_scripts;function edd_load_gateway(payment_mode){jQuery(".edd-cart-ajax").show(),jQuery("#edd_purchase_form_wrap").html('<span class="edd-loading-ajax edd-loading"></span>');var url=edd_scripts.ajaxurl;0<url.indexOf("?")?url+="&":url+="?",url=url+"payment-mode="+payment_mode,jQuery.post(url,{action:"edd_load_gateway",edd_payment_mode:payment_mode},function(response){jQuery("#edd_purchase_form_wrap").html(response),jQuery(".edd-no-js").hide(),jQuery("body").trigger("edd_gateway_loaded",[payment_mode])})}jQuery(document).ready(function($){if($(".edd-no-js").hide(),$("a.edd-add-to-cart").addClass("edd-has-js"),$(document.body).on("click.eddRemoveFromCart",".edd-remove-from-cart",function(event){var $this=$(this),item=$this.data("cart-item"),action=$this.data("action"),id=$this.data("download-id"),data={action:action,cart_item:item};return $.ajax({type:"POST",data:data,dataType:"json",url:edd_scripts.ajaxurl,xhrFields:{withCredentials:!0},success:function(response){if(response.removed){if(parseInt(edd_scripts.position_in_cart,10)===parseInt(item,10)||edd_scripts.has_purchase_links)return window.location=window.location,!1;$(".edd-cart").each(function(){$(this).find("[data-cart-item='"+item+"']").parent().remove()}),$(".edd-cart").each(function(){var cart_item_counter=0;$(this).find("[data-cart-item]").each(function(){$(this).attr("data-cart-item",cart_item_counter),cart_item_counter+=1})}),$("[id^=edd_purchase_"+id+"]").length&&($("[id^=edd_purchase_"+id+"] .edd_go_to_checkout").hide(),$("[id^=edd_purchase_"+id+"] a.edd-add-to-cart").show().removeAttr("data-edd-loading"),"1"==edd_scripts.quantities_enabled&&$("[id^=edd_purchase_"+id+"] .edd_download_quantity_wrapper").show()),$("span.edd-cart-quantity").text(response.cart_quantity),$(document.body).trigger("edd_quantity_updated",[response.cart_quantity]),edd_scripts.taxes_enabled&&($(".cart_item.edd_subtotal span").html(response.subtotal),$(".cart_item.edd_cart_tax span").html(response.tax)),$(".cart_item.edd_total span").html(response.total),0==response.cart_quantity&&($(".cart_item.edd_subtotal,.edd-cart-number-of-items,.cart_item.edd_checkout,.cart_item.edd_cart_tax,.cart_item.edd_total").hide(),$(".edd-cart").each(function(){var cart_wrapper=$(this).parent();cart_wrapper&&(cart_wrapper.addClass("cart-empty"),cart_wrapper.removeClass("cart-not-empty")),$(this).append('<li class="cart_item empty">'+edd_scripts.empty_cart_message+"</li>")})),$(document.body).trigger("edd_cart_item_removed",[response])}}}).fail(function(response){window.console&&window.console.log&&console.log(response)}).done(function(response){}),!1}),$(document.body).on("click.eddAddToCart",".edd-add-to-cart",function(e){e.preventDefault();var $this=$(this),form=$this.closest("form");$this.prop("disabled",!0);$this.find(".edd-loading");var container=$this.closest("div");$this.attr("data-edd-loading","");form=$this.parents("form").last();var download=$this.data("download-id"),variable_price=$this.data("variable-price"),price_mode=$this.data("price-mode"),item_price_ids=[],free_items=!0;if("yes"==variable_price)if(0<form.find(".edd_price_option_"+download+'[type="hidden"]').length)item_price_ids[0]=$(".edd_price_option_"+download,form).val(),form.find(".edd-submit").data("price")&&0<form.find(".edd-submit").data("price")&&(free_items=!1);else{if(!form.find(".edd_price_option_"+download+":checked",form).length)return $this.removeAttr("data-edd-loading"),alert(edd_scripts.select_option),e.stopPropagation(),$this.prop("disabled",!1),!1;form.find(".edd_price_option_"+download+":checked",form).each(function(index){if(item_price_ids[index]=$(this).val(),!0===free_items){var item_price=$(this).data("price");item_price&&0<item_price&&(free_items=!1)}})}else item_price_ids[0]=download,$this.data("price")&&0<$this.data("price")&&(free_items=!1);if(free_items&&form.find(".edd_action_input").val("add_to_cart"),"straight_to_gateway"==form.find(".edd_action_input").val())return form.submit(),!0;var data={action:$this.data("action"),download_id:download,price_ids:item_price_ids,post_data:$(form).serialize()};return $.ajax({type:"POST",data:data,dataType:"json",url:edd_scripts.ajaxurl,xhrFields:{withCredentials:!0},success:function(response){var store_redirect="1"==edd_scripts.redirect_to_checkout,item_redirect="1"==form.find("#edd_redirect_to_checkout").val();if(store_redirect&&item_redirect||!store_redirect&&item_redirect)window.location=edd_scripts.checkout_page;else{"1"===edd_scripts.taxes_enabled&&($(".cart_item.edd_subtotal").show(),$(".cart_item.edd_cart_tax").show()),$(".cart_item.edd_total").show(),$(".cart_item.edd_checkout").show(),$(".cart_item.empty").length&&$(".cart_item.empty").hide(),$(".widget_edd_cart_widget .edd-cart").each(function(cart){var target=$(this).find(".edd-cart-meta:first");$(response.cart_item).insertBefore(target);var cart_wrapper=$(this).parent();cart_wrapper&&(cart_wrapper.addClass("cart-not-empty"),cart_wrapper.removeClass("cart-empty"))}),"1"===edd_scripts.taxes_enabled&&($(".edd-cart-meta.edd_subtotal span").html(response.subtotal),$(".edd-cart-meta.edd_cart_tax span").html(response.tax)),$(".edd-cart-meta.edd_total span").html(response.total);$(".edd-cart-item-title",response.cart_item).length;if($("span.edd-cart-quantity").each(function(){$(this).text(response.cart_quantity),$(document.body).trigger("edd_quantity_updated",[response.cart_quantity])}),"none"==$(".edd-cart-number-of-items").css("display")&&$(".edd-cart-number-of-items").show("slow"),"no"!=variable_price&&"multi"==price_mode||($("a.edd-add-to-cart",container).toggle(),$(".edd_go_to_checkout",container).css("display","inline-block")),"multi"==price_mode&&$this.removeAttr("data-edd-loading"),$(".edd_download_purchase_form").length&&("no"==variable_price||!form.find(".edd_price_option_"+download).is("input:hidden"))){var parent_form=$('.edd_download_purchase_form *[data-download-id="'+download+'"]').parents("form");$("a.edd-add-to-cart",parent_form).hide(),"multi"!=price_mode&&parent_form.find(".edd_download_quantity_wrapper").slideUp(),$(".edd_go_to_checkout",parent_form).show().removeAttr("data-edd-loading")}"incart"!=response&&($(".edd-cart-added-alert",container).fadeIn(),setTimeout(function(){$(".edd-cart-added-alert",container).fadeOut()},3e3)),$this.prop("disabled",!1),$(document.body).trigger("edd_cart_item_added",[response])}}}).fail(function(response){window.console&&window.console.log&&console.log(response)}).done(function(response){}),!1}),$("#edd_checkout_form_wrap").on("click",".edd_checkout_register_login",function(){var data={action:$(this).data("action")};return $(".edd-cart-ajax").show(),$.post(edd_scripts.ajaxurl,data,function(checkout_response){$("#edd_checkout_login_register").html(edd_scripts.loading),$("#edd_checkout_login_register").html(checkout_response),$(".edd-cart-ajax").hide()}),!1}),$(document).on("click","#edd_purchase_form #edd_login_fields input[type=submit]",function(e){e.preventDefault();var complete_purchase_val=$(this).val();$(this).val(edd_global_vars.purchase_loading),$(this).after('<span class="edd-loading-ajax edd-loading"></span>');var data={action:"edd_process_checkout_login",edd_ajax:1,edd_user_login:$("#edd_login_fields #edd_user_login").val(),edd_user_pass:$("#edd_login_fields #edd_user_pass").val()};$.post(edd_global_vars.ajaxurl,data,function(data){"success"==$.trim(data)?($(".edd_errors").remove(),window.location=edd_scripts.checkout_page):($("#edd_login_fields input[type=submit]").val(complete_purchase_val),$(".edd-loading-ajax").remove(),$(".edd_errors").remove(),$("#edd-user-login-submit").before(data))})}),$("select#edd-gateway, input.edd-gateway").change(function(e){var payment_mode=$("#edd-gateway option:selected, input.edd-gateway:checked").val();return"0"==payment_mode||edd_load_gateway(payment_mode),!1}),"1"==edd_scripts.is_checkout){var chosen_gateway=!1,ajax_needed=!1;$("select#edd-gateway, input.edd-gateway").length&&(chosen_gateway=$("meta[name='edd-chosen-gateway']").attr("content"),ajax_needed=!0),chosen_gateway||(chosen_gateway=edd_scripts.default_gateway),ajax_needed?setTimeout(function(){edd_load_gateway(chosen_gateway)},200):$("body").trigger("edd_gateway_loaded",[chosen_gateway])}$(document).on("click","#edd_purchase_form #edd_purchase_submit [type=submit]",function(e){var eddPurchaseform=document.getElementById("edd_purchase_form");if("function"!=typeof eddPurchaseform.checkValidity||!1!==eddPurchaseform.checkValidity()){e.preventDefault();var complete_purchase_val=$(this).val();$(this).val(edd_global_vars.purchase_loading),$(this).prop("disabled",!0),$(this).after('<span class="edd-loading-ajax edd-loading"></span>'),$.post(edd_global_vars.ajaxurl,$("#edd_purchase_form").serialize()+"&action=edd_process_checkout&edd_ajax=true",function(data){"success"==$.trim(data)?($(".edd_errors").remove(),$(".edd-error").hide(),$(eddPurchaseform).submit()):($("#edd-purchase-button").val(complete_purchase_val),$(".edd-loading-ajax").remove(),$(".edd_errors").remove(),$(".edd-error").hide(),$(edd_global_vars.checkout_error_anchor).before(data),$("#edd-purchase-button").prop("disabled",!1),$(document.body).trigger("edd_checkout_error",[data]))})}}),$(document.body).on("change","#edd_cc_address input.card_state, #edd_cc_address select, #edd_address_country",function(){var $form,$this=$(this),is_checkout="undefined"!=typeof edd_global_vars,field_name="card_state";"edd_address_country"==$(this).attr("id")&&(field_name="edd_address_state");if("card_state"!=$this.attr("id")){var postData={action:"edd_get_shop_states",country:$this.val(),field_name:field_name};$.ajax({type:"POST",data:postData,url:edd_scripts.ajaxurl,xhrFields:{withCredentials:!0},success:function(response){$form=is_checkout?$("#edd_purchase_form"):$this.closest("form");var state_inputs='input[name="card_state"], select[name="card_state"], input[name="edd_address_state"], select[name="edd_address_state"]';if("nostates"==$.trim(response)){$form.find(state_inputs).replaceWith('<input type="text" name="card_state" class="card-state edd-input required" value=""/>')}else $form.find(state_inputs).replaceWith(response);is_checkout&&$(document.body).trigger("edd_cart_billing_address_updated",[response])}}).fail(function(data){window.console&&window.console.log&&console.log(data)}).done(function(data){is_checkout&&recalculate_taxes()})}else is_checkout&&recalculate_taxes();return!1}),$(document.body).on("change","#edd_cc_address input[name=card_zip]",function(){"undefined"!=typeof edd_global_vars&&recalculate_taxes()})});
1
+ var edd_scripts;function edd_load_gateway(payment_mode){jQuery(".edd-cart-ajax").show(),jQuery("#edd_purchase_form_wrap").html('<span class="edd-loading-ajax edd-loading"></span>');var nonce=jQuery("#edd-gateway-"+payment_mode).data(payment_mode+"-nonce"),url=edd_scripts.ajaxurl;0<url.indexOf("?")?url+="&":url+="?",url=url+"payment-mode="+payment_mode,jQuery.post(url,{action:"edd_load_gateway",edd_payment_mode:payment_mode,nonce:nonce},function(response){jQuery("#edd_purchase_form_wrap").html(response),jQuery(".edd-no-js").hide(),jQuery("body").trigger("edd_gateway_loaded",[payment_mode])})}jQuery(document).ready(function($){if($(".edd-no-js").hide(),$("a.edd-add-to-cart").addClass("edd-has-js"),$(document.body).on("click.eddRemoveFromCart",".edd-remove-from-cart",function(event){var $this=$(this),item=$this.data("cart-item"),action=$this.data("action"),id=$this.data("download-id"),nonce=$this.data("nonce"),data={action:action,cart_item:item,nonce:nonce};return $.ajax({type:"POST",data:data,dataType:"json",url:edd_scripts.ajaxurl,xhrFields:{withCredentials:!0},success:function(response){if(response.removed){if(parseInt(edd_scripts.position_in_cart,10)===parseInt(item,10)||edd_scripts.has_purchase_links)return window.location=window.location,!1;$(".edd-cart").each(function(){$(this).find("[data-cart-item='"+item+"']").parent().remove()}),$(".edd-cart").each(function(){var cart_item_counter=0;$(this).find("[data-cart-item]").each(function(){$(this).attr("data-cart-item",cart_item_counter),cart_item_counter+=1})}),$("[id^=edd_purchase_"+id+"]").length&&($("[id^=edd_purchase_"+id+"] .edd_go_to_checkout").hide(),$("[id^=edd_purchase_"+id+"] a.edd-add-to-cart").show().removeAttr("data-edd-loading"),"1"==edd_scripts.quantities_enabled&&$("[id^=edd_purchase_"+id+"] .edd_download_quantity_wrapper").show()),$("span.edd-cart-quantity").text(response.cart_quantity),$(document.body).trigger("edd_quantity_updated",[response.cart_quantity]),edd_scripts.taxes_enabled&&($(".cart_item.edd_subtotal span").html(response.subtotal),$(".cart_item.edd_cart_tax span").html(response.tax)),$(".cart_item.edd_total span").html(response.total),0==response.cart_quantity&&($(".cart_item.edd_subtotal,.edd-cart-number-of-items,.cart_item.edd_checkout,.cart_item.edd_cart_tax,.cart_item.edd_total").hide(),$(".edd-cart").each(function(){var cart_wrapper=$(this).parent();cart_wrapper&&(cart_wrapper.addClass("cart-empty"),cart_wrapper.removeClass("cart-not-empty")),$(this).append('<li class="cart_item empty">'+edd_scripts.empty_cart_message+"</li>")})),$(document.body).trigger("edd_cart_item_removed",[response])}}}).fail(function(response){window.console&&window.console.log&&console.log(response)}).done(function(response){}),!1}),$(document.body).on("click.eddAddToCart",".edd-add-to-cart",function(e){e.preventDefault();var $this=$(this),form=$this.closest("form");$this.prop("disabled",!0);$this.find(".edd-loading");var container=$this.closest("div");$this.attr("data-edd-loading","");form=$this.parents("form").last();var download=$this.data("download-id"),variable_price=$this.data("variable-price"),price_mode=$this.data("price-mode"),nonce=$this.data("nonce"),item_price_ids=[],free_items=!0;if("yes"==variable_price)if(0<form.find(".edd_price_option_"+download+'[type="hidden"]').length)item_price_ids[0]=$(".edd_price_option_"+download,form).val(),form.find(".edd-submit").data("price")&&0<form.find(".edd-submit").data("price")&&(free_items=!1);else{if(!form.find(".edd_price_option_"+download+":checked",form).length)return $this.removeAttr("data-edd-loading"),alert(edd_scripts.select_option),e.stopPropagation(),$this.prop("disabled",!1),!1;form.find(".edd_price_option_"+download+":checked",form).each(function(index){if(item_price_ids[index]=$(this).val(),!0===free_items){var item_price=$(this).data("price");item_price&&0<item_price&&(free_items=!1)}})}else item_price_ids[0]=download,$this.data("price")&&0<$this.data("price")&&(free_items=!1);if(free_items&&form.find(".edd_action_input").val("add_to_cart"),"straight_to_gateway"==form.find(".edd_action_input").val())return form.submit(),!0;var data={action:$this.data("action"),download_id:download,price_ids:item_price_ids,post_data:$(form).serialize(),nonce:nonce};return $.ajax({type:"POST",data:data,dataType:"json",url:edd_scripts.ajaxurl,xhrFields:{withCredentials:!0},success:function(response){var store_redirect="1"==edd_scripts.redirect_to_checkout,item_redirect="1"==form.find("#edd_redirect_to_checkout").val();if(store_redirect&&item_redirect||!store_redirect&&item_redirect)window.location=edd_scripts.checkout_page;else{"1"===edd_scripts.taxes_enabled&&($(".cart_item.edd_subtotal").show(),$(".cart_item.edd_cart_tax").show()),$(".cart_item.edd_total").show(),$(".cart_item.edd_checkout").show(),$(".cart_item.empty").length&&$(".cart_item.empty").hide(),$(".widget_edd_cart_widget .edd-cart").each(function(cart){var target=$(this).find(".edd-cart-meta:first");$(response.cart_item).insertBefore(target);var cart_wrapper=$(this).parent();cart_wrapper&&(cart_wrapper.addClass("cart-not-empty"),cart_wrapper.removeClass("cart-empty"))}),"1"===edd_scripts.taxes_enabled&&($(".edd-cart-meta.edd_subtotal span").html(response.subtotal),$(".edd-cart-meta.edd_cart_tax span").html(response.tax)),$(".edd-cart-meta.edd_total span").html(response.total);$(".edd-cart-item-title",response.cart_item).length;if($("span.edd-cart-quantity").each(function(){$(this).text(response.cart_quantity),$(document.body).trigger("edd_quantity_updated",[response.cart_quantity])}),"none"==$(".edd-cart-number-of-items").css("display")&&$(".edd-cart-number-of-items").show("slow"),"no"!=variable_price&&"multi"==price_mode||($("a.edd-add-to-cart",container).toggle(),$(".edd_go_to_checkout",container).css("display","inline-block")),"multi"==price_mode&&$this.removeAttr("data-edd-loading"),$(".edd_download_purchase_form").length&&("no"==variable_price||!form.find(".edd_price_option_"+download).is("input:hidden"))){var parent_form=$('.edd_download_purchase_form *[data-download-id="'+download+'"]').parents("form");$("a.edd-add-to-cart",parent_form).hide(),"multi"!=price_mode&&parent_form.find(".edd_download_quantity_wrapper").slideUp(),$(".edd_go_to_checkout",parent_form).show().removeAttr("data-edd-loading")}"incart"!=response&&($(".edd-cart-added-alert",container).fadeIn(),setTimeout(function(){$(".edd-cart-added-alert",container).fadeOut()},3e3)),$this.prop("disabled",!1),$(document.body).trigger("edd_cart_item_added",[response])}}}).fail(function(response){window.console&&window.console.log&&console.log(response)}).done(function(response){}),!1}),$("#edd_checkout_form_wrap").on("click",".edd_checkout_register_login",function(){var $this=$(this),data={action:$this.data("action"),nonce:$this.data("nonce")};return $(".edd-cart-ajax").show(),$.post(edd_scripts.ajaxurl,data,function(checkout_response){$("#edd_checkout_login_register").html(edd_scripts.loading),$("#edd_checkout_login_register").html(checkout_response),$(".edd-cart-ajax").hide()}),!1}),$(document).on("click","#edd_purchase_form #edd_login_fields input[type=submit]",function(e){e.preventDefault();var complete_purchase_val=$(this).val();$(this).val(edd_global_vars.purchase_loading),$(this).after('<span class="edd-loading-ajax edd-loading"></span>');var data={action:"edd_process_checkout_login",edd_ajax:1,edd_user_login:$("#edd_login_fields #edd_user_login").val(),edd_user_pass:$("#edd_login_fields #edd_user_pass").val(),edd_login_nonce:$("#edd_login_nonce").val()};$.post(edd_global_vars.ajaxurl,data,function(data){"success"==$.trim(data)?($(".edd_errors").remove(),window.location=edd_scripts.checkout_page):($("#edd_login_fields input[type=submit]").val(complete_purchase_val),$(".edd-loading-ajax").remove(),$(".edd_errors").remove(),$("#edd-user-login-submit").before(data))})}),$("select#edd-gateway, input.edd-gateway").change(function(e){var payment_mode=$("#edd-gateway option:selected, input.edd-gateway:checked").val();return"0"==payment_mode||edd_load_gateway(payment_mode),!1}),"1"==edd_scripts.is_checkout){var chosen_gateway=!1,ajax_needed=!1;$("select#edd-gateway, input.edd-gateway").length&&(chosen_gateway=$("meta[name='edd-chosen-gateway']").attr("content"),ajax_needed=!0),chosen_gateway||(chosen_gateway=edd_scripts.default_gateway),ajax_needed?setTimeout(function(){edd_load_gateway(chosen_gateway)},200):$("body").trigger("edd_gateway_loaded",[chosen_gateway])}$(document).on("click","#edd_purchase_form #edd_purchase_submit [type=submit]",function(e){var eddPurchaseform=document.getElementById("edd_purchase_form");if("function"!=typeof eddPurchaseform.checkValidity||!1!==eddPurchaseform.checkValidity()){e.preventDefault();var complete_purchase_val=$(this).val();$(this).val(edd_global_vars.purchase_loading),$(this).prop("disabled",!0),$(this).after('<span class="edd-loading-ajax edd-loading"></span>'),$.post(edd_global_vars.ajaxurl,$("#edd_purchase_form").serialize()+"&action=edd_process_checkout&edd_ajax=true",function(data){"success"==$.trim(data)?($(".edd_errors").remove(),$(".edd-error").hide(),$(eddPurchaseform).submit()):($("#edd-purchase-button").val(complete_purchase_val),$(".edd-loading-ajax").remove(),$(".edd_errors").remove(),$(".edd-error").hide(),$(edd_global_vars.checkout_error_anchor).before(data),$("#edd-purchase-button").prop("disabled",!1),$(document.body).trigger("edd_checkout_error",[data]))})}}),$(document.body).on("change","#edd_cc_address input.card_state, #edd_cc_address select, #edd_address_country",function(){var $form,$this=$(this),is_checkout="undefined"!=typeof edd_global_vars,field_name="card_state";"edd_address_country"==$(this).attr("id")&&(field_name="edd_address_state");if("card_state"!=$this.attr("id")){var nonce=$(this).data("nonce"),postData={action:"edd_get_shop_states",country:$this.val(),field_name:field_name,nonce:nonce};$.ajax({type:"POST",data:postData,url:edd_scripts.ajaxurl,xhrFields:{withCredentials:!0},success:function(response){$form=is_checkout?$("#edd_purchase_form"):$this.closest("form");var state_inputs='input[name="card_state"], select[name="card_state"], input[name="edd_address_state"], select[name="edd_address_state"]';if("nostates"==$.trim(response)){$form.find(state_inputs).replaceWith('<input type="text" name="card_state" class="card-state edd-input required" value=""/>')}else $form.find(state_inputs).replaceWith(response);is_checkout&&$(document.body).trigger("edd_cart_billing_address_updated",[response])}}).fail(function(data){window.console&&window.console.log&&console.log(data)}).done(function(data){is_checkout&&recalculate_taxes()})}else is_checkout&&recalculate_taxes();return!1}),$(document.body).on("change","#edd_cc_address input[name=card_zip]",function(){"undefined"!=typeof edd_global_vars&&recalculate_taxes()})});
assets/js/edd-checkout-global.js CHANGED
@@ -352,9 +352,12 @@ function recalculate_taxes(state) {
352
  action: 'edd_recalculate_taxes',
353
  billing_country: $edd_cc_address.find('#billing_country').val(),
354
  state: state,
355
- card_zip: $edd_cc_address.find('input[name=card_zip]').val()
 
356
  };
357
 
 
 
358
  var current_ajax_count = ++ajax_tax_count;
359
  jQuery.ajax({
360
  type: "POST",
@@ -376,6 +379,7 @@ function recalculate_taxes(state) {
376
  tax_data.response = tax_response;
377
  jQuery('body').trigger('edd_taxes_recalculated', [ tax_data ]);
378
  }
 
379
  }
380
  }).fail(function (data) {
381
  if ( window.console && window.console.log ) {
352
  action: 'edd_recalculate_taxes',
353
  billing_country: $edd_cc_address.find('#billing_country').val(),
354
  state: state,
355
+ card_zip: $edd_cc_address.find('input[name=card_zip]').val(),
356
+ nonce: jQuery('#edd-checkout-address-fields-nonce').val(),
357
  };
358
 
359
+ jQuery('#edd_purchase_submit [type=submit]').after('<span class="edd-loading-ajax edd-recalculate-taxes-loading edd-loading"></span>');
360
+
361
  var current_ajax_count = ++ajax_tax_count;
362
  jQuery.ajax({
363
  type: "POST",
379
  tax_data.response = tax_response;
380
  jQuery('body').trigger('edd_taxes_recalculated', [ tax_data ]);
381
  }
382
+ jQuery('.edd-recalculate-taxes-loading').remove();
383
  }
384
  }).fail(function (data) {
385
  if ( window.console && window.console.log ) {
assets/js/edd-checkout-global.min.js CHANGED
@@ -1 +1 @@
1
- window.EDD_Checkout=function($){"use strict";var $body,$form,$edd_cart_amount,$checkout_form_wrap;function apply_discount(event){event.preventDefault();$(this);var discount_code=$("#edd-discount").val(),edd_discount_loader=$("#edd-discount-loader");if(""==discount_code||discount_code==edd_global_vars.enter_discount)return!1;var postData={action:"edd_apply_discount",code:discount_code,form:$("#edd_purchase_form").serialize()};return $("#edd-discount-error-wrap").html("").hide(),edd_discount_loader.show(),$.ajax({type:"POST",data:postData,dataType:"json",url:edd_global_vars.ajaxurl,xhrFields:{withCredentials:!0},success:function(discount_response){if(discount_response)if("valid"==discount_response.msg){$(".edd_cart_discount").html(discount_response.html),$(".edd_cart_discount_row").show(),$(".edd_cart_amount").each(function(){$(this).text(discount_response.total),$(this).data("total",discount_response.total_plain)}),$("#edd-discount",$checkout_form_wrap).val(""),recalculate_taxes();var inputs=$("#edd_cc_fields .edd-input, #edd_cc_fields .edd-select,#edd_cc_address .edd-input, #edd_cc_address .edd-select,#edd_payment_mode_select .edd-input, #edd_payment_mode_select .edd-select");"0.00"==discount_response.total_plain?($("#edd_cc_fields,#edd_cc_address,#edd_payment_mode_select").slideUp(),inputs.removeAttr("required"),$('input[name="edd-gateway"]').val("manual")):(inputs.is(".card-address-2")||inputs.attr("required","required"),$("#edd_cc_fields,#edd_cc_address").slideDown()),$body.trigger("edd_discount_applied",[discount_response])}else $("#edd-discount-error-wrap").html('<span class="edd_error">'+discount_response.msg+"</span>"),$("#edd-discount-error-wrap").show(),$body.trigger("edd_discount_invalid",[discount_response]);else window.console&&window.console.log&&console.log(discount_response),$body.trigger("edd_discount_failed",[discount_response]);edd_discount_loader.hide()}}).fail(function(data){window.console&&window.console.log&&console.log(data)}),!1}function remove_discount(event){var postData={action:"edd_remove_discount",code:$(this).data("code")};return $.ajax({type:"POST",data:postData,dataType:"json",url:edd_global_vars.ajaxurl,xhrFields:{withCredentials:!0},success:function(discount_response){var zero="0"+edd_global_vars.decimal_separator+"00";$(".edd_cart_amount").each(function(){edd_global_vars.currency_sign+zero!=$(this).text()&&zero+edd_global_vars.currency_sign!=$(this).text()||window.location.reload(),$(this).text(discount_response.total),$(this).data("total",discount_response.total_plain)}),$(".edd_cart_discount").html(discount_response.html),discount_response.discounts||$(".edd_cart_discount_row").hide(),recalculate_taxes(),$("#edd_cc_fields,#edd_cc_address").slideDown(),$body.trigger("edd_discount_removed",[discount_response])}}).fail(function(data){window.console&&window.console.log&&console.log(data)}),!1}function update_item_quantities(event){var $this=$(this),quantity=$this.val(),key=$this.data("key"),download_id=$this.closest(".edd_cart_item").data("download-id"),options=$this.parent().find('input[name="edd-cart-download-'+key+'-options"]').val(),edd_cc_address=$("#edd_cc_address"),postData={action:"edd_update_quantity",quantity:quantity,download_id:download_id,options:options,billing_country:edd_cc_address.find("#billing_country").val(),card_state:edd_cc_address.find("#card_state").val()};return $.ajax({type:"POST",data:postData,dataType:"json",url:edd_global_vars.ajaxurl,xhrFields:{withCredentials:!0},success:function(response){$(".edd_cart_subtotal_amount").each(function(){$(this).text(response.subtotal)}),$(".edd_cart_tax_amount").each(function(){$(this).text(response.taxes)}),$(".edd_cart_amount").each(function(){$(this).text(response.total),$body.trigger("edd_quantity_updated",[response])})}}).fail(function(data){window.console&&window.console.log&&console.log(data)}),!1}return{init:function(){$body=$(document.body),$form=$("#edd_purchase_form"),$edd_cart_amount=$(".edd_cart_amount"),$edd_cart_amount.text(),$checkout_form_wrap=$("#edd_checkout_form_wrap"),$body.on("edd_gateway_loaded",function(e){var form,card_number,card_cvc,card_expiry;card_number=(form=$form).find(".card-number"),card_cvc=form.find(".card-cvc"),card_expiry=form.find(".card-expiry"),card_number.length&&"function"==typeof card_number.payment&&(card_number.payment("formatCardNumber"),card_cvc.payment("formatCardCVC"),card_expiry.payment("formatCardExpiry"))}),$body.on("keyup change",".edd-do-validate .card-number",function(){var field,card_field;field=$(this),(card_field=field).validateCreditCard(function(result){var $card_type=$(".card-type");null==result.card_type?($card_type.removeClass().addClass("off card-type"),card_field.removeClass("valid"),card_field.addClass("error")):($card_type.removeClass("off"),$card_type.addClass(result.card_type.name),result.length_valid&&result.luhn_valid?(card_field.addClass("valid"),card_field.removeClass("error")):(card_field.removeClass("valid"),card_field.addClass("error")))})}),$body.on("blur change",".card-name",function(){var name_field=$(this);name_field.validateCreditCard(function(result){null!=result.card_type?(name_field.removeClass("valid").addClass("error"),$("#edd-purchase-button").attr("disabled","disabled")):(name_field.removeClass("error").addClass("valid"),$("#edd-purchase-button").removeAttr("disabled"))})}),$body.on("submit","#edd_payment_mode",function(){if(0==$("#edd-gateway option:selected").val())return alert(edd_global_vars.no_gateway),!1}),$body.on("click","#edd_payment_mode_select input",function(){$("#edd_payment_mode_select label.edd-gateway-option-selected").removeClass("edd-gateway-option-selected"),$("#edd_payment_mode_select input:checked").parent().addClass("edd-gateway-option-selected")}),$checkout_form_wrap.on("click",".edd-apply-discount",apply_discount),$checkout_form_wrap.on("keypress","#edd-discount",function(event){if("13"==event.keyCode)return!1}),$checkout_form_wrap.on("keyup","#edd-discount",function(event){"13"==event.keyCode&&$checkout_form_wrap.find(".edd-apply-discount").trigger("click")}),$body.on("click",".edd_discount_remove",remove_discount),$body.on("click",".edd_discount_link",function(e){e.preventDefault(),$(".edd_discount_link").parent().hide(),$("#edd-discount-code-wrap").show().find("#edd-discount").focus()}),$body.find("#edd-discount-code-wrap").hide(),$body.find("#edd_show_discount").show(),$body.on("change",".edd-item-quantity",update_item_quantities),$body.on("click",".edd-amazon-logout #Logout",function(e){e.preventDefault(),amazon.Login.logout(),window.location=edd_amazon.checkoutUri})},recalculate_taxes:recalculate_taxes}}(window.jQuery),window.jQuery(document).ready(EDD_Checkout.init);var ajax_tax_count=0;function recalculate_taxes(state){if("1"==edd_global_vars.taxes_enabled){var $edd_cc_address=jQuery("#edd_cc_address");state||(state=$edd_cc_address.find("#card_state").val());var postData={action:"edd_recalculate_taxes",billing_country:$edd_cc_address.find("#billing_country").val(),state:state,card_zip:$edd_cc_address.find("input[name=card_zip]").val()},current_ajax_count=++ajax_tax_count;jQuery.ajax({type:"POST",data:postData,dataType:"json",url:edd_global_vars.ajaxurl,xhrFields:{withCredentials:!0},success:function(tax_response){if(current_ajax_count===ajax_tax_count){jQuery("#edd_checkout_cart_form").replaceWith(tax_response.html),jQuery(".edd_cart_amount").html(tax_response.total);var tax_data=new Object;tax_data.postdata=postData,tax_data.response=tax_response,jQuery("body").trigger("edd_taxes_recalculated",[tax_data])}}}).fail(function(data){window.console&&window.console.log&&(console.log(data),current_ajax_count===ajax_tax_count&&jQuery("body").trigger("edd_taxes_recalculated",[tax_data]))})}}
1
+ window.EDD_Checkout=function($){"use strict";var $body,$form,$edd_cart_amount,$checkout_form_wrap;function apply_discount(event){event.preventDefault();$(this);var discount_code=$("#edd-discount").val(),edd_discount_loader=$("#edd-discount-loader");if(""==discount_code||discount_code==edd_global_vars.enter_discount)return!1;var postData={action:"edd_apply_discount",code:discount_code,form:$("#edd_purchase_form").serialize()};return $("#edd-discount-error-wrap").html("").hide(),edd_discount_loader.show(),$.ajax({type:"POST",data:postData,dataType:"json",url:edd_global_vars.ajaxurl,xhrFields:{withCredentials:!0},success:function(discount_response){if(discount_response)if("valid"==discount_response.msg){$(".edd_cart_discount").html(discount_response.html),$(".edd_cart_discount_row").show(),$(".edd_cart_amount").each(function(){$(this).text(discount_response.total),$(this).data("total",discount_response.total_plain)}),$("#edd-discount",$checkout_form_wrap).val(""),recalculate_taxes();var inputs=$("#edd_cc_fields .edd-input, #edd_cc_fields .edd-select,#edd_cc_address .edd-input, #edd_cc_address .edd-select,#edd_payment_mode_select .edd-input, #edd_payment_mode_select .edd-select");"0.00"==discount_response.total_plain?($("#edd_cc_fields,#edd_cc_address,#edd_payment_mode_select").slideUp(),inputs.removeAttr("required"),$('input[name="edd-gateway"]').val("manual")):(inputs.is(".card-address-2")||inputs.attr("required","required"),$("#edd_cc_fields,#edd_cc_address").slideDown()),$body.trigger("edd_discount_applied",[discount_response])}else $("#edd-discount-error-wrap").html('<span class="edd_error">'+discount_response.msg+"</span>"),$("#edd-discount-error-wrap").show(),$body.trigger("edd_discount_invalid",[discount_response]);else window.console&&window.console.log&&console.log(discount_response),$body.trigger("edd_discount_failed",[discount_response]);edd_discount_loader.hide()}}).fail(function(data){window.console&&window.console.log&&console.log(data)}),!1}function remove_discount(event){var postData={action:"edd_remove_discount",code:$(this).data("code")};return $.ajax({type:"POST",data:postData,dataType:"json",url:edd_global_vars.ajaxurl,xhrFields:{withCredentials:!0},success:function(discount_response){var zero="0"+edd_global_vars.decimal_separator+"00";$(".edd_cart_amount").each(function(){edd_global_vars.currency_sign+zero!=$(this).text()&&zero+edd_global_vars.currency_sign!=$(this).text()||window.location.reload(),$(this).text(discount_response.total),$(this).data("total",discount_response.total_plain)}),$(".edd_cart_discount").html(discount_response.html),discount_response.discounts||$(".edd_cart_discount_row").hide(),recalculate_taxes(),$("#edd_cc_fields,#edd_cc_address").slideDown(),$body.trigger("edd_discount_removed",[discount_response])}}).fail(function(data){window.console&&window.console.log&&console.log(data)}),!1}function update_item_quantities(event){var $this=$(this),quantity=$this.val(),key=$this.data("key"),download_id=$this.closest(".edd_cart_item").data("download-id"),options=$this.parent().find('input[name="edd-cart-download-'+key+'-options"]').val(),edd_cc_address=$("#edd_cc_address"),postData={action:"edd_update_quantity",quantity:quantity,download_id:download_id,options:options,billing_country:edd_cc_address.find("#billing_country").val(),card_state:edd_cc_address.find("#card_state").val()};return $.ajax({type:"POST",data:postData,dataType:"json",url:edd_global_vars.ajaxurl,xhrFields:{withCredentials:!0},success:function(response){$(".edd_cart_subtotal_amount").each(function(){$(this).text(response.subtotal)}),$(".edd_cart_tax_amount").each(function(){$(this).text(response.taxes)}),$(".edd_cart_amount").each(function(){$(this).text(response.total),$body.trigger("edd_quantity_updated",[response])})}}).fail(function(data){window.console&&window.console.log&&console.log(data)}),!1}return{init:function(){$body=$(document.body),$form=$("#edd_purchase_form"),$edd_cart_amount=$(".edd_cart_amount"),$edd_cart_amount.text(),$checkout_form_wrap=$("#edd_checkout_form_wrap"),$body.on("edd_gateway_loaded",function(e){var form,card_number,card_cvc,card_expiry;card_number=(form=$form).find(".card-number"),card_cvc=form.find(".card-cvc"),card_expiry=form.find(".card-expiry"),card_number.length&&"function"==typeof card_number.payment&&(card_number.payment("formatCardNumber"),card_cvc.payment("formatCardCVC"),card_expiry.payment("formatCardExpiry"))}),$body.on("keyup change",".edd-do-validate .card-number",function(){var field,card_field;field=$(this),(card_field=field).validateCreditCard(function(result){var $card_type=$(".card-type");null==result.card_type?($card_type.removeClass().addClass("off card-type"),card_field.removeClass("valid"),card_field.addClass("error")):($card_type.removeClass("off"),$card_type.addClass(result.card_type.name),result.length_valid&&result.luhn_valid?(card_field.addClass("valid"),card_field.removeClass("error")):(card_field.removeClass("valid"),card_field.addClass("error")))})}),$body.on("blur change",".card-name",function(){var name_field=$(this);name_field.validateCreditCard(function(result){null!=result.card_type?(name_field.removeClass("valid").addClass("error"),$("#edd-purchase-button").attr("disabled","disabled")):(name_field.removeClass("error").addClass("valid"),$("#edd-purchase-button").removeAttr("disabled"))})}),$body.on("submit","#edd_payment_mode",function(){if(0==$("#edd-gateway option:selected").val())return alert(edd_global_vars.no_gateway),!1}),$body.on("click","#edd_payment_mode_select input",function(){$("#edd_payment_mode_select label.edd-gateway-option-selected").removeClass("edd-gateway-option-selected"),$("#edd_payment_mode_select input:checked").parent().addClass("edd-gateway-option-selected")}),$checkout_form_wrap.on("click",".edd-apply-discount",apply_discount),$checkout_form_wrap.on("keypress","#edd-discount",function(event){if("13"==event.keyCode)return!1}),$checkout_form_wrap.on("keyup","#edd-discount",function(event){"13"==event.keyCode&&$checkout_form_wrap.find(".edd-apply-discount").trigger("click")}),$body.on("click",".edd_discount_remove",remove_discount),$body.on("click",".edd_discount_link",function(e){e.preventDefault(),$(".edd_discount_link").parent().hide(),$("#edd-discount-code-wrap").show().find("#edd-discount").focus()}),$body.find("#edd-discount-code-wrap").hide(),$body.find("#edd_show_discount").show(),$body.on("change",".edd-item-quantity",update_item_quantities),$body.on("click",".edd-amazon-logout #Logout",function(e){e.preventDefault(),amazon.Login.logout(),window.location=edd_amazon.checkoutUri})},recalculate_taxes:recalculate_taxes}}(window.jQuery),window.jQuery(document).ready(EDD_Checkout.init);var ajax_tax_count=0;function recalculate_taxes(state){if("1"==edd_global_vars.taxes_enabled){var $edd_cc_address=jQuery("#edd_cc_address");state||(state=$edd_cc_address.find("#card_state").val());var postData={action:"edd_recalculate_taxes",billing_country:$edd_cc_address.find("#billing_country").val(),state:state,card_zip:$edd_cc_address.find("input[name=card_zip]").val(),nonce:jQuery("#edd-checkout-address-fields-nonce").val()};jQuery("#edd_purchase_submit [type=submit]").after('<span class="edd-loading-ajax edd-recalculate-taxes-loading edd-loading"></span>');var current_ajax_count=++ajax_tax_count;jQuery.ajax({type:"POST",data:postData,dataType:"json",url:edd_global_vars.ajaxurl,xhrFields:{withCredentials:!0},success:function(tax_response){if(current_ajax_count===ajax_tax_count){jQuery("#edd_checkout_cart_form").replaceWith(tax_response.html),jQuery(".edd_cart_amount").html(tax_response.total);var tax_data=new Object;tax_data.postdata=postData,tax_data.response=tax_response,jQuery("body").trigger("edd_taxes_recalculated",[tax_data])}jQuery(".edd-recalculate-taxes-loading").remove()}}).fail(function(data){window.console&&window.console.log&&(console.log(data),current_ajax_count===ajax_tax_count&&jQuery("body").trigger("edd_taxes_recalculated",[tax_data]))})}}
easy-digital-downloads.php CHANGED
@@ -5,7 +5,7 @@
5
  * Description: The easiest way to sell digital products with WordPress.
6
  * Author: Easy Digital Downloads
7
  * Author URI: https://easydigitaldownloads.com
8
- * Version: 2.9.3
9
  * Text Domain: easy-digital-downloads
10
  * Domain Path: languages
11
  *
@@ -25,7 +25,7 @@
25
  * @package EDD
26
  * @category Core
27
  * @author Pippin Williamson
28
- * @version 2.9.3
29
  */
30
 
31
  // Exit if accessed directly.
@@ -206,7 +206,7 @@ final class Easy_Digital_Downloads {
206
 
207
  // Plugin version.
208
  if ( ! defined( 'EDD_VERSION' ) ) {
209
- define( 'EDD_VERSION', '2.9.3' );
210
  }
211
 
212
  // Plugin Folder Path.
5
  * Description: The easiest way to sell digital products with WordPress.
6
  * Author: Easy Digital Downloads
7
  * Author URI: https://easydigitaldownloads.com
8
+ * Version: 2.9.4
9
  * Text Domain: easy-digital-downloads
10
  * Domain Path: languages
11
  *
25
  * @package EDD
26
  * @category Core
27
  * @author Pippin Williamson
28
+ * @version 2.9.4
29
  */
30
 
31
  // Exit if accessed directly.
206
 
207
  // Plugin version.
208
  if ( ! defined( 'EDD_VERSION' ) ) {
209
+ define( 'EDD_VERSION', '2.9.4' );
210
  }
211
 
212
  // Plugin Folder Path.
includes/actions.php CHANGED
@@ -22,6 +22,13 @@ if ( ! defined( 'ABSPATH' ) ) exit;
22
  */
23
  function edd_get_actions() {
24
  $key = ! empty( $_GET['edd_action'] ) ? sanitize_key( $_GET['edd_action'] ) : false;
 
 
 
 
 
 
 
25
  if ( ! empty( $key ) ) {
26
  do_action( "edd_{$key}" , $_GET );
27
  }
@@ -38,8 +45,91 @@ add_action( 'init', 'edd_get_actions' );
38
  */
39
  function edd_post_actions() {
40
  $key = ! empty( $_POST['edd_action'] ) ? sanitize_key( $_POST['edd_action'] ) : false;
 
 
 
 
 
 
 
41
  if ( ! empty( $key ) ) {
42
  do_action( "edd_{$key}", $_POST );
43
  }
44
  }
45
  add_action( 'init', 'edd_post_actions' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22
  */
23
  function edd_get_actions() {
24
  $key = ! empty( $_GET['edd_action'] ) ? sanitize_key( $_GET['edd_action'] ) : false;
25
+
26
+ $is_delayed_action = edd_is_delayed_action( $key );
27
+
28
+ if ( $is_delayed_action ) {
29
+ return;
30
+ }
31
+
32
  if ( ! empty( $key ) ) {
33
  do_action( "edd_{$key}" , $_GET );
34
  }
45
  */
46
  function edd_post_actions() {
47
  $key = ! empty( $_POST['edd_action'] ) ? sanitize_key( $_POST['edd_action'] ) : false;
48
+
49
+ $is_delayed_action = edd_is_delayed_action( $key );
50
+
51
+ if ( $is_delayed_action ) {
52
+ return;
53
+ }
54
+
55
  if ( ! empty( $key ) ) {
56
  do_action( "edd_{$key}", $_POST );
57
  }
58
  }
59
  add_action( 'init', 'edd_post_actions' );
60
+
61
+ /**
62
+ * Call any actions that should have been delayed, in order to be sure that all necessary information
63
+ * has been loaded by WP Core.
64
+ *
65
+ * Hooks EDD actions, when present in the $_GET superglobal. Every edd_action
66
+ * present in $_POST is called using WordPress's do_action function. These
67
+ * functions are called on template_redirect.
68
+ *
69
+ * @since 2.9.4
70
+ * @return void
71
+ */
72
+ function edd_delayed_get_actions() {
73
+ $key = ! empty( $_GET['edd_action'] ) ? sanitize_key( $_GET['edd_action'] ) : false;
74
+ $is_delayed_action = edd_is_delayed_action( $key );
75
+
76
+ if ( ! $is_delayed_action ) {
77
+ return;
78
+ }
79
+
80
+ if ( ! empty( $key ) ) {
81
+ do_action( "edd_{$key}", $_GET );
82
+ }
83
+ }
84
+ add_action( 'template_redirect', 'edd_delayed_get_actions' );
85
+
86
+ /**
87
+ * Call any actions that should have been delayed, in order to be sure that all necessary information
88
+ * has been loaded by WP Core.
89
+ *
90
+ * Hooks EDD actions, when present in the $_POST superglobal. Every edd_action
91
+ * present in $_POST is called using WordPress's do_action function. These
92
+ * functions are called on template_redirect.
93
+ *
94
+ * @since 2.9.4
95
+ * @return void
96
+ */
97
+ function edd_delayed_post_actions() {
98
+ $key = ! empty( $_POST['edd_action'] ) ? sanitize_key( $_POST['edd_action'] ) : false;
99
+ $is_delayed_action = edd_is_delayed_action( $key );
100
+
101
+ if ( ! $is_delayed_action ) {
102
+ return;
103
+ }
104
+
105
+ if ( ! empty( $key ) ) {
106
+ do_action( "edd_{$key}", $_POST );
107
+ }
108
+ }
109
+ add_action( 'template_redirect', 'edd_delayed_post_actions' );
110
+
111
+ /**
112
+ * Get the list of actions that EDD has determined need to be delayed past init.
113
+ *
114
+ * @since 2.9.4
115
+ *
116
+ * @return array
117
+ */
118
+ function edd_delayed_actions_list() {
119
+ return (array) apply_filters( 'edd_delayed_actions', array(
120
+ 'add_to_cart'
121
+ ) );
122
+ }
123
+
124
+ /**
125
+ * Determine if the requested action needs to be delayed or not.
126
+ *
127
+ * @since 2.9.4
128
+ *
129
+ * @param string $action
130
+ *
131
+ * @return bool
132
+ */
133
+ function edd_is_delayed_action( $action = '' ) {
134
+ return in_array( $action, edd_delayed_actions_list() );
135
+ }
includes/admin/downloads/metabox.php CHANGED
@@ -967,7 +967,7 @@ function edd_render_dowwn_tax_options( $post_id = 0 ) {
967
  * @return void
968
  */
969
  function edd_render_down_tax_options( $post_id = 0 ) {
970
- if( ! current_user_can( 'manage_shop_settings' ) || ! edd_use_taxes() ) {
971
  return;
972
  }
973
 
@@ -1036,7 +1036,7 @@ function edd_render_meta_box_shortcode() {
1036
  ?>
1037
  <p>
1038
  <strong><?php _e( 'Purchase Shortcode:', 'easy-digital-downloads' ); ?></strong>
1039
- <span alt="f223" class="edd-help-tip dashicons dashicons-editor-help" title="<?php _e( '<strong>Purchse Shortcode</strong>: Use this shortcode to output a purchase link for this product in the location of your choosing.', 'easy-digital-downloads' ); ?>"></span>
1040
  </p>
1041
  <input type="text" id="edd-purchase-shortcode" class="widefat" readonly="readonly" value="<?php echo htmlentities( $shortcode ); ?>">
1042
  <?php
@@ -1313,4 +1313,4 @@ function edd_hijack_edd_download_price_table_head( $arg1, $arg2, $arg3 ) {
1313
  }
1314
  }
1315
  }
1316
- add_action( 'edd_download_price_table_row', 'edd_hijack_edd_download_price_table_head', -1, 3 );
967
  * @return void
968
  */
969
  function edd_render_down_tax_options( $post_id = 0 ) {
970
+ if( ! current_user_can( 'view_shop_reports' ) || ! edd_use_taxes() ) {
971
  return;
972
  }
973
 
1036
  ?>
1037
  <p>
1038
  <strong><?php _e( 'Purchase Shortcode:', 'easy-digital-downloads' ); ?></strong>
1039
+ <span alt="f223" class="edd-help-tip dashicons dashicons-editor-help" title="<?php _e( '<strong>Purchase Shortcode</strong>: Use this shortcode to output a purchase link for this product in the location of your choosing.', 'easy-digital-downloads' ); ?>"></span>
1040
  </p>
1041
  <input type="text" id="edd-purchase-shortcode" class="widefat" readonly="readonly" value="<?php echo htmlentities( $shortcode ); ?>">
1042
  <?php
1313
  }
1314
  }
1315
  }
1316
+ add_action( 'edd_download_price_table_row', 'edd_hijack_edd_download_price_table_head', -1, 3 );
includes/admin/payments/actions.php CHANGED
@@ -191,6 +191,8 @@ function edd_update_payment_details( $data ) {
191
  $customer = new EDD_Customer( $curr_customer_id );
192
  edd_set_error( 'edd-payment-new-customer-fail', __( 'Error creating new customer', 'easy-digital-downloads' ) );
193
  }
 
 
194
  }
195
 
196
  $new_customer_id = $customer->id;
191
  $customer = new EDD_Customer( $curr_customer_id );
192
  edd_set_error( 'edd-payment-new-customer-fail', __( 'Error creating new customer', 'easy-digital-downloads' ) );
193
  }
194
+ } else {
195
+ wp_die( sprintf( __( 'A customer with the email address %s already exists. Please go back and use the "Assign to another customer" link to assign this payment to them.', 'easy-digital-downloads' ), $email ) );
196
  }
197
 
198
  $new_customer_id = $customer->id;
includes/admin/reporting/export/class-batch-export-file-downloads.php CHANGED
@@ -87,12 +87,22 @@ class EDD_Batch_File_Downloads_Export extends EDD_Batch_Export {
87
 
88
  if ( $logs ) {
89
  foreach ( $logs as $log ) {
90
- $user_info = get_post_meta( $log->ID, '_edd_log_user_info', true );
91
- $files = edd_get_download_files( $log->post_parent );
92
- $file_id = (int) get_post_meta( $log->ID, '_edd_log_file_id', true );
93
- $file_name = isset( $files[ $file_id ]['name'] ) ? $files[ $file_id ]['name'] : null;
94
- $user = get_userdata( $user_info['id'] );
95
- $user = $user ? $user->user_login : $user_info['email'];
 
 
 
 
 
 
 
 
 
 
96
 
97
  $data[] = array(
98
  'date' => $log->post_date,
87
 
88
  if ( $logs ) {
89
  foreach ( $logs as $log ) {
90
+ $customer_id = get_post_meta( $log->ID, '_edd_log_customer_id', true );
91
+ $customer = false;
92
+ if ( ! empty( $customer_id ) ) {
93
+ $customer = new EDD_Customer( $customer_id );
94
+ }
95
+
96
+ $files = edd_get_download_files( $log->post_parent );
97
+ $file_id = (int) get_post_meta( $log->ID, '_edd_log_file_id', true );
98
+ $file_name = isset( $files[ $file_id ]['name'] ) ? $files[ $file_id ]['name'] : null;
99
+
100
+ if ( ! empty( $customer ) ) {
101
+ $user = ! empty( $customer->name ) ? $customer->name : $customer->email;
102
+ } else {
103
+ $payment_id = get_post_meta( $log->ID, '_edd_log_payment_id', true );
104
+ $user = edd_get_payment_user_email( $payment_id );
105
+ }
106
 
107
  $data[] = array(
108
  'date' => $log->post_date,
includes/admin/settings/register-settings.php CHANGED
@@ -1188,6 +1188,15 @@ function edd_settings_sanitize_taxes( $input ) {
1188
 
1189
  $new_rates = ! empty( $_POST['tax_rates'] ) ? array_values( $_POST['tax_rates'] ) : array();
1190
 
 
 
 
 
 
 
 
 
 
1191
  update_option( 'edd_tax_rates', $new_rates );
1192
 
1193
  return $input;
@@ -2119,7 +2128,6 @@ function edd_shop_states_callback($args) {
2119
  */
2120
  function edd_tax_rates_callback($args) {
2121
  $rates = edd_get_tax_rates();
2122
-
2123
  $class = edd_sanitize_html_class( $args['field_class'] );
2124
 
2125
  ob_start(); ?>
1188
 
1189
  $new_rates = ! empty( $_POST['tax_rates'] ) ? array_values( $_POST['tax_rates'] ) : array();
1190
 
1191
+ foreach ( $new_rates as $key => $rate ) {
1192
+ $rate = array_filter( $rate );
1193
+ if ( empty( $rate ) ) {
1194
+ unset( $new_rates[ $key ] );
1195
+ }
1196
+ }
1197
+
1198
+ $new_rates = ! empty( $new_rates ) ? array_values( $new_rates ) : array();
1199
+
1200
  update_option( 'edd_tax_rates', $new_rates );
1201
 
1202
  return $input;
2128
  */
2129
  function edd_tax_rates_callback($args) {
2130
  $rates = edd_get_tax_rates();
 
2131
  $class = edd_sanitize_html_class( $args['field_class'] );
2132
 
2133
  ob_start(); ?>
includes/ajax-functions.php CHANGED
@@ -139,22 +139,38 @@ function edd_get_ajax_url() {
139
  * @return void
140
  */
141
  function edd_ajax_remove_from_cart() {
142
- if ( isset( $_POST['cart_item'] ) ) {
 
 
143
 
144
- edd_remove_from_cart( $_POST['cart_item'] );
145
 
146
- $return = array(
147
- 'removed' => 1,
148
- 'subtotal' => html_entity_decode( edd_currency_filter( edd_format_amount( edd_get_cart_subtotal() ) ), ENT_COMPAT, 'UTF-8' ),
149
- 'total' => html_entity_decode( edd_currency_filter( edd_format_amount( edd_get_cart_total() ) ), ENT_COMPAT, 'UTF-8' ),
150
- 'cart_quantity' => html_entity_decode( edd_get_cart_quantity() ),
151
- );
152
 
153
- if ( edd_use_taxes() ) {
154
- $cart_tax = (float) edd_get_cart_tax();
155
- $return['tax'] = html_entity_decode( edd_currency_filter( edd_format_amount( $cart_tax ) ), ENT_COMPAT, 'UTF-8' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
156
  }
157
 
 
 
158
  echo json_encode( $return );
159
 
160
  }
@@ -170,7 +186,20 @@ add_action( 'wp_ajax_nopriv_edd_remove_from_cart', 'edd_ajax_remove_from_cart' )
170
  * @return void
171
  */
172
  function edd_ajax_add_to_cart() {
173
- if ( isset( $_POST['download_id'] ) ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
174
  $to_add = array();
175
 
176
  if ( isset( $_POST['price_ids'] ) && is_array( $_POST['price_ids'] ) ) {
@@ -223,6 +252,8 @@ function edd_ajax_add_to_cart() {
223
  $return['tax'] = html_entity_decode( edd_currency_filter( edd_format_amount( $cart_tax ) ), ENT_COMPAT, 'UTF-8' );
224
  }
225
 
 
 
226
  echo json_encode( $return );
227
  }
228
  edd_die();
@@ -370,7 +401,15 @@ add_action( 'wp_ajax_nopriv_edd_remove_discount', 'edd_ajax_remove_discount' );
370
  * @return void
371
  */
372
  function edd_load_checkout_login_fields() {
373
- do_action( 'edd_purchase_form_login_fields' );
 
 
 
 
 
 
 
 
374
  edd_die();
375
  }
376
  add_action('wp_ajax_nopriv_checkout_login', 'edd_load_checkout_login_fields');
@@ -382,7 +421,15 @@ add_action('wp_ajax_nopriv_checkout_login', 'edd_load_checkout_login_fields');
382
  * @return void
383
  */
384
  function edd_load_checkout_register_fields() {
385
- do_action( 'edd_purchase_form_register_fields' );
 
 
 
 
 
 
 
 
386
  edd_die();
387
  }
388
  add_action('wp_ajax_nopriv_checkout_register', 'edd_load_checkout_register_fields');
@@ -420,6 +467,17 @@ add_action( 'wp_ajax_nopriv_edd_get_download_title', 'edd_ajax_get_download_titl
420
  * @return void
421
  */
422
  function edd_ajax_recalculate_taxes() {
 
 
 
 
 
 
 
 
 
 
 
423
  if ( ! edd_get_cart_contents() ) {
424
  return false;
425
  }
@@ -458,27 +516,37 @@ function edd_ajax_get_states_field() {
458
  if( empty( $_POST['country'] ) ) {
459
  $_POST['country'] = edd_get_shop_country();
460
  }
461
- $states = edd_get_shop_states( $_POST['country'] );
462
 
463
- if( ! empty( $states ) ) {
 
 
464
 
465
- $args = array(
466
- 'name' => $_POST['field_name'],
467
- 'id' => $_POST['field_name'],
468
- 'class' => $_POST['field_name'] . ' edd-select',
469
- 'options' => $states,
470
- 'show_option_all' => false,
471
- 'show_option_none' => false
472
- );
473
 
474
- $response = EDD()->html->select( $args );
 
475
 
476
- } else {
477
 
478
- $response = 'nostates';
479
- }
 
 
 
 
 
 
480
 
481
- echo $response;
 
 
 
 
 
 
 
 
482
 
483
  edd_die();
484
  }
139
  * @return void
140
  */
141
  function edd_ajax_remove_from_cart() {
142
+ if ( ! isset( $_POST['nonce'] ) ) {
143
+ edd_debug_log( __( 'Missing nonce when removing an item from the cart. Please read the following for more information: https://easydigitaldownloads.com/development/2018/07/05/important-update-to-ajax-requests-in-easy-digital-downloads-2-9-4', 'easy-digital-downloads' ), true );
144
+ }
145
 
146
+ if ( isset( $_POST['cart_item'] ) && isset( $_POST['nonce'] ) ) {
147
 
 
 
 
 
 
 
148
 
149
+ $cart_item = absint( $_POST['cart_item'] );
150
+ $nonce = sanitize_text_field( $_POST['nonce'] );
151
+
152
+ $nonce_verified = wp_verify_nonce( $nonce, 'edd-remove-cart-widget-item' );
153
+
154
+ if ( false === $nonce_verified ) {
155
+ $return = array( 'removed' => 0 );
156
+ } else {
157
+ edd_remove_from_cart( $cart_item );
158
+
159
+ $return = array(
160
+ 'removed' => 1,
161
+ 'subtotal' => html_entity_decode( edd_currency_filter( edd_format_amount( edd_get_cart_subtotal() ) ), ENT_COMPAT, 'UTF-8' ),
162
+ 'total' => html_entity_decode( edd_currency_filter( edd_format_amount( edd_get_cart_total() ) ), ENT_COMPAT, 'UTF-8' ),
163
+ 'cart_quantity' => html_entity_decode( edd_get_cart_quantity() ),
164
+ );
165
+
166
+ if ( edd_use_taxes() ) {
167
+ $cart_tax = (float) edd_get_cart_tax();
168
+ $return['tax'] = html_entity_decode( edd_currency_filter( edd_format_amount( $cart_tax ) ), ENT_COMPAT, 'UTF-8' );
169
+ }
170
  }
171
 
172
+ $return = apply_filters( 'edd_ajax_remove_from_cart_response', $return );
173
+
174
  echo json_encode( $return );
175
 
176
  }
186
  * @return void
187
  */
188
  function edd_ajax_add_to_cart() {
189
+ if ( ! isset( $_POST['nonce'] ) ) {
190
+ edd_debug_log( __( 'Missing nonce when adding an item to the cart. Please read the following for more information: https://easydigitaldownloads.com/development/2018/07/05/important-update-to-ajax-requests-in-easy-digital-downloads-2-9-4', 'easy-digital-downloads' ), true );
191
+ }
192
+
193
+ if ( isset( $_POST['download_id'] ) && isset( $_POST['nonce'] ) ) {
194
+ $download_id = absint( $_POST['download_id'] );
195
+ $nonce = sanitize_text_field( $_POST['nonce'] );
196
+
197
+ $nonce_verified = wp_verify_nonce( $nonce, 'edd-add-to-cart-' . $download_id );
198
+
199
+ if ( false === $nonce_verified ) {
200
+ edd_die( '', '', 403 );
201
+ }
202
+
203
  $to_add = array();
204
 
205
  if ( isset( $_POST['price_ids'] ) && is_array( $_POST['price_ids'] ) ) {
252
  $return['tax'] = html_entity_decode( edd_currency_filter( edd_format_amount( $cart_tax ) ), ENT_COMPAT, 'UTF-8' );
253
  }
254
 
255
+ $return = apply_filters( 'edd_ajax_add_to_cart_response', $return );
256
+
257
  echo json_encode( $return );
258
  }
259
  edd_die();
401
  * @return void
402
  */
403
  function edd_load_checkout_login_fields() {
404
+ $action = sanitize_text_field( $_POST['action'] );
405
+ $nonce = sanitize_text_field( $_POST['nonce'] );
406
+
407
+ $nonce_verified = wp_verify_nonce( $nonce, 'edd_' . $action );
408
+
409
+ if ( $nonce_verified ) {
410
+ do_action( 'edd_purchase_form_login_fields' );
411
+ }
412
+
413
  edd_die();
414
  }
415
  add_action('wp_ajax_nopriv_checkout_login', 'edd_load_checkout_login_fields');
421
  * @return void
422
  */
423
  function edd_load_checkout_register_fields() {
424
+ $action = sanitize_text_field( $_POST['action'] );
425
+ $nonce = sanitize_text_field( $_POST['nonce'] );
426
+
427
+ $nonce_verified = wp_verify_nonce( $nonce, 'edd_' . $action );
428
+
429
+ if ( $nonce_verified ) {
430
+ do_action( 'edd_purchase_form_register_fields' );
431
+ }
432
+
433
  edd_die();
434
  }
435
  add_action('wp_ajax_nopriv_checkout_register', 'edd_load_checkout_register_fields');
467
  * @return void
468
  */
469
  function edd_ajax_recalculate_taxes() {
470
+ if ( ! isset( $_POST['nonce'] ) ) {
471
+ edd_debug_log( __( 'Missing nonce when recalculating taxes. Please read the following for more information: https://easydigitaldownloads.com/development/2018/07/05/important-update-to-ajax-requests-in-easy-digital-downloads-2-9-4', 'easy-digital-downloads' ), true );
472
+ }
473
+
474
+ $nonce = isset( $_POST['nonce'] ) ? sanitize_text_field( $_POST['nonce'] ) : '';
475
+ $nonce_verified = wp_verify_nonce( $nonce, 'edd-checkout-address-fields' );
476
+
477
+ if ( false === $nonce_verified ) {
478
+ return false;
479
+ }
480
+
481
  if ( ! edd_get_cart_contents() ) {
482
  return false;
483
  }
516
  if( empty( $_POST['country'] ) ) {
517
  $_POST['country'] = edd_get_shop_country();
518
  }
 
519
 
520
+ if ( ! isset( $_POST['nonce'] ) ) {
521
+ edd_debug_log( __( 'Missing nonce when retrieving state list. Please read the following for more information: https://easydigitaldownloads.com/development/2018/07/05/important-update-to-ajax-requests-in-easy-digital-downloads-2-9-4', 'easy-digital-downloads' ), true );
522
+ }
523
 
524
+ $nonce = isset( $_POST['nonce'] ) ? sanitize_text_field( $_POST['nonce'] ) : '';
525
+ $nonce_verified = wp_verify_nonce( $nonce, 'edd-country-field-nonce' );
 
 
 
 
 
 
526
 
527
+ if ( false !== $nonce_verified ) {
528
+ $states = edd_get_shop_states( $_POST['country'] );
529
 
530
+ if( ! empty( $states ) ) {
531
 
532
+ $args = array(
533
+ 'name' => $_POST['field_name'],
534
+ 'id' => $_POST['field_name'],
535
+ 'class' => $_POST['field_name'] . ' edd-select',
536
+ 'options' => $states,
537
+ 'show_option_all' => false,
538
+ 'show_option_none' => false
539
+ );
540
 
541
+ $response = EDD()->html->select( $args );
542
+
543
+ } else {
544
+
545
+ $response = 'nostates';
546
+ }
547
+
548
+ echo $response;
549
+ }
550
 
551
  edd_die();
552
  }
includes/cart/actions.php CHANGED
@@ -84,8 +84,8 @@ function edd_process_add_to_cart( $data ) {
84
  $query_part = strpos( $query_args, "?" );
85
  $url_parameters = '';
86
 
87
- if ( false !== $query_part ) {
88
- $url_parameters = substr( $query_args, $query_part );
89
  }
90
 
91
  wp_redirect( edd_get_checkout_uri() . $url_parameters, 303 );
@@ -105,7 +105,18 @@ add_action( 'edd_add_to_cart', 'edd_process_add_to_cart' );
105
  */
106
  function edd_process_remove_from_cart( $data ) {
107
  $cart_key = absint( $_GET['cart_item'] );
108
- edd_remove_from_cart( $cart_key );
 
 
 
 
 
 
 
 
 
 
 
109
  wp_redirect( remove_query_arg( array( 'edd_action', 'cart_item', 'nocache' ) ) ); edd_die();
110
  }
111
  add_action( 'edd_remove', 'edd_process_remove_from_cart' );
84
  $query_part = strpos( $query_args, "?" );
85
  $url_parameters = '';
86
 
87
+ if ( false !== $query_part ) {
88
+ $url_parameters = substr( $query_args, $query_part );
89
  }
90
 
91
  wp_redirect( edd_get_checkout_uri() . $url_parameters, 303 );
105
  */
106
  function edd_process_remove_from_cart( $data ) {
107
  $cart_key = absint( $_GET['cart_item'] );
108
+
109
+ if ( ! isset( $_GET['edd_remove_from_cart_nonce'] ) ) {
110
+ edd_debug_log( __( 'Missing nonce when removing an item from the cart. Please read the following for more information: https://easydigitaldownloads.com/development/2018/07/05/important-update-to-ajax-requests-in-easy-digital-downloads-2-9-4', 'easy-digital-downloads' ), true );
111
+ }
112
+
113
+ $nonce = ! empty( $_GET['edd_remove_from_cart_nonce'] ) ? sanitize_text_field( $_GET['edd_remove_from_cart_nonce'] ) : '';
114
+
115
+ $nonce_verified = wp_verify_nonce( $nonce, 'edd-remove-from-cart-' . $cart_key );
116
+ if ( false !== $nonce_verified ) {
117
+ edd_remove_from_cart( $cart_key );
118
+ }
119
+
120
  wp_redirect( remove_query_arg( array( 'edd_action', 'cart_item', 'nocache' ) ) ); edd_die();
121
  }
122
  add_action( 'edd_remove', 'edd_process_remove_from_cart' );
includes/cart/class-edd-cart.php CHANGED
@@ -198,7 +198,7 @@ class EDD_Cart {
198
 
199
  do_action( 'edd_cart_contents_loaded' );
200
 
201
- return $this->contents;
202
  }
203
 
204
  /**
@@ -358,7 +358,7 @@ class EDD_Cart {
358
  * @return boolean
359
  */
360
  public function is_empty() {
361
- return 0 === sizeof( $this->contents );
362
  }
363
 
364
  /**
198
 
199
  do_action( 'edd_cart_contents_loaded' );
200
 
201
+ return (array) $this->contents;
202
  }
203
 
204
  /**
358
  * @return boolean
359
  */
360
  public function is_empty() {
361
+ return 0 === count( (array) $this->get_contents() );
362
  }
363
 
364
  /**
includes/checkout/functions.php CHANGED
@@ -19,7 +19,6 @@ if ( ! defined( 'ABSPATH' ) ) exit;
19
  * @return bool True if on the Checkout page, false otherwise
20
  */
21
  function edd_is_checkout() {
22
-
23
  global $wp_query;
24
 
25
  $is_object_set = isset( $wp_query->queried_object );
@@ -117,8 +116,18 @@ function edd_send_to_success_page( $query_string = null ) {
117
  * @return mixed Full URL to the checkout page, if present | null if it doesn't exist
118
  */
119
  function edd_get_checkout_uri( $args = array() ) {
120
- $uri = edd_get_option( 'purchase_page', false );
121
- $uri = isset( $uri ) ? get_permalink( $uri ) : NULL;
 
 
 
 
 
 
 
 
 
 
122
 
123
  if ( ! empty( $args ) ) {
124
  // Check for backward compatibility
19
  * @return bool True if on the Checkout page, false otherwise
20
  */
21
  function edd_is_checkout() {
 
22
  global $wp_query;
23
 
24
  $is_object_set = isset( $wp_query->queried_object );
116
  * @return mixed Full URL to the checkout page, if present | null if it doesn't exist
117
  */
118
  function edd_get_checkout_uri( $args = array() ) {
119
+ $uri = false;
120
+
121
+ if ( edd_is_checkout() ) {
122
+ global $post;
123
+ $uri = $post instanceof WP_Post ? get_permalink( $post->ID ) : NULL;
124
+ }
125
+
126
+ // If we are not on a checkout page, determine the URI from the default.
127
+ if ( empty( $uri ) ) {
128
+ $uri = edd_get_option( 'purchase_page', false );
129
+ $uri = isset( $uri ) ? get_permalink( $uri ) : NULL;
130
+ }
131
 
132
  if ( ! empty( $args ) ) {
133
  // Check for backward compatibility
includes/checkout/template.php CHANGED
@@ -390,7 +390,7 @@ function edd_default_cc_address_fields() {
390
  <?php } ?>
391
  </label>
392
  <span class="edd-description"><?php _e( 'The country for your billing address.', 'easy-digital-downloads' ); ?></span>
393
- <select name="billing_country" id="billing_country" class="billing_country edd-select<?php if( edd_field_is_required( 'billing_country' ) ) { echo ' required'; } ?>"<?php if( edd_field_is_required( 'billing_country' ) ) { echo ' required '; } ?>>
394
  <?php
395
 
396
  $selected_country = edd_get_shop_country();
@@ -436,6 +436,7 @@ function edd_default_cc_address_fields() {
436
  <?php endif; ?>
437
  </p>
438
  <?php do_action( 'edd_cc_billing_bottom' ); ?>
 
439
  </fieldset>
440
  <?php
441
  echo ob_get_clean();
@@ -471,7 +472,12 @@ function edd_get_register_fields() {
471
  <fieldset id="edd_register_fields">
472
 
473
  <?php if( $show_register_form == 'both' ) { ?>
474
- <p id="edd-login-account-wrap"><?php _e( 'Already have an account?', 'easy-digital-downloads' ); ?> <a href="<?php echo esc_url( add_query_arg( 'login', 1 ) ); ?>" class="edd_checkout_register_login" data-action="checkout_login"><?php _e( 'Login', 'easy-digital-downloads' ); ?></a></p>
 
 
 
 
 
475
  <?php } ?>
476
 
477
  <?php do_action('edd_register_fields_before'); ?>
@@ -545,7 +551,7 @@ function edd_get_login_fields() {
545
  <?php if( $show_register_form == 'both' ) { ?>
546
  <p id="edd-new-account-wrap">
547
  <?php _e( 'Need to create an account?', 'easy-digital-downloads' ); ?>
548
- <a href="<?php echo esc_url( remove_query_arg('login') ); ?>" class="edd_checkout_register_login" data-action="checkout_register">
549
  <?php _e( 'Register', 'easy-digital-downloads' ); if(!edd_no_guest_checkout()) { echo ' ' . __( 'or checkout as a guest.', 'easy-digital-downloads' ); } ?>
550
  </a>
551
  </p>
@@ -574,6 +580,7 @@ function edd_get_login_fields() {
574
  </p>
575
  <p id="edd-user-login-submit">
576
  <input type="submit" class="edd-submit button <?php echo $color; ?>" name="edd_login_submit" value="<?php _e( 'Login', 'easy-digital-downloads' ); ?>"/>
 
577
  </p>
578
  <?php do_action('edd_checkout_login_fields_after'); ?>
579
  </fieldset><!--end #edd_login_fields-->
@@ -614,9 +621,10 @@ function edd_payment_mode_select() {
614
  $label = apply_filters( 'edd_gateway_checkout_label_' . $gateway_id, $gateway['checkout_label'] );
615
  $checked = checked( $gateway_id, $chosen_gateway, false );
616
  $checked_class = $checked ? ' edd-gateway-option-selected' : '';
 
617
 
618
  echo '<label for="edd-gateway-' . esc_attr( $gateway_id ) . '" class="edd-gateway-option' . $checked_class . '" id="edd-gateway-option-' . esc_attr( $gateway_id ) . '">';
619
- echo '<input type="radio" name="payment-mode" class="edd-gateway" id="edd-gateway-' . esc_attr( $gateway_id ) . '" value="' . esc_attr( $gateway_id ) . '"' . $checked . '>' . esc_html( $label );
620
  echo '</label>';
621
 
622
  endforeach;
@@ -1020,6 +1028,7 @@ function edd_checkout_hidden_fields() {
1020
  <?php } ?>
1021
  <input type="hidden" name="edd_action" value="purchase"/>
1022
  <input type="hidden" name="edd-gateway" value="<?php echo edd_get_chosen_gateway(); ?>" />
 
1023
  <?php
1024
  }
1025
 
390
  <?php } ?>
391
  </label>
392
  <span class="edd-description"><?php _e( 'The country for your billing address.', 'easy-digital-downloads' ); ?></span>
393
+ <select name="billing_country" id="billing_country" data-nonce="<?php echo wp_create_nonce( 'edd-country-field-nonce' ); ?>" class="billing_country edd-select<?php if( edd_field_is_required( 'billing_country' ) ) { echo ' required'; } ?>"<?php if( edd_field_is_required( 'billing_country' ) ) { echo ' required '; } ?>>
394
  <?php
395
 
396
  $selected_country = edd_get_shop_country();
436
  <?php endif; ?>
437
  </p>
438
  <?php do_action( 'edd_cc_billing_bottom' ); ?>
439
+ <?php wp_nonce_field( 'edd-checkout-address-fields', 'edd-checkout-address-fields-nonce', false, true ); ?>
440
  </fieldset>
441
  <?php
442
  echo ob_get_clean();
472
  <fieldset id="edd_register_fields">
473
 
474
  <?php if( $show_register_form == 'both' ) { ?>
475
+ <p id="edd-login-account-wrap">
476
+ <?php _e( 'Already have an account?', 'easy-digital-downloads' ); ?>
477
+ <a href="<?php echo esc_url( add_query_arg( 'login', 1 ) ); ?>" class="edd_checkout_register_login" data-action="checkout_login" data-nonce="<?php echo wp_create_nonce( 'edd_checkout_login' ); ?>">
478
+ <?php _e( 'Login', 'easy-digital-downloads' ); ?>
479
+ </a>
480
+ </p>
481
  <?php } ?>
482
 
483
  <?php do_action('edd_register_fields_before'); ?>
551
  <?php if( $show_register_form == 'both' ) { ?>
552
  <p id="edd-new-account-wrap">
553
  <?php _e( 'Need to create an account?', 'easy-digital-downloads' ); ?>
554
+ <a href="<?php echo esc_url( remove_query_arg('login') ); ?>" class="edd_checkout_register_login" data-action="checkout_register" data-nonce="<?php echo wp_create_nonce( 'edd_checkout_register' ); ?>">
555
  <?php _e( 'Register', 'easy-digital-downloads' ); if(!edd_no_guest_checkout()) { echo ' ' . __( 'or checkout as a guest.', 'easy-digital-downloads' ); } ?>
556
  </a>
557
  </p>
580
  </p>
581
  <p id="edd-user-login-submit">
582
  <input type="submit" class="edd-submit button <?php echo $color; ?>" name="edd_login_submit" value="<?php _e( 'Login', 'easy-digital-downloads' ); ?>"/>
583
+ <?php wp_nonce_field( 'edd-login-form', 'edd_login_nonce', false, true ); ?>
584
  </p>
585
  <?php do_action('edd_checkout_login_fields_after'); ?>
586
  </fieldset><!--end #edd_login_fields-->
621
  $label = apply_filters( 'edd_gateway_checkout_label_' . $gateway_id, $gateway['checkout_label'] );
622
  $checked = checked( $gateway_id, $chosen_gateway, false );
623
  $checked_class = $checked ? ' edd-gateway-option-selected' : '';
624
+ $nonce = ' data-' . esc_attr( $gateway_id ) . '-nonce="' . wp_create_nonce( 'edd-gateway-selected-' . esc_attr( $gateway_id ) ) .'"';
625
 
626
  echo '<label for="edd-gateway-' . esc_attr( $gateway_id ) . '" class="edd-gateway-option' . $checked_class . '" id="edd-gateway-option-' . esc_attr( $gateway_id ) . '">';
627
+ echo '<input type="radio" name="payment-mode" class="edd-gateway" id="edd-gateway-' . esc_attr( $gateway_id ) . '" value="' . esc_attr( $gateway_id ) . '"' . $checked . $nonce . '>' . esc_html( $label );
628
  echo '</label>';
629
 
630
  endforeach;
1028
  <?php } ?>
1029
  <input type="hidden" name="edd_action" value="purchase"/>
1030
  <input type="hidden" name="edd-gateway" value="<?php echo edd_get_chosen_gateway(); ?>" />
1031
+ <?php wp_nonce_field( 'edd-process-checkout', 'edd-process-checkout-nonce', false, true ); ?>
1032
  <?php
1033
  }
1034
 
includes/class-edd-cli.php CHANGED
@@ -659,7 +659,7 @@ class EDD_CLI extends WP_CLI_Command {
659
  'price' => edd_sanitize_amount( $item_price ),
660
  'quantity' => 1,
661
  'discount' => 0,
662
- 'tax' => $tax
663
  );
664
 
665
  $final_downloads[$key] = $item_number;
@@ -705,7 +705,7 @@ class EDD_CLI extends WP_CLI_Command {
705
 
706
  $purchase_data = array(
707
  'price' => edd_sanitize_amount( $total ),
708
- 'tax' => 0,
709
  'purchase_key' => strtolower( md5( uniqid() ) ),
710
  'user_email' => $email,
711
  'user_info' => $user_info,
659
  'price' => edd_sanitize_amount( $item_price ),
660
  'quantity' => 1,
661
  'discount' => 0,
662
+ 'tax' => edd_calculate_tax( $item_price ),
663
  );
664
 
665
  $final_downloads[$key] = $item_number;
705
 
706
  $purchase_data = array(
707
  'price' => edd_sanitize_amount( $total ),
708
+ 'tax' => edd_calculate_tax( $total ),
709
  'purchase_key' => strtolower( md5( uniqid() ) ),
710
  'user_email' => $email,
711
  'user_info' => $user_info,
includes/class-edd-logging.php CHANGED
@@ -514,15 +514,16 @@ function edd_record_log( $title = '', $message = '', $parent = 0, $type = null )
514
  * Logs a message to the debug log file
515
  *
516
  * @since 2.8.7
 
517
  *
518
  * @param string $message
519
  * @global $edd_logs EDD Logs Object
520
  * @return void
521
  */
522
- function edd_debug_log( $message = '' ) {
523
  global $edd_logs;
524
 
525
- if( edd_is_debug_mode() ) {
526
 
527
  $edd_logs->log_to_file( $message );
528
 
514
  * Logs a message to the debug log file
515
  *
516
  * @since 2.8.7
517
+ * @since 2.9.4 Added the 'force' option.
518
  *
519
  * @param string $message
520
  * @global $edd_logs EDD Logs Object
521
  * @return void
522
  */
523
+ function edd_debug_log( $message = '', $force = false ) {
524
  global $edd_logs;
525
 
526
+ if ( edd_is_debug_mode() || $force ) {
527
 
528
  $edd_logs->log_to_file( $message );
529
 
includes/class-edd-session.php CHANGED
@@ -354,11 +354,6 @@ class EDD_Session {
354
  $start_session = false;
355
  }
356
 
357
- if( is_admin() && false === strpos( $uri, 'wp-admin/admin-ajax.php' ) ) {
358
- // We do not want to start sessions in the admin unless we're processing an ajax request
359
- $start_session = false;
360
- }
361
-
362
  if( false !== strpos( $uri, 'wp_scrape_key' ) ) {
363
  // Starting sessions while saving the file editor can break the save process, so don't start
364
  $start_session = false;
354
  $start_session = false;
355
  }
356
 
 
 
 
 
 
357
  if( false !== strpos( $uri, 'wp_scrape_key' ) ) {
358
  // Starting sessions while saving the file editor can break the save process, so don't start
359
  $start_session = false;
includes/emails/class-edd-email-tags.php CHANGED
@@ -34,7 +34,7 @@ class EDD_Email_Template_Tags {
34
  *
35
  * @since 1.9
36
  */
37
- private $tags;
38
 
39
  /**
40
  * Payment ID
@@ -205,7 +205,7 @@ function edd_get_emails_tags_list() {
205
  $list = '';
206
 
207
  // Get all tags
208
- $email_tags = edd_get_email_tags();
209
 
210
  // Check
211
  if ( count( $email_tags ) > 0 ) {
34
  *
35
  * @since 1.9
36
  */
37
+ private $tags = array();
38
 
39
  /**
40
  * Payment ID
205
  $list = '';
206
 
207
  // Get all tags
208
+ $email_tags = (array) edd_get_email_tags();
209
 
210
  // Check
211
  if ( count( $email_tags ) > 0 ) {
includes/gateways/actions.php CHANGED
@@ -33,8 +33,20 @@ add_action( 'edd_gateway_select', 'edd_process_gateway_select' );
33
  * @return void
34
  */
35
  function edd_load_ajax_gateway() {
36
- if ( isset( $_POST['edd_payment_mode'] ) ) {
37
- do_action( 'edd_purchase_form' );
 
 
 
 
 
 
 
 
 
 
 
 
38
  exit();
39
  }
40
  }
33
  * @return void
34
  */
35
  function edd_load_ajax_gateway() {
36
+ if ( ! isset( $_POST['nonce'] ) ) {
37
+ edd_debug_log( __( 'Missing nonce when loading the gateway fields. Please read the following for more information: https://easydigitaldownloads.com/development/2018/07/05/important-update-to-ajax-requests-in-easy-digital-downloads-2-9-4', 'easy-digital-downloads' ), true );
38
+ }
39
+
40
+ if ( isset( $_POST['edd_payment_mode'] ) && isset( $_POST['nonce'] ) ) {
41
+ $payment_mode = sanitize_text_field( $_POST['edd_payment_mode'] );
42
+ $nonce = sanitize_text_field( $_POST['nonce'] );
43
+
44
+ $nonce_verified = wp_verify_nonce( $nonce, 'edd-gateway-selected-' . $payment_mode );
45
+
46
+ if ( false !== $nonce_verified ) {
47
+ do_action( 'edd_purchase_form' );
48
+ }
49
+
50
  exit();
51
  }
52
  }
includes/gateways/paypal-standard.php CHANGED
@@ -334,10 +334,22 @@ add_action( 'edd_gateway_paypal', 'edd_process_paypal_purchase' );
334
  */
335
  function edd_listen_for_paypal_ipn() {
336
  // Regular PayPal IPN
337
- if ( isset( $_GET['edd-listener'] ) && $_GET['edd-listener'] == 'IPN' ) {
338
 
339
  edd_debug_log( 'PayPal IPN endpoint loaded' );
340
 
 
 
 
 
 
 
 
 
 
 
 
 
341
  do_action( 'edd_verify_paypal_ipn' );
342
  }
343
  }
334
  */
335
  function edd_listen_for_paypal_ipn() {
336
  // Regular PayPal IPN
337
+ if ( isset( $_GET['edd-listener'] ) && 'ipn' === strtolower( $_GET['edd-listener'] ) ) {
338
 
339
  edd_debug_log( 'PayPal IPN endpoint loaded' );
340
 
341
+ /**
342
+ * This is necessary to delay execution of PayPal PDT and to avoid a race condition causing the order status
343
+ * updates to be triggered twice.
344
+ *
345
+ * @since 2.9.4
346
+ * @see https://github.com/easydigitaldownloads/easy-digital-downloads/issues/6605
347
+ */
348
+ $token = edd_get_option( 'paypal_identity_token' );
349
+ if ( $token ) {
350
+ sleep( 5 );
351
+ }
352
+
353
  do_action( 'edd_verify_paypal_ipn' );
354
  }
355
  }
includes/payments/class-edd-payment.php CHANGED
@@ -1402,6 +1402,11 @@ class EDD_Payment {
1402
 
1403
  $merged_item = array_merge( $current_args, $args );
1404
 
 
 
 
 
 
1405
  // Sort the current and new args, and checksum them. If no changes. No need to fire a modification.
1406
  ksort( $current_args );
1407
  ksort( $merged_item );
@@ -1410,11 +1415,6 @@ class EDD_Payment {
1410
  return false;
1411
  }
1412
 
1413
- // Format the item_price correctly now
1414
- $merged_item['item_price'] = edd_sanitize_amount( $merged_item['item_price'] );
1415
-
1416
- $new_subtotal = floatval( $merged_item['item_price'] ) * $merged_item['quantity'];
1417
- $merged_item['price'] = $new_subtotal + $merged_item['tax'];
1418
  $this->cart_details[ $cart_index ] = $merged_item;
1419
  $modified_download = $merged_item;
1420
  $modified_download['action'] = 'modify';
1402
 
1403
  $merged_item = array_merge( $current_args, $args );
1404
 
1405
+ // Format the item_price correctly now
1406
+ $merged_item['item_price'] = edd_sanitize_amount( $merged_item['item_price'] );
1407
+ $new_subtotal = floatval( $merged_item['item_price'] ) * $merged_item['quantity'];
1408
+ $merged_item['price'] = edd_prices_include_tax() ? $new_subtotal : $new_subtotal + $merged_item['tax'];
1409
+
1410
  // Sort the current and new args, and checksum them. If no changes. No need to fire a modification.
1411
  ksort( $current_args );
1412
  ksort( $merged_item );
1415
  return false;
1416
  }
1417
 
 
 
 
 
 
1418
  $this->cart_details[ $cart_index ] = $merged_item;
1419
  $modified_download = $merged_item;
1420
  $modified_download['action'] = 'modify';
includes/process-purchase.php CHANGED
@@ -39,6 +39,19 @@ function edd_process_purchase_form() {
39
 
40
  $is_ajax = isset( $_POST['edd_ajax'] );
41
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42
  // Process the login form
43
  if ( isset( $_POST['edd_login_submit'] ) ) {
44
  edd_process_purchase_login();
@@ -216,6 +229,23 @@ function edd_process_purchase_login() {
216
 
217
  $is_ajax = isset( $_POST['edd_ajax'] );
218
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
219
  $user_data = edd_purchase_form_validate_user_login();
220
 
221
  if ( edd_get_errors() || $user_data['user_id'] < 1 ) {
@@ -577,6 +607,15 @@ function edd_purchase_form_validate_new_user() {
577
  } else {
578
  if ( edd_no_guest_checkout() ) {
579
  edd_set_error( 'registration_required', __( 'You must register or login to complete your purchase', 'easy-digital-downloads' ) );
 
 
 
 
 
 
 
 
 
580
  }
581
  }
582
 
@@ -728,6 +767,14 @@ function edd_purchase_form_validate_guest_user() {
728
  } else {
729
  // All is good to go
730
  $valid_user_data['user_email'] = $guest_email;
 
 
 
 
 
 
 
 
731
  }
732
  } else {
733
  // No email
39
 
40
  $is_ajax = isset( $_POST['edd_ajax'] );
41
 
42
+ if ( $is_ajax ) {
43
+ if ( ! isset( $_POST['edd-process-checkout-nonce'] ) ) {
44
+ edd_debug_log( __( 'Missing nonce when processing checkout. Please read the following for more information: https://easydigitaldownloads.com/development/2018/07/05/important-update-to-ajax-requests-in-easy-digital-downloads-2-9-4', 'easy-digital-downloads' ), true );
45
+ }
46
+
47
+ $nonce = isset( $_POST['edd-process-checkout-nonce'] ) ? sanitize_text_field( $_POST['edd-process-checkout-nonce'] ) : '';
48
+ $nonce_verified = wp_verify_nonce( $nonce, 'edd-process-checkout' );
49
+
50
+ if ( false === $nonce_verified ) {
51
+ edd_set_error( 'checkout-nonce-error', __( 'Error processing purchase. Please reload the page and try again.', 'easy-digital-downloads' ) );
52
+ }
53
+ }
54
+
55
  // Process the login form
56
  if ( isset( $_POST['edd_login_submit'] ) ) {
57
  edd_process_purchase_login();
229
 
230
  $is_ajax = isset( $_POST['edd_ajax'] );
231
 
232
+ if ( ! isset( $_POST['edd_login_nonce'] ) ) {
233
+ edd_debug_log( __( 'Missing nonce when processing login during checkout. Please read the following for more information: https://easydigitaldownloads.com/development/2018/07/05/important-update-to-ajax-requests-in-easy-digital-downloads-2-9-4', 'easy-digital-downloads' ), true );
234
+ }
235
+
236
+ $nonce = isset( $_POST['edd_login_nonce'] ) ? sanitize_text_field( $_POST['edd_login_nonce'] ) : '';
237
+ $nonce_verified = wp_verify_nonce( $nonce, 'edd-login-form' );
238
+ if ( false === $nonce_verified ) {
239
+ edd_set_error( 'edd-login-nonce-failed', __( 'Error processing login. Nonce failed.', 'easy-digital-downloads' ) );
240
+
241
+ if ( $is_ajax ) {
242
+ do_action( 'edd_ajax_checkout_errors' );
243
+ edd_die();
244
+ } else {
245
+ wp_redirect( $_SERVER['HTTP_REFERER'] ); exit;
246
+ }
247
+ }
248
+
249
  $user_data = edd_purchase_form_validate_user_login();
250
 
251
  if ( edd_get_errors() || $user_data['user_id'] < 1 ) {
607
  } else {
608
  if ( edd_no_guest_checkout() ) {
609
  edd_set_error( 'registration_required', __( 'You must register or login to complete your purchase', 'easy-digital-downloads' ) );
610
+ } else {
611
+ // If the entered email is attached to a user account, they must log in. Otherwise you can add purchases/CC to an account you do not own.
612
+ $user = get_user_by( 'email', $user_email );
613
+
614
+ if ( $user ) {
615
+ edd_set_error( 'login_required', __( 'You must login to complete your purchase', 'easy-digital-downloads' ) );
616
+ } else {
617
+ edd_set_error( 'registration_required', __( 'You must register or login to complete your purchase', 'easy-digital-downloads' ) );
618
+ }
619
  }
620
  }
621
 
767
  } else {
768
  // All is good to go
769
  $valid_user_data['user_email'] = $guest_email;
770
+
771
+ // We have a valid email, but if that email is attached to a user account, they must log in. Otherwise you can add purchases/CC to an account you do not own.
772
+ $user = get_user_by( 'email', $guest_email );
773
+
774
+ if ( $user ) {
775
+ edd_set_error( 'login_required', __( 'You must login to complete your purchase', 'easy-digital-downloads' ) );
776
+ }
777
+
778
  }
779
  } else {
780
  // No email
includes/template-functions.php CHANGED
@@ -184,7 +184,7 @@ function edd_get_purchase_link( $args = array() ) {
184
 
185
  if ( ! edd_is_ajax_disabled() ) {
186
 
187
- echo '<a href="#" class="edd-add-to-cart ' . esc_attr( $class ) . '" data-action="edd_add_to_cart" data-download-id="' . esc_attr( $download->ID ) . '" ' . $data_variable . ' ' . $type . ' ' . $data_price . ' ' . $button_display . '><span class="edd-add-to-cart-label">' . $args['text'] . '</span> <span class="edd-loading" aria-label="' . esc_attr__( 'Loading', 'easy-digital-downloads' ) . '"></span></a>';
188
 
189
  }
190
 
184
 
185
  if ( ! edd_is_ajax_disabled() ) {
186
 
187
+ echo '<a href="#" class="edd-add-to-cart ' . esc_attr( $class ) . '" data-nonce="' . wp_create_nonce( 'edd-add-to-cart-' . $download->ID ) . '" data-action="edd_add_to_cart" data-download-id="' . esc_attr( $download->ID ) . '" ' . $data_variable . ' ' . $type . ' ' . $data_price . ' ' . $button_display . '><span class="edd-add-to-cart-label">' . $args['text'] . '</span> <span class="edd-loading" aria-label="' . esc_attr__( 'Loading', 'easy-digital-downloads' ) . '"></span></a>';
188
 
189
  }
190
 
includes/user-functions.php CHANGED
@@ -483,6 +483,10 @@ function edd_add_past_purchases_to_new_user( $user_id ) {
483
 
484
  $email = get_the_author_meta( 'user_email', $user_id );
485
 
 
 
 
 
486
  $payments = edd_get_payments( array( 's' => $email, 'output' => 'payments' ) );
487
 
488
  if( $payments ) {
483
 
484
  $email = get_the_author_meta( 'user_email', $user_id );
485
 
486
+ if ( empty( $email ) ) {
487
+ return;
488
+ }
489
+
490
  $payments = edd_get_payments( array( 's' => $email, 'output' => 'payments' ) );
491
 
492
  if( $payments ) {
languages/easy-digital-downloads.pot CHANGED
@@ -2,9 +2,9 @@
2
  # This file is distributed under the same license as the Easy Digital Downloads package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Easy Digital Downloads 2.9.3\n"
6
  "Report-Msgid-Bugs-To: https://easydigitaldownloads.com/\n"
7
- "POT-Creation-Date: 2018-05-25 16:39:09+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
@@ -59,11 +59,11 @@ msgstr ""
59
  #: includes/admin/import/class-batch-import-payments.php:76
60
  #: includes/admin/import/class-batch-import.php:156
61
  #: includes/admin/payments/actions.php:25
62
- #: includes/admin/payments/actions.php:293
63
- #: includes/admin/payments/actions.php:316
64
- #: includes/admin/payments/actions.php:332
65
- #: includes/admin/payments/actions.php:359
66
- #: includes/admin/payments/actions.php:379
67
  #: includes/admin/payments/view-order-details.php:22
68
  #: includes/admin/payments/view-order-details.php:32
69
  #: includes/admin/reporting/class-api-requests-logs-list-table.php:142
@@ -98,8 +98,8 @@ msgstr ""
98
  #: includes/error-tracking.php:40 includes/gateways/functions.php:221
99
  #: includes/gateways/manual.php:33 includes/gateways/paypal-standard.php:168
100
  #: includes/process-download.php:293 includes/process-download.php:881
101
- #: includes/query-filters.php:48 includes/user-functions.php:891
102
- #: includes/user-functions.php:916 includes/user-functions.php:969
103
  msgid "Error"
104
  msgstr ""
105
 
@@ -196,7 +196,7 @@ msgstr ""
196
 
197
  #: includes/admin/admin-pages.php:43 includes/admin/plugins.php:57
198
  #: includes/admin/settings/contextual-help.php:87
199
- #: includes/admin/settings/register-settings.php:1329
200
  msgid "Extensions"
201
  msgstr ""
202
 
@@ -226,7 +226,7 @@ msgid "Revoke"
226
  msgstr ""
227
 
228
  #: includes/admin/class-api-keys-table.php:170
229
- #: includes/checkout/template.php:484 includes/checkout/template.php:490
230
  #: templates/shortcode-register.php:20
231
  msgid "Username"
232
  msgstr ""
@@ -515,7 +515,7 @@ msgid "An error has occured. Please try again."
515
  msgstr ""
516
 
517
  #: includes/admin/customers/customer-actions.php:207
518
- #: includes/user-functions.php:916
519
  msgid "Nonce verification failed."
520
  msgstr ""
521
 
@@ -639,7 +639,7 @@ msgid "City"
639
  msgstr ""
640
 
641
  #: includes/admin/customers/customers.php:269
642
- #: includes/admin/settings/register-settings.php:2131
643
  #: includes/admin/tools.php:695 includes/checkout/template.php:435
644
  #: templates/shortcode-profile-editor.php:171
645
  msgid "State / Province"
@@ -744,7 +744,7 @@ msgstr ""
744
  #: includes/admin/downloads/metabox.php:698
745
  #: includes/admin/downloads/metabox.php:823
746
  #: includes/admin/payments/view-order-details.php:490
747
- #: includes/admin/settings/register-settings.php:2134 includes/scripts.php:227
748
  #: templates/checkout_cart.php:57 templates/checkout_cart.php:75
749
  #: templates/shortcode-profile-editor.php:123
750
  msgid "Remove"
@@ -1253,13 +1253,13 @@ msgstr ""
1253
 
1254
  #: includes/admin/discounts/contextual-help.php:38
1255
  #: includes/admin/settings/contextual-help.php:42
1256
- #: includes/admin/settings/register-settings.php:1321
1257
- #: includes/admin/settings/register-settings.php:1377
1258
- #: includes/admin/settings/register-settings.php:1382
1259
  #: includes/admin/settings/register-settings.php:1386
1260
  #: includes/admin/settings/register-settings.php:1391
1261
- #: includes/admin/settings/register-settings.php:1394
1262
- #: includes/admin/settings/register-settings.php:1409
 
 
1263
  #: includes/admin/tools.php:68
1264
  msgid "General"
1265
  msgstr ""
@@ -1765,7 +1765,7 @@ msgstr ""
1765
 
1766
  #: includes/admin/downloads/metabox.php:1031
1767
  #: includes/admin/settings/register-settings.php:744
1768
- #: includes/admin/thickbox.php:59 includes/checkout/template.php:976
1769
  #: includes/shortcodes.php:49 includes/template-functions.php:78
1770
  msgid "Purchase"
1771
  msgstr ""
@@ -1776,8 +1776,8 @@ msgstr ""
1776
 
1777
  #: includes/admin/downloads/metabox.php:1039
1778
  msgid ""
1779
- "<strong>Purchse Shortcode</strong>: Use this shortcode to output a purchase "
1780
- "link for this product in the location of your choosing."
1781
  msgstr ""
1782
 
1783
  #: includes/admin/downloads/metabox.php:1060
@@ -1910,10 +1910,10 @@ msgid "Import complete! <a href=\"%s\">View imported %s</a>."
1910
  msgstr ""
1911
 
1912
  #: includes/admin/payments/actions.php:25
1913
- #: includes/admin/payments/actions.php:316
1914
- #: includes/admin/payments/actions.php:332
1915
- #: includes/admin/payments/actions.php:359
1916
- #: includes/admin/payments/actions.php:379 includes/emails/actions.php:53
1917
  msgid "You do not have permission to edit this payment record"
1918
  msgstr ""
1919
 
@@ -1925,7 +1925,13 @@ msgstr ""
1925
  msgid "Error creating new customer"
1926
  msgstr ""
1927
 
1928
- #: includes/admin/payments/actions.php:293
 
 
 
 
 
 
1929
  msgid "Error Updating Payment"
1930
  msgstr ""
1931
 
@@ -2605,7 +2611,7 @@ msgstr ""
2605
 
2606
  #: includes/admin/reporting/class-export-payments.php:68
2607
  #: includes/admin/reporting/export/class-batch-export-payments.php:49
2608
- #: includes/admin/settings/register-settings.php:2130
2609
  #: includes/admin/tools.php:713 templates/shortcode-profile-editor.php:162
2610
  msgid "Country"
2611
  msgstr ""
@@ -2870,7 +2876,7 @@ msgstr ""
2870
 
2871
  #: includes/admin/reporting/export/class-batch-export-payments.php:62
2872
  #: includes/admin/settings/register-settings.php:352
2873
- #: includes/admin/settings/register-settings.php:1378
2874
  msgid "Currency"
2875
  msgstr ""
2876
 
@@ -3002,7 +3008,7 @@ msgid "Refresh Reports"
3002
  msgstr ""
3003
 
3004
  #: includes/admin/reporting/logs.php:144
3005
- #: includes/admin/settings/register-settings.php:1404
3006
  #: includes/privacy-functions.php:544
3007
  msgid "File Downloads"
3008
  msgstr ""
@@ -3033,7 +3039,7 @@ msgstr ""
3033
 
3034
  #: includes/admin/reporting/reports.php:59
3035
  #: includes/admin/settings/contextual-help.php:71
3036
- #: includes/admin/settings/register-settings.php:1325
3037
  msgid "Taxes"
3038
  msgstr ""
3039
 
@@ -3180,7 +3186,7 @@ msgstr ""
3180
 
3181
  #: includes/admin/settings/contextual-help.php:48
3182
  #: includes/admin/settings/register-settings.php:420
3183
- #: includes/admin/settings/register-settings.php:1322
3184
  msgid "Payment Gateways"
3185
  msgstr ""
3186
 
@@ -3209,7 +3215,7 @@ msgid ""
3209
  msgstr ""
3210
 
3211
  #: includes/admin/settings/contextual-help.php:57
3212
- #: includes/admin/settings/register-settings.php:1323
3213
  msgid "Emails"
3214
  msgstr ""
3215
 
@@ -3229,7 +3235,7 @@ msgid ""
3229
  msgstr ""
3230
 
3231
  #: includes/admin/settings/contextual-help.php:65
3232
- #: includes/admin/settings/register-settings.php:1324
3233
  msgid "Styles"
3234
  msgstr ""
3235
 
@@ -3312,7 +3318,7 @@ msgid ""
3312
  msgstr ""
3313
 
3314
  #: includes/admin/settings/contextual-help.php:93
3315
- #: includes/admin/settings/register-settings.php:1401
3316
  msgid "Miscellaneous"
3317
  msgstr ""
3318
 
@@ -3489,7 +3495,7 @@ msgid "The symbol (usually , or .) to separate decimal points."
3489
  msgstr ""
3490
 
3491
  #: includes/admin/settings/register-settings.php:388
3492
- #: includes/admin/settings/register-settings.php:1379
3493
  msgid "API"
3494
  msgstr ""
3495
 
@@ -3992,7 +3998,7 @@ msgid "The button label for completing a free purchase."
3992
  msgstr ""
3993
 
3994
  #: includes/admin/settings/register-settings.php:751
3995
- #: includes/checkout/template.php:979
3996
  msgid "Free Download"
3997
  msgstr ""
3998
 
@@ -4251,186 +4257,186 @@ msgstr ""
4251
  msgid "Settings updated."
4252
  msgstr ""
4253
 
4254
- #: includes/admin/settings/register-settings.php:1214
4255
  msgid "Error setting default gateway. No gateways are enabled."
4256
  msgstr ""
4257
 
4258
- #: includes/admin/settings/register-settings.php:1227
4259
  msgid "%s could not be set as the default gateway. It must first be enabled."
4260
  msgstr ""
4261
 
4262
- #: includes/admin/settings/register-settings.php:1326
4263
  msgid "Privacy"
4264
  msgstr ""
4265
 
4266
- #: includes/admin/settings/register-settings.php:1332
4267
  msgid "Licenses"
4268
  msgstr ""
4269
 
4270
- #: includes/admin/settings/register-settings.php:1335
4271
  msgid "Misc"
4272
  msgstr ""
4273
 
4274
- #: includes/admin/settings/register-settings.php:1383
4275
  #: includes/gateways/functions.php:25 includes/gateways/paypal-standard.php:33
4276
  msgid "PayPal Standard"
4277
  msgstr ""
4278
 
4279
- #: includes/admin/settings/register-settings.php:1387
4280
  msgid "Purchase Receipts"
4281
  msgstr ""
4282
 
4283
- #: includes/admin/settings/register-settings.php:1388
4284
  msgid "New Sale Notifications"
4285
  msgstr ""
4286
 
4287
- #: includes/admin/settings/register-settings.php:1397
4288
  msgid "Main"
4289
  msgstr ""
4290
 
4291
- #: includes/admin/settings/register-settings.php:1402 includes/install.php:92
4292
  #: templates/widget-cart-checkout.php:6 templates/widget-cart-empty.php:7
4293
  msgid "Checkout"
4294
  msgstr ""
4295
 
4296
- #: includes/admin/settings/register-settings.php:1403
4297
  msgid "Button Text"
4298
  msgstr ""
4299
 
4300
- #: includes/admin/settings/register-settings.php:1405
4301
  msgid "Accounting"
4302
  msgstr ""
4303
 
4304
- #: includes/admin/settings/register-settings.php:1406
4305
  msgid "Terms of Agreement"
4306
  msgstr ""
4307
 
4308
- #: includes/admin/settings/register-settings.php:1410
4309
  msgid "Export & Erase"
4310
  msgstr ""
4311
 
4312
- #: includes/admin/settings/register-settings.php:1652
4313
  msgid ""
4314
  "Don't see what you need? More Payment Gateway options are available <a "
4315
  "href=\"%s\">here</a>."
4316
  msgstr ""
4317
 
4318
- #: includes/admin/settings/register-settings.php:1873
4319
  msgid "The callback function used for the %s setting is missing."
4320
  msgstr ""
4321
 
4322
- #: includes/admin/settings/register-settings.php:2031
4323
  msgid "Upload File"
4324
  msgstr ""
4325
 
4326
- #: includes/admin/settings/register-settings.php:2132
4327
  msgid "Country Wide"
4328
  msgstr ""
4329
 
4330
- #: includes/admin/settings/register-settings.php:2133
4331
  msgid "Rate"
4332
  msgstr ""
4333
 
4334
- #: includes/admin/settings/register-settings.php:2133
4335
  msgid ""
4336
  "<strong>Regional tax rates: </strong>When a customer enters an address on "
4337
  "checkout that matches the specified region for this tax rate, the cart tax "
4338
  "will adjust automatically. Enter a percentage, such as 6.5 for 6.5%."
4339
  msgstr ""
4340
 
4341
- #: includes/admin/settings/register-settings.php:2150
4342
- #: includes/admin/settings/register-settings.php:2195
4343
  msgid "Choose a country"
4344
  msgstr ""
4345
 
4346
- #: includes/admin/settings/register-settings.php:2165
4347
  msgid "Choose a state"
4348
  msgstr ""
4349
 
4350
- #: includes/admin/settings/register-settings.php:2177
4351
- #: includes/admin/settings/register-settings.php:2205
4352
  msgid "Apply to whole country"
4353
  msgstr ""
4354
 
4355
- #: includes/admin/settings/register-settings.php:2180
4356
- #: includes/admin/settings/register-settings.php:2208
4357
  msgid "Remove Rate"
4358
  msgstr ""
4359
 
4360
- #: includes/admin/settings/register-settings.php:2213
4361
  msgid "Add Tax Rate"
4362
  msgstr ""
4363
 
4364
- #: includes/admin/settings/register-settings.php:2266
4365
  msgid ""
4366
  "Your license key expired on %s. Please <a href=\"%s\" "
4367
  "target=\"_blank\">renew your license key</a>."
4368
  msgstr ""
4369
 
4370
- #: includes/admin/settings/register-settings.php:2279
4371
  msgid ""
4372
  "Your license key has been disabled. Please <a href=\"%s\" "
4373
  "target=\"_blank\">contact support</a> for more information."
4374
  msgstr ""
4375
 
4376
- #: includes/admin/settings/register-settings.php:2291
4377
  msgid ""
4378
  "Invalid license. Please <a href=\"%s\" target=\"_blank\">visit your account "
4379
  "page</a> and verify it."
4380
  msgstr ""
4381
 
4382
- #: includes/admin/settings/register-settings.php:2304
4383
  msgid ""
4384
  "Your %s is not active for this URL. Please <a href=\"%s\" "
4385
  "target=\"_blank\">visit your account page</a> to manage your license key "
4386
  "URLs."
4387
  msgstr ""
4388
 
4389
- #: includes/admin/settings/register-settings.php:2316
4390
  msgid "This appears to be an invalid license key for %s."
4391
  msgstr ""
4392
 
4393
- #: includes/admin/settings/register-settings.php:2325
4394
  msgid ""
4395
  "Your license key has reached its activation limit. <a href=\"%s\">View "
4396
  "possible upgrades</a> now."
4397
  msgstr ""
4398
 
4399
- #: includes/admin/settings/register-settings.php:2334
4400
  msgid ""
4401
  "The key you entered belongs to a bundle, please use the product specific "
4402
  "license key."
4403
  msgstr ""
4404
 
4405
- #: includes/admin/settings/register-settings.php:2342
4406
  msgid "unknown_error"
4407
  msgstr ""
4408
 
4409
- #: includes/admin/settings/register-settings.php:2343
4410
  msgid ""
4411
  "There was an error with this license key: %s. Please <a href=\"%s\">contact "
4412
  "our support team</a>."
4413
  msgstr ""
4414
 
4415
- #: includes/admin/settings/register-settings.php:2363
4416
  msgid "License key never expires."
4417
  msgstr ""
4418
 
4419
- #: includes/admin/settings/register-settings.php:2370
4420
  msgid ""
4421
  "Your license key expires soon! It expires on %s. <a href=\"%s\" "
4422
  "target=\"_blank\">Renew your license key</a>."
4423
  msgstr ""
4424
 
4425
- #: includes/admin/settings/register-settings.php:2380
4426
  msgid "Your license key expires on %s."
4427
  msgstr ""
4428
 
4429
- #: includes/admin/settings/register-settings.php:2398
4430
  msgid "To receive updates, please enter your valid %s license key."
4431
  msgstr ""
4432
 
4433
- #: includes/admin/settings/register-settings.php:2411
4434
  msgid "Deactivate License"
4435
  msgstr ""
4436
 
@@ -5055,16 +5061,48 @@ msgstr ""
5055
  msgid "Step %d of approximately %d running"
5056
  msgstr ""
5057
 
5058
- #: includes/ajax-functions.php:583 includes/ajax-functions.php:635
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5059
  msgid "No results found"
5060
  msgstr ""
5061
 
5062
- #: includes/ajax-functions.php:684 includes/ajax-functions.php:776
5063
  #: includes/class-edd-html-elements.php:339
5064
  msgid "No users found"
5065
  msgstr ""
5066
 
5067
- #: includes/ajax-functions.php:726
5068
  msgid "All Prices"
5069
  msgstr ""
5070
 
@@ -5126,27 +5164,27 @@ msgstr ""
5126
  msgid "No download logs found!"
5127
  msgstr ""
5128
 
5129
- #: includes/api/class-edd-api.php:1932 includes/user-functions.php:1068
5130
  msgid "Easy Digital Downloads API Keys"
5131
  msgstr ""
5132
 
5133
- #: includes/api/class-edd-api.php:1941 includes/user-functions.php:1073
5134
  msgid "Generate API Key"
5135
  msgstr ""
5136
 
5137
- #: includes/api/class-edd-api.php:1943 includes/user-functions.php:1075
5138
  msgid "Public key:"
5139
  msgstr ""
5140
 
5141
- #: includes/api/class-edd-api.php:1944 includes/user-functions.php:1076
5142
  msgid "Secret key:"
5143
  msgstr ""
5144
 
5145
- #: includes/api/class-edd-api.php:1945 includes/user-functions.php:1077
5146
  msgid "Token:"
5147
  msgstr ""
5148
 
5149
- #: includes/api/class-edd-api.php:1947 includes/user-functions.php:1079
5150
  msgid "Revoke API Keys"
5151
  msgstr ""
5152
 
@@ -5343,122 +5381,122 @@ msgstr ""
5343
  msgid "The state or province for your billing address."
5344
  msgstr ""
5345
 
5346
- #: includes/checkout/template.php:474
5347
  msgid "Already have an account?"
5348
  msgstr ""
5349
 
5350
- #: includes/checkout/template.php:474 includes/checkout/template.php:576
5351
  msgid "Login"
5352
  msgstr ""
5353
 
5354
- #: includes/checkout/template.php:480
5355
  msgid "Create an account"
5356
  msgstr ""
5357
 
5358
- #: includes/checkout/template.php:480
5359
  msgid "(optional)"
5360
  msgstr ""
5361
 
5362
- #: includes/checkout/template.php:489
5363
  msgid "The username you will use to log into your account."
5364
  msgstr ""
5365
 
5366
- #: includes/checkout/template.php:494 includes/checkout/template.php:500
5367
- #: includes/checkout/template.php:565 templates/shortcode-login.php:19
5368
  #: templates/shortcode-register.php:30
5369
  msgid "Password"
5370
  msgstr ""
5371
 
5372
- #: includes/checkout/template.php:499
5373
  msgid "The password used to access your account."
5374
  msgstr ""
5375
 
5376
- #: includes/checkout/template.php:504
5377
  msgid "Password Again"
5378
  msgstr ""
5379
 
5380
- #: includes/checkout/template.php:509
5381
  msgid "Confirm your password."
5382
  msgstr ""
5383
 
5384
- #: includes/checkout/template.php:510
5385
  msgid "Confirm password"
5386
  msgstr ""
5387
 
5388
- #: includes/checkout/template.php:547
5389
  msgid "Need to create an account?"
5390
  msgstr ""
5391
 
5392
- #: includes/checkout/template.php:549 templates/shortcode-register.php:46
5393
  msgid "Register"
5394
  msgstr ""
5395
 
5396
- #: includes/checkout/template.php:549
5397
  msgid "or checkout as a guest."
5398
  msgstr ""
5399
 
5400
- #: includes/checkout/template.php:556 templates/shortcode-login.php:15
5401
  msgid "Username or Email"
5402
  msgstr ""
5403
 
5404
- #: includes/checkout/template.php:561
5405
  msgid "Your username or email address"
5406
  msgstr ""
5407
 
5408
- #: includes/checkout/template.php:570
5409
  msgid "Your password"
5410
  msgstr ""
5411
 
5412
- #: includes/checkout/template.php:605
5413
  msgid "Select Payment Method"
5414
  msgstr ""
5415
 
5416
- #: includes/checkout/template.php:738
5417
  msgid "Have a discount code?"
5418
  msgstr ""
5419
 
5420
- #: includes/checkout/template.php:742
5421
  msgid "Discount"
5422
  msgstr ""
5423
 
5424
- #: includes/checkout/template.php:744
5425
  msgid "Enter a coupon code if you have one."
5426
  msgstr ""
5427
 
5428
- #: includes/checkout/template.php:746 includes/process-purchase.php:356
5429
  #: includes/scripts.php:67
5430
  msgid "Enter discount"
5431
  msgstr ""
5432
 
5433
- #: includes/checkout/template.php:769 includes/checkout/template.php:837
5434
  msgid "Agree to Terms?"
5435
  msgstr ""
5436
 
5437
- #: includes/checkout/template.php:782
5438
  msgid "Show Terms"
5439
  msgstr ""
5440
 
5441
- #: includes/checkout/template.php:783
5442
  msgid "Hide Terms"
5443
  msgstr ""
5444
 
5445
- #: includes/checkout/template.php:805 includes/checkout/template.php:862
5446
  msgid "Show Privacy Policy"
5447
  msgstr ""
5448
 
5449
- #: includes/checkout/template.php:806 includes/checkout/template.php:863
5450
  msgid "Hide Privacy Policy"
5451
  msgstr ""
5452
 
5453
- #: includes/checkout/template.php:893
5454
  msgid "Purchase Total:"
5455
  msgstr ""
5456
 
5457
- #: includes/checkout/template.php:919
5458
  msgid "Go back"
5459
  msgstr ""
5460
 
5461
- #: includes/checkout/template.php:942
5462
  msgid "Next"
5463
  msgstr ""
5464
 
@@ -5622,8 +5660,8 @@ msgstr ""
5622
  msgid "Customer User ID: %s"
5623
  msgstr ""
5624
 
5625
- #: includes/class-edd-cli.php:334 includes/user-functions.php:576
5626
- #: includes/user-functions.php:588
5627
  msgid "Username: %s"
5628
  msgstr ""
5629
 
@@ -6410,7 +6448,15 @@ msgstr ""
6410
  msgid "Receipt"
6411
  msgstr ""
6412
 
6413
- #: includes/gateways/actions.php:56
 
 
 
 
 
 
 
 
6414
  msgid "You must enable a payment gateway to use Easy Digital Downloads"
6415
  msgstr ""
6416
 
@@ -6521,12 +6567,12 @@ msgstr ""
6521
 
6522
  #: includes/gateways/amazon-payments.php:1094
6523
  #: includes/gateways/amazon-payments.php:1148
6524
- #: includes/gateways/paypal-standard.php:450
6525
- #: includes/gateways/paypal-standard.php:457
6526
- #: includes/gateways/paypal-standard.php:546
6527
- #: includes/gateways/paypal-standard.php:556
6528
- #: includes/gateways/paypal-standard.php:616
6529
- #: includes/gateways/paypal-standard.php:625
6530
  msgid "IPN Error"
6531
  msgstr ""
6532
 
@@ -6684,44 +6730,44 @@ msgstr ""
6684
  msgid "Payment creation failed before sending buyer to PayPal. Payment data: %s"
6685
  msgstr ""
6686
 
6687
- #: includes/gateways/paypal-standard.php:450
6688
- #: includes/gateways/paypal-standard.php:457
6689
  msgid "Invalid IPN verification response. IPN data: %s"
6690
  msgstr ""
6691
 
6692
- #: includes/gateways/paypal-standard.php:546
6693
  msgid "Invalid business email in IPN response. IPN data: %s"
6694
  msgstr ""
6695
 
6696
- #: includes/gateways/paypal-standard.php:549
6697
  msgid "Payment failed due to invalid PayPal business email."
6698
  msgstr ""
6699
 
6700
- #: includes/gateways/paypal-standard.php:556
6701
  msgid "Invalid currency in IPN response. IPN data: %s"
6702
  msgstr ""
6703
 
6704
- #: includes/gateways/paypal-standard.php:559
6705
  msgid "Payment failed due to invalid currency in PayPal IPN."
6706
  msgstr ""
6707
 
6708
- #: includes/gateways/paypal-standard.php:616
6709
  msgid "Invalid payment amount in IPN response. IPN data: %s"
6710
  msgstr ""
6711
 
6712
- #: includes/gateways/paypal-standard.php:619
6713
  msgid "Payment failed due to invalid amount in PayPal IPN."
6714
  msgstr ""
6715
 
6716
- #: includes/gateways/paypal-standard.php:625
6717
  msgid "Invalid purchase key in IPN response. IPN data: %s"
6718
  msgstr ""
6719
 
6720
- #: includes/gateways/paypal-standard.php:627
6721
  msgid "Payment failed due to invalid purchase key in PayPal IPN."
6722
  msgstr ""
6723
 
6724
- #: includes/gateways/paypal-standard.php:633
6725
  #: tests/helpers/class-helper-payment.php:131
6726
  #: tests/helpers/class-helper-payment.php:234
6727
  #: tests/helpers/class-helper-payment.php:342
@@ -6732,79 +6778,79 @@ msgstr ""
6732
  msgid "PayPal Transaction ID: %s"
6733
  msgstr ""
6734
 
6735
- #: includes/gateways/paypal-standard.php:647
6736
  msgid "Payment made via eCheck and will clear automatically in 5-8 days"
6737
  msgstr ""
6738
 
6739
- #: includes/gateways/paypal-standard.php:654
6740
  msgid ""
6741
  "Payment requires a confirmed customer address and must be accepted manually "
6742
  "through PayPal"
6743
  msgstr ""
6744
 
6745
- #: includes/gateways/paypal-standard.php:660
6746
  msgid ""
6747
  "Payment must be accepted manually through PayPal due to international "
6748
  "account regulations"
6749
  msgstr ""
6750
 
6751
- #: includes/gateways/paypal-standard.php:666
6752
  msgid ""
6753
  "Payment received in non-shop currency and must be accepted manually through "
6754
  "PayPal"
6755
  msgstr ""
6756
 
6757
- #: includes/gateways/paypal-standard.php:673
6758
  msgid ""
6759
  "Payment is being reviewed by PayPal staff as high-risk or in possible "
6760
  "violation of government regulations"
6761
  msgstr ""
6762
 
6763
- #: includes/gateways/paypal-standard.php:679
6764
  msgid "Payment was sent to non-confirmed or non-registered email address."
6765
  msgstr ""
6766
 
6767
- #: includes/gateways/paypal-standard.php:685
6768
  msgid "PayPal account must be upgraded before this payment can be accepted"
6769
  msgstr ""
6770
 
6771
- #: includes/gateways/paypal-standard.php:691
6772
  msgid ""
6773
  "PayPal account is not verified. Verify account in order to accept this "
6774
  "payment"
6775
  msgstr ""
6776
 
6777
- #: includes/gateways/paypal-standard.php:697
6778
  msgid ""
6779
  "Payment is pending for unknown reasons. Contact PayPal support for "
6780
  "assistance"
6781
  msgstr ""
6782
 
6783
- #: includes/gateways/paypal-standard.php:750
6784
  msgid "Partial PayPal refund processed: %s"
6785
  msgstr ""
6786
 
6787
- #: includes/gateways/paypal-standard.php:755
6788
  msgid "PayPal Payment #%s Refunded for reason: %s"
6789
  msgstr ""
6790
 
6791
- #: includes/gateways/paypal-standard.php:756
6792
  msgid "PayPal Refund Transaction ID: %s"
6793
  msgstr ""
6794
 
6795
- #: includes/gateways/paypal-standard.php:1014
6796
  msgid "Refund Payment in PayPal"
6797
  msgstr ""
6798
 
6799
- #: includes/gateways/paypal-standard.php:1161
6800
  msgid "PayPal refund failed for unknown reason."
6801
  msgstr ""
6802
 
6803
- #: includes/gateways/paypal-standard.php:1171
6804
  msgid "PayPal refund transaction ID: %s"
6805
  msgstr ""
6806
 
6807
- #: includes/gateways/paypal-standard.php:1175
6808
  msgid "PayPal refund failed: %s"
6809
  msgstr ""
6810
 
@@ -6824,16 +6870,16 @@ msgstr ""
6824
  msgid "The password you entered is incorrect"
6825
  msgstr ""
6826
 
6827
- #: includes/login-register.php:93 includes/process-purchase.php:694
6828
  msgid "The username you entered does not exist"
6829
  msgstr ""
6830
 
6831
  #: includes/login-register.php:147 includes/login-register.php:155
6832
- #: includes/process-purchase.php:572
6833
  msgid "Invalid username"
6834
  msgstr ""
6835
 
6836
- #: includes/login-register.php:151 includes/process-purchase.php:565
6837
  msgid "Username already taken"
6838
  msgstr ""
6839
 
@@ -6841,8 +6887,8 @@ msgstr ""
6841
  msgid "Email address already taken"
6842
  msgstr ""
6843
 
6844
- #: includes/login-register.php:163 includes/process-purchase.php:512
6845
- #: includes/process-purchase.php:587 includes/process-purchase.php:727
6846
  msgid "Invalid email"
6847
  msgstr ""
6848
 
@@ -7565,105 +7611,133 @@ msgstr ""
7565
  msgid "Your cart is empty"
7566
  msgstr ""
7567
 
7568
- #: includes/process-purchase.php:198
 
 
 
 
 
 
 
 
 
 
 
 
7569
  msgid "The email address %s is already in use."
7570
  msgstr ""
7571
 
7572
- #: includes/process-purchase.php:323
 
 
 
 
 
 
 
 
 
 
 
 
7573
  msgid "The selected payment gateway is not enabled"
7574
  msgstr ""
7575
 
7576
- #: includes/process-purchase.php:383
7577
  msgid "One or more of the discounts you entered is invalid"
7578
  msgstr ""
7579
 
7580
- #: includes/process-purchase.php:400
7581
  msgid "You must agree to the terms of use"
7582
  msgstr ""
7583
 
7584
- #: includes/process-purchase.php:414
7585
  msgid "You must agree to the privacy policy"
7586
  msgstr ""
7587
 
7588
- #: includes/process-purchase.php:429
7589
  msgid "Please enter a valid email address"
7590
  msgstr ""
7591
 
7592
- #: includes/process-purchase.php:433
7593
  msgid "Please enter your first name"
7594
  msgstr ""
7595
 
7596
- #: includes/process-purchase.php:443
7597
  msgid "Please enter your zip / postal code"
7598
  msgstr ""
7599
 
7600
- #: includes/process-purchase.php:447
7601
  msgid "Please enter your billing city"
7602
  msgstr ""
7603
 
7604
- #: includes/process-purchase.php:451
7605
  msgid "Please select your billing country"
7606
  msgstr ""
7607
 
7608
- #: includes/process-purchase.php:455
7609
  msgid "Please enter billing state / province"
7610
  msgstr ""
7611
 
7612
- #: includes/process-purchase.php:517 includes/process-purchase.php:838
7613
  msgid "The user information is invalid"
7614
  msgstr ""
7615
 
7616
- #: includes/process-purchase.php:570
7617
  msgid "Invalid username. Only lowercase letters (a-z) and numbers are allowed"
7618
  msgstr ""
7619
 
7620
- #: includes/process-purchase.php:579
7621
  msgid "You must register or login to complete your purchase"
7622
  msgstr ""
7623
 
7624
- #: includes/process-purchase.php:592
 
 
 
 
7625
  msgid ""
7626
  "Email already used. Login or use a different email to complete your "
7627
  "purchase."
7628
  msgstr ""
7629
 
7630
- #: includes/process-purchase.php:600 includes/process-purchase.php:734
7631
  msgid "Enter an email"
7632
  msgstr ""
7633
 
7634
- #: includes/process-purchase.php:608
7635
  msgid "Passwords don't match"
7636
  msgstr ""
7637
 
7638
- #: includes/process-purchase.php:617 includes/process-purchase.php:690
7639
  msgid "Enter a password"
7640
  msgstr ""
7641
 
7642
- #: includes/process-purchase.php:620
7643
  msgid "Enter the password confirmation"
7644
  msgstr ""
7645
 
7646
- #: includes/process-purchase.php:644
7647
  msgid "You must log in or register to complete your purchase"
7648
  msgstr ""
7649
 
7650
- #: includes/process-purchase.php:671
7651
  msgid "The password you entered is incorrect. %sReset Password%s"
7652
  msgstr ""
7653
 
7654
- #: includes/process-purchase.php:716
7655
  msgid "You must be logged into an account to purchase"
7656
  msgstr ""
7657
 
7658
- #: includes/process-purchase.php:902
7659
  msgid "The zip / postal code you entered for your billing address is invalid"
7660
  msgstr ""
7661
 
7662
- #: includes/process-purchase.php:1151
7663
  msgid "An internal error has occurred, please try again or contact support."
7664
  msgstr ""
7665
 
7666
- #: includes/process-purchase.php:1187
7667
  msgid "There was an error completing your purchase. Please try again."
7668
  msgstr ""
7669
 
@@ -7925,51 +7999,51 @@ msgstr ""
7925
  msgid "Plain Text"
7926
  msgstr ""
7927
 
7928
- #: includes/user-functions.php:574
7929
  msgid "[%s] New User Registration"
7930
  msgstr ""
7931
 
7932
- #: includes/user-functions.php:575
7933
  msgid "New user registration"
7934
  msgstr ""
7935
 
7936
- #: includes/user-functions.php:577
7937
  msgid "E-mail: %s"
7938
  msgstr ""
7939
 
7940
- #: includes/user-functions.php:586
7941
  msgid "[%s] Your username and password"
7942
  msgstr ""
7943
 
7944
- #: includes/user-functions.php:587
7945
  msgid "Your account info"
7946
  msgstr ""
7947
 
7948
- #: includes/user-functions.php:591
7949
  msgid "Password entered at checkout"
7950
  msgstr ""
7951
 
7952
- #: includes/user-functions.php:593
7953
  msgid "Password entered at registration"
7954
  msgstr ""
7955
 
7956
- #: includes/user-functions.php:596
7957
  msgid "Password: %s"
7958
  msgstr ""
7959
 
7960
- #: includes/user-functions.php:601
7961
  msgid "Click here to log in"
7962
  msgstr ""
7963
 
7964
- #: includes/user-functions.php:605
7965
  msgid "To log in, visit: %s"
7966
  msgstr ""
7967
 
7968
- #: includes/user-functions.php:759 includes/user-functions.php:760
7969
  msgid "Verify your account"
7970
  msgstr ""
7971
 
7972
- #: includes/user-functions.php:762
7973
  msgid ""
7974
  "Hello %s,\n"
7975
  "\n"
@@ -7979,33 +8053,33 @@ msgid ""
7979
  "Link missing? Visit the following URL: %s"
7980
  msgstr ""
7981
 
7982
- #: includes/user-functions.php:887
7983
  msgid ""
7984
  "Sorry but your account verification link has expired. <a href=\"%s\">Click "
7985
  "here</a> to request a new verification URL."
7986
  msgstr ""
7987
 
7988
- #: includes/user-functions.php:920
7989
  msgid "You must be logged in to verify your account."
7990
  msgstr ""
7991
 
7992
- #: includes/user-functions.php:920 includes/user-functions.php:924
7993
  msgid "Notice"
7994
  msgstr ""
7995
 
7996
- #: includes/user-functions.php:924
7997
  msgid "Your account has already been verified."
7998
  msgstr ""
7999
 
8000
- #: includes/user-functions.php:969
8001
  msgid "Invalid verification token provided."
8002
  msgstr ""
8003
 
8004
- #: includes/user-functions.php:1091
8005
  msgid "Easy Digital Downloads <a href=\"%s\">iOS App</a>"
8006
  msgstr ""
8007
 
8008
- #: includes/user-functions.php:1098
8009
  msgid "Add to iOS App"
8010
  msgstr ""
8011
 
@@ -8391,12 +8465,12 @@ msgctxt ""
8391
  msgid "%s Payments"
8392
  msgstr ""
8393
 
8394
- #: includes/checkout/template.php:738
8395
  msgctxt "Entering a discount code"
8396
  msgid "Click to enter it"
8397
  msgstr ""
8398
 
8399
- #: includes/checkout/template.php:747
8400
  msgctxt "Apply discount at checkout"
8401
  msgid "Apply"
8402
  msgstr ""
2
  # This file is distributed under the same license as the Easy Digital Downloads package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Easy Digital Downloads 2.9.4\n"
6
  "Report-Msgid-Bugs-To: https://easydigitaldownloads.com/\n"
7
+ "POT-Creation-Date: 2018-07-09 21:34:14+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
59
  #: includes/admin/import/class-batch-import-payments.php:76
60
  #: includes/admin/import/class-batch-import.php:156
61
  #: includes/admin/payments/actions.php:25
62
+ #: includes/admin/payments/actions.php:295
63
+ #: includes/admin/payments/actions.php:318
64
+ #: includes/admin/payments/actions.php:334
65
+ #: includes/admin/payments/actions.php:361
66
+ #: includes/admin/payments/actions.php:381
67
  #: includes/admin/payments/view-order-details.php:22
68
  #: includes/admin/payments/view-order-details.php:32
69
  #: includes/admin/reporting/class-api-requests-logs-list-table.php:142
98
  #: includes/error-tracking.php:40 includes/gateways/functions.php:221
99
  #: includes/gateways/manual.php:33 includes/gateways/paypal-standard.php:168
100
  #: includes/process-download.php:293 includes/process-download.php:881
101
+ #: includes/query-filters.php:48 includes/user-functions.php:895
102
+ #: includes/user-functions.php:920 includes/user-functions.php:973
103
  msgid "Error"
104
  msgstr ""
105
 
196
 
197
  #: includes/admin/admin-pages.php:43 includes/admin/plugins.php:57
198
  #: includes/admin/settings/contextual-help.php:87
199
+ #: includes/admin/settings/register-settings.php:1338
200
  msgid "Extensions"
201
  msgstr ""
202
 
226
  msgstr ""
227
 
228
  #: includes/admin/class-api-keys-table.php:170
229
+ #: includes/checkout/template.php:490 includes/checkout/template.php:496
230
  #: templates/shortcode-register.php:20
231
  msgid "Username"
232
  msgstr ""
515
  msgstr ""
516
 
517
  #: includes/admin/customers/customer-actions.php:207
518
+ #: includes/user-functions.php:920
519
  msgid "Nonce verification failed."
520
  msgstr ""
521
 
639
  msgstr ""
640
 
641
  #: includes/admin/customers/customers.php:269
642
+ #: includes/admin/settings/register-settings.php:2139
643
  #: includes/admin/tools.php:695 includes/checkout/template.php:435
644
  #: templates/shortcode-profile-editor.php:171
645
  msgid "State / Province"
744
  #: includes/admin/downloads/metabox.php:698
745
  #: includes/admin/downloads/metabox.php:823
746
  #: includes/admin/payments/view-order-details.php:490
747
+ #: includes/admin/settings/register-settings.php:2142 includes/scripts.php:227
748
  #: templates/checkout_cart.php:57 templates/checkout_cart.php:75
749
  #: templates/shortcode-profile-editor.php:123
750
  msgid "Remove"
1253
 
1254
  #: includes/admin/discounts/contextual-help.php:38
1255
  #: includes/admin/settings/contextual-help.php:42
1256
+ #: includes/admin/settings/register-settings.php:1330
 
 
1257
  #: includes/admin/settings/register-settings.php:1386
1258
  #: includes/admin/settings/register-settings.php:1391
1259
+ #: includes/admin/settings/register-settings.php:1395
1260
+ #: includes/admin/settings/register-settings.php:1400
1261
+ #: includes/admin/settings/register-settings.php:1403
1262
+ #: includes/admin/settings/register-settings.php:1418
1263
  #: includes/admin/tools.php:68
1264
  msgid "General"
1265
  msgstr ""
1765
 
1766
  #: includes/admin/downloads/metabox.php:1031
1767
  #: includes/admin/settings/register-settings.php:744
1768
+ #: includes/admin/thickbox.php:59 includes/checkout/template.php:984
1769
  #: includes/shortcodes.php:49 includes/template-functions.php:78
1770
  msgid "Purchase"
1771
  msgstr ""
1776
 
1777
  #: includes/admin/downloads/metabox.php:1039
1778
  msgid ""
1779
+ "<strong>Purchase Shortcode</strong>: Use this shortcode to output a "
1780
+ "purchase link for this product in the location of your choosing."
1781
  msgstr ""
1782
 
1783
  #: includes/admin/downloads/metabox.php:1060
1910
  msgstr ""
1911
 
1912
  #: includes/admin/payments/actions.php:25
1913
+ #: includes/admin/payments/actions.php:318
1914
+ #: includes/admin/payments/actions.php:334
1915
+ #: includes/admin/payments/actions.php:361
1916
+ #: includes/admin/payments/actions.php:381 includes/emails/actions.php:53
1917
  msgid "You do not have permission to edit this payment record"
1918
  msgstr ""
1919
 
1925
  msgid "Error creating new customer"
1926
  msgstr ""
1927
 
1928
+ #: includes/admin/payments/actions.php:195
1929
+ msgid ""
1930
+ "A customer with the email address %s already exists. Please go back and use "
1931
+ "the \"Assign to another customer\" link to assign this payment to them."
1932
+ msgstr ""
1933
+
1934
+ #: includes/admin/payments/actions.php:295
1935
  msgid "Error Updating Payment"
1936
  msgstr ""
1937
 
2611
 
2612
  #: includes/admin/reporting/class-export-payments.php:68
2613
  #: includes/admin/reporting/export/class-batch-export-payments.php:49
2614
+ #: includes/admin/settings/register-settings.php:2138
2615
  #: includes/admin/tools.php:713 templates/shortcode-profile-editor.php:162
2616
  msgid "Country"
2617
  msgstr ""
2876
 
2877
  #: includes/admin/reporting/export/class-batch-export-payments.php:62
2878
  #: includes/admin/settings/register-settings.php:352
2879
+ #: includes/admin/settings/register-settings.php:1387
2880
  msgid "Currency"
2881
  msgstr ""
2882
 
3008
  msgstr ""
3009
 
3010
  #: includes/admin/reporting/logs.php:144
3011
+ #: includes/admin/settings/register-settings.php:1413
3012
  #: includes/privacy-functions.php:544
3013
  msgid "File Downloads"
3014
  msgstr ""
3039
 
3040
  #: includes/admin/reporting/reports.php:59
3041
  #: includes/admin/settings/contextual-help.php:71
3042
+ #: includes/admin/settings/register-settings.php:1334
3043
  msgid "Taxes"
3044
  msgstr ""
3045
 
3186
 
3187
  #: includes/admin/settings/contextual-help.php:48
3188
  #: includes/admin/settings/register-settings.php:420
3189
+ #: includes/admin/settings/register-settings.php:1331
3190
  msgid "Payment Gateways"
3191
  msgstr ""
3192
 
3215
  msgstr ""
3216
 
3217
  #: includes/admin/settings/contextual-help.php:57
3218
+ #: includes/admin/settings/register-settings.php:1332
3219
  msgid "Emails"
3220
  msgstr ""
3221
 
3235
  msgstr ""
3236
 
3237
  #: includes/admin/settings/contextual-help.php:65
3238
+ #: includes/admin/settings/register-settings.php:1333
3239
  msgid "Styles"
3240
  msgstr ""
3241
 
3318
  msgstr ""
3319
 
3320
  #: includes/admin/settings/contextual-help.php:93
3321
+ #: includes/admin/settings/register-settings.php:1410
3322
  msgid "Miscellaneous"
3323
  msgstr ""
3324
 
3495
  msgstr ""
3496
 
3497
  #: includes/admin/settings/register-settings.php:388
3498
+ #: includes/admin/settings/register-settings.php:1388
3499
  msgid "API"
3500
  msgstr ""
3501
 
3998
  msgstr ""
3999
 
4000
  #: includes/admin/settings/register-settings.php:751
4001
+ #: includes/checkout/template.php:987
4002
  msgid "Free Download"
4003
  msgstr ""
4004
 
4257
  msgid "Settings updated."
4258
  msgstr ""
4259
 
4260
+ #: includes/admin/settings/register-settings.php:1223
4261
  msgid "Error setting default gateway. No gateways are enabled."
4262
  msgstr ""
4263
 
4264
+ #: includes/admin/settings/register-settings.php:1236
4265
  msgid "%s could not be set as the default gateway. It must first be enabled."
4266
  msgstr ""
4267
 
4268
+ #: includes/admin/settings/register-settings.php:1335
4269
  msgid "Privacy"
4270
  msgstr ""
4271
 
4272
+ #: includes/admin/settings/register-settings.php:1341
4273
  msgid "Licenses"
4274
  msgstr ""
4275
 
4276
+ #: includes/admin/settings/register-settings.php:1344
4277
  msgid "Misc"
4278
  msgstr ""
4279
 
4280
+ #: includes/admin/settings/register-settings.php:1392
4281
  #: includes/gateways/functions.php:25 includes/gateways/paypal-standard.php:33
4282
  msgid "PayPal Standard"
4283
  msgstr ""
4284
 
4285
+ #: includes/admin/settings/register-settings.php:1396
4286
  msgid "Purchase Receipts"
4287
  msgstr ""
4288
 
4289
+ #: includes/admin/settings/register-settings.php:1397
4290
  msgid "New Sale Notifications"
4291
  msgstr ""
4292
 
4293
+ #: includes/admin/settings/register-settings.php:1406
4294
  msgid "Main"
4295
  msgstr ""
4296
 
4297
+ #: includes/admin/settings/register-settings.php:1411 includes/install.php:92
4298
  #: templates/widget-cart-checkout.php:6 templates/widget-cart-empty.php:7
4299
  msgid "Checkout"
4300
  msgstr ""
4301
 
4302
+ #: includes/admin/settings/register-settings.php:1412
4303
  msgid "Button Text"
4304
  msgstr ""
4305
 
4306
+ #: includes/admin/settings/register-settings.php:1414
4307
  msgid "Accounting"
4308
  msgstr ""
4309
 
4310
+ #: includes/admin/settings/register-settings.php:1415
4311
  msgid "Terms of Agreement"
4312
  msgstr ""
4313
 
4314
+ #: includes/admin/settings/register-settings.php:1419
4315
  msgid "Export & Erase"
4316
  msgstr ""
4317
 
4318
+ #: includes/admin/settings/register-settings.php:1661
4319
  msgid ""
4320
  "Don't see what you need? More Payment Gateway options are available <a "
4321
  "href=\"%s\">here</a>."
4322
  msgstr ""
4323
 
4324
+ #: includes/admin/settings/register-settings.php:1882
4325
  msgid "The callback function used for the %s setting is missing."
4326
  msgstr ""
4327
 
4328
+ #: includes/admin/settings/register-settings.php:2040
4329
  msgid "Upload File"
4330
  msgstr ""
4331
 
4332
+ #: includes/admin/settings/register-settings.php:2140
4333
  msgid "Country Wide"
4334
  msgstr ""
4335
 
4336
+ #: includes/admin/settings/register-settings.php:2141
4337
  msgid "Rate"
4338
  msgstr ""
4339
 
4340
+ #: includes/admin/settings/register-settings.php:2141
4341
  msgid ""
4342
  "<strong>Regional tax rates: </strong>When a customer enters an address on "
4343
  "checkout that matches the specified region for this tax rate, the cart tax "
4344
  "will adjust automatically. Enter a percentage, such as 6.5 for 6.5%."
4345
  msgstr ""
4346
 
4347
+ #: includes/admin/settings/register-settings.php:2158
4348
+ #: includes/admin/settings/register-settings.php:2203
4349
  msgid "Choose a country"
4350
  msgstr ""
4351
 
4352
+ #: includes/admin/settings/register-settings.php:2173
4353
  msgid "Choose a state"
4354
  msgstr ""
4355
 
4356
+ #: includes/admin/settings/register-settings.php:2185
4357
+ #: includes/admin/settings/register-settings.php:2213
4358
  msgid "Apply to whole country"
4359
  msgstr ""
4360
 
4361
+ #: includes/admin/settings/register-settings.php:2188
4362
+ #: includes/admin/settings/register-settings.php:2216
4363
  msgid "Remove Rate"
4364
  msgstr ""
4365
 
4366
+ #: includes/admin/settings/register-settings.php:2221
4367
  msgid "Add Tax Rate"
4368
  msgstr ""
4369
 
4370
+ #: includes/admin/settings/register-settings.php:2274
4371
  msgid ""
4372
  "Your license key expired on %s. Please <a href=\"%s\" "
4373
  "target=\"_blank\">renew your license key</a>."
4374
  msgstr ""
4375
 
4376
+ #: includes/admin/settings/register-settings.php:2287
4377
  msgid ""
4378
  "Your license key has been disabled. Please <a href=\"%s\" "
4379
  "target=\"_blank\">contact support</a> for more information."
4380
  msgstr ""
4381
 
4382
+ #: includes/admin/settings/register-settings.php:2299
4383
  msgid ""
4384
  "Invalid license. Please <a href=\"%s\" target=\"_blank\">visit your account "
4385
  "page</a> and verify it."
4386
  msgstr ""
4387
 
4388
+ #: includes/admin/settings/register-settings.php:2312
4389
  msgid ""
4390
  "Your %s is not active for this URL. Please <a href=\"%s\" "
4391
  "target=\"_blank\">visit your account page</a> to manage your license key "
4392
  "URLs."
4393
  msgstr ""
4394
 
4395
+ #: includes/admin/settings/register-settings.php:2324
4396
  msgid "This appears to be an invalid license key for %s."
4397
  msgstr ""
4398
 
4399
+ #: includes/admin/settings/register-settings.php:2333
4400
  msgid ""
4401
  "Your license key has reached its activation limit. <a href=\"%s\">View "
4402
  "possible upgrades</a> now."
4403
  msgstr ""
4404
 
4405
+ #: includes/admin/settings/register-settings.php:2342
4406
  msgid ""
4407
  "The key you entered belongs to a bundle, please use the product specific "
4408
  "license key."
4409
  msgstr ""
4410
 
4411
+ #: includes/admin/settings/register-settings.php:2350
4412
  msgid "unknown_error"
4413
  msgstr ""
4414
 
4415
+ #: includes/admin/settings/register-settings.php:2351
4416
  msgid ""
4417
  "There was an error with this license key: %s. Please <a href=\"%s\">contact "
4418
  "our support team</a>."
4419
  msgstr ""
4420
 
4421
+ #: includes/admin/settings/register-settings.php:2371
4422
  msgid "License key never expires."
4423
  msgstr ""
4424
 
4425
+ #: includes/admin/settings/register-settings.php:2378
4426
  msgid ""
4427
  "Your license key expires soon! It expires on %s. <a href=\"%s\" "
4428
  "target=\"_blank\">Renew your license key</a>."
4429
  msgstr ""
4430
 
4431
+ #: includes/admin/settings/register-settings.php:2388
4432
  msgid "Your license key expires on %s."
4433
  msgstr ""
4434
 
4435
+ #: includes/admin/settings/register-settings.php:2406
4436
  msgid "To receive updates, please enter your valid %s license key."
4437
  msgstr ""
4438
 
4439
+ #: includes/admin/settings/register-settings.php:2419
4440
  msgid "Deactivate License"
4441
  msgstr ""
4442
 
5061
  msgid "Step %d of approximately %d running"
5062
  msgstr ""
5063
 
5064
+ #: includes/ajax-functions.php:143 includes/cart/actions.php:110
5065
+ msgid ""
5066
+ "Missing nonce when removing an item from the cart. Please read the "
5067
+ "following for more information: "
5068
+ "https://easydigitaldownloads.com/development/2018/07/05/important-update-to-"
5069
+ "ajax-requests-in-easy-digital-downloads-2-9-4"
5070
+ msgstr ""
5071
+
5072
+ #: includes/ajax-functions.php:190
5073
+ msgid ""
5074
+ "Missing nonce when adding an item to the cart. Please read the following "
5075
+ "for more information: "
5076
+ "https://easydigitaldownloads.com/development/2018/07/05/important-update-to-"
5077
+ "ajax-requests-in-easy-digital-downloads-2-9-4"
5078
+ msgstr ""
5079
+
5080
+ #: includes/ajax-functions.php:471
5081
+ msgid ""
5082
+ "Missing nonce when recalculating taxes. Please read the following for more "
5083
+ "information: "
5084
+ "https://easydigitaldownloads.com/development/2018/07/05/important-update-to-"
5085
+ "ajax-requests-in-easy-digital-downloads-2-9-4"
5086
+ msgstr ""
5087
+
5088
+ #: includes/ajax-functions.php:521
5089
+ msgid ""
5090
+ "Missing nonce when retrieving state list. Please read the following for "
5091
+ "more information: "
5092
+ "https://easydigitaldownloads.com/development/2018/07/05/important-update-to-"
5093
+ "ajax-requests-in-easy-digital-downloads-2-9-4"
5094
+ msgstr ""
5095
+
5096
+ #: includes/ajax-functions.php:651 includes/ajax-functions.php:703
5097
  msgid "No results found"
5098
  msgstr ""
5099
 
5100
+ #: includes/ajax-functions.php:752 includes/ajax-functions.php:844
5101
  #: includes/class-edd-html-elements.php:339
5102
  msgid "No users found"
5103
  msgstr ""
5104
 
5105
+ #: includes/ajax-functions.php:794
5106
  msgid "All Prices"
5107
  msgstr ""
5108
 
5164
  msgid "No download logs found!"
5165
  msgstr ""
5166
 
5167
+ #: includes/api/class-edd-api.php:1932 includes/user-functions.php:1072
5168
  msgid "Easy Digital Downloads API Keys"
5169
  msgstr ""
5170
 
5171
+ #: includes/api/class-edd-api.php:1941 includes/user-functions.php:1077
5172
  msgid "Generate API Key"
5173
  msgstr ""
5174
 
5175
+ #: includes/api/class-edd-api.php:1943 includes/user-functions.php:1079
5176
  msgid "Public key:"
5177
  msgstr ""
5178
 
5179
+ #: includes/api/class-edd-api.php:1944 includes/user-functions.php:1080
5180
  msgid "Secret key:"
5181
  msgstr ""
5182
 
5183
+ #: includes/api/class-edd-api.php:1945 includes/user-functions.php:1081
5184
  msgid "Token:"
5185
  msgstr ""
5186
 
5187
+ #: includes/api/class-edd-api.php:1947 includes/user-functions.php:1083
5188
  msgid "Revoke API Keys"
5189
  msgstr ""
5190
 
5381
  msgid "The state or province for your billing address."
5382
  msgstr ""
5383
 
5384
+ #: includes/checkout/template.php:476
5385
  msgid "Already have an account?"
5386
  msgstr ""
5387
 
5388
+ #: includes/checkout/template.php:478 includes/checkout/template.php:582
5389
  msgid "Login"
5390
  msgstr ""
5391
 
5392
+ #: includes/checkout/template.php:486
5393
  msgid "Create an account"
5394
  msgstr ""
5395
 
5396
+ #: includes/checkout/template.php:486
5397
  msgid "(optional)"
5398
  msgstr ""
5399
 
5400
+ #: includes/checkout/template.php:495
5401
  msgid "The username you will use to log into your account."
5402
  msgstr ""
5403
 
5404
+ #: includes/checkout/template.php:500 includes/checkout/template.php:506
5405
+ #: includes/checkout/template.php:571 templates/shortcode-login.php:19
5406
  #: templates/shortcode-register.php:30
5407
  msgid "Password"
5408
  msgstr ""
5409
 
5410
+ #: includes/checkout/template.php:505
5411
  msgid "The password used to access your account."
5412
  msgstr ""
5413
 
5414
+ #: includes/checkout/template.php:510
5415
  msgid "Password Again"
5416
  msgstr ""
5417
 
5418
+ #: includes/checkout/template.php:515
5419
  msgid "Confirm your password."
5420
  msgstr ""
5421
 
5422
+ #: includes/checkout/template.php:516
5423
  msgid "Confirm password"
5424
  msgstr ""
5425
 
5426
+ #: includes/checkout/template.php:553
5427
  msgid "Need to create an account?"
5428
  msgstr ""
5429
 
5430
+ #: includes/checkout/template.php:555 templates/shortcode-register.php:46
5431
  msgid "Register"
5432
  msgstr ""
5433
 
5434
+ #: includes/checkout/template.php:555
5435
  msgid "or checkout as a guest."
5436
  msgstr ""
5437
 
5438
+ #: includes/checkout/template.php:562 templates/shortcode-login.php:15
5439
  msgid "Username or Email"
5440
  msgstr ""
5441
 
5442
+ #: includes/checkout/template.php:567
5443
  msgid "Your username or email address"
5444
  msgstr ""
5445
 
5446
+ #: includes/checkout/template.php:576
5447
  msgid "Your password"
5448
  msgstr ""
5449
 
5450
+ #: includes/checkout/template.php:612
5451
  msgid "Select Payment Method"
5452
  msgstr ""
5453
 
5454
+ #: includes/checkout/template.php:746
5455
  msgid "Have a discount code?"
5456
  msgstr ""
5457
 
5458
+ #: includes/checkout/template.php:750
5459
  msgid "Discount"
5460
  msgstr ""
5461
 
5462
+ #: includes/checkout/template.php:752
5463
  msgid "Enter a coupon code if you have one."
5464
  msgstr ""
5465
 
5466
+ #: includes/checkout/template.php:754 includes/process-purchase.php:386
5467
  #: includes/scripts.php:67
5468
  msgid "Enter discount"
5469
  msgstr ""
5470
 
5471
+ #: includes/checkout/template.php:777 includes/checkout/template.php:845
5472
  msgid "Agree to Terms?"
5473
  msgstr ""
5474
 
5475
+ #: includes/checkout/template.php:790
5476
  msgid "Show Terms"
5477
  msgstr ""
5478
 
5479
+ #: includes/checkout/template.php:791
5480
  msgid "Hide Terms"
5481
  msgstr ""
5482
 
5483
+ #: includes/checkout/template.php:813 includes/checkout/template.php:870
5484
  msgid "Show Privacy Policy"
5485
  msgstr ""
5486
 
5487
+ #: includes/checkout/template.php:814 includes/checkout/template.php:871
5488
  msgid "Hide Privacy Policy"
5489
  msgstr ""
5490
 
5491
+ #: includes/checkout/template.php:901
5492
  msgid "Purchase Total:"
5493
  msgstr ""
5494
 
5495
+ #: includes/checkout/template.php:927
5496
  msgid "Go back"
5497
  msgstr ""
5498
 
5499
+ #: includes/checkout/template.php:950
5500
  msgid "Next"
5501
  msgstr ""
5502
 
5660
  msgid "Customer User ID: %s"
5661
  msgstr ""
5662
 
5663
+ #: includes/class-edd-cli.php:334 includes/user-functions.php:580
5664
+ #: includes/user-functions.php:592
5665
  msgid "Username: %s"
5666
  msgstr ""
5667
 
6448
  msgid "Receipt"
6449
  msgstr ""
6450
 
6451
+ #: includes/gateways/actions.php:37
6452
+ msgid ""
6453
+ "Missing nonce when loading the gateway fields. Please read the following "
6454
+ "for more information: "
6455
+ "https://easydigitaldownloads.com/development/2018/07/05/important-update-to-"
6456
+ "ajax-requests-in-easy-digital-downloads-2-9-4"
6457
+ msgstr ""
6458
+
6459
+ #: includes/gateways/actions.php:68
6460
  msgid "You must enable a payment gateway to use Easy Digital Downloads"
6461
  msgstr ""
6462
 
6567
 
6568
  #: includes/gateways/amazon-payments.php:1094
6569
  #: includes/gateways/amazon-payments.php:1148
6570
+ #: includes/gateways/paypal-standard.php:462
6571
+ #: includes/gateways/paypal-standard.php:469
6572
+ #: includes/gateways/paypal-standard.php:558
6573
+ #: includes/gateways/paypal-standard.php:568
6574
+ #: includes/gateways/paypal-standard.php:628
6575
+ #: includes/gateways/paypal-standard.php:637
6576
  msgid "IPN Error"
6577
  msgstr ""
6578
 
6730
  msgid "Payment creation failed before sending buyer to PayPal. Payment data: %s"
6731
  msgstr ""
6732
 
6733
+ #: includes/gateways/paypal-standard.php:462
6734
+ #: includes/gateways/paypal-standard.php:469
6735
  msgid "Invalid IPN verification response. IPN data: %s"
6736
  msgstr ""
6737
 
6738
+ #: includes/gateways/paypal-standard.php:558
6739
  msgid "Invalid business email in IPN response. IPN data: %s"
6740
  msgstr ""
6741
 
6742
+ #: includes/gateways/paypal-standard.php:561
6743
  msgid "Payment failed due to invalid PayPal business email."
6744
  msgstr ""
6745
 
6746
+ #: includes/gateways/paypal-standard.php:568
6747
  msgid "Invalid currency in IPN response. IPN data: %s"
6748
  msgstr ""
6749
 
6750
+ #: includes/gateways/paypal-standard.php:571
6751
  msgid "Payment failed due to invalid currency in PayPal IPN."
6752
  msgstr ""
6753
 
6754
+ #: includes/gateways/paypal-standard.php:628
6755
  msgid "Invalid payment amount in IPN response. IPN data: %s"
6756
  msgstr ""
6757
 
6758
+ #: includes/gateways/paypal-standard.php:631
6759
  msgid "Payment failed due to invalid amount in PayPal IPN."
6760
  msgstr ""
6761
 
6762
+ #: includes/gateways/paypal-standard.php:637
6763
  msgid "Invalid purchase key in IPN response. IPN data: %s"
6764
  msgstr ""
6765
 
6766
+ #: includes/gateways/paypal-standard.php:639
6767
  msgid "Payment failed due to invalid purchase key in PayPal IPN."
6768
  msgstr ""
6769
 
6770
+ #: includes/gateways/paypal-standard.php:645
6771
  #: tests/helpers/class-helper-payment.php:131
6772
  #: tests/helpers/class-helper-payment.php:234
6773
  #: tests/helpers/class-helper-payment.php:342
6778
  msgid "PayPal Transaction ID: %s"
6779
  msgstr ""
6780
 
6781
+ #: includes/gateways/paypal-standard.php:659
6782
  msgid "Payment made via eCheck and will clear automatically in 5-8 days"
6783
  msgstr ""
6784
 
6785
+ #: includes/gateways/paypal-standard.php:666
6786
  msgid ""
6787
  "Payment requires a confirmed customer address and must be accepted manually "
6788
  "through PayPal"
6789
  msgstr ""
6790
 
6791
+ #: includes/gateways/paypal-standard.php:672
6792
  msgid ""
6793
  "Payment must be accepted manually through PayPal due to international "
6794
  "account regulations"
6795
  msgstr ""
6796
 
6797
+ #: includes/gateways/paypal-standard.php:678
6798
  msgid ""
6799
  "Payment received in non-shop currency and must be accepted manually through "
6800
  "PayPal"
6801
  msgstr ""
6802
 
6803
+ #: includes/gateways/paypal-standard.php:685
6804
  msgid ""
6805
  "Payment is being reviewed by PayPal staff as high-risk or in possible "
6806
  "violation of government regulations"
6807
  msgstr ""
6808
 
6809
+ #: includes/gateways/paypal-standard.php:691
6810
  msgid "Payment was sent to non-confirmed or non-registered email address."
6811
  msgstr ""
6812
 
6813
+ #: includes/gateways/paypal-standard.php:697
6814
  msgid "PayPal account must be upgraded before this payment can be accepted"
6815
  msgstr ""
6816
 
6817
+ #: includes/gateways/paypal-standard.php:703
6818
  msgid ""
6819
  "PayPal account is not verified. Verify account in order to accept this "
6820
  "payment"
6821
  msgstr ""
6822
 
6823
+ #: includes/gateways/paypal-standard.php:709
6824
  msgid ""
6825
  "Payment is pending for unknown reasons. Contact PayPal support for "
6826
  "assistance"
6827
  msgstr ""
6828
 
6829
+ #: includes/gateways/paypal-standard.php:762
6830
  msgid "Partial PayPal refund processed: %s"
6831
  msgstr ""
6832
 
6833
+ #: includes/gateways/paypal-standard.php:767
6834
  msgid "PayPal Payment #%s Refunded for reason: %s"
6835
  msgstr ""
6836
 
6837
+ #: includes/gateways/paypal-standard.php:768
6838
  msgid "PayPal Refund Transaction ID: %s"
6839
  msgstr ""
6840
 
6841
+ #: includes/gateways/paypal-standard.php:1026
6842
  msgid "Refund Payment in PayPal"
6843
  msgstr ""
6844
 
6845
+ #: includes/gateways/paypal-standard.php:1173
6846
  msgid "PayPal refund failed for unknown reason."
6847
  msgstr ""
6848
 
6849
+ #: includes/gateways/paypal-standard.php:1183
6850
  msgid "PayPal refund transaction ID: %s"
6851
  msgstr ""
6852
 
6853
+ #: includes/gateways/paypal-standard.php:1187
6854
  msgid "PayPal refund failed: %s"
6855
  msgstr ""
6856
 
6870
  msgid "The password you entered is incorrect"
6871
  msgstr ""
6872
 
6873
+ #: includes/login-register.php:93 includes/process-purchase.php:733
6874
  msgid "The username you entered does not exist"
6875
  msgstr ""
6876
 
6877
  #: includes/login-register.php:147 includes/login-register.php:155
6878
+ #: includes/process-purchase.php:602
6879
  msgid "Invalid username"
6880
  msgstr ""
6881
 
6882
+ #: includes/login-register.php:151 includes/process-purchase.php:595
6883
  msgid "Username already taken"
6884
  msgstr ""
6885
 
6887
  msgid "Email address already taken"
6888
  msgstr ""
6889
 
6890
+ #: includes/login-register.php:163 includes/process-purchase.php:542
6891
+ #: includes/process-purchase.php:626 includes/process-purchase.php:766
6892
  msgid "Invalid email"
6893
  msgstr ""
6894
 
7611
  msgid "Your cart is empty"
7612
  msgstr ""
7613
 
7614
+ #: includes/process-purchase.php:44
7615
+ msgid ""
7616
+ "Missing nonce when processing checkout. Please read the following for more "
7617
+ "information: "
7618
+ "https://easydigitaldownloads.com/development/2018/07/05/important-update-to-"
7619
+ "ajax-requests-in-easy-digital-downloads-2-9-4"
7620
+ msgstr ""
7621
+
7622
+ #: includes/process-purchase.php:51
7623
+ msgid "Error processing purchase. Please reload the page and try again."
7624
+ msgstr ""
7625
+
7626
+ #: includes/process-purchase.php:211
7627
  msgid "The email address %s is already in use."
7628
  msgstr ""
7629
 
7630
+ #: includes/process-purchase.php:233
7631
+ msgid ""
7632
+ "Missing nonce when processing login during checkout. Please read the "
7633
+ "following for more information: "
7634
+ "https://easydigitaldownloads.com/development/2018/07/05/important-update-to-"
7635
+ "ajax-requests-in-easy-digital-downloads-2-9-4"
7636
+ msgstr ""
7637
+
7638
+ #: includes/process-purchase.php:239
7639
+ msgid "Error processing login. Nonce failed."
7640
+ msgstr ""
7641
+
7642
+ #: includes/process-purchase.php:353
7643
  msgid "The selected payment gateway is not enabled"
7644
  msgstr ""
7645
 
7646
+ #: includes/process-purchase.php:413
7647
  msgid "One or more of the discounts you entered is invalid"
7648
  msgstr ""
7649
 
7650
+ #: includes/process-purchase.php:430
7651
  msgid "You must agree to the terms of use"
7652
  msgstr ""
7653
 
7654
+ #: includes/process-purchase.php:444
7655
  msgid "You must agree to the privacy policy"
7656
  msgstr ""
7657
 
7658
+ #: includes/process-purchase.php:459
7659
  msgid "Please enter a valid email address"
7660
  msgstr ""
7661
 
7662
+ #: includes/process-purchase.php:463
7663
  msgid "Please enter your first name"
7664
  msgstr ""
7665
 
7666
+ #: includes/process-purchase.php:473
7667
  msgid "Please enter your zip / postal code"
7668
  msgstr ""
7669
 
7670
+ #: includes/process-purchase.php:477
7671
  msgid "Please enter your billing city"
7672
  msgstr ""
7673
 
7674
+ #: includes/process-purchase.php:481
7675
  msgid "Please select your billing country"
7676
  msgstr ""
7677
 
7678
+ #: includes/process-purchase.php:485
7679
  msgid "Please enter billing state / province"
7680
  msgstr ""
7681
 
7682
+ #: includes/process-purchase.php:547 includes/process-purchase.php:885
7683
  msgid "The user information is invalid"
7684
  msgstr ""
7685
 
7686
+ #: includes/process-purchase.php:600
7687
  msgid "Invalid username. Only lowercase letters (a-z) and numbers are allowed"
7688
  msgstr ""
7689
 
7690
+ #: includes/process-purchase.php:609 includes/process-purchase.php:617
7691
  msgid "You must register or login to complete your purchase"
7692
  msgstr ""
7693
 
7694
+ #: includes/process-purchase.php:615 includes/process-purchase.php:775
7695
+ msgid "You must login to complete your purchase"
7696
+ msgstr ""
7697
+
7698
+ #: includes/process-purchase.php:631
7699
  msgid ""
7700
  "Email already used. Login or use a different email to complete your "
7701
  "purchase."
7702
  msgstr ""
7703
 
7704
+ #: includes/process-purchase.php:639 includes/process-purchase.php:781
7705
  msgid "Enter an email"
7706
  msgstr ""
7707
 
7708
+ #: includes/process-purchase.php:647
7709
  msgid "Passwords don't match"
7710
  msgstr ""
7711
 
7712
+ #: includes/process-purchase.php:656 includes/process-purchase.php:729
7713
  msgid "Enter a password"
7714
  msgstr ""
7715
 
7716
+ #: includes/process-purchase.php:659
7717
  msgid "Enter the password confirmation"
7718
  msgstr ""
7719
 
7720
+ #: includes/process-purchase.php:683
7721
  msgid "You must log in or register to complete your purchase"
7722
  msgstr ""
7723
 
7724
+ #: includes/process-purchase.php:710
7725
  msgid "The password you entered is incorrect. %sReset Password%s"
7726
  msgstr ""
7727
 
7728
+ #: includes/process-purchase.php:755
7729
  msgid "You must be logged into an account to purchase"
7730
  msgstr ""
7731
 
7732
+ #: includes/process-purchase.php:949
7733
  msgid "The zip / postal code you entered for your billing address is invalid"
7734
  msgstr ""
7735
 
7736
+ #: includes/process-purchase.php:1198
7737
  msgid "An internal error has occurred, please try again or contact support."
7738
  msgstr ""
7739
 
7740
+ #: includes/process-purchase.php:1234
7741
  msgid "There was an error completing your purchase. Please try again."
7742
  msgstr ""
7743
 
7999
  msgid "Plain Text"
8000
  msgstr ""
8001
 
8002
+ #: includes/user-functions.php:578
8003
  msgid "[%s] New User Registration"
8004
  msgstr ""
8005
 
8006
+ #: includes/user-functions.php:579
8007
  msgid "New user registration"
8008
  msgstr ""
8009
 
8010
+ #: includes/user-functions.php:581
8011
  msgid "E-mail: %s"
8012
  msgstr ""
8013
 
8014
+ #: includes/user-functions.php:590
8015
  msgid "[%s] Your username and password"
8016
  msgstr ""
8017
 
8018
+ #: includes/user-functions.php:591
8019
  msgid "Your account info"
8020
  msgstr ""
8021
 
8022
+ #: includes/user-functions.php:595
8023
  msgid "Password entered at checkout"
8024
  msgstr ""
8025
 
8026
+ #: includes/user-functions.php:597
8027
  msgid "Password entered at registration"
8028
  msgstr ""
8029
 
8030
+ #: includes/user-functions.php:600
8031
  msgid "Password: %s"
8032
  msgstr ""
8033
 
8034
+ #: includes/user-functions.php:605
8035
  msgid "Click here to log in"
8036
  msgstr ""
8037
 
8038
+ #: includes/user-functions.php:609
8039
  msgid "To log in, visit: %s"
8040
  msgstr ""
8041
 
8042
+ #: includes/user-functions.php:763 includes/user-functions.php:764
8043
  msgid "Verify your account"
8044
  msgstr ""
8045
 
8046
+ #: includes/user-functions.php:766
8047
  msgid ""
8048
  "Hello %s,\n"
8049
  "\n"
8053
  "Link missing? Visit the following URL: %s"
8054
  msgstr ""
8055
 
8056
+ #: includes/user-functions.php:891
8057
  msgid ""
8058
  "Sorry but your account verification link has expired. <a href=\"%s\">Click "
8059
  "here</a> to request a new verification URL."
8060
  msgstr ""
8061
 
8062
+ #: includes/user-functions.php:924
8063
  msgid "You must be logged in to verify your account."
8064
  msgstr ""
8065
 
8066
+ #: includes/user-functions.php:924 includes/user-functions.php:928
8067
  msgid "Notice"
8068
  msgstr ""
8069
 
8070
+ #: includes/user-functions.php:928
8071
  msgid "Your account has already been verified."
8072
  msgstr ""
8073
 
8074
+ #: includes/user-functions.php:973
8075
  msgid "Invalid verification token provided."
8076
  msgstr ""
8077
 
8078
+ #: includes/user-functions.php:1095
8079
  msgid "Easy Digital Downloads <a href=\"%s\">iOS App</a>"
8080
  msgstr ""
8081
 
8082
+ #: includes/user-functions.php:1102
8083
  msgid "Add to iOS App"
8084
  msgstr ""
8085
 
8465
  msgid "%s Payments"
8466
  msgstr ""
8467
 
8468
+ #: includes/checkout/template.php:746
8469
  msgctxt "Entering a discount code"
8470
  msgid "Click to enter it"
8471
  msgstr ""
8472
 
8473
+ #: includes/checkout/template.php:755
8474
  msgctxt "Apply discount at checkout"
8475
  msgid "Apply"
8476
  msgstr ""
readme.txt CHANGED
@@ -5,8 +5,8 @@ Contributors: easydigitaldownloads, mordauk, sunnyratilal, chriscct7, section214
5
  Donate link: https://easydigitaldownloads.com/donate/
6
  Tags: download, downloads, e-store, eshop, digital downloads, e-commerce, wp-ecommerce, wp ecommerce, ecommerce, ebook
7
  Requires at least: 4.4
8
- Tested up to: 4.9.6
9
- Stable Tag: 2.9.3
10
  License: GNU Version 2 or Any Later Version
11
 
12
  The easiest way to sell digital products with WordPress.
@@ -190,6 +190,33 @@ Yes. Easy Digital Downloads also includes default support for Amazon Payments an
190
 
191
  == Changelog ==
192
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
193
  = 2.9.3, May 25, 2018 =
194
  * Fix: Corrected multiple inconsistencies in the Privacy Policy Checkbox at checkout.
195
  * Fix: Corrected an issue causing "You must agree to the privacy policy" from showing when it wasn't required.
5
  Donate link: https://easydigitaldownloads.com/donate/
6
  Tags: download, downloads, e-store, eshop, digital downloads, e-commerce, wp-ecommerce, wp ecommerce, ecommerce, ebook
7
  Requires at least: 4.4
8
+ Tested up to: 4.9.7
9
+ Stable Tag: 2.9.4
10
  License: GNU Version 2 or Any Later Version
11
 
12
  The easiest way to sell digital products with WordPress.
190
 
191
  == Changelog ==
192
 
193
+ = 2.9.4, July 9, 2018 =
194
+ * Fix: Added nonce checks to multiple AJAX calls. If you have customized any of the following beyond CSS, please review this blog post:
195
+ * https://easydigitaldownloads.com/development/2018/07/05/important-update-to-ajax-requests-in-easy-digital-downloads-2-9-4
196
+ * templates/widget-cart-item.php
197
+ * templates/shortcode-profile-editor.php
198
+ * templates/checkout_cart.php
199
+ * The following functions includes/checkout/template.php:
200
+ * edd_default_cc_address_fields()
201
+ * edd_get_register_fields()
202
+ * edd_get_login_fields()
203
+ * edd_payment_mode_select()
204
+ * edd_checkout_hidden_fields()
205
+ * Fix: Important - Don't allow guest purchases for an email address that has an existing user.
206
+ * Fix: Unexpected behavior in 'redirect to checkout' when multiple checkout pages were used.
207
+ * Fix: Saving an order in the admin when prices were inclusive of tax could cause incorrect item price amounts to be saved.
208
+ * Fix: PHP 7.2 Compatibility - Some PHP notices were being thrown while activating Easy Digital Downloads.
209
+ * Fix: The EDD_Cart class now forces the cart contents to always be an array.
210
+ * Fix: The process of adding past purchases to a new user now verifies the user has an email address.
211
+ * Fix: The file download log export did not contain the name of the user who downloaded the file.
212
+ * Fix: Attempting to add a new customer to an order gave unexpected results when using the email address of an existing customer.
213
+ * Fix: Tax rate 'Apply to whole country' label could not be clicked when no tax rates have ever existed.
214
+ * Fix: The Shop Accountant role was not able to manage the tax exclusion at a product level.
215
+ * Fix: In some cases, PayPal IPN and PDT would cause double payment processing.
216
+ * Tweak: Easy Digital Downloads sessions can now be started when in the wp-admin path.
217
+ * New: When taxes are being recalculated at checkout, an AJAX indicator is now shown below the purchase button.
218
+ * Dev: Filters were added to the AJAX responses for adding and removing items from the cart.
219
+
220
  = 2.9.3, May 25, 2018 =
221
  * Fix: Corrected multiple inconsistencies in the Privacy Policy Checkbox at checkout.
222
  * Fix: Corrected an issue causing "You must agree to the privacy policy" from showing when it wasn't required.
templates/checkout_cart.php CHANGED
@@ -54,7 +54,7 @@ global $post; ?>
54
  <input type="hidden" name="edd-cart-download-<?php echo $key; ?>-options" value="<?php echo esc_attr( json_encode( $item['options'] ) ); ?>"/>
55
  <?php endif; ?>
56
  <?php do_action( 'edd_cart_actions', $item, $key ); ?>
57
- <a class="edd_cart_remove_item_btn" href="<?php echo esc_url( edd_remove_item_url( $key ) ); ?>"><?php _e( 'Remove', 'easy-digital-downloads' ); ?></a>
58
  </td>
59
  <?php do_action( 'edd_checkout_table_body_last', $item ); ?>
60
  </tr>
54
  <input type="hidden" name="edd-cart-download-<?php echo $key; ?>-options" value="<?php echo esc_attr( json_encode( $item['options'] ) ); ?>"/>
55
  <?php endif; ?>
56
  <?php do_action( 'edd_cart_actions', $item, $key ); ?>
57
+ <a class="edd_cart_remove_item_btn" href="<?php echo esc_url( wp_nonce_url( edd_remove_item_url( $key ), 'edd-remove-from-cart-' . $key, 'edd_remove_from_cart_nonce' ) ); ?>"><?php _e( 'Remove', 'easy-digital-downloads' ); ?></a>
58
  </td>
59
  <?php do_action( 'edd_checkout_table_body_last', $item ); ?>
60
  </tr>
templates/shortcode-profile-editor.php CHANGED
@@ -160,7 +160,7 @@ if ( is_user_logged_in() ):
160
 
161
  <p id="edd_profile_billing_address_country_wrap">
162
  <label for="edd_address_country"><?php _e( 'Country', 'easy-digital-downloads' ); ?></label>
163
- <select name="edd_address_country" id="edd_address_country" class="select edd-select">
164
  <?php foreach( edd_get_country_list() as $key => $country ) : ?>
165
  <option value="<?php echo $key; ?>"<?php selected( $address['country'], $key ); ?>><?php echo esc_html( $country ); ?></option>
166
  <?php endforeach; ?>
160
 
161
  <p id="edd_profile_billing_address_country_wrap">
162
  <label for="edd_address_country"><?php _e( 'Country', 'easy-digital-downloads' ); ?></label>
163
+ <select name="edd_address_country" id="edd_address_country" class="select edd-select" data-nonce="<?php echo wp_create_nonce( 'edd-country-field-nonce' ); ?>">
164
  <?php foreach( edd_get_country_list() as $key => $country ) : ?>
165
  <option value="<?php echo $key; ?>"<?php selected( $address['country'], $key ); ?>><?php echo esc_html( $country ); ?></option>
166
  <?php endforeach; ?>
templates/widget-cart-item.php CHANGED
@@ -1,5 +1,5 @@
1
  <li class="edd-cart-item">
2
  <span class="edd-cart-item-title">{item_title}</span>
3
  <span class="edd-cart-item-separator">-</span>&nbsp;<?php echo edd_item_quantities_enabled() ? '<span class="edd-cart-item-quantity">{item_quantity}&nbsp;@&nbsp;</span>' : ''; ?><span class="edd-cart-item-price">{item_amount}</span>&nbsp;<span class="edd-cart-item-separator">-</span>
4
- <a href="{remove_url}" data-cart-item="{cart_item_id}" data-download-id="{item_id}" data-action="edd_remove_from_cart" class="edd-remove-from-cart"><?php _e( 'remove', 'easy-digital-downloads' ); ?></a>
5
  </li>
1
  <li class="edd-cart-item">
2
  <span class="edd-cart-item-title">{item_title}</span>
3
  <span class="edd-cart-item-separator">-</span>&nbsp;<?php echo edd_item_quantities_enabled() ? '<span class="edd-cart-item-quantity">{item_quantity}&nbsp;@&nbsp;</span>' : ''; ?><span class="edd-cart-item-price">{item_amount}</span>&nbsp;<span class="edd-cart-item-separator">-</span>
4
+ <a href="{remove_url}" data-nonce="<?php echo wp_create_nonce( 'edd-remove-cart-widget-item' ); ?>" data-cart-item="{cart_item_id}" data-download-id="{item_id}" data-action="edd_remove_from_cart" class="edd-remove-from-cart"><?php _e( 'remove', 'easy-digital-downloads' ); ?></a>
5
  </li>