Easy Digital Downloads - Version 2.7.7

Version Description

Download this release

Release Info

Developer mordauk
Plugin Icon 128x128 Easy Digital Downloads
Version 2.7.7
Comparing to
See all releases

Code changes from version 2.7.6 to 2.7.7

assets/js/edd-ajax.js CHANGED
@@ -312,7 +312,7 @@ jQuery(document).ready(function ($) {
312
 
313
  $(this).val(edd_global_vars.purchase_loading);
314
 
315
- $(this).after('<span class="edd-cart-ajax"><i class="edd-icon-spinner edd-icon-spin"></i></span>');
316
 
317
  var data = {
318
  action : 'edd_process_checkout_login',
@@ -328,7 +328,7 @@ jQuery(document).ready(function ($) {
328
  window.location = edd_scripts.checkout_page;
329
  } else {
330
  $('#edd_login_fields input[type=submit]').val(complete_purchase_val);
331
- $('.edd-cart-ajax').remove();
332
  $('.edd_errors').remove();
333
  $('#edd-user-login-submit').before(data);
334
  }
@@ -377,7 +377,7 @@ jQuery(document).ready(function ($) {
377
 
378
  $(this).prop( 'disabled', true );
379
 
380
- $(this).after('<span class="edd-cart-ajax"><i class="edd-icon-spinner edd-icon-spin"></i></span>');
381
 
382
  $.post(edd_global_vars.ajaxurl, $('#edd_purchase_form').serialize() + '&action=edd_process_checkout&edd_ajax=true', function(data) {
383
  if ( $.trim(data) == 'success' ) {
@@ -386,7 +386,7 @@ jQuery(document).ready(function ($) {
386
  $(eddPurchaseform).submit();
387
  } else {
388
  $('#edd-purchase-button').val(complete_purchase_val);
389
- $('.edd-cart-ajax').remove();
390
  $('.edd_errors').remove();
391
  $('.edd-error').hide();
392
  $('#edd_purchase_submit').before(data);
312
 
313
  $(this).val(edd_global_vars.purchase_loading);
314
 
315
+ $(this).after('<span class="edd-loading-ajax edd-loading"></span>');
316
 
317
  var data = {
318
  action : 'edd_process_checkout_login',
328
  window.location = edd_scripts.checkout_page;
329
  } else {
330
  $('#edd_login_fields input[type=submit]').val(complete_purchase_val);
331
+ $('.edd-loading-ajax').remove();
332
  $('.edd_errors').remove();
333
  $('#edd-user-login-submit').before(data);
334
  }
377
 
378
  $(this).prop( 'disabled', true );
379
 
380
+ $(this).after('<span class="edd-loading-ajax edd-loading"></span>');
381
 
382
  $.post(edd_global_vars.ajaxurl, $('#edd_purchase_form').serialize() + '&action=edd_process_checkout&edd_ajax=true', function(data) {
383
  if ( $.trim(data) == 'success' ) {
386
  $(eddPurchaseform).submit();
387
  } else {
388
  $('#edd-purchase-button').val(complete_purchase_val);
389
+ $('.edd-loading-ajax').remove();
390
  $('.edd_errors').remove();
391
  $('.edd-error').hide();
392
  $('#edd_purchase_submit').before(data);
assets/js/edd-ajax.min.js CHANGED
@@ -1 +1 @@
1
- function edd_load_gateway(a){jQuery(".edd-cart-ajax").show(),jQuery("#edd_purchase_form_wrap").html('<span class="edd-loading-ajax edd-loading"></span>');var b=edd_scripts.ajaxurl;b+=b.indexOf("?")>0?"&":"?",b=b+"payment-mode="+a,jQuery.post(b,{action:"edd_load_gateway",edd_payment_mode:a},function(b){jQuery("#edd_purchase_form_wrap").html(b),jQuery(".edd-no-js").hide(),jQuery("body").trigger("edd_gateway_loaded",[a])})}var edd_scripts;jQuery(document).ready(function(a){function c(){var c,b=a(this),d="undefined"!=typeof edd_global_vars;if("card_state"!=b.attr("id")){var e={action:"edd_get_shop_states",country:b.val(),field_name:"card_state"};a.ajax({type:"POST",data:e,url:edd_scripts.ajaxurl,xhrFields:{withCredentials:!0},success:function(e){c=d?a("#edd_purchase_form"):b.closest("form");var f='input[name="card_state"], select[name="card_state"], input[name="edd_address_state"], select[name="edd_address_state"]';if("nostates"==a.trim(e)){var g='<input type="text" name="card_state" class="card-state edd-input required" value=""/>';c.find(f).replaceWith(g)}else c.find(f).replaceWith(e);d&&a("body").trigger("edd_cart_billing_address_updated",[e])}}).fail(function(a){window.console&&window.console.log&&console.log(a)}).done(function(a){d&&recalculate_taxes()})}else d&&recalculate_taxes();return!1}if(a(".edd-no-js").hide(),a("a.edd-add-to-cart").addClass("edd-has-js"),a("body").on("click.eddRemoveFromCart",".edd-remove-from-cart",function(b){var c=a(this),d=c.data("cart-item"),e=c.data("action"),f=c.data("download-id"),g={action:e,cart_item:d};return a.ajax({type:"POST",data:g,dataType:"json",url:edd_scripts.ajaxurl,xhrFields:{withCredentials:!0},success:function(b){if(b.removed){if(parseInt(edd_scripts.position_in_cart,10)===parseInt(d,10)||edd_scripts.has_purchase_links)return window.location=window.location,!1;a(".edd-cart").each(function(){a(this).find("[data-cart-item='"+d+"']").parent().remove()}),a(".edd-cart").each(function(){var b=0;a(this).find("[data-cart-item]").each(function(){a(this).attr("data-cart-item",b),b+=1})}),a("[id^=edd_purchase_"+f+"]").length&&(a("[id^=edd_purchase_"+f+"] .edd_go_to_checkout").hide(),a("[id^=edd_purchase_"+f+"] a.edd-add-to-cart").show().removeAttr("data-edd-loading"),"1"==edd_scripts.quantities_enabled&&a("[id^=edd_purchase_"+f+"] .edd_download_quantity_wrapper").show()),a("span.edd-cart-quantity").text(b.cart_quantity),a("body").trigger("edd_quantity_updated",[b.cart_quantity]),edd_scripts.taxes_enabled&&(a(".cart_item.edd_subtotal span").html(b.subtotal),a(".cart_item.edd_cart_tax span").html(b.tax)),a(".cart_item.edd_total span").html(b.total),0==b.cart_quantity&&(a(".cart_item.edd_subtotal,.edd-cart-number-of-items,.cart_item.edd_checkout,.cart_item.edd_cart_tax,.cart_item.edd_total").hide(),a(".edd-cart").each(function(){var b=a(this).parent();b&&(b.addClass("cart-empty"),b.removeClass("cart-not-empty")),a(this).append('<li class="cart_item empty">'+edd_scripts.empty_cart_message+"</li>")})),a("body").trigger("edd_cart_item_removed",[b])}}}).fail(function(a){window.console&&window.console.log&&console.log(a)}).done(function(a){}),!1}),a("body").on("click.eddAddToCart",".edd-add-to-cart",function(b){b.preventDefault();var c=a(this),d=c.closest("form");c.prop("disabled",!0);var f=(c.find(".edd-loading"),c.closest("div"));c.attr("data-edd-loading","");var d=c.parents("form").last(),g=c.data("download-id"),h=c.data("variable-price"),i=c.data("price-mode"),j=[],k=!0;if("yes"==h)if(d.find(".edd_price_option_"+g+'[type="hidden"]').length>0)j[0]=a(".edd_price_option_"+g,d).val(),d.find(".edd-submit").data("price")&&d.find(".edd-submit").data("price")>0&&(k=!1);else{if(!d.find(".edd_price_option_"+g+":checked",d).length)return c.removeAttr("data-edd-loading"),alert(edd_scripts.select_option),b.stopPropagation(),c.prop("disabled",!1),!1;d.find(".edd_price_option_"+g+":checked",d).each(function(b){if(j[b]=a(this).val(),!0===k){var c=a(this).data("price");c&&c>0&&(k=!1)}})}else j[0]=g,c.data("price")&&c.data("price")>0&&(k=!1);if(k&&d.find(".edd_action_input").val("add_to_cart"),"straight_to_gateway"==d.find(".edd_action_input").val())return d.submit(),!0;var l=c.data("action"),m={action:l,download_id:g,price_ids:j,post_data:a(d).serialize()};return a.ajax({type:"POST",data:m,dataType:"json",url:edd_scripts.ajaxurl,xhrFields:{withCredentials:!0},success:function(b){var e="1"==edd_scripts.redirect_to_checkout,j="1"==d.find("#edd_redirect_to_checkout").val();if(e&&j||!e&&j)window.location=edd_scripts.checkout_page;else{"1"===edd_scripts.taxes_enabled&&(a(".cart_item.edd_subtotal").show(),a(".cart_item.edd_cart_tax").show()),a(".cart_item.edd_total").show(),a(".cart_item.edd_checkout").show(),a(".cart_item.empty").length&&a(".cart_item.empty").hide(),a(".widget_edd_cart_widget .edd-cart").each(function(c){var d=a(this).find(".edd-cart-meta:first");a(b.cart_item).insertBefore(d);var e=a(this).parent();e&&(e.addClass("cart-not-empty"),e.removeClass("cart-empty"))}),"1"===edd_scripts.taxes_enabled&&(a(".edd-cart-meta.edd_subtotal span").html(b.subtotal),a(".edd-cart-meta.edd_cart_tax span").html(b.tax)),a(".edd-cart-meta.edd_total span").html(b.total);a(".edd-cart-item-title",b.cart_item).length;if(a("span.edd-cart-quantity").each(function(){a(this).text(b.cart_quantity),a("body").trigger("edd_quantity_updated",[b.cart_quantity])}),"none"==a(".edd-cart-number-of-items").css("display")&&a(".edd-cart-number-of-items").show("slow"),"no"!=h&&"multi"==i||(a("a.edd-add-to-cart",f).toggle(),a(".edd_go_to_checkout",f).css("display","inline-block")),"multi"==i&&c.removeAttr("data-edd-loading"),a(".edd_download_purchase_form").length&&("no"==h||!d.find(".edd_price_option_"+g).is("input:hidden"))){var l=a('.edd_download_purchase_form *[data-download-id="'+g+'"]').parents("form");a("a.edd-add-to-cart",l).hide(),"multi"!=i&&l.find(".edd_download_quantity_wrapper").slideUp(),a(".edd_go_to_checkout",l).show().removeAttr("data-edd-loading")}"incart"!=b&&(a(".edd-cart-added-alert",f).fadeIn(),setTimeout(function(){a(".edd-cart-added-alert",f).fadeOut()},3e3)),c.prop("disabled",!1),a("body").trigger("edd_cart_item_added",[b])}}}).fail(function(a){window.console&&window.console.log&&console.log(a)}).done(function(a){}),!1}),a("#edd_checkout_form_wrap").on("click",".edd_checkout_register_login",function(){var b=a(this),c={action:b.data("action")};return a(".edd-cart-ajax").show(),a.post(edd_scripts.ajaxurl,c,function(b){a("#edd_checkout_login_register").html(edd_scripts.loading),a("#edd_checkout_login_register").html(b),a(".edd-cart-ajax").hide()}),!1}),a(document).on("click","#edd_purchase_form #edd_login_fields input[type=submit]",function(b){b.preventDefault();var c=a(this).val();a(this).val(edd_global_vars.purchase_loading),a(this).after('<span class="edd-cart-ajax"><i class="edd-icon-spinner edd-icon-spin"></i></span>');var d={action:"edd_process_checkout_login",edd_ajax:1,edd_user_login:a("#edd_login_fields #edd_user_login").val(),edd_user_pass:a("#edd_login_fields #edd_user_pass").val()};a.post(edd_global_vars.ajaxurl,d,function(b){"success"==a.trim(b)?(a(".edd_errors").remove(),window.location=edd_scripts.checkout_page):(a("#edd_login_fields input[type=submit]").val(c),a(".edd-cart-ajax").remove(),a(".edd_errors").remove(),a("#edd-user-login-submit").before(b))})}),a("select#edd-gateway, input.edd-gateway").change(function(b){var c=a("#edd-gateway option:selected, input.edd-gateway:checked").val();return"0"!=c&&(edd_load_gateway(c),!1)}),"1"==edd_scripts.is_checkout&&a("select#edd-gateway, input.edd-gateway").length){var b=a("meta[name='edd-chosen-gateway']").attr("content");b||(b=edd_scripts.default_gateway),setTimeout(function(){edd_load_gateway(b)},200)}a(document).on("click","#edd_purchase_form #edd_purchase_submit input[type=submit]",function(b){var c=document.getElementById("edd_purchase_form");if("function"!=typeof c.checkValidity||!1!==c.checkValidity()){b.preventDefault();var d=a(this).val();a(this).val(edd_global_vars.purchase_loading),a(this).prop("disabled",!0),a(this).after('<span class="edd-cart-ajax"><i class="edd-icon-spinner edd-icon-spin"></i></span>'),a.post(edd_global_vars.ajaxurl,a("#edd_purchase_form").serialize()+"&action=edd_process_checkout&edd_ajax=true",function(b){"success"==a.trim(b)?(a(".edd_errors").remove(),a(".edd-error").hide(),a(c).submit()):(a("#edd-purchase-button").val(d),a(".edd-cart-ajax").remove(),a(".edd_errors").remove(),a(".edd-error").hide(),a("#edd_purchase_submit").before(b),a("#edd-purchase-button").prop("disabled",!1))})}}),a("body").on("change","#edd_cc_address input.card_state, #edd_cc_address select, #edd_address_country",c),a("body").on("change","#edd_cc_address input[name=card_zip]",function(){"undefined"!=typeof edd_global_vars&&recalculate_taxes()})});
1
+ function edd_load_gateway(a){jQuery(".edd-cart-ajax").show(),jQuery("#edd_purchase_form_wrap").html('<span class="edd-loading-ajax edd-loading"></span>');var b=edd_scripts.ajaxurl;b+=b.indexOf("?")>0?"&":"?",b=b+"payment-mode="+a,jQuery.post(b,{action:"edd_load_gateway",edd_payment_mode:a},function(b){jQuery("#edd_purchase_form_wrap").html(b),jQuery(".edd-no-js").hide(),jQuery("body").trigger("edd_gateway_loaded",[a])})}var edd_scripts;jQuery(document).ready(function(a){function c(){var c,b=a(this),d="undefined"!=typeof edd_global_vars;if("card_state"!=b.attr("id")){var e={action:"edd_get_shop_states",country:b.val(),field_name:"card_state"};a.ajax({type:"POST",data:e,url:edd_scripts.ajaxurl,xhrFields:{withCredentials:!0},success:function(e){c=d?a("#edd_purchase_form"):b.closest("form");var f='input[name="card_state"], select[name="card_state"], input[name="edd_address_state"], select[name="edd_address_state"]';if("nostates"==a.trim(e)){var g='<input type="text" name="card_state" class="card-state edd-input required" value=""/>';c.find(f).replaceWith(g)}else c.find(f).replaceWith(e);d&&a("body").trigger("edd_cart_billing_address_updated",[e])}}).fail(function(a){window.console&&window.console.log&&console.log(a)}).done(function(a){d&&recalculate_taxes()})}else d&&recalculate_taxes();return!1}if(a(".edd-no-js").hide(),a("a.edd-add-to-cart").addClass("edd-has-js"),a("body").on("click.eddRemoveFromCart",".edd-remove-from-cart",function(b){var c=a(this),d=c.data("cart-item"),e=c.data("action"),f=c.data("download-id"),g={action:e,cart_item:d};return a.ajax({type:"POST",data:g,dataType:"json",url:edd_scripts.ajaxurl,xhrFields:{withCredentials:!0},success:function(b){if(b.removed){if(parseInt(edd_scripts.position_in_cart,10)===parseInt(d,10)||edd_scripts.has_purchase_links)return window.location=window.location,!1;a(".edd-cart").each(function(){a(this).find("[data-cart-item='"+d+"']").parent().remove()}),a(".edd-cart").each(function(){var b=0;a(this).find("[data-cart-item]").each(function(){a(this).attr("data-cart-item",b),b+=1})}),a("[id^=edd_purchase_"+f+"]").length&&(a("[id^=edd_purchase_"+f+"] .edd_go_to_checkout").hide(),a("[id^=edd_purchase_"+f+"] a.edd-add-to-cart").show().removeAttr("data-edd-loading"),"1"==edd_scripts.quantities_enabled&&a("[id^=edd_purchase_"+f+"] .edd_download_quantity_wrapper").show()),a("span.edd-cart-quantity").text(b.cart_quantity),a("body").trigger("edd_quantity_updated",[b.cart_quantity]),edd_scripts.taxes_enabled&&(a(".cart_item.edd_subtotal span").html(b.subtotal),a(".cart_item.edd_cart_tax span").html(b.tax)),a(".cart_item.edd_total span").html(b.total),0==b.cart_quantity&&(a(".cart_item.edd_subtotal,.edd-cart-number-of-items,.cart_item.edd_checkout,.cart_item.edd_cart_tax,.cart_item.edd_total").hide(),a(".edd-cart").each(function(){var b=a(this).parent();b&&(b.addClass("cart-empty"),b.removeClass("cart-not-empty")),a(this).append('<li class="cart_item empty">'+edd_scripts.empty_cart_message+"</li>")})),a("body").trigger("edd_cart_item_removed",[b])}}}).fail(function(a){window.console&&window.console.log&&console.log(a)}).done(function(a){}),!1}),a("body").on("click.eddAddToCart",".edd-add-to-cart",function(b){b.preventDefault();var c=a(this),d=c.closest("form");c.prop("disabled",!0);var f=(c.find(".edd-loading"),c.closest("div"));c.attr("data-edd-loading","");var d=c.parents("form").last(),g=c.data("download-id"),h=c.data("variable-price"),i=c.data("price-mode"),j=[],k=!0;if("yes"==h)if(d.find(".edd_price_option_"+g+'[type="hidden"]').length>0)j[0]=a(".edd_price_option_"+g,d).val(),d.find(".edd-submit").data("price")&&d.find(".edd-submit").data("price")>0&&(k=!1);else{if(!d.find(".edd_price_option_"+g+":checked",d).length)return c.removeAttr("data-edd-loading"),alert(edd_scripts.select_option),b.stopPropagation(),c.prop("disabled",!1),!1;d.find(".edd_price_option_"+g+":checked",d).each(function(b){if(j[b]=a(this).val(),!0===k){var c=a(this).data("price");c&&c>0&&(k=!1)}})}else j[0]=g,c.data("price")&&c.data("price")>0&&(k=!1);if(k&&d.find(".edd_action_input").val("add_to_cart"),"straight_to_gateway"==d.find(".edd_action_input").val())return d.submit(),!0;var l=c.data("action"),m={action:l,download_id:g,price_ids:j,post_data:a(d).serialize()};return a.ajax({type:"POST",data:m,dataType:"json",url:edd_scripts.ajaxurl,xhrFields:{withCredentials:!0},success:function(b){var e="1"==edd_scripts.redirect_to_checkout,j="1"==d.find("#edd_redirect_to_checkout").val();if(e&&j||!e&&j)window.location=edd_scripts.checkout_page;else{"1"===edd_scripts.taxes_enabled&&(a(".cart_item.edd_subtotal").show(),a(".cart_item.edd_cart_tax").show()),a(".cart_item.edd_total").show(),a(".cart_item.edd_checkout").show(),a(".cart_item.empty").length&&a(".cart_item.empty").hide(),a(".widget_edd_cart_widget .edd-cart").each(function(c){var d=a(this).find(".edd-cart-meta:first");a(b.cart_item).insertBefore(d);var e=a(this).parent();e&&(e.addClass("cart-not-empty"),e.removeClass("cart-empty"))}),"1"===edd_scripts.taxes_enabled&&(a(".edd-cart-meta.edd_subtotal span").html(b.subtotal),a(".edd-cart-meta.edd_cart_tax span").html(b.tax)),a(".edd-cart-meta.edd_total span").html(b.total);a(".edd-cart-item-title",b.cart_item).length;if(a("span.edd-cart-quantity").each(function(){a(this).text(b.cart_quantity),a("body").trigger("edd_quantity_updated",[b.cart_quantity])}),"none"==a(".edd-cart-number-of-items").css("display")&&a(".edd-cart-number-of-items").show("slow"),"no"!=h&&"multi"==i||(a("a.edd-add-to-cart",f).toggle(),a(".edd_go_to_checkout",f).css("display","inline-block")),"multi"==i&&c.removeAttr("data-edd-loading"),a(".edd_download_purchase_form").length&&("no"==h||!d.find(".edd_price_option_"+g).is("input:hidden"))){var l=a('.edd_download_purchase_form *[data-download-id="'+g+'"]').parents("form");a("a.edd-add-to-cart",l).hide(),"multi"!=i&&l.find(".edd_download_quantity_wrapper").slideUp(),a(".edd_go_to_checkout",l).show().removeAttr("data-edd-loading")}"incart"!=b&&(a(".edd-cart-added-alert",f).fadeIn(),setTimeout(function(){a(".edd-cart-added-alert",f).fadeOut()},3e3)),c.prop("disabled",!1),a("body").trigger("edd_cart_item_added",[b])}}}).fail(function(a){window.console&&window.console.log&&console.log(a)}).done(function(a){}),!1}),a("#edd_checkout_form_wrap").on("click",".edd_checkout_register_login",function(){var b=a(this),c={action:b.data("action")};return a(".edd-cart-ajax").show(),a.post(edd_scripts.ajaxurl,c,function(b){a("#edd_checkout_login_register").html(edd_scripts.loading),a("#edd_checkout_login_register").html(b),a(".edd-cart-ajax").hide()}),!1}),a(document).on("click","#edd_purchase_form #edd_login_fields input[type=submit]",function(b){b.preventDefault();var c=a(this).val();a(this).val(edd_global_vars.purchase_loading),a(this).after('<span class="edd-loading-ajax edd-loading"></span>');var d={action:"edd_process_checkout_login",edd_ajax:1,edd_user_login:a("#edd_login_fields #edd_user_login").val(),edd_user_pass:a("#edd_login_fields #edd_user_pass").val()};a.post(edd_global_vars.ajaxurl,d,function(b){"success"==a.trim(b)?(a(".edd_errors").remove(),window.location=edd_scripts.checkout_page):(a("#edd_login_fields input[type=submit]").val(c),a(".edd-loading-ajax").remove(),a(".edd_errors").remove(),a("#edd-user-login-submit").before(b))})}),a("select#edd-gateway, input.edd-gateway").change(function(b){var c=a("#edd-gateway option:selected, input.edd-gateway:checked").val();return"0"!=c&&(edd_load_gateway(c),!1)}),"1"==edd_scripts.is_checkout&&a("select#edd-gateway, input.edd-gateway").length){var b=a("meta[name='edd-chosen-gateway']").attr("content");b||(b=edd_scripts.default_gateway),setTimeout(function(){edd_load_gateway(b)},200)}a(document).on("click","#edd_purchase_form #edd_purchase_submit input[type=submit]",function(b){var c=document.getElementById("edd_purchase_form");if("function"!=typeof c.checkValidity||!1!==c.checkValidity()){b.preventDefault();var d=a(this).val();a(this).val(edd_global_vars.purchase_loading),a(this).prop("disabled",!0),a(this).after('<span class="edd-loading-ajax edd-loading"></span>'),a.post(edd_global_vars.ajaxurl,a("#edd_purchase_form").serialize()+"&action=edd_process_checkout&edd_ajax=true",function(b){"success"==a.trim(b)?(a(".edd_errors").remove(),a(".edd-error").hide(),a(c).submit()):(a("#edd-purchase-button").val(d),a(".edd-loading-ajax").remove(),a(".edd_errors").remove(),a(".edd-error").hide(),a("#edd_purchase_submit").before(b),a("#edd-purchase-button").prop("disabled",!1))})}}),a("body").on("change","#edd_cc_address input.card_state, #edd_cc_address select, #edd_address_country",c),a("body").on("change","#edd_cc_address input[name=card_zip]",function(){"undefined"!=typeof edd_global_vars&&recalculate_taxes()})});
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.7.6
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.7.6
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.7.6' );
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.7.7
9
  * Text Domain: easy-digital-downloads
10
  * Domain Path: languages
11
  *
25
  * @package EDD
26
  * @category Core
27
  * @author Pippin Williamson
28
+ * @version 2.7.7
29
  */
30
 
31
  // Exit if accessed directly.
206
 
207
  // Plugin version.
208
  if ( ! defined( 'EDD_VERSION' ) ) {
209
+ define( 'EDD_VERSION', '2.7.7' );
210
  }
211
 
212
  // Plugin Folder Path.
includes/EDD_SL_Plugin_Updater.php CHANGED
@@ -7,7 +7,7 @@ if ( ! defined( 'ABSPATH' ) ) exit;
7
  * Allows plugins to use their own update API.
8
  *
9
  * @author Easy Digital Downloads
10
- * @version 1.6.11
11
  */
12
  class EDD_SL_Plugin_Updater {
13
 
@@ -279,8 +279,8 @@ class EDD_SL_Plugin_Updater {
279
  // Convert sections into an associative array, since we're getting an object, but Core expects an array.
280
  if ( isset( $_data->sections ) && ! is_array( $_data->sections ) ) {
281
  $new_sections = array();
282
- foreach ( $_data->sections as $key => $key ) {
283
- $new_sections[ $key ] = $key;
284
  }
285
 
286
  $_data->sections = $new_sections;
@@ -289,8 +289,8 @@ class EDD_SL_Plugin_Updater {
289
  // Convert banners into an associative array, since we're getting an object, but Core expects an array.
290
  if ( isset( $_data->banners ) && ! is_array( $_data->banners ) ) {
291
  $new_banners = array();
292
- foreach ( $_data->banners as $key => $key ) {
293
- $new_banners[ $key ] = $key;
294
  }
295
 
296
  $_data->banners = $new_banners;
7
  * Allows plugins to use their own update API.
8
  *
9
  * @author Easy Digital Downloads
10
+ * @version 1.6.12
11
  */
12
  class EDD_SL_Plugin_Updater {
13
 
279
  // Convert sections into an associative array, since we're getting an object, but Core expects an array.
280
  if ( isset( $_data->sections ) && ! is_array( $_data->sections ) ) {
281
  $new_sections = array();
282
+ foreach ( $_data->sections as $key => $value ) {
283
+ $new_sections[ $key ] = $value;
284
  }
285
 
286
  $_data->sections = $new_sections;
289
  // Convert banners into an associative array, since we're getting an object, but Core expects an array.
290
  if ( isset( $_data->banners ) && ! is_array( $_data->banners ) ) {
291
  $new_banners = array();
292
+ foreach ( $_data->banners as $key => $value ) {
293
+ $new_banners[ $key ] = $value;
294
  }
295
 
296
  $_data->banners = $new_banners;
includes/admin/customers/customers.php CHANGED
@@ -126,7 +126,7 @@ function edd_render_customer_view( $view, $callbacks ) {
126
 
127
  <div id="edd-item-wrapper" class="edd-item-has-tabs edd-clearfix">
128
  <div id="edd-item-tab-wrapper" class="customer-tab-wrapper">
129
- <ul id="edd-item-tab-wrapper-list" class="ustomer-tab-wrapper-list">
130
  <?php foreach ( $customer_tabs as $key => $tab ) : ?>
131
  <?php $active = $key === $view ? true : false; ?>
132
  <?php $class = $active ? 'active' : 'inactive'; ?>
126
 
127
  <div id="edd-item-wrapper" class="edd-item-has-tabs edd-clearfix">
128
  <div id="edd-item-tab-wrapper" class="customer-tab-wrapper">
129
+ <ul id="edd-item-tab-wrapper-list" class="customer-tab-wrapper-list">
130
  <?php foreach ( $customer_tabs as $key => $tab ) : ?>
131
  <?php $active = $key === $view ? true : false; ?>
132
  <?php $class = $active ? 'active' : 'inactive'; ?>
includes/admin/import/class-batch-import-payments.php CHANGED
@@ -204,6 +204,12 @@ class EDD_Batch_Payments_Import extends EDD_Batch_Import {
204
 
205
  $payment->user_id = $user->ID;
206
 
 
 
 
 
 
 
207
  }
208
 
209
  }
204
 
205
  $payment->user_id = $user->ID;
206
 
207
+ $customer = new EDD_Customer( $payment->customer_id );
208
+
209
+ if( empty( $customer->user_id ) ) {
210
+ $customer->update( array( 'user_id' => $user->ID ) );
211
+ }
212
+
213
  }
214
 
215
  }
includes/checkout/template.php CHANGED
@@ -541,12 +541,12 @@ function edd_get_login_fields() {
541
  <?php do_action('edd_checkout_login_fields_before'); ?>
542
  <p id="edd-user-login-wrap">
543
  <label class="edd-label" for="edd-username">
544
- <?php _e( 'Username', 'easy-digital-downloads' ); ?>
545
  <?php if( edd_no_guest_checkout() ) { ?>
546
  <span class="edd-required-indicator">*</span>
547
  <?php } ?>
548
  </label>
549
- <input class="<?php if(edd_no_guest_checkout()) { echo 'required '; } ?>edd-input" type="text" name="edd_user_login" id="edd_user_login" value="" placeholder="<?php _e( 'Your username', 'easy-digital-downloads' ); ?>"/>
550
  </p>
551
  <p id="edd-user-pass-wrap" class="edd_login_password">
552
  <label class="edd-label" for="edd-password">
541
  <?php do_action('edd_checkout_login_fields_before'); ?>
542
  <p id="edd-user-login-wrap">
543
  <label class="edd-label" for="edd-username">
544
+ <?php _e( 'Username or Email', 'easy-digital-downloads' ); ?>
545
  <?php if( edd_no_guest_checkout() ) { ?>
546
  <span class="edd-required-indicator">*</span>
547
  <?php } ?>
548
  </label>
549
+ <input class="<?php if(edd_no_guest_checkout()) { echo 'required '; } ?>edd-input" type="text" name="edd_user_login" id="edd_user_login" value="" placeholder="<?php _e( 'Your username or email address', 'easy-digital-downloads' ); ?>"/>
550
  </p>
551
  <p id="edd-user-pass-wrap" class="edd_login_password">
552
  <label class="edd-label" for="edd-password">
includes/class-edd-html-elements.php CHANGED
@@ -547,7 +547,7 @@ class EDD_HTML_Elements {
547
  foreach ( $args['options'] as $key => $option ) {
548
  if ( $args['multiple'] && is_array( $args['selected'] ) ) {
549
  $selected = selected( true, in_array( (string) $key, $args['selected'] ), false );
550
- } elseif ( isset( $args['selected'] ) && ! empty( $args['selected'] ) && ! is_array( $args['selected'] ) ) {
551
  $selected = selected( $args['selected'], $key, false );
552
  }
553
 
547
  foreach ( $args['options'] as $key => $option ) {
548
  if ( $args['multiple'] && is_array( $args['selected'] ) ) {
549
  $selected = selected( true, in_array( (string) $key, $args['selected'] ), false );
550
+ } elseif ( isset( $args['selected'] ) && ! is_array( $args['selected'] ) ) {
551
  $selected = selected( $args['selected'], $key, false );
552
  }
553
 
includes/class-edd-stats.php CHANGED
@@ -111,7 +111,7 @@ class EDD_Stats {
111
  }
112
 
113
  if( empty( $_end_date ) ) {
114
- $_end_date = time();
115
  }
116
 
117
  $this->start_date = $this->convert_date( $_start_date );
111
  }
112
 
113
  if( empty( $_end_date ) ) {
114
+ $_end_date = $_start_date;
115
  }
116
 
117
  $this->start_date = $this->convert_date( $_start_date );
includes/country-functions.php CHANGED
@@ -200,7 +200,7 @@ function edd_get_country_list() {
200
  'CU' => 'Cuba',
201
  'CW' => 'Cura&Ccedil;ao',
202
  'CY' => 'Cyprus',
203
- 'CZ' => 'Czech Republic',
204
  'DK' => 'Denmark',
205
  'DJ' => 'Djibouti',
206
  'DM' => 'Dominica',
200
  'CU' => 'Cuba',
201
  'CW' => 'Cura&Ccedil;ao',
202
  'CY' => 'Cyprus',
203
+ 'CZ' => 'Czechia',
204
  'DK' => 'Denmark',
205
  'DJ' => 'Djibouti',
206
  'DM' => 'Dominica',
includes/discount-functions.php CHANGED
@@ -1049,7 +1049,12 @@ function edd_discount_status_cleanup() {
1049
  }
1050
 
1051
  }
 
 
 
 
1052
  add_action( 'edd_daily_scheduled_events', 'edd_discount_status_cleanup' );
 
1053
 
1054
  /**
1055
  * Used during edd_discount_status_cleanup to filter out a meta query properly
1049
  }
1050
 
1051
  }
1052
+ /**
1053
+ * Disabled until https://github.com/easydigitaldownloads/easy-digital-downloads/issues/5619 is completed
1054
+ * See https://github.com/easydigitaldownloads/easy-digital-downloads/issues/5631
1055
+ *
1056
  add_action( 'edd_daily_scheduled_events', 'edd_discount_status_cleanup' );
1057
+ */
1058
 
1059
  /**
1060
  * Used during edd_discount_status_cleanup to filter out a meta query properly
includes/process-purchase.php CHANGED
@@ -597,8 +597,15 @@ function edd_purchase_form_validate_user_login() {
597
  return $valid_user_data;
598
  }
599
 
600
- // Get the user by login
601
- $user_data = get_user_by( 'login', strip_tags( $_POST['edd_user_login'] ) );
 
 
 
 
 
 
 
602
 
603
  // Check if user exists
604
  if ( $user_data ) {
597
  return $valid_user_data;
598
  }
599
 
600
+ $login_or_email = strip_tags( $_POST['edd_user_login'] );
601
+
602
+ if ( is_email( $login_or_email ) ) {
603
+ // Get the user by email
604
+ $user_data = get_user_by( 'email', $login_or_email );
605
+ } else {
606
+ // Get the user by login
607
+ $user_data = get_user_by( 'login', $login_or_email );
608
+ }
609
 
610
  // Check if user exists
611
  if ( $user_data ) {
includes/shortcodes.php CHANGED
@@ -582,7 +582,7 @@ function edd_downloads_query( $atts, $content = null ) {
582
  <?php while ( $downloads->have_posts() ) : $downloads->the_post(); ?>
583
  <?php $schema = edd_add_schema_microdata() ? 'itemscope itemtype="http://schema.org/Product" ' : ''; ?>
584
  <div <?php echo $schema; ?>class="<?php echo apply_filters( 'edd_download_class', 'edd_download', get_the_ID(), $atts, $i ); ?>" id="edd_download_<?php echo get_the_ID(); ?>">
585
- <div class="edd_download_inner">
586
  <?php
587
 
588
  do_action( 'edd_download_before' );
@@ -750,6 +750,13 @@ function edd_receipt_shortcode( $atts, $content = null ) {
750
  return $login_form;
751
  }
752
 
 
 
 
 
 
 
 
753
  /*
754
  * Check if the user has permission to view the receipt
755
  *
@@ -762,7 +769,7 @@ function edd_receipt_shortcode( $atts, $content = null ) {
762
  */
763
 
764
 
765
- if ( ! apply_filters( 'edd_user_can_view_receipt', $user_can_view, $edd_receipt_args ) ) {
766
  return '<p class="edd-alert edd-alert-error">' . $edd_receipt_args['error'] . '</p>';
767
  }
768
 
582
  <?php while ( $downloads->have_posts() ) : $downloads->the_post(); ?>
583
  <?php $schema = edd_add_schema_microdata() ? 'itemscope itemtype="http://schema.org/Product" ' : ''; ?>
584
  <div <?php echo $schema; ?>class="<?php echo apply_filters( 'edd_download_class', 'edd_download', get_the_ID(), $atts, $i ); ?>" id="edd_download_<?php echo get_the_ID(); ?>">
585
+ <div class="<?php echo apply_filters( 'edd_download_inner_class', 'edd_download_inner', get_the_ID(), $atts, $i ); ?>">
586
  <?php
587
 
588
  do_action( 'edd_download_before' );
750
  return $login_form;
751
  }
752
 
753
+ $user_can_view = apply_filters( 'edd_user_can_view_receipt', $user_can_view, $edd_receipt_args );
754
+
755
+ // If this was a guest checkout and the purchase session is empty, output a relevant error message
756
+ if ( empty( $session ) && ! is_user_logged_in() && ! $user_can_view ) {
757
+ return '<p class="edd-alert edd-alert-error">' . apply_filters( 'edd_receipt_guest_error_message', __( 'Receipt could not be retrieved, your purchase session has expired.', 'easy-digital-downloads' ) ) . '</p>';
758
+ }
759
+
760
  /*
761
  * Check if the user has permission to view the receipt
762
  *
769
  */
770
 
771
 
772
+ if ( ! $user_can_view ) {
773
  return '<p class="edd-alert edd-alert-error">' . $edd_receipt_args['error'] . '</p>';
774
  }
775
 
includes/user-functions.php CHANGED
@@ -204,6 +204,13 @@ function edd_has_user_purchased( $user_id, $downloads, $variable_price_id = null
204
  return false;
205
  }
206
 
 
 
 
 
 
 
 
207
  $users_purchases = edd_get_users_purchases( $user_id );
208
 
209
  $return = false;
@@ -223,12 +230,14 @@ function edd_has_user_purchased( $user_id, $downloads, $variable_price_id = null
223
  $variable_prices = edd_has_variable_prices( $download['id'] );
224
  if ( $variable_prices && ! is_null( $variable_price_id ) && $variable_price_id !== false ) {
225
  if ( isset( $download['item_number']['options']['price_id'] ) && $variable_price_id == $download['item_number']['options']['price_id'] ) {
226
- return true;
 
227
  } else {
228
  $return = false;
229
  }
230
  } else {
231
  $return = true;
 
232
  }
233
  }
234
  }
@@ -236,6 +245,13 @@ function edd_has_user_purchased( $user_id, $downloads, $variable_price_id = null
236
  }
237
  }
238
 
 
 
 
 
 
 
 
239
  return $return;
240
  }
241
 
204
  return false;
205
  }
206
 
207
+ /**
208
+ * @since 2.7.7
209
+ *
210
+ * Allow 3rd parties to take actions before the history is queried.
211
+ */
212
+ do_action( 'edd_has_user_purchased_before', $user_id, $downloads, $variable_price_id );
213
+
214
  $users_purchases = edd_get_users_purchases( $user_id );
215
 
216
  $return = false;
230
  $variable_prices = edd_has_variable_prices( $download['id'] );
231
  if ( $variable_prices && ! is_null( $variable_price_id ) && $variable_price_id !== false ) {
232
  if ( isset( $download['item_number']['options']['price_id'] ) && $variable_price_id == $download['item_number']['options']['price_id'] ) {
233
+ $return = true;
234
+ break 2; // Get out to prevent this value being overwritten if the customer has purchased item twice
235
  } else {
236
  $return = false;
237
  }
238
  } else {
239
  $return = true;
240
+ break 2; // Get out to prevent this value being overwritten if the customer has purchased item twice
241
  }
242
  }
243
  }
245
  }
246
  }
247
 
248
+ /**
249
+ * @since 2.7.7
250
+ *
251
+ * Filter has purchased result
252
+ */
253
+ $return = apply_filters( 'edd_has_user_purchased', $return, $user_id, $downloads, $variable_price_id );
254
+
255
  return $return;
256
  }
257
 
readme.txt CHANGED
@@ -1,59 +1,82 @@
1
  === Easy Digital Downloads ===
2
  Author URI: https://easydigitaldownloads.com
3
  Plugin URI: https://easydigitaldownloads.com
4
- Contributors: easydigitaldownloads, mordauk, sunnyratilal, chriscct7, section214, sumobi, sdavis2702, cklosows, mindctrl, sksmatt, SpencerFinnell, johnstonphilip
5
  Donate link: https://easydigitaldownloads.com/donate/
6
- Tags: download, downloads, e-store, eshop, digital downloads, e-commerce, wp-ecommerce, wp ecommerce
7
  Requires at least: 4.0
8
  Tested up to: 4.8
9
- Stable Tag: 2.7.6
10
-
11
  License: GNU Version 2 or Any Later Version
12
 
13
  The easiest way to sell digital products with WordPress.
14
 
15
  == Description ==
16
 
17
- Easy Digital Downloads is a complete e-commerce solution for selling digital and other non-physical products in a light, performant, and easy to use plugin. Rather than attempting to provide every feature under the sun, Easy Digital Downloads makes selling digital simple and complete by providing just the features you need.
 
 
 
 
18
 
19
- Features of the plugin include:
20
 
21
- * Cart system for purchasing multiple downloads at once
22
- * Complete promotional code system
23
- * Many payment gateways. PayPal, Amazon, Test Payments are included by default with Stripe, PayPal Pro, PayPal Express, and others available as [extensions](https://easydigitaldownloads.com/downloads/category/extensions/gateways/?utm_source=gateways&utm_medium=description_tab&utm_content=gateways&utm_campaign=readme)
24
- * Complete payment history
25
- * User purchase history and ability to redownload files
26
- * Multiple files per downloadable product
27
- * Variable prices for multiple price options per product
28
- * Bundled products
29
- * Customizable purchase receipts
30
- * Earnings and sales charts
31
- * Detailed purchase and file download logs
32
- * Data export options for CSV and PDF
33
- * Add functionality with many [extensions](https://easydigitaldownloads.com/downloads/?utm_source=extensions&utm_medium=description_tab&utm_content=extensions&utm_campaign=readme)
34
- * Developer friendly with dozens of actions and filters. [View developer documentation](http://docs.easydigitaldownloads.com/collection/174-developer-docs?utm_source=docs&utm_medium=description_tab&utm_content=developer_docs&utm_campaign=readme)
35
 
36
- More information at [Easy Digital Downloads.com](https://easydigitaldownloads.com/?utm_source=home&utm_medium=description_tab&utm_content=home&utm_campaign=readme).
37
 
38
- [youtube https://www.youtube.com/watch?v=japHPcIFs4I]
39
 
40
- **Follow this plugin on [GitHub](https://github.com/easydigitaldownloads/easy-digital-downloads)**
41
 
42
- **Sell and Track Software License Keys**
 
43
 
44
- [Software Licensing](https://easydigitaldownloads.com/downloads/software-licensing/?utm_source=extension&utm_medium=description_tab&utm_content=software-licensing&utm_campaign=readme) for Easy Digital Downloads provides a complete license key generation, activation, and checking system. It allows you to provide license keys along with your digital products that can then be used to properly license and activate the buyer's copy of the software.
45
 
46
- Includes a complete integration pack for delivering automatic upgrades for premium WordPress plugins and themes.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
47
 
48
- **Build Up Your Email Subscribers**
49
 
50
- With extensions for [MailChimp](https://easydigitaldownloads.com/downloads/mail-chimp/?utm_source=extension&utm_medium=description_tab&utm_content=mail-chimp&utm_campaign=readme), [Campaign Monitor](https://easydigitaldownloads.com/downloads/campaign-monitor/?utm_source=extension&utm_medium=description_tab&utm_content=campaign-monitor&utm_campaign=readme), and [AWeber](https://easydigitaldownloads.com/downloads/aweber/?utm_source=extension&utm_medium=description_tab&utm_content=aweber&utm_campaign=readme), [Wysija](https://easydigitaldownloads.com/downloads/wysija/?utm_source=extension&utm_medium=description_tab&utm_content=wysija&utm_campaign=readme), [ActiveCampaign](https://easydigitaldownloads.com/downloads/active-campaign/?utm_source=extension&utm_medium=description_tab&utm_content=active-campaign&utm_campaign=readme), [GetResponse](https://easydigitaldownloads.com/downloads/getresponse/?utm_source=extension&utm_medium=description_tab&utm_content=getresponse&utm_campaign=readme), [ConvertKit](https://easydigitaldownloads.com/downloads/convertkit/?utm_source=extension&utm_medium=description_tab&utm_content=convertkit&utm_campaign=readme), [Constant Contact](https://easydigitaldownloads.com/downloads/constant-contact/?utm_source=extension&utm_medium=description_tab&utm_content=constant-contact&utm_campaign=readme), and more, Easy Digital Downloads can easily grow your email subscription lists while making you money at the same time.
51
 
52
- **Languages**
53
 
54
- Easy Digital Downloads has been translated into more than two dozen languages. The complete list of languages can be found in our [FAQ](http://docs.easydigitaldownloads.com/article/1082-what-spoken-languages-does-easy-digital-downloads-support?utm_source=docs&utm_medium=description_tab&utm_content=languages&utm_campaign=readme).
 
 
 
 
 
 
 
 
 
 
 
 
55
 
56
- Would you like to help translate the plugin into more languages? [Join our WP-Translations Community](http://docs.easydigitaldownloads.com/article/1023-translating-easy-digital-downloads?utm_source=docs&utm_medium=description_tab&utm_content=translating&utm_campaign=readme).
 
 
 
 
57
 
58
  == Installation ==
59
 
@@ -69,6 +92,10 @@ Would you like to help translate the plugin into more languages? [Join our WP-Tr
69
 
70
  Full searchable docs can be found at [http://docs.easydigitaldownloads.com/](http://docs.easydigitaldownloads.com/?utm_source=docs&utm_medium=faq_tab&utm_content=documentation&utm_campaign=readme)
71
 
 
 
 
 
72
  = Is an SSL certificate required? =
73
 
74
  Easy Digital Downloads can function without one just fine, making it easy to set up in a testing or development environment. We still strongly recommend you have an SSL certificate for your production web site, both for security and for the peace of mind of your customers. [Documentation here](http://docs.easydigitaldownloads.com/article/994-how-to-set-up-ssl?utm_source=docs&utm_medium=faq_tab&utm_content=documentation&utm_campaign=readme)
@@ -81,14 +108,6 @@ That said, we have a nice collection of free themes that come with support for E
81
 
82
  [See the free themes here.](https://easydigitaldownloads.com/themes/?utm_source=docs&utm_medium=faq_tab&utm_term=free_themes&utm_content=faqs&utm_campaign=readme)
83
 
84
- = How do I Show My Shopping Cart? =
85
-
86
- There are two ways you can show the downloads shopping cart:
87
-
88
- 1. Use the shortcode and simply place [download_cart] on a page or within a text widget.
89
-
90
- 2. Use the included widget. Go to Appearance > Widgets and place the "Downloads Cart" widget into any widget area available.
91
-
92
  = Is there a sample import file I can use to setup a demo store? =
93
 
94
  Yes! Simply go to Tools > Import and install the WordPress Importer, then navigate to wp-content/plugins/easy-digital-downloads/assets/ and select the sample-products-import.xml file. This will create several sample products and plugin pages for you.
@@ -130,9 +149,9 @@ Yes, EDD has an extension that allows for downloadable invoices to be generated
130
 
131
  Yes, through the use of our commercial addon called [Recurring Payments](https://easydigitaldownloads.com/downloads/recurring-payments/?utm_source=docs&utm_medium=faq_tab&utm_term=recurring_addon&utm_content=faqs&utm_campaign=readme). [Full documentation here](http://docs.easydigitaldownloads.com/article/1142-recurring-payments---overview?utm_source=docs&utm_medium=faq_tab&utm_term=recurring_addon&utm_content=faqs&utm_campaign=readme)
132
 
133
- = Can Users Purchase Products without Using PayPal? =
134
 
135
- Yes, through the addition of one or more of the add-on payment gateways, you can accept payments in many different ways. Here are some of the gateways currently found on our [complete list](https://easydigitaldownloads.com/downloads/category/extensions/gateways/?utm_source=docs&utm_medium=faq_tab&utm_term=gateways&utm_content=faqs&utm_campaign=readme):
136
 
137
  * [Stripe](https://easydigitaldownloads.com/downloads/stripe-payment-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=stripe-payment-gateway&utm_campaign=readme)
138
  * [PayPal Pro/Express](https://easydigitaldownloads.com/downloads/paypal-pro-express/?utm_source=gateway&utm_medium=faq_tab&utm_content=paypal-pro-express&utm_campaign=readme)
@@ -194,10 +213,25 @@ Yes, through the addition of one or more of the add-on payment gateways, you can
194
 
195
  == Changelog ==
196
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
197
  = 2.7.6, March 24, 2017 =
198
 
199
  * New: Added new hooks to customer details page
200
- * New: Email tags are now processewd in the Purchase Email heading
201
  * Fix: User dropdown field does not always show selected user
202
  * Fix: Payment field for Amazon Payments gateway not properly shown after authenticating with Amazon
203
  * Fix: edd-page class improperly added to all site pages when Test Mode is enabled
@@ -211,7 +245,7 @@ Yes, through the addition of one or more of the add-on payment gateways, you can
211
  * Fix: Custom "Complete Purchase Text" not used if payment submission results in error
212
  * Fix: Incorrect date set for "end_date" in EDD_Stats class
213
  * Fix: Price option not properly added when using custom add to cart links for variable priced product and not price ID is supplied
214
- * Fix: Fees that are taxede get counted twice in tax total
215
 
216
  = 2.7.5, March 6, 2017 =
217
 
1
  === Easy Digital Downloads ===
2
  Author URI: https://easydigitaldownloads.com
3
  Plugin URI: https://easydigitaldownloads.com
4
+ Contributors: easydigitaldownloads, mordauk, sunnyratilal, chriscct7, section214, sumobi, sdavis2702, cklosows, mindctrl, sksmatt, SpencerFinnell, johnstonphilip, brashrebel
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.0
8
  Tested up to: 4.8
9
+ Stable Tag: 2.7.7
 
10
  License: GNU Version 2 or Any Later Version
11
 
12
  The easiest way to sell digital products with WordPress.
13
 
14
  == Description ==
15
 
16
+ Easy Digital Downloads is a complete eCommerce solution for selling digital products on WordPress. Learn more at [Easy Digital Downloads.com](https://easydigitaldownloads.com/?utm_source=home&utm_medium=description_tab&utm_content=home&utm_campaign=readme).
17
+
18
+ = Sell effortlessly =
19
+
20
+ Whether it is software, documents, photos, ebooks, songs, graphics, or any other type of media file, Easy Digtal Downloads provides a complete system for effortlessly selling your digital products.
21
 
22
+ = Localized for your language =
23
 
24
+ Easy Digital Downloads has been translated into more than two dozen languages and new translation are being added all the time, letting you have a natural, native experience, regardless of where you live. If your language is not available, we welcome translation contributions! See our [FAQ](http://docs.easydigitaldownloads.com/article/1082-what-spoken-languages-does-easy-digital-downloads-support?utm_source=docs&utm_medium=description_tab&utm_content=languages&utm_campaign=readme).
 
 
 
 
 
 
 
 
 
 
 
 
 
25
 
26
+ = Payment gateways for everyone =
27
 
28
+ The internet has made it possible for anyone to sell their products to a world-wide audience. No matter where you live, Easy Digital Downloads can work for you. We offer integrations for the most common merchant processors and, through 3rd party extensions, support for many, many more as well.
29
 
30
+ Payment gateways supported in the core, free plugin:
31
 
32
+ * PayPal Standard
33
+ * Amazon Payments
34
 
35
+ Payment gateways supported through free or premium extension:
36
 
37
+ * Stripe
38
+ * PayPal Pro
39
+ * PayPal Express
40
+ * PayPal Payments Advanced
41
+ * PayPal Adaptive Payments
42
+ * Braintree
43
+ * Authorize.net
44
+ * 2Checkout
45
+ * Recurly
46
+ * SOFORT Banking
47
+ * NETbilling
48
+ * BitPay
49
+ * Coinbase
50
+ * Moneybookers / Skrill
51
+ * Payza
52
+ * MercadoPago
53
+ * PagSeguro
54
 
55
+ See our [gateways category](https://easydigitaldownloads.com/downloads/category/gateways/?utm_source=extensions&utm_medium=description_tab&utm_content=gateways&utm_campaign=readme) in the extensions catalogue for a complete list of supported gateways. There are also a large number of additional gateways developed and supported by [3rd party developers](https://easydigitaldownloads.com/3rd-party-extensions/#gateways).
56
 
57
+ = Go further with extensions =
58
 
59
+ With add-on plugins from our [extensions catalogue](https://easydigitaldownloads.com/downloads/?utm_source=extensions&utm_medium=description_tab&utm_content=extensions&utm_campaign=readme) you can super-charge your digital store. Some of our extension highlights include:
60
 
61
+ * [Software Licensing](https://easydigitaldownloads.com/downloads/software-licensing/?utm_source=extension&utm_medium=description_tab&utm_content=software-licensing&utm_campaign=readme) provides a complete solution for selling software license keys
62
+ * [Recurring Payments](https://easydigitaldownloads.com/downloads/recurring-payments/?utm_source=extension&utm_medium=description_tab&utm_content=recurring-payments&utm_campaign=readme) allows store owners to sell recurring subscriptions for digital products
63
+ * [Frontend Submissions](https://easydigitaldownloads.com/downloads/frontend-submissions/?utm_source=extension&utm_medium=description_tab&utm_content=frontend-submissions&utm_campaign=readme) transforms your store into a full-featured multi-vendor marketplace
64
+ * [Commissions](https://easydigitaldownloads.com/downloads/commissions/?utm_source=extension&utm_medium=description_tab&utm_content=commissions&utm_campaign=readme) enables store owners to easily track earnings for product vendors
65
+ * [Free Downloads](https://easydigitaldownloads.com/downloads/free-downloads/?utm_source=extension&utm_medium=description_tab&utm_content=free-downloads&utm_campaign=readme) allows free products to be purchased more easily by bypassing the standard checkout process
66
+ * [Zapier](https://easydigitaldownloads.com/downloads/zapier/?utm_source=extension&utm_medium=description_tab&utm_content=zapier&utm_campaign=readme) automates your store by connecting Easy Digital Downloads with more than 700 other web services and products
67
+ * [Reviews](https://easydigitaldownloads.com/downloads/product-reviews/?utm_source=extension&utm_medium=description_tab&utm_content=reviews&utm_campaign=readme) allows customers to leave reviews and feedback on the products they have purchased
68
+ * [Recommended Products](https://easydigitaldownloads.com/downloads/recommended-products/?utm_source=extension&utm_medium=description_tab&utm_content=recommended-products&utm_campaign=readme) increases revenue by showing customers recommendations on additional products to purchase based on real sales data
69
+ * [Content Restriction](https://easydigitaldownloads.com/downloads/content-restriction/?utm_source=extension&utm_medium=description_tab&utm_content=content-restriction&utm_campaign=readme) allows site owners to restrict access to page content to paying customers
70
+ * [MailChimp](https://easydigitaldownloads.com/downloads/mailchimp/?utm_source=extension&utm_medium=description_tab&utm_content=mailchimp&utm_campaign=readme) connects your store to your MailChimp account so you can easily subscribe customers to email lists based on what they purchase
71
+ * [AWeber](https://easydigitaldownloads.com/downloads/aweber/?utm_source=extension&utm_medium=description_tab&utm_content=aweber&utm_campaign=readme) connects your store to your AWeber account so you can easily subscribe customers to email lists based on what they purchase
72
+ * [Amazon S3](https://easydigitaldownloads.com/downloads/amazon-s3/?utm_source=extension&utm_medium=description_tab&utm_content=amazon-s3&utm_campaign=readme) lets you securely host files on Amazon S3 for more reliable and secure file delivery
73
+ * [Dropbox File Store](https://easydigitaldownloads.com/downloads/dropbox-file-store//?utm_source=extension&utm_medium=description_tab&utm_content=dropbox-file-store/&utm_campaign=readme) lets you securely host files in your Dropbox account for more reliable and secure file delivery
74
 
75
+ These are just a few of the extensions we offer to help super-charge your digital store. See our complete [extensions catalogue](https://easydigitaldownloads.com/downloads/?utm_source=extensions&utm_medium=description_tab&utm_content=extensions&utm_campaign=readme) for more. There are also hundreds of extensions created by Easy Digital Downloads community members, which can be found on our [3rd Party Extensions page](https://easydigitaldownloads.com/3rd-party-extensions/?utm_source=3rd-party-extensions&utm_medium=description_tab&utm_content=3rd-party-extensions&utm_campaign=readme).
76
+
77
+ = Built with developers in mind =
78
+
79
+ Extendable, adaptable, and open source -- Easy Digital Downloads is created with developers in mind. Contribute on [GitHub](https://github.com/easydigitaldownloads/easy-digital-downloads).
80
 
81
  == Installation ==
82
 
92
 
93
  Full searchable docs can be found at [http://docs.easydigitaldownloads.com/](http://docs.easydigitaldownloads.com/?utm_source=docs&utm_medium=faq_tab&utm_content=documentation&utm_campaign=readme)
94
 
95
+ = Where can I ask for help? =
96
+
97
+ You can submit a support ticket or pre-sale question from our [support page](http://docs.easydigitaldownloads.com/support?utm_source=docs&utm_medium=faq_tab&utm_content=support&utm_campaign=readme) at anytime.
98
+
99
  = Is an SSL certificate required? =
100
 
101
  Easy Digital Downloads can function without one just fine, making it easy to set up in a testing or development environment. We still strongly recommend you have an SSL certificate for your production web site, both for security and for the peace of mind of your customers. [Documentation here](http://docs.easydigitaldownloads.com/article/994-how-to-set-up-ssl?utm_source=docs&utm_medium=faq_tab&utm_content=documentation&utm_campaign=readme)
108
 
109
  [See the free themes here.](https://easydigitaldownloads.com/themes/?utm_source=docs&utm_medium=faq_tab&utm_term=free_themes&utm_content=faqs&utm_campaign=readme)
110
 
 
 
 
 
 
 
 
 
111
  = Is there a sample import file I can use to setup a demo store? =
112
 
113
  Yes! Simply go to Tools > Import and install the WordPress Importer, then navigate to wp-content/plugins/easy-digital-downloads/assets/ and select the sample-products-import.xml file. This will create several sample products and plugin pages for you.
149
 
150
  Yes, through the use of our commercial addon called [Recurring Payments](https://easydigitaldownloads.com/downloads/recurring-payments/?utm_source=docs&utm_medium=faq_tab&utm_term=recurring_addon&utm_content=faqs&utm_campaign=readme). [Full documentation here](http://docs.easydigitaldownloads.com/article/1142-recurring-payments---overview?utm_source=docs&utm_medium=faq_tab&utm_term=recurring_addon&utm_content=faqs&utm_campaign=readme)
151
 
152
+ = Can customers purchase products without using PayPal? =
153
 
154
+ Yes. Easy Digital Downloads also includes default support for Amazon Payments and support for numerous other payment methods through add-on payment gateways. Here are some of the gateways [currently available](https://easydigitaldownloads.com/downloads/category/extensions/gateways/?utm_source=docs&utm_medium=faq_tab&utm_term=gateways&utm_content=faqs&utm_campaign=readme):
155
 
156
  * [Stripe](https://easydigitaldownloads.com/downloads/stripe-payment-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=stripe-payment-gateway&utm_campaign=readme)
157
  * [PayPal Pro/Express](https://easydigitaldownloads.com/downloads/paypal-pro-express/?utm_source=gateway&utm_medium=faq_tab&utm_content=paypal-pro-express&utm_campaign=readme)
213
 
214
  == Changelog ==
215
 
216
+ = 2.7.7, April 3, 2017 =
217
+
218
+ * Fix: User ID not properly assigned during some payment imports
219
+ * Fix: Discount codes sometimes changed to inactive improperly
220
+ * Fix: Incorrect variable name in add-on updater
221
+ * Fix: edd_has_user_purchased() can return false incorrectly
222
+ * Fix: File price assignment fails when set to the first price on old products
223
+ * Fix: Last Month report showing incorrect numbers
224
+ * Fix: Incorrect class name on customer details page
225
+ * Tweak: Improved error message shown when viewing a receipt after purchase session has expired
226
+ * Tweak: Added new filter and action to edd_has_user_purchased()
227
+ * Tweak: Renamed Czech Republic to Czechia
228
+ * Tweak: Log in form on checkout now accepts log-in by email
229
+ * Tweak: Addewd new edd_download_inner_class filter
230
+
231
  = 2.7.6, March 24, 2017 =
232
 
233
  * New: Added new hooks to customer details page
234
+ * New: Email tags are now processed in the Purchase Email heading
235
  * Fix: User dropdown field does not always show selected user
236
  * Fix: Payment field for Amazon Payments gateway not properly shown after authenticating with Amazon
237
  * Fix: edd-page class improperly added to all site pages when Test Mode is enabled
245
  * Fix: Custom "Complete Purchase Text" not used if payment submission results in error
246
  * Fix: Incorrect date set for "end_date" in EDD_Stats class
247
  * Fix: Price option not properly added when using custom add to cart links for variable priced product and not price ID is supplied
248
+ * Fix: Fees that are taxed get counted twice in tax total
249
 
250
  = 2.7.5, March 6, 2017 =
251