Version Description
Download this release
Release Info
Developer | cklosows |
Plugin | Easy Digital Downloads |
Version | 2.9.2 |
Comparing to | |
See all releases |
Code changes from version 2.9.1 to 2.9.2
- assets/js/edd-ajax.js +1 -1
- assets/js/edd-ajax.min.js +1 -1
- easy-digital-downloads.php +4 -3
- includes/admin/admin-actions.php +1 -1
- includes/admin/customers/customers.php +80 -0
- includes/admin/reporting/class-file-downloads-logs-list-table.php +35 -62
- includes/admin/settings/register-settings.php +81 -27
- includes/admin/upgrades/classes/class-file-download-log-migration.php +273 -0
- includes/admin/upgrades/upgrade-functions.php +120 -0
- includes/admin/upgrades/upgrades.php +70 -52
- includes/api/class-edd-api-v2.php +1 -1
- includes/api/class-edd-api.php +1 -1
- includes/checkout/template.php +7 -7
- includes/class-edd-cli.php +127 -0
- includes/download-functions.php +10 -10
- includes/install.php +2 -1
- includes/payments/class-edd-payment.php +5 -2
- includes/payments/class-payments-query.php +20 -1
- includes/payments/functions.php +34 -12
- includes/privacy-functions.php +1374 -0
- includes/shortcodes.php +7 -1
- includes/user-functions.php +26 -8
- languages/easy-digital-downloads.pot +531 -197
- readme.txt +15 -3
- templates/edd.css +2 -2
- templates/edd.min.css +1 -1
- templates/history-downloads.php +1 -1
- templates/shortcode-profile-editor.php +1 -1
assets/js/edd-ajax.js
CHANGED
@@ -381,7 +381,7 @@ jQuery(document).ready(function ($) {
|
|
381 |
}
|
382 |
|
383 |
// Process checkout
|
384 |
-
$(document).on('click', '#edd_purchase_form #edd_purchase_submit
|
385 |
|
386 |
var eddPurchaseform = document.getElementById('edd_purchase_form');
|
387 |
|
381 |
}
|
382 |
|
383 |
// Process checkout
|
384 |
+
$(document).on('click', '#edd_purchase_form #edd_purchase_submit [type=submit]', function(e) {
|
385 |
|
386 |
var eddPurchaseform = document.getElementById('edd_purchase_form');
|
387 |
|
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 input[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 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()})});
|
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.
|
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.
|
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.
|
210 |
}
|
211 |
|
212 |
// Plugin Folder Path.
|
@@ -311,6 +311,7 @@ final class Easy_Digital_Downloads {
|
|
311 |
require_once EDD_PLUGIN_DIR . 'includes/login-register.php';
|
312 |
require_once EDD_PLUGIN_DIR . 'includes/shortcodes.php';
|
313 |
require_once EDD_PLUGIN_DIR . 'includes/admin/tracking.php'; // Must be loaded on frontend to ensure cron runs
|
|
|
314 |
|
315 |
if ( is_admin() || ( defined( 'WP_CLI' ) && WP_CLI ) ) {
|
316 |
require_once EDD_PLUGIN_DIR . 'includes/admin/add-ons.php';
|
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.2
|
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.2
|
29 |
*/
|
30 |
|
31 |
// Exit if accessed directly.
|
206 |
|
207 |
// Plugin version.
|
208 |
if ( ! defined( 'EDD_VERSION' ) ) {
|
209 |
+
define( 'EDD_VERSION', '2.9.2' );
|
210 |
}
|
211 |
|
212 |
// Plugin Folder Path.
|
311 |
require_once EDD_PLUGIN_DIR . 'includes/login-register.php';
|
312 |
require_once EDD_PLUGIN_DIR . 'includes/shortcodes.php';
|
313 |
require_once EDD_PLUGIN_DIR . 'includes/admin/tracking.php'; // Must be loaded on frontend to ensure cron runs
|
314 |
+
require_once EDD_PLUGIN_DIR . 'includes/privacy-functions.php';
|
315 |
|
316 |
if ( is_admin() || ( defined( 'WP_CLI' ) && WP_CLI ) ) {
|
317 |
require_once EDD_PLUGIN_DIR . 'includes/admin/add-ons.php';
|
includes/admin/admin-actions.php
CHANGED
@@ -78,7 +78,7 @@ function edd_display_product_tabs() {
|
|
78 |
?>
|
79 |
|
80 |
<a href="<?php echo admin_url( 'post-new.php?post_type=download' ); ?>" class="page-title-action">
|
81 |
-
<?php _e( 'Add New' ); // No text domain so it just follows what WP Core does ?>
|
82 |
</a>
|
83 |
</h2>
|
84 |
<br />
|
78 |
?>
|
79 |
|
80 |
<a href="<?php echo admin_url( 'post-new.php?post_type=download' ); ?>" class="page-title-action">
|
81 |
+
<?php _e( 'Add New', 'easy-digital-downloads' ); // No text domain so it just follows what WP Core does ?>
|
82 |
</a>
|
83 |
</h2>
|
84 |
<br />
|
includes/admin/customers/customers.php
CHANGED
@@ -525,6 +525,86 @@ function edd_customer_notes_view( $customer ) {
|
|
525 |
<div class="edd-item-notes-header">
|
526 |
<?php echo get_avatar( $customer->email, 30 ); ?> <span><?php echo $customer->name; ?></span>
|
527 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
528 |
<h3><?php _e( 'Notes', 'easy-digital-downloads' ); ?></h3>
|
529 |
|
530 |
<?php if ( 1 == $paged ) : ?>
|
525 |
<div class="edd-item-notes-header">
|
526 |
<?php echo get_avatar( $customer->email, 30 ); ?> <span><?php echo $customer->name; ?></span>
|
527 |
</div>
|
528 |
+
<?php
|
529 |
+
$show_agree_to_terms = edd_get_option( 'show_agree_to_terms', false );
|
530 |
+
$show_agree_to_privacy = edd_get_option( 'show_agree_to_privacy_policy', false );
|
531 |
+
|
532 |
+
$agreement_timestamps = $customer->get_meta( 'agree_to_terms_time', false );
|
533 |
+
$privacy_timestamps = $customer->get_meta( 'agree_to_privacy_time', false );
|
534 |
+
|
535 |
+
$payments = edd_get_payments( array(
|
536 |
+
'output' => 'payments',
|
537 |
+
'post__in' => explode( ',', $customer->payment_ids ),
|
538 |
+
'orderby' => 'date',
|
539 |
+
'posts_per_page' => 1
|
540 |
+
));
|
541 |
+
|
542 |
+
$last_payment_date = '';
|
543 |
+
|
544 |
+
foreach ( $payments as $payment ) {
|
545 |
+
if ( empty( $payment->gateway ) ) {
|
546 |
+
continue;
|
547 |
+
}
|
548 |
+
|
549 |
+
// We should be using `date` here, as that is the date the button was clicked.
|
550 |
+
$last_payment_date = strtotime( $payment->date );
|
551 |
+
break;
|
552 |
+
}
|
553 |
+
|
554 |
+
if ( is_array( $agreement_timestamps ) ) {
|
555 |
+
$agreement_timestamp = array_pop( $agreement_timestamps );
|
556 |
+
}
|
557 |
+
|
558 |
+
if ( is_array( $privacy_timestamps ) ) {
|
559 |
+
$privacy_timestamp = array_pop( $privacy_timestamps );
|
560 |
+
}
|
561 |
+
|
562 |
+
?>
|
563 |
+
|
564 |
+
<h3><?php _e( 'Agreements', 'easy-digital-downloads' ); ?></h3>
|
565 |
+
|
566 |
+
<span class="customer-terms-agreement-date info-item">
|
567 |
+
<?php _e( 'Last Agreed to Terms', 'easy-digital-downloads' ); ?>:
|
568 |
+
<?php if ( ! empty( $agreement_timestamp ) ) : ?>
|
569 |
+
<?php echo date_i18n( get_option( 'date_format' ) . ' H:i:s', $agreement_timestamp ); ?>
|
570 |
+
<?php if ( ! empty( $agreement_timestamps ) ) : ?>
|
571 |
+
<span alt="f223" class="edd-help-tip dashicons dashicons-editor-help" title="<strong><?php _e( 'Previous Agreement Dates', 'easy-digital-downloads' ); ?></strong><br /><?php foreach ( $agreement_timestamps as $timestamp ) { echo date_i18n( get_option( 'date_format' ) . ' H:i:s', $timestamp ); } ?>"></span>
|
572 |
+
<?php endif; ?>
|
573 |
+
<?php else: ?>
|
574 |
+
<?php
|
575 |
+
if ( empty( $last_payment_date ) ) {
|
576 |
+
_e( 'No date found.', 'easy-digital-downloads' );
|
577 |
+
} else {
|
578 |
+
echo date_i18n( get_option( 'date_format' ) . ' H:i:s', $last_payment_date );
|
579 |
+
?>
|
580 |
+
<span alt="f223" class="edd-help-tip dashicons dashicons-editor-help" title="<strong><?php _e( 'Estimated Privacy Policy Date', 'easy-digital-downloads' ); ?></strong><br /><?php _e( 'This customer made a purchase prior to agreement dates being logged, this is the date of their last purchase. If your site was displaying the agreement checkbox at that time, this is our best estimate as to when they last agreed to your terms.', 'easy-digital-downloads' ); ?>"></span>
|
581 |
+
<?php
|
582 |
+
}
|
583 |
+
?>
|
584 |
+
<?php endif; ?>
|
585 |
+
</span>
|
586 |
+
|
587 |
+
<span class="customer-privacy-policy-date info-item">
|
588 |
+
<?php _e( 'Last Agreed to Privacy Policy', 'easy-digital-downloads' ); ?>:
|
589 |
+
<?php if ( ! empty( $privacy_timestamp ) ) : ?>
|
590 |
+
<?php echo date_i18n( get_option( 'date_format' ) . ' H:i:s', $privacy_timestamp ); ?>
|
591 |
+
<?php if ( ! empty( $privacy_timestamps ) ) : ?>
|
592 |
+
<span alt="f223" class="edd-help-tip dashicons dashicons-editor-help" title="<strong><?php _e( 'Previous Agreement Dates', 'easy-digital-downloads' ); ?></strong><br /><?php foreach ( $privacy_timestamps as $timestamp ) { echo date_i18n( get_option( 'date_format' ) . ' H:i:s', $timestamp ); } ?>"></span>
|
593 |
+
<?php endif; ?>
|
594 |
+
<?php else: ?>
|
595 |
+
<?php
|
596 |
+
if ( empty( $last_payment_date ) ) {
|
597 |
+
_e( 'No date found.', 'easy-digital-downloads' );
|
598 |
+
} else {
|
599 |
+
echo date_i18n( get_option( 'date_format' ) . ' H:i:s', $last_payment_date );
|
600 |
+
?>
|
601 |
+
<span alt="f223" class="edd-help-tip dashicons dashicons-editor-help" title="<strong><?php _e( 'Estimated Privacy Policy Date', 'easy-digital-downloads' ); ?></strong><br /><?php _e( 'This customer made a purchase prior to privacy policy dates being logged, this is the date of their last purchase. If your site was displaying the privacy policy checkbox at that time, this is our best estimate as to when they last agreed to your privacy policy.', 'easy-digital-downloads' ); ?>"></span>
|
602 |
+
<?php
|
603 |
+
}
|
604 |
+
?>
|
605 |
+
<?php endif; ?>
|
606 |
+
</span>
|
607 |
+
|
608 |
<h3><?php _e( 'Notes', 'easy-digital-downloads' ); ?></h3>
|
609 |
|
610 |
<?php if ( 1 == $paged ) : ?>
|
includes/admin/reporting/class-file-downloads-logs-list-table.php
CHANGED
@@ -118,6 +118,7 @@ class EDD_File_Downloads_Log_Table extends WP_List_Table {
|
|
118 |
* @return string Column Name
|
119 |
*/
|
120 |
public function column_default( $item, $column_name ) {
|
|
|
121 |
switch ( $column_name ) {
|
122 |
case 'download' :
|
123 |
$download = new EDD_Download( $item[ $column_name ] );
|
@@ -127,9 +128,9 @@ class EDD_File_Downloads_Log_Table extends WP_List_Table {
|
|
127 |
$column_value .= ' — ' . edd_get_price_option_name( $download->ID, $item['price_id'] );
|
128 |
}
|
129 |
|
130 |
-
return '<a href="' . add_query_arg( 'download', $download->ID ) . '" >' . $column_value . '</a>';
|
131 |
case 'customer' :
|
132 |
-
return '<a href="' . add_query_arg( '
|
133 |
case 'payment_id' :
|
134 |
return $item['payment_id'] !== false ? '<a href="' . admin_url( 'edit.php?post_type=download&page=edd-payment-history&view=view-order-details&id=' . $item['payment_id'] ) . '">' . edd_get_payment_number( $item['payment_id'] ) . '</a>' : '';
|
135 |
case 'ip' :
|
@@ -159,19 +160,18 @@ class EDD_File_Downloads_Log_Table extends WP_List_Table {
|
|
159 |
}
|
160 |
|
161 |
/**
|
162 |
-
* Retrieves the
|
163 |
*
|
164 |
* @since 1.4
|
165 |
-
* @return mixed int If
|
166 |
*/
|
167 |
-
public function
|
168 |
$ret = false;
|
169 |
|
170 |
-
if( isset( $_GET['
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
$ret = sanitize_text_field( $_GET['user'] );
|
175 |
}
|
176 |
}
|
177 |
|
@@ -217,25 +217,9 @@ class EDD_File_Downloads_Log_Table extends WP_List_Table {
|
|
217 |
* @return array $meta_query
|
218 |
*/
|
219 |
public function get_meta_query() {
|
220 |
-
$
|
221 |
-
$payment
|
222 |
-
$meta_query
|
223 |
-
|
224 |
-
if ( $user ) {
|
225 |
-
// Show only logs from a specific user
|
226 |
-
if( is_numeric( $user ) ) {
|
227 |
-
$meta_query[] = array(
|
228 |
-
'key' => '_edd_log_user_id',
|
229 |
-
'value' => $user,
|
230 |
-
);
|
231 |
-
} else {
|
232 |
-
$meta_query[] = array(
|
233 |
-
'key' => '_edd_log_user_info',
|
234 |
-
'value' => $user,
|
235 |
-
'compare' => 'LIKE',
|
236 |
-
);
|
237 |
-
}
|
238 |
-
}
|
239 |
|
240 |
if ( $payment ) {
|
241 |
// Show only logs from a specific payment
|
@@ -245,7 +229,11 @@ class EDD_File_Downloads_Log_Table extends WP_List_Table {
|
|
245 |
);
|
246 |
}
|
247 |
|
248 |
-
|
|
|
|
|
|
|
|
|
249 |
|
250 |
if ( ! empty( $search ) ) {
|
251 |
if ( filter_var( $search, FILTER_VALIDATE_IP ) ) {
|
@@ -253,40 +241,26 @@ class EDD_File_Downloads_Log_Table extends WP_List_Table {
|
|
253 |
$key = '_edd_log_ip';
|
254 |
$compare = '=';
|
255 |
} else if ( is_email( $search ) ) {
|
256 |
-
|
257 |
-
$
|
258 |
-
|
|
|
|
|
|
|
259 |
} else {
|
260 |
-
|
261 |
-
|
262 |
-
$compare = 'LIKE';
|
263 |
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
if ( $user ) {
|
269 |
-
// Found one, set meta value to user's ID
|
270 |
-
$search = $user->ID;
|
271 |
} else {
|
272 |
-
|
273 |
-
$users = new WP_User_Query( array(
|
274 |
-
'search' => $search,
|
275 |
-
'search_columns' => array( 'user_url', 'user_nicename' ),
|
276 |
-
'number' => 1,
|
277 |
-
'fields' => 'ids',
|
278 |
-
) );
|
279 |
-
|
280 |
-
$found_user = $users->get_results();
|
281 |
-
|
282 |
-
if ( $found_user ) {
|
283 |
-
$search = $found_user[0];
|
284 |
-
} else {
|
285 |
-
// No users were found so let's look for file names instead
|
286 |
-
$this->file_search = true;
|
287 |
-
}
|
288 |
}
|
|
|
289 |
}
|
|
|
290 |
}
|
291 |
|
292 |
if ( ! $this->file_search ) {
|
@@ -383,11 +357,10 @@ class EDD_File_Downloads_Log_Table extends WP_List_Table {
|
|
383 |
foreach ( $logs as $log ) {
|
384 |
|
385 |
$meta = get_post_custom( $log->ID );
|
386 |
-
$user_info = isset( $meta['_edd_log_user_info'] ) ? maybe_unserialize( $meta['_edd_log_user_info'][0] ) : array();
|
387 |
$payment_id = isset( $meta['_edd_log_payment_id'] ) ? $meta['_edd_log_payment_id'][0] : false;
|
388 |
$ip = $meta['_edd_log_ip'][0];
|
389 |
-
$user_id = isset( $
|
390 |
-
$customer_id =
|
391 |
$price_id = edd_has_variable_prices( $log->post_parent ) ? get_post_meta( $log->ID, '_edd_log_price_id', true ) : false;
|
392 |
|
393 |
if( ! array_key_exists( $log->post_parent, $this->queried_files ) ) {
|
118 |
* @return string Column Name
|
119 |
*/
|
120 |
public function column_default( $item, $column_name ) {
|
121 |
+
$base_url = remove_query_arg( 'paged' );
|
122 |
switch ( $column_name ) {
|
123 |
case 'download' :
|
124 |
$download = new EDD_Download( $item[ $column_name ] );
|
128 |
$column_value .= ' — ' . edd_get_price_option_name( $download->ID, $item['price_id'] );
|
129 |
}
|
130 |
|
131 |
+
return '<a href="' . add_query_arg( 'download', $download->ID, $base_url ) . '" >' . $column_value . '</a>';
|
132 |
case 'customer' :
|
133 |
+
return '<a href="' . add_query_arg( 'customer', $item[ 'customer' ]->id, $base_url ) . '">' . $item['customer']->name . '</a>';
|
134 |
case 'payment_id' :
|
135 |
return $item['payment_id'] !== false ? '<a href="' . admin_url( 'edit.php?post_type=download&page=edd-payment-history&view=view-order-details&id=' . $item['payment_id'] ) . '">' . edd_get_payment_number( $item['payment_id'] ) . '</a>' : '';
|
136 |
case 'ip' :
|
160 |
}
|
161 |
|
162 |
/**
|
163 |
+
* Retrieves the customer we are filtering logs by, if any
|
164 |
*
|
165 |
* @since 1.4
|
166 |
+
* @return mixed int If customer ID, string If Email, false if not present
|
167 |
*/
|
168 |
+
public function get_filtered_customer() {
|
169 |
$ret = false;
|
170 |
|
171 |
+
if( isset( $_GET['customer'] ) ) {
|
172 |
+
$customer = new EDD_Customer( sanitize_text_field( $_GET['customer'] ) );
|
173 |
+
if ( ! empty( $customer->id ) ) {
|
174 |
+
$ret = $customer->id;
|
|
|
175 |
}
|
176 |
}
|
177 |
|
217 |
* @return array $meta_query
|
218 |
*/
|
219 |
public function get_meta_query() {
|
220 |
+
$customer_id = $this->get_filtered_customer();
|
221 |
+
$payment = $this->get_filtered_payment();
|
222 |
+
$meta_query = array();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
223 |
|
224 |
if ( $payment ) {
|
225 |
// Show only logs from a specific payment
|
229 |
);
|
230 |
}
|
231 |
|
232 |
+
if ( ! empty( $customer_id ) ) {
|
233 |
+
$search = $customer_id;
|
234 |
+
} else {
|
235 |
+
$search = $this->get_search();
|
236 |
+
}
|
237 |
|
238 |
if ( ! empty( $search ) ) {
|
239 |
if ( filter_var( $search, FILTER_VALIDATE_IP ) ) {
|
241 |
$key = '_edd_log_ip';
|
242 |
$compare = '=';
|
243 |
} else if ( is_email( $search ) ) {
|
244 |
+
$customer = new EDD_Customer( $search );
|
245 |
+
if ( ! empty( $customer->id ) ) {
|
246 |
+
$key = '_edd_log_customer_id';
|
247 |
+
$search = $customer->id;
|
248 |
+
$compare = '=';
|
249 |
+
}
|
250 |
} else {
|
251 |
+
if ( is_numeric( $search ) ) {
|
252 |
+
$customer = new EDD_Customer( $search );
|
|
|
253 |
|
254 |
+
if ( ! empty( $customer->id ) ) {
|
255 |
+
$key = '_edd_log_customer_id';
|
256 |
+
$search = $customer->id;
|
257 |
+
$compare = '=';
|
|
|
|
|
|
|
258 |
} else {
|
259 |
+
$this->file_search = true;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
260 |
}
|
261 |
+
|
262 |
}
|
263 |
+
|
264 |
}
|
265 |
|
266 |
if ( ! $this->file_search ) {
|
357 |
foreach ( $logs as $log ) {
|
358 |
|
359 |
$meta = get_post_custom( $log->ID );
|
|
|
360 |
$payment_id = isset( $meta['_edd_log_payment_id'] ) ? $meta['_edd_log_payment_id'][0] : false;
|
361 |
$ip = $meta['_edd_log_ip'][0];
|
362 |
+
$user_id = isset( $meta['_edd_log_user_id'] ) ? (int) $meta['_edd_log_user_id'][0] : null;
|
363 |
+
$customer_id = isset( $meta['_edd_log_customer_id'] ) ? (int) $meta['_edd_log_customer_id'][0] : null;
|
364 |
$price_id = edd_has_variable_prices( $log->post_parent ) ? get_post_meta( $log->ID, '_edd_log_price_id', true ) : false;
|
365 |
|
366 |
if( ! array_key_exists( $log->post_parent, $this->queried_files ) ) {
|
includes/admin/settings/register-settings.php
CHANGED
@@ -853,14 +853,6 @@ function edd_get_registered_settings() {
|
|
853 |
),
|
854 |
),
|
855 |
'site_terms' => array(
|
856 |
-
array(
|
857 |
-
'id' => 'terms_settings',
|
858 |
-
'name' => '<h3>' . __( 'Terms and Privacy Policy', 'easy-digital-downloads' ) . '</h3>',
|
859 |
-
'desc' => '',
|
860 |
-
'type' => 'header',
|
861 |
-
'tooltip_title' => __( 'Terms and Privacy Policy Settings', 'easy-digital-downloads' ),
|
862 |
-
'tooltip_desc' => __( 'Depending on legal and regulatory requirements, it may be necessary for your site to show checkboxes for Terms of Agreement and/or Privacy Policy.','easy-digital-downloads' ),
|
863 |
-
),
|
864 |
'show_agree_to_terms' => array(
|
865 |
'id' => 'show_agree_to_terms',
|
866 |
'name' => __( 'Agree to Terms', 'easy-digital-downloads' ),
|
@@ -880,39 +872,95 @@ function edd_get_registered_settings() {
|
|
880 |
'desc' => __( 'If Agree to Terms is checked, enter the agreement terms here.', 'easy-digital-downloads' ),
|
881 |
'type' => 'rich_editor',
|
882 |
),
|
|
|
|
|
|
|
|
|
|
|
|
|
883 |
'show_agree_to_privacy_policy' => array(
|
884 |
'id' => 'show_agree_to_privacy_policy',
|
885 |
'name' => __( 'Agree to Privacy Policy', 'easy-digital-downloads' ),
|
886 |
-
'desc' => __( 'Check this to show an agree to
|
887 |
'type' => 'checkbox',
|
888 |
),
|
889 |
'agree_privacy_label' => array(
|
890 |
'id' => 'privacy_agree_label',
|
891 |
'name' => __( 'Agree to Privacy Policy Label', 'easy-digital-downloads' ),
|
892 |
-
'desc' => __( 'Label shown next to the agree to
|
893 |
'type' => 'text',
|
894 |
'size' => 'regular',
|
895 |
),
|
896 |
'show_privacy_policy_on_checkout' => array(
|
897 |
-
'id' => '
|
898 |
-
'name' => __( 'Show the
|
899 |
-
'desc' => __( 'Display your
|
900 |
'type' => 'checkbox',
|
901 |
),
|
902 |
-
'agree_privacy_page' => array(
|
903 |
-
'id' => 'privacy_agree_page',
|
904 |
-
'name' => __( 'Privacy Agreement Page', 'easy-digital-downloads' ),
|
905 |
-
'desc' => __( 'If Agree to Privacy Policy is checked, select a page for the Privacy Agreement here.', 'easy-digital-downloads' ),
|
906 |
-
'type' => 'select',
|
907 |
-
'options' => edd_get_pages(),
|
908 |
-
'chosen' => true,
|
909 |
-
'placeholder' => __( 'Select a page', 'easy-digital-downloads' ),
|
910 |
-
),
|
911 |
),
|
|
|
912 |
)
|
913 |
)
|
914 |
);
|
915 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
916 |
if ( ! edd_shop_supports_buy_now() ) {
|
917 |
$edd_settings['misc']['button_text']['buy_now_text']['disabled'] = true;
|
918 |
$edd_settings['misc']['button_text']['buy_now_text']['tooltip_title'] = __( 'Buy Now Disabled', 'easy-digital-downloads' );
|
@@ -1204,10 +1252,11 @@ function edd_sanitize_text_field( $input ) {
|
|
1204 |
'id' => array(),
|
1205 |
),
|
1206 |
'a' => array(
|
1207 |
-
'href'
|
1208 |
-
'
|
1209 |
-
'
|
1210 |
-
'
|
|
|
1211 |
),
|
1212 |
'strong' => array(),
|
1213 |
'em' => array(),
|
@@ -1274,6 +1323,7 @@ function edd_get_settings_tabs() {
|
|
1274 |
$tabs['emails'] = __( 'Emails', 'easy-digital-downloads' );
|
1275 |
$tabs['styles'] = __( 'Styles', 'easy-digital-downloads' );
|
1276 |
$tabs['taxes'] = __( 'Taxes', 'easy-digital-downloads' );
|
|
|
1277 |
|
1278 |
if( ! empty( $settings['extensions'] ) ) {
|
1279 |
$tabs['extensions'] = __( 'Extensions', 'easy-digital-downloads' );
|
@@ -1355,6 +1405,10 @@ function edd_get_registered_settings_sections() {
|
|
1355 |
'accounting' => __( 'Accounting', 'easy-digital-downloads' ),
|
1356 |
'site_terms' => __( 'Terms of Agreement', 'easy-digital-downloads' ),
|
1357 |
) ),
|
|
|
|
|
|
|
|
|
1358 |
);
|
1359 |
|
1360 |
$sections = apply_filters( 'edd_settings_sections', $sections );
|
@@ -2402,7 +2456,7 @@ add_filter( 'option_page_capability_edd_settings', 'edd_set_settings_cap' );
|
|
2402 |
function edd_add_setting_tooltip( $html, $args ) {
|
2403 |
|
2404 |
if ( ! empty( $args['tooltip_title'] ) && ! empty( $args['tooltip_desc'] ) ) {
|
2405 |
-
$tooltip = '<span alt="f223" class="edd-help-tip dashicons dashicons-editor-help" title="<strong>' . $args['tooltip_title'] . '</strong
|
2406 |
$html .= $tooltip;
|
2407 |
}
|
2408 |
|
853 |
),
|
854 |
),
|
855 |
'site_terms' => array(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
856 |
'show_agree_to_terms' => array(
|
857 |
'id' => 'show_agree_to_terms',
|
858 |
'name' => __( 'Agree to Terms', 'easy-digital-downloads' ),
|
872 |
'desc' => __( 'If Agree to Terms is checked, enter the agreement terms here.', 'easy-digital-downloads' ),
|
873 |
'type' => 'rich_editor',
|
874 |
),
|
875 |
+
),
|
876 |
+
)
|
877 |
+
),
|
878 |
+
'privacy' => apply_filters( 'edd_settings_privacy',
|
879 |
+
array(
|
880 |
+
'general' => array(
|
881 |
'show_agree_to_privacy_policy' => array(
|
882 |
'id' => 'show_agree_to_privacy_policy',
|
883 |
'name' => __( 'Agree to Privacy Policy', 'easy-digital-downloads' ),
|
884 |
+
'desc' => __( 'Check this to show an agree to Privacy Policy on checkout that users must agree to before purchasing.', 'easy-digital-downloads' ),
|
885 |
'type' => 'checkbox',
|
886 |
),
|
887 |
'agree_privacy_label' => array(
|
888 |
'id' => 'privacy_agree_label',
|
889 |
'name' => __( 'Agree to Privacy Policy Label', 'easy-digital-downloads' ),
|
890 |
+
'desc' => __( 'Label shown next to the agree to Privacy Policy checkbox.', 'easy-digital-downloads' ),
|
891 |
'type' => 'text',
|
892 |
'size' => 'regular',
|
893 |
),
|
894 |
'show_privacy_policy_on_checkout' => array(
|
895 |
+
'id' => 'show_agree_to_privacy_policy_on_checkout',
|
896 |
+
'name' => __( 'Show the Privacy Policy on checkout', 'easy-digital-downloads' ),
|
897 |
+
'desc' => __( 'Display your Privacy Policy on checkout.', 'easy-digital-downloads' ) . ' <a href="' . esc_attr( admin_url( 'privacy.php' ) ) . '">' . __( 'Set your Privacy Policy here', 'easy-digital-downloads' ) .'</a>.',
|
898 |
'type' => 'checkbox',
|
899 |
),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
900 |
),
|
901 |
+
'export_erase' => array()
|
902 |
)
|
903 |
)
|
904 |
);
|
905 |
|
906 |
+
$payment_statuses = edd_get_payment_statuses();
|
907 |
+
|
908 |
+
$edd_settings['privacy']['export_erase'][] = array(
|
909 |
+
'id' => 'payment_privacy_status_action_header',
|
910 |
+
'name' => '<h3>' . __( 'Payment Status Actions', 'easy-digital-downloads' ) . '</h3>',
|
911 |
+
'type' => 'descriptive_text',
|
912 |
+
'desc' => __( 'When a user requests to be anonymized or removed from a site, these are the actions that will be taken on payments associated with their customer, by status.','easy-digital-downloads' ),
|
913 |
+
'tooltip_title' => __( 'What settings should I use?', 'easy-digital-downloads' ),
|
914 |
+
'tooltip_desc' => __( 'By default, Easy Digital Downloads sets suggested actions based on the Payment Status. These are purely recommendations, and you may need to change them to suit your store\'s needs. If you are unsure, you can safely leave these settings as is.','easy-digital-downloads' ),
|
915 |
+
);
|
916 |
+
|
917 |
+
$edd_settings['privacy']['export_erase'][] = array(
|
918 |
+
'id' => 'payment_privacy_status_descriptive_text',
|
919 |
+
'name' => '',
|
920 |
+
'type' => 'descriptive_text',
|
921 |
+
|
922 |
+
);
|
923 |
+
|
924 |
+
$select_options = array(
|
925 |
+
'none' => __( 'No Action', 'easy-digital-downloads' ),
|
926 |
+
'anonymize' => __( 'Anonymize', 'easy-digital-downloads' ),
|
927 |
+
'delete' => __( 'Delete', 'easy-digital-downloads' ),
|
928 |
+
);
|
929 |
+
|
930 |
+
foreach ( $payment_statuses as $status => $label ) {
|
931 |
+
|
932 |
+
switch ( $status ) {
|
933 |
+
|
934 |
+
case 'publish':
|
935 |
+
case 'refunded':
|
936 |
+
case 'revoked':
|
937 |
+
$action = 'anonymize';
|
938 |
+
break;
|
939 |
+
|
940 |
+
case 'failed':
|
941 |
+
case 'abandoned':
|
942 |
+
$action = 'delete';
|
943 |
+
break;
|
944 |
+
|
945 |
+
case 'pending':
|
946 |
+
case 'processing':
|
947 |
+
default:
|
948 |
+
$action = 'none';
|
949 |
+
break;
|
950 |
+
|
951 |
+
}
|
952 |
+
|
953 |
+
$edd_settings['privacy']['export_erase'][] = array(
|
954 |
+
'id' => 'payment_privacy_status_action_' . $status,
|
955 |
+
'name' => sprintf( _x( '%s Payments', 'payment status labels for the privacy export & erase settings: Pending Payments', 'easy-digital-downloads' ), $label ),
|
956 |
+
'desc' => '',
|
957 |
+
'type' => 'select',
|
958 |
+
'options' => $select_options,
|
959 |
+
'std' => $action,
|
960 |
+
);
|
961 |
+
|
962 |
+
}
|
963 |
+
|
964 |
if ( ! edd_shop_supports_buy_now() ) {
|
965 |
$edd_settings['misc']['button_text']['buy_now_text']['disabled'] = true;
|
966 |
$edd_settings['misc']['button_text']['buy_now_text']['tooltip_title'] = __( 'Buy Now Disabled', 'easy-digital-downloads' );
|
1252 |
'id' => array(),
|
1253 |
),
|
1254 |
'a' => array(
|
1255 |
+
'href' => array(),
|
1256 |
+
'target' => array(),
|
1257 |
+
'title' => array(),
|
1258 |
+
'class' => array(),
|
1259 |
+
'id' => array(),
|
1260 |
),
|
1261 |
'strong' => array(),
|
1262 |
'em' => array(),
|
1323 |
$tabs['emails'] = __( 'Emails', 'easy-digital-downloads' );
|
1324 |
$tabs['styles'] = __( 'Styles', 'easy-digital-downloads' );
|
1325 |
$tabs['taxes'] = __( 'Taxes', 'easy-digital-downloads' );
|
1326 |
+
$tabs['privacy'] = __( 'Privacy', 'easy-digital-downloads' );
|
1327 |
|
1328 |
if( ! empty( $settings['extensions'] ) ) {
|
1329 |
$tabs['extensions'] = __( 'Extensions', 'easy-digital-downloads' );
|
1405 |
'accounting' => __( 'Accounting', 'easy-digital-downloads' ),
|
1406 |
'site_terms' => __( 'Terms of Agreement', 'easy-digital-downloads' ),
|
1407 |
) ),
|
1408 |
+
'privacy' => apply_filters( 'edd_settings_section_privacy', array(
|
1409 |
+
'general' => __( 'General', 'easy-digital-downloads' ),
|
1410 |
+
'export_erase' => __( 'Export & Erase', 'easy-digital-downloads' ),
|
1411 |
+
) ),
|
1412 |
);
|
1413 |
|
1414 |
$sections = apply_filters( 'edd_settings_sections', $sections );
|
2456 |
function edd_add_setting_tooltip( $html, $args ) {
|
2457 |
|
2458 |
if ( ! empty( $args['tooltip_title'] ) && ! empty( $args['tooltip_desc'] ) ) {
|
2459 |
+
$tooltip = '<span alt="f223" class="edd-help-tip dashicons dashicons-editor-help" title="<strong>' . $args['tooltip_title'] . '</strong><br />' . $args['tooltip_desc'] . '"></span>';
|
2460 |
$html .= $tooltip;
|
2461 |
}
|
2462 |
|
includes/admin/upgrades/classes/class-file-download-log-migration.php
ADDED
@@ -0,0 +1,273 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Migrate File Download Logs
|
4 |
+
*
|
5 |
+
* Removes some PII from the log meta, and adds the customer ID of the payment to allow more accurate
|
6 |
+
* file download counts for a customer.
|
7 |
+
*
|
8 |
+
* @subpackage Admin/Classes/EDD_SL_License_Log_Migration
|
9 |
+
* @copyright Copyright (c) 2018, Easy Digital Downloads, LLC
|
10 |
+
* @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
|
11 |
+
* @since 2.6.2
|
12 |
+
*/
|
13 |
+
|
14 |
+
// Exit if accessed directly
|
15 |
+
if ( ! defined( 'ABSPATH' ) ) exit;
|
16 |
+
|
17 |
+
/**
|
18 |
+
* EDD_File_Download_Log_Migration Class
|
19 |
+
*
|
20 |
+
* @since 2.9.2
|
21 |
+
*/
|
22 |
+
class EDD_File_Download_Log_Migration extends EDD_Batch_Export {
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Our export type. Used for export-type specific filters/actions
|
26 |
+
* @var string
|
27 |
+
* @since 2.9.2
|
28 |
+
*/
|
29 |
+
public $export_type = '';
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Allows for a non-download batch processing to be run.
|
33 |
+
* @since 2.9.2
|
34 |
+
* @var boolean
|
35 |
+
*/
|
36 |
+
public $is_void = true;
|
37 |
+
|
38 |
+
/**
|
39 |
+
* Sets the number of items to pull on each step
|
40 |
+
* @since 2.9.2
|
41 |
+
* @var integer
|
42 |
+
*/
|
43 |
+
public $per_step = 50;
|
44 |
+
|
45 |
+
/**
|
46 |
+
* Get the Export Data
|
47 |
+
*
|
48 |
+
* @access public
|
49 |
+
* @since 2.9.2
|
50 |
+
* @global object $wpdb Used to query the database using the WordPress
|
51 |
+
* Database API
|
52 |
+
* @return array $data The data for the CSV file
|
53 |
+
*/
|
54 |
+
public function get_data() {
|
55 |
+
|
56 |
+
global $wpdb;
|
57 |
+
|
58 |
+
$items = $this->get_stored_data( 'edd_file_download_log_ids' );
|
59 |
+
|
60 |
+
if ( ! is_array( $items ) ) {
|
61 |
+
return false;
|
62 |
+
}
|
63 |
+
|
64 |
+
$offset = ( $this->step - 1 ) * $this->per_step;
|
65 |
+
$step_items = array_slice( $items, $offset, $this->per_step, true );
|
66 |
+
|
67 |
+
if ( $step_items ) {
|
68 |
+
|
69 |
+
foreach ( $step_items as $log_id ) {
|
70 |
+
|
71 |
+
$log_id = (int) $log_id['object_id'];
|
72 |
+
$sanitized_log_id = absint( $log_id );
|
73 |
+
|
74 |
+
if ( $sanitized_log_id !== $log_id ) {
|
75 |
+
edd_debug_log( "Log ID mismatch, skipping log ID {$log_id}" );
|
76 |
+
continue;
|
77 |
+
}
|
78 |
+
|
79 |
+
$has_customer_id = get_post_meta( $log_id, '_edd_log_customer_id', true );
|
80 |
+
if ( ! empty( $has_customer_id ) ) {
|
81 |
+
continue;
|
82 |
+
}
|
83 |
+
|
84 |
+
$payment_id = $wpdb->get_var( "SELECT meta_value FROM {$wpdb->postmeta} WHERE post_id = {$sanitized_log_id} AND meta_key = '_edd_log_payment_id'" );
|
85 |
+
if ( ! empty( $payment_id ) ) {
|
86 |
+
$payment = edd_get_payment( $payment_id );
|
87 |
+
$customer_id = $payment->customer_id;
|
88 |
+
|
89 |
+
if ( $customer_id < 0 ) {
|
90 |
+
$customer_id = 0;
|
91 |
+
}
|
92 |
+
|
93 |
+
update_post_meta( $log_id, '_edd_log_customer_id', $customer_id );
|
94 |
+
delete_post_meta( $log_id, '_edd_log_user_info' );
|
95 |
+
|
96 |
+
}
|
97 |
+
|
98 |
+
}
|
99 |
+
|
100 |
+
return true;
|
101 |
+
|
102 |
+
}
|
103 |
+
|
104 |
+
return false;
|
105 |
+
|
106 |
+
}
|
107 |
+
|
108 |
+
/**
|
109 |
+
* Return the calculated completion percentage
|
110 |
+
*
|
111 |
+
* @since 2.9.2
|
112 |
+
* @return int
|
113 |
+
*/
|
114 |
+
public function get_percentage_complete() {
|
115 |
+
|
116 |
+
$items = $this->get_stored_data( 'edd_file_download_log_ids', false );
|
117 |
+
$total = count( $items );
|
118 |
+
|
119 |
+
$percentage = 100;
|
120 |
+
|
121 |
+
if( $total > 0 ) {
|
122 |
+
$percentage = ( ( $this->per_step * $this->step ) / $total ) * 100;
|
123 |
+
}
|
124 |
+
|
125 |
+
if( $percentage > 100 ) {
|
126 |
+
$percentage = 100;
|
127 |
+
}
|
128 |
+
|
129 |
+
return $percentage;
|
130 |
+
}
|
131 |
+
|
132 |
+
/**
|
133 |
+
* Set the properties specific to the payments export
|
134 |
+
*
|
135 |
+
* @since 2.9.2
|
136 |
+
* @param array $request The Form Data passed into the batch processing
|
137 |
+
*/
|
138 |
+
public function set_properties( $request ) {}
|
139 |
+
|
140 |
+
/**
|
141 |
+
* Process a step
|
142 |
+
*
|
143 |
+
* @since 2.9.2
|
144 |
+
* @return bool
|
145 |
+
*/
|
146 |
+
public function process_step() {
|
147 |
+
|
148 |
+
if ( ! $this->can_export() ) {
|
149 |
+
wp_die(
|
150 |
+
__( 'You do not have permission to run this upgrade.', 'easy-digital-downloads' ),
|
151 |
+
__( 'Error', 'easy-digital-downloads' ),
|
152 |
+
array( 'response' => 403 ) );
|
153 |
+
}
|
154 |
+
|
155 |
+
$had_data = $this->get_data();
|
156 |
+
|
157 |
+
if( $had_data ) {
|
158 |
+
$this->done = false;
|
159 |
+
return true;
|
160 |
+
} else {
|
161 |
+
$this->delete_data( 'edd_file_download_log_ids' );
|
162 |
+
|
163 |
+
$this->done = true;
|
164 |
+
$this->message = __( 'File download logs updated successfully.', 'easy-digital-downloads' );
|
165 |
+
edd_set_upgrade_complete( 'update_file_download_log_data' );
|
166 |
+
return false;
|
167 |
+
}
|
168 |
+
}
|
169 |
+
|
170 |
+
public function headers() {
|
171 |
+
ignore_user_abort( true );
|
172 |
+
|
173 |
+
if ( ! edd_is_func_disabled( 'set_time_limit' ) ) {
|
174 |
+
set_time_limit( 0 );
|
175 |
+
}
|
176 |
+
}
|
177 |
+
|
178 |
+
/**
|
179 |
+
* Perform the export
|
180 |
+
*
|
181 |
+
* @access public
|
182 |
+
* @since 2.9.2
|
183 |
+
* @return void
|
184 |
+
*/
|
185 |
+
public function export() {
|
186 |
+
|
187 |
+
// Set headers
|
188 |
+
$this->headers();
|
189 |
+
|
190 |
+
edd_die();
|
191 |
+
}
|
192 |
+
|
193 |
+
public function pre_fetch() {
|
194 |
+
global $wpdb;
|
195 |
+
|
196 |
+
// Get all the file download logs
|
197 |
+
if ( $this->step == 1 ) {
|
198 |
+
$this->delete_data( 'edd_file_download_log_ids' );
|
199 |
+
|
200 |
+
$term_id = $wpdb->get_var( "SELECT term_id FROM {$wpdb->terms} WHERE name = 'file_download'" );
|
201 |
+
$term_tax_id = $wpdb->get_var( "SELECT term_taxonomy_id FROM {$wpdb->term_taxonomy} WHERE term_id = {$term_id} AND taxonomy = 'edd_log_type'" );
|
202 |
+
$log_ids = $wpdb->get_results( "SELECT object_id FROM {$wpdb->term_relationships} WHERE term_taxonomy_id = {$term_tax_id}" );
|
203 |
+
|
204 |
+
$this->store_data( 'edd_file_download_log_ids', $log_ids );
|
205 |
+
|
206 |
+
}
|
207 |
+
|
208 |
+
}
|
209 |
+
|
210 |
+
/**
|
211 |
+
* Given a key, get the information from the Database Directly
|
212 |
+
*
|
213 |
+
* @since 2.9.2
|
214 |
+
* @param string $key The option_name
|
215 |
+
* @return mixed Returns the data from the database
|
216 |
+
*/
|
217 |
+
private function get_stored_data( $key ) {
|
218 |
+
global $wpdb;
|
219 |
+
$value = $wpdb->get_var(
|
220 |
+
$wpdb->prepare( "SELECT option_value FROM $wpdb->options WHERE option_name = '%s'", $key )
|
221 |
+
);
|
222 |
+
|
223 |
+
if ( empty( $value ) ) {
|
224 |
+
return false;
|
225 |
+
}
|
226 |
+
|
227 |
+
$maybe_json = json_decode( $value );
|
228 |
+
if ( ! is_null( $maybe_json ) ) {
|
229 |
+
$value = json_decode( $value, true );
|
230 |
+
}
|
231 |
+
|
232 |
+
return $value;
|
233 |
+
}
|
234 |
+
|
235 |
+
/**
|
236 |
+
* Give a key, store the value
|
237 |
+
*
|
238 |
+
* @since 2.9.2
|
239 |
+
* @param string $key The option_name
|
240 |
+
* @param mixed $value The value to store
|
241 |
+
* @return void
|
242 |
+
*/
|
243 |
+
private function store_data( $key, $value ) {
|
244 |
+
global $wpdb;
|
245 |
+
|
246 |
+
$value = is_array( $value ) ? wp_json_encode( $value ) : esc_attr( $value );
|
247 |
+
|
248 |
+
$data = array(
|
249 |
+
'option_name' => $key,
|
250 |
+
'option_value' => $value,
|
251 |
+
'autoload' => 'no',
|
252 |
+
);
|
253 |
+
|
254 |
+
$formats = array(
|
255 |
+
'%s', '%s', '%s',
|
256 |
+
);
|
257 |
+
|
258 |
+
$wpdb->replace( $wpdb->options, $data, $formats );
|
259 |
+
}
|
260 |
+
|
261 |
+
/**
|
262 |
+
* Delete an option
|
263 |
+
*
|
264 |
+
* @since 2.9.2
|
265 |
+
* @param string $key The option_name to delete
|
266 |
+
* @return void
|
267 |
+
*/
|
268 |
+
private function delete_data( $key ) {
|
269 |
+
global $wpdb;
|
270 |
+
$wpdb->delete( $wpdb->options, array( 'option_name' => $key ) );
|
271 |
+
}
|
272 |
+
|
273 |
+
}
|
includes/admin/upgrades/upgrade-functions.php
CHANGED
@@ -176,6 +176,13 @@ function edd_show_upgrade_notices() {
|
|
176 |
);
|
177 |
}
|
178 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
179 |
/*
|
180 |
* NOTICE:
|
181 |
*
|
@@ -1163,3 +1170,116 @@ function edd_v26_upgrades() {
|
|
1163 |
@EDD()->customers->create_table();
|
1164 |
@EDD()->customer_meta->create_table();
|
1165 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
176 |
);
|
177 |
}
|
178 |
|
179 |
+
if ( version_compare( $edd_version, '2.9.2', '<' ) || ! edd_has_upgrade_completed( 'update_file_download_log_data' ) ) {
|
180 |
+
printf(
|
181 |
+
'<div class="updated"><p>' . __( 'Easy Digital Downloads needs to upgrade the file download logs database, click <a href="%s">here</a> to start the upgrade.', 'easy-digital-downloads' ) . '</p></div>',
|
182 |
+
esc_url( admin_url( 'index.php?page=edd-upgrades&edd-upgrade=update_file_download_log_data' ) )
|
183 |
+
);
|
184 |
+
}
|
185 |
+
|
186 |
/*
|
187 |
* NOTICE:
|
188 |
*
|
1170 |
@EDD()->customers->create_table();
|
1171 |
@EDD()->customer_meta->create_table();
|
1172 |
}
|
1173 |
+
|
1174 |
+
|
1175 |
+
function edd_upgrade_render_update_file_download_log_data() {
|
1176 |
+
$migration_complete = edd_has_upgrade_completed( 'update_file_download_log_data' );
|
1177 |
+
|
1178 |
+
if ( $migration_complete ) : ?>
|
1179 |
+
<div id="edd-sl-migration-complete" class="notice notice-success">
|
1180 |
+
<p>
|
1181 |
+
<?php _e( '<strong>Migration complete:</strong> You have already completed the update to the file download logs.', 'easy-digital-downloads' ); ?>
|
1182 |
+
</p>
|
1183 |
+
</div>
|
1184 |
+
<?php return; ?>
|
1185 |
+
<?php endif; ?>
|
1186 |
+
|
1187 |
+
<div id="edd-migration-ready" class="notice notice-success" style="display: none;">
|
1188 |
+
<p>
|
1189 |
+
<?php _e( '<strong>Database Upgrade Complete:</strong> All database upgrades have been completed.', 'easy-digital-downloads' ); ?>
|
1190 |
+
<br /><br />
|
1191 |
+
<?php _e( 'You may now leave this page.', 'easy-digital-downloads' ); ?>
|
1192 |
+
</p>
|
1193 |
+
</div>
|
1194 |
+
|
1195 |
+
<div id="edd-migration-nav-warn" class="notice notice-info">
|
1196 |
+
<p>
|
1197 |
+
<?php _e( '<strong>Important:</strong> Please leave this screen open and do not navigate away until the process completes.', 'easy-digital-downloads' ); ?>
|
1198 |
+
</p>
|
1199 |
+
</div>
|
1200 |
+
|
1201 |
+
<style>
|
1202 |
+
.dashicons.dashicons-yes { display: none; color: rgb(0, 128, 0); vertical-align: middle; }
|
1203 |
+
</style>
|
1204 |
+
<script>
|
1205 |
+
jQuery( function($) {
|
1206 |
+
$(document).ready(function () {
|
1207 |
+
$(document).on("DOMNodeInserted", function (e) {
|
1208 |
+
var element = e.target;
|
1209 |
+
|
1210 |
+
if (element.id === 'edd-batch-success') {
|
1211 |
+
element = $(element);
|
1212 |
+
|
1213 |
+
element.parent().prev().find('.edd-migration.allowed').hide();
|
1214 |
+
element.parent().prev().find('.edd-migration.unavailable').show();
|
1215 |
+
var element_wrapper = element.parents().eq(4);
|
1216 |
+
element_wrapper.find('.dashicons.dashicons-yes').show();
|
1217 |
+
|
1218 |
+
var next_step_wrapper = element_wrapper.next();
|
1219 |
+
if (next_step_wrapper.find('.postbox').length) {
|
1220 |
+
next_step_wrapper.find('.edd-migration.allowed').show();
|
1221 |
+
next_step_wrapper.find('.edd-migration.unavailable').hide();
|
1222 |
+
|
1223 |
+
if (auto_start_next_step) {
|
1224 |
+
next_step_wrapper.find('.edd-export-form').submit();
|
1225 |
+
}
|
1226 |
+
} else {
|
1227 |
+
$('#edd-migration-nav-warn').hide();
|
1228 |
+
$('#edd-migration-ready').slideDown();
|
1229 |
+
}
|
1230 |
+
|
1231 |
+
}
|
1232 |
+
});
|
1233 |
+
});
|
1234 |
+
});
|
1235 |
+
</script>
|
1236 |
+
|
1237 |
+
<div class="metabox-holder">
|
1238 |
+
<div class="postbox">
|
1239 |
+
<h2 class="hndle">
|
1240 |
+
<span><?php _e( 'Update file download logs', 'easy-digital-downloads' ); ?></span>
|
1241 |
+
<span class="dashicons dashicons-yes"></span>
|
1242 |
+
</h2>
|
1243 |
+
<div class="inside migrate-file-download-logs-control">
|
1244 |
+
<p>
|
1245 |
+
<?php _e( 'This will update the file download logs to remove some <abbr title="Personally Identifiable Information">PII</abbr> and make file download counts more accurate.', 'easy-digital-downloads' ); ?>
|
1246 |
+
</p>
|
1247 |
+
<form method="post" id="edd-fix-file-download-logs-form" class="edd-export-form edd-import-export-form">
|
1248 |
+
<span class="step-instructions-wrapper">
|
1249 |
+
|
1250 |
+
<?php wp_nonce_field( 'edd_ajax_export', 'edd_ajax_export' ); ?>
|
1251 |
+
|
1252 |
+
<?php if ( ! $migration_complete ) : ?>
|
1253 |
+
<span class="edd-migration allowed">
|
1254 |
+
<input type="submit" id="migrate-logs-submit" value="<?php _e( 'Update File Download Logs', 'easy-digital-downloads' ); ?>" class="button-primary"/>
|
1255 |
+
</span>
|
1256 |
+
<?php else: ?>
|
1257 |
+
<input type="submit" disabled="disabled" id="migrate-logs-submit" value="<?php _e( 'Update File Download Logs', 'easy-digital-downloads' ); ?>" class="button-secondary"/>
|
1258 |
+
— <?php _e( 'File download logs have already been updated.', 'easy-digital-downloads' ); ?>
|
1259 |
+
<?php endif; ?>
|
1260 |
+
|
1261 |
+
<input type="hidden" name="edd-export-class" value="EDD_File_Download_Log_Migration" />
|
1262 |
+
<span class="spinner"></span>
|
1263 |
+
|
1264 |
+
</span>
|
1265 |
+
</form>
|
1266 |
+
</div><!-- .inside -->
|
1267 |
+
</div><!-- .postbox -->
|
1268 |
+
</div>
|
1269 |
+
|
1270 |
+
<?php
|
1271 |
+
}
|
1272 |
+
|
1273 |
+
function edd_register_batch_file_download_log_migration() {
|
1274 |
+
add_action( 'edd_batch_export_class_include', 'edd_include_file_download_log_migration_batch_processor', 10, 1 );
|
1275 |
+
}
|
1276 |
+
add_action( 'edd_register_batch_exporter', 'edd_register_batch_file_download_log_migration', 10 );
|
1277 |
+
|
1278 |
+
|
1279 |
+
function edd_include_file_download_log_migration_batch_processor( $class ) {
|
1280 |
+
|
1281 |
+
if ( 'EDD_File_Download_Log_Migration' === $class ) {
|
1282 |
+
require_once EDD_PLUGIN_DIR . 'includes/admin/upgrades/classes/class-file-download-log-migration.php';
|
1283 |
+
}
|
1284 |
+
|
1285 |
+
}
|
includes/admin/upgrades/upgrades.php
CHANGED
@@ -20,68 +20,86 @@ if ( !defined( 'ABSPATH' ) ) exit;
|
|
20 |
*/
|
21 |
function edd_upgrades_screen() {
|
22 |
$action = isset( $_GET['edd-upgrade'] ) ? sanitize_text_field( $_GET['edd-upgrade'] ) : '';
|
23 |
-
$step = isset( $_GET['step'] ) ? absint( $_GET['step'] ) : 1;
|
24 |
-
$total = isset( $_GET['total'] ) ? absint( $_GET['total'] ) : false;
|
25 |
-
$custom = isset( $_GET['custom'] ) ? absint( $_GET['custom'] ) : 0;
|
26 |
-
$number = isset( $_GET['number'] ) ? absint( $_GET['number'] ) : 100;
|
27 |
-
$steps = round( ( $total / $number ), 0 );
|
28 |
-
if ( ( $steps * $number ) < $total ) {
|
29 |
-
$steps++;
|
30 |
-
}
|
31 |
-
|
32 |
-
$doing_upgrade_args = array(
|
33 |
-
'page' => 'edd-upgrades',
|
34 |
-
'edd-upgrade' => $action,
|
35 |
-
'step' => $step,
|
36 |
-
'total' => $total,
|
37 |
-
'custom' => $custom,
|
38 |
-
'steps' => $steps
|
39 |
-
);
|
40 |
-
update_option( 'edd_doing_upgrade', $doing_upgrade_args );
|
41 |
-
if ( $step > $steps ) {
|
42 |
-
// Prevent a weird case where the estimate was off. Usually only a couple.
|
43 |
-
$steps = $step;
|
44 |
-
}
|
45 |
?>
|
|
|
46 |
<div class="wrap">
|
47 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
48 |
|
49 |
-
|
|
|
50 |
|
51 |
-
|
52 |
-
<p><?php _e( 'The upgrade process has started, please be patient. This could take several minutes. You will be automatically redirected when the upgrade is finished.', 'easy-digital-downloads' ); ?></p>
|
53 |
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
|
|
|
|
61 |
|
62 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
63 |
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
<
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
79 |
});
|
80 |
-
|
81 |
-
</script>
|
82 |
|
83 |
-
|
84 |
|
|
|
|
|
|
|
85 |
</div>
|
86 |
<?php
|
87 |
}
|
20 |
*/
|
21 |
function edd_upgrades_screen() {
|
22 |
$action = isset( $_GET['edd-upgrade'] ) ? sanitize_text_field( $_GET['edd-upgrade'] ) : '';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
23 |
?>
|
24 |
+
|
25 |
<div class="wrap">
|
26 |
+
<h2><?php _e( 'Easy Digital Downloads - Upgrades', 'easy-digital-downloads' ); ?></h2>
|
27 |
+
<?php
|
28 |
+
if ( is_callable( 'edd_upgrade_render_' . $action ) ) {
|
29 |
+
|
30 |
+
// Until we have fully migrated all upgrade scripts to this new system, we will selectively enqueue the necessary scripts.
|
31 |
+
add_filter( 'edd_load_admin_scripts', '__return_true' );
|
32 |
+
edd_load_admin_scripts( '' );
|
33 |
|
34 |
+
// This is the new method to register an upgrade routine, so we can use an ajax and progress bar to display any needed upgrades.
|
35 |
+
call_user_func( 'edd_upgrade_render_' . $action );
|
36 |
|
37 |
+
} else {
|
|
|
38 |
|
39 |
+
// This is the legacy upgrade method, which requires a page refresh at each step.
|
40 |
+
$step = isset( $_GET['step'] ) ? absint( $_GET['step'] ) : 1;
|
41 |
+
$total = isset( $_GET['total'] ) ? absint( $_GET['total'] ) : false;
|
42 |
+
$custom = isset( $_GET['custom'] ) ? absint( $_GET['custom'] ) : 0;
|
43 |
+
$number = isset( $_GET['number'] ) ? absint( $_GET['number'] ) : 100;
|
44 |
+
$steps = round( ( $total / $number ), 0 );
|
45 |
+
if ( ( $steps * $number ) < $total ) {
|
46 |
+
$steps++;
|
47 |
+
}
|
48 |
|
49 |
+
$doing_upgrade_args = array(
|
50 |
+
'page' => 'edd-upgrades',
|
51 |
+
'edd-upgrade' => $action,
|
52 |
+
'step' => $step,
|
53 |
+
'total' => $total,
|
54 |
+
'custom' => $custom,
|
55 |
+
'steps' => $steps
|
56 |
+
);
|
57 |
+
update_option( 'edd_doing_upgrade', $doing_upgrade_args );
|
58 |
+
if ( $step > $steps ) {
|
59 |
+
// Prevent a weird case where the estimate was off. Usually only a couple.
|
60 |
+
$steps = $step;
|
61 |
+
}
|
62 |
+
?>
|
63 |
|
64 |
+
<?php if( ! empty( $action ) ) : ?>
|
65 |
+
|
66 |
+
<div id="edd-upgrade-status">
|
67 |
+
<p><?php _e( 'The upgrade process has started, please be patient. This could take several minutes. You will be automatically redirected when the upgrade is finished.', 'easy-digital-downloads' ); ?></p>
|
68 |
+
|
69 |
+
<?php if( ! empty( $total ) ) : ?>
|
70 |
+
<p><strong><?php printf( __( 'Step %d of approximately %d running', 'easy-digital-downloads' ), $step, $steps ); ?></strong></p>
|
71 |
+
<?php endif; ?>
|
72 |
+
</div>
|
73 |
+
<script type="text/javascript">
|
74 |
+
setTimeout(function() { document.location.href = "index.php?edd_action=<?php echo $action; ?>&step=<?php echo $step; ?>&total=<?php echo $total; ?>&custom=<?php echo $custom; ?>"; }, 250);
|
75 |
+
</script>
|
76 |
+
|
77 |
+
<?php else : ?>
|
78 |
+
|
79 |
+
<div id="edd-upgrade-status">
|
80 |
+
<p>
|
81 |
+
<?php _e( 'The upgrade process has started, please be patient. This could take several minutes. You will be automatically redirected when the upgrade is finished.', 'easy-digital-downloads' ); ?>
|
82 |
+
<img src="<?php echo EDD_PLUGIN_URL . '/assets/images/loading.gif'; ?>" id="edd-upgrade-loader"/>
|
83 |
+
</p>
|
84 |
+
</div>
|
85 |
+
<script type="text/javascript">
|
86 |
+
jQuery( document ).ready( function() {
|
87 |
+
// Trigger upgrades on page load
|
88 |
+
var data = { action: 'edd_trigger_upgrades' };
|
89 |
+
jQuery.post( ajaxurl, data, function (response) {
|
90 |
+
if( response == 'complete' ) {
|
91 |
+
jQuery('#edd-upgrade-loader').hide();
|
92 |
+
document.location.href = 'index.php'; // Redirect to the dashboard
|
93 |
+
}
|
94 |
+
});
|
95 |
});
|
96 |
+
</script>
|
|
|
97 |
|
98 |
+
<?php endif; ?>
|
99 |
|
100 |
+
<?php
|
101 |
+
}
|
102 |
+
?>
|
103 |
</div>
|
104 |
<?php
|
105 |
}
|
includes/api/class-edd-api-v2.php
CHANGED
@@ -306,7 +306,7 @@ class EDD_API_V2 extends EDD_API_V1 {
|
|
306 |
|
307 |
$customers['customers'][ $customer_count ]['stats']['total_purchases'] = $customer_obj->purchase_count;
|
308 |
$customers['customers'][ $customer_count ]['stats']['total_spent'] = $customer_obj->purchase_value;
|
309 |
-
$customers['customers'][ $customer_count ]['stats']['total_downloads'] =
|
310 |
|
311 |
$customer_count++;
|
312 |
|
306 |
|
307 |
$customers['customers'][ $customer_count ]['stats']['total_purchases'] = $customer_obj->purchase_count;
|
308 |
$customers['customers'][ $customer_count ]['stats']['total_spent'] = $customer_obj->purchase_value;
|
309 |
+
$customers['customers'][ $customer_count ]['stats']['total_downloads'] = edd_count_file_downloads_of_customer( $customer_obj->id );
|
310 |
|
311 |
$customer_count++;
|
312 |
|
includes/api/class-edd-api.php
CHANGED
@@ -1044,7 +1044,7 @@ class EDD_API {
|
|
1044 |
|
1045 |
$customers['customers'][$customer_count]['stats']['total_purchases'] = $customer_obj->purchase_count;
|
1046 |
$customers['customers'][$customer_count]['stats']['total_spent'] = $customer_obj->purchase_value;
|
1047 |
-
$customers['customers'][$customer_count]['stats']['total_downloads'] =
|
1048 |
|
1049 |
$customer_count++;
|
1050 |
|
1044 |
|
1045 |
$customers['customers'][$customer_count]['stats']['total_purchases'] = $customer_obj->purchase_count;
|
1046 |
$customers['customers'][$customer_count]['stats']['total_spent'] = $customer_obj->purchase_value;
|
1047 |
+
$customers['customers'][$customer_count]['stats']['total_downloads'] = edd_count_file_downloads_of_customer( $customer_obj->id );
|
1048 |
|
1049 |
$customer_count++;
|
1050 |
|
includes/checkout/template.php
CHANGED
@@ -744,7 +744,7 @@ function edd_discount_field() {
|
|
744 |
<span class="edd-description"><?php _e( 'Enter a coupon code if you have one.', 'easy-digital-downloads' ); ?></span>
|
745 |
<span class="edd-discount-code-field-wrap">
|
746 |
<input class="edd-input" type="text" id="edd-discount" name="edd-discount" placeholder="<?php _e( 'Enter discount', 'easy-digital-downloads' ); ?>"/>
|
747 |
-
<input type="submit" class="edd-apply-discount edd-submit
|
748 |
</span>
|
749 |
<span class="edd-discount-loader edd-loading" id="edd-discount-loader" style="display:none;"></span>
|
750 |
<span id="edd-discount-error-wrap" class="edd_error edd-alert edd-alert-error" aria-hidden="true" style="display:none;"></span>
|
@@ -783,9 +783,9 @@ function edd_terms_agreement() {
|
|
783 |
<a href="#" class="edd_terms_links" style="display:none;"><?php _e( 'Hide Terms', 'easy-digital-downloads' ); ?></a>
|
784 |
</div>
|
785 |
|
786 |
-
<?php if (
|
787 |
<?php
|
788 |
-
$agree_page =
|
789 |
$agree_label = edd_get_option( 'privacy_agree_label', __( 'Agree to Terms?', 'easy-digital-downloads' ) );
|
790 |
$agreement_text = get_post_field( 'post_content', $agree_page );
|
791 |
?>
|
@@ -829,17 +829,17 @@ add_action( 'edd_purchase_form_before_submit', 'edd_terms_agreement' );
|
|
829 |
* @return void
|
830 |
*/
|
831 |
function edd_privacy_agreement() {
|
832 |
-
if ( edd_get_option( 'show_agree_to_privacy_policy', false ) ) {
|
833 |
$agree_label = edd_get_option( 'privacy_agree_label', __( 'Agree to Terms?', 'easy-digital-downloads' ) );
|
834 |
|
835 |
ob_start();
|
836 |
?>
|
837 |
<fieldset id="edd-privacy-policy-agreement">
|
838 |
|
839 |
-
<?php if ( edd_get_option( '
|
840 |
|
841 |
<?php
|
842 |
-
$agree_page =
|
843 |
$agreement_text = get_post_field( 'post_content', $agree_page );
|
844 |
?>
|
845 |
|
@@ -979,7 +979,7 @@ function edd_get_checkout_button_purchase_label() {
|
|
979 |
* @return void
|
980 |
*/
|
981 |
function edd_agree_to_terms_js() {
|
982 |
-
if ( edd_get_option( 'show_agree_to_terms', false ) ) {
|
983 |
?>
|
984 |
<script type="text/javascript">
|
985 |
jQuery(document).ready(function($){
|
744 |
<span class="edd-description"><?php _e( 'Enter a coupon code if you have one.', 'easy-digital-downloads' ); ?></span>
|
745 |
<span class="edd-discount-code-field-wrap">
|
746 |
<input class="edd-input" type="text" id="edd-discount" name="edd-discount" placeholder="<?php _e( 'Enter discount', 'easy-digital-downloads' ); ?>"/>
|
747 |
+
<input type="submit" class="edd-apply-discount edd-submit <?php echo $color . ' ' . $style; ?>" value="<?php echo _x( 'Apply', 'Apply discount at checkout', 'easy-digital-downloads' ); ?>"/>
|
748 |
</span>
|
749 |
<span class="edd-discount-loader edd-loading" id="edd-discount-loader" style="display:none;"></span>
|
750 |
<span id="edd-discount-error-wrap" class="edd_error edd-alert edd-alert-error" aria-hidden="true" style="display:none;"></span>
|
783 |
<a href="#" class="edd_terms_links" style="display:none;"><?php _e( 'Hide Terms', 'easy-digital-downloads' ); ?></a>
|
784 |
</div>
|
785 |
|
786 |
+
<?php if ( '1' !== edd_get_option( 'show_agree_to_privacy_policy', false ) && '1' === edd_get_option( 'show_agree_to_privacy_policy_on_checkout', false ) ) : ?>
|
787 |
<?php
|
788 |
+
$agree_page = get_option( 'wp_page_for_privacy_policy' );
|
789 |
$agree_label = edd_get_option( 'privacy_agree_label', __( 'Agree to Terms?', 'easy-digital-downloads' ) );
|
790 |
$agreement_text = get_post_field( 'post_content', $agree_page );
|
791 |
?>
|
829 |
* @return void
|
830 |
*/
|
831 |
function edd_privacy_agreement() {
|
832 |
+
if ( edd_get_option( 'show_agree_to_privacy_policy', false ) === '1' ) {
|
833 |
$agree_label = edd_get_option( 'privacy_agree_label', __( 'Agree to Terms?', 'easy-digital-downloads' ) );
|
834 |
|
835 |
ob_start();
|
836 |
?>
|
837 |
<fieldset id="edd-privacy-policy-agreement">
|
838 |
|
839 |
+
<?php if ( edd_get_option( 'show_agree_to_privacy_policy_on_checkout', false ) ) : ?>
|
840 |
|
841 |
<?php
|
842 |
+
$agree_page = get_option( 'wp_page_for_privacy_policy' );
|
843 |
$agreement_text = get_post_field( 'post_content', $agree_page );
|
844 |
?>
|
845 |
|
979 |
* @return void
|
980 |
*/
|
981 |
function edd_agree_to_terms_js() {
|
982 |
+
if ( edd_get_option( 'show_agree_to_terms', false ) || edd_get_option( 'show_agree_to_privacy_policy', false ) ) {
|
983 |
?>
|
984 |
<script type="text/javascript">
|
985 |
jQuery(document).ready(function($){
|
includes/class-edd-cli.php
CHANGED
@@ -743,6 +743,133 @@ class EDD_CLI extends WP_CLI_Command {
|
|
743 |
return;
|
744 |
}
|
745 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
746 |
protected function get_fname() {
|
747 |
$names = array(
|
748 |
'Ilse','Emelda','Aurelio','Chiquita','Cheryl','Norbert','Neville','Wendie','Clint','Synthia','Tobi','Nakita',
|
743 |
return;
|
744 |
}
|
745 |
|
746 |
+
/**
|
747 |
+
* Create sample file download log data for your EDD site
|
748 |
+
*
|
749 |
+
* ## OPTIONS
|
750 |
+
*
|
751 |
+
* --number: The number of download logs to create
|
752 |
+
*
|
753 |
+
* ## EXAMPLES
|
754 |
+
*
|
755 |
+
* wp edd download_logs create --number=10
|
756 |
+
*/
|
757 |
+
public function download_logs( $args, $assoc_args ) {
|
758 |
+
global $wpdb, $edd_logs;
|
759 |
+
|
760 |
+
$error = false;
|
761 |
+
|
762 |
+
// At some point we'll likely add another action for payments
|
763 |
+
if( ! isset( $args ) || count( $args ) == 0 ) {
|
764 |
+
$error = __( 'No action specified, did you mean', 'easy-digital-downloads' );
|
765 |
+
} elseif( isset( $args ) && ! in_array( 'create', $args ) ) {
|
766 |
+
$error = __( 'Invalid action specified, did you mean', 'easy-digital-downloads' );
|
767 |
+
}
|
768 |
+
|
769 |
+
if( $error ) {
|
770 |
+
$query = '';
|
771 |
+
foreach( $assoc_args as $key => $value ) {
|
772 |
+
$query .= ' --' . $key . '=' . $value;
|
773 |
+
}
|
774 |
+
|
775 |
+
WP_CLI::error(
|
776 |
+
sprintf( $error . ' %s?', 'wp edd download_logs create' . $query )
|
777 |
+
);
|
778 |
+
|
779 |
+
return;
|
780 |
+
}
|
781 |
+
|
782 |
+
// Setup some defaults
|
783 |
+
$number = 1;
|
784 |
+
|
785 |
+
if( count( $assoc_args ) > 0 ) {
|
786 |
+
$number = ( array_key_exists( 'number', $assoc_args ) ) ? absint( $assoc_args['number'] ) : $number;
|
787 |
+
}
|
788 |
+
|
789 |
+
|
790 |
+
// First we need to find all downloads that have files associated.
|
791 |
+
$download_ids_with_file_meta = $wpdb->get_results( "SELECT post_id, meta_value FROM {$wpdb->postmeta} WHERE meta_key = 'edd_download_files'" );
|
792 |
+
$download_ids_with_files = array();
|
793 |
+
foreach ( $download_ids_with_file_meta as $meta_item ) {
|
794 |
+
if ( empty( $meta_item->meta_value ) ) {
|
795 |
+
continue;
|
796 |
+
}
|
797 |
+
$files = maybe_unserialize( $meta_item->meta_value );
|
798 |
+
|
799 |
+
// We have an empty array;
|
800 |
+
if ( empty( $files ) ) {
|
801 |
+
continue;
|
802 |
+
}
|
803 |
+
|
804 |
+
$download_ids_with_files[ $meta_item->post_id ] = array_keys( $files );
|
805 |
+
}
|
806 |
+
|
807 |
+
// Next, find all payment records that exist for the downloads that have files.
|
808 |
+
$sales_logs_args = array(
|
809 |
+
'post_parent' => array_keys( $download_ids_with_files ),
|
810 |
+
'log_type' => 'sale',
|
811 |
+
'posts_per_page' => -1,
|
812 |
+
'update_post_meta_cache' => false,
|
813 |
+
'update_post_term_cache' => false,
|
814 |
+
);
|
815 |
+
|
816 |
+
$sales_logs = $edd_logs->get_connected_logs( $sales_logs_args );
|
817 |
+
$sales_log_meta = array();
|
818 |
+
$payments = array();
|
819 |
+
|
820 |
+
// Now generate some download logs for the files.
|
821 |
+
$progress = \WP_CLI\Utils\make_progress_bar( 'Creating File Download Logs', $number );
|
822 |
+
$i = 1;
|
823 |
+
while ( $i <= $number ) {
|
824 |
+
$sales_log_key = array_rand( $sales_logs, 1 );
|
825 |
+
$sales_log = $sales_logs[ $sales_log_key ];
|
826 |
+
if ( ! empty( $sales_log_meta[ $sales_log->ID ] ) ) {
|
827 |
+
$meta = $sales_log_meta[ $sales_log->ID ];
|
828 |
+
} else {
|
829 |
+
$meta = get_post_meta( $sales_log->ID );
|
830 |
+
$sales_log_meta[ $sales_log->ID ] = $meta;
|
831 |
+
}
|
832 |
+
|
833 |
+
|
834 |
+
$payment_id = (int) $meta['_edd_log_payment_id'][0];
|
835 |
+
$download_id = (int) $sales_log->post_parent;
|
836 |
+
|
837 |
+
if ( isset( $meta['_edd_log_price_id'] ) ) {
|
838 |
+
$price_id = (int) $meta['_edd_log_price_id'][0];
|
839 |
+
} else {
|
840 |
+
$price_id = false;
|
841 |
+
}
|
842 |
+
|
843 |
+
if ( ! isset( $payments[ $payment_id ] ) ) {
|
844 |
+
$payment = edd_get_payment( $payment_id );
|
845 |
+
$payments[ $payment_id ] = $payment;
|
846 |
+
} else {
|
847 |
+
$payment = $payments[ $payment_id ];
|
848 |
+
}
|
849 |
+
|
850 |
+
$customer = new EDD_Customer( $payment->customer_id );
|
851 |
+
|
852 |
+
$user_info = array(
|
853 |
+
'email' => $payment->email,
|
854 |
+
'id' => $payment->user_id,
|
855 |
+
'name' => $customer->name,
|
856 |
+
);
|
857 |
+
|
858 |
+
if ( empty( $download_ids_with_files[ $download_id ] ) ) {
|
859 |
+
continue;
|
860 |
+
}
|
861 |
+
|
862 |
+
$file_id_key = array_rand( $download_ids_with_files[ $download_id ], 1 );
|
863 |
+
$file_key = $download_ids_with_files[ $download_id ][ $file_id_key ];
|
864 |
+
edd_record_download_in_log( $download_id, $file_key, $user_info, edd_get_ip(), $payment_id, $price_id );
|
865 |
+
|
866 |
+
$progress->tick();
|
867 |
+
$i++;
|
868 |
+
}
|
869 |
+
$progress->finish();
|
870 |
+
|
871 |
+
}
|
872 |
+
|
873 |
protected function get_fname() {
|
874 |
$names = array(
|
875 |
'Ilse','Emelda','Aurelio','Chiquita','Cheryl','Norbert','Neville','Wendie','Clint','Synthia','Tobi','Nakita',
|
includes/download-functions.php
CHANGED
@@ -635,7 +635,7 @@ function edd_record_sale_in_log( $download_id = 0, $payment_id, $price_id = fals
|
|
635 |
* @global $edd_logs
|
636 |
* @param int $download_id Download ID
|
637 |
* @param int $file_id ID of the file downloaded
|
638 |
-
* @param array $user_info User information
|
639 |
* @param string $ip IP Address
|
640 |
* @param int $payment_id Payment ID
|
641 |
* @param int $price_id Price ID, if any
|
@@ -645,19 +645,19 @@ function edd_record_download_in_log( $download_id = 0, $file_id, $user_info, $ip
|
|
645 |
global $edd_logs;
|
646 |
|
647 |
$log_data = array(
|
648 |
-
'post_parent'
|
649 |
-
'log_type'
|
650 |
);
|
651 |
|
652 |
-
$
|
653 |
|
654 |
$log_meta = array(
|
655 |
-
'
|
656 |
-
'user_id'
|
657 |
-
'file_id'
|
658 |
-
'ip'
|
659 |
-
'payment_id'=> $payment_id,
|
660 |
-
'price_id'
|
661 |
);
|
662 |
|
663 |
$edd_logs->insert_log( $log_data, $log_meta );
|
635 |
* @global $edd_logs
|
636 |
* @param int $download_id Download ID
|
637 |
* @param int $file_id ID of the file downloaded
|
638 |
+
* @param array $user_info User information (Deprecated)
|
639 |
* @param string $ip IP Address
|
640 |
* @param int $payment_id Payment ID
|
641 |
* @param int $price_id Price ID, if any
|
645 |
global $edd_logs;
|
646 |
|
647 |
$log_data = array(
|
648 |
+
'post_parent' => $download_id,
|
649 |
+
'log_type' => 'file_download',
|
650 |
);
|
651 |
|
652 |
+
$payment = new EDD_Payment( $payment_id );
|
653 |
|
654 |
$log_meta = array(
|
655 |
+
'customer_id' => $payment->customer_id,
|
656 |
+
'user_id' => $payment->user_id,
|
657 |
+
'file_id' => (int) $file_id,
|
658 |
+
'ip' => $ip,
|
659 |
+
'payment_id' => $payment_id,
|
660 |
+
'price_id' => (int) $price_id,
|
661 |
);
|
662 |
|
663 |
$edd_logs->insert_log( $log_data, $log_meta );
|
includes/install.php
CHANGED
@@ -214,7 +214,8 @@ function edd_run_install() {
|
|
214 |
'upgrade_payment_taxes',
|
215 |
'upgrade_customer_payments_association',
|
216 |
'upgrade_user_api_keys',
|
217 |
-
'remove_refunded_sale_logs'
|
|
|
218 |
);
|
219 |
|
220 |
foreach ( $upgrade_routines as $upgrade ) {
|
214 |
'upgrade_payment_taxes',
|
215 |
'upgrade_customer_payments_association',
|
216 |
'upgrade_user_api_keys',
|
217 |
+
'remove_refunded_sale_logs',
|
218 |
+
'update_file_download_log_data',
|
219 |
);
|
220 |
|
221 |
foreach ( $upgrade_routines as $upgrade ) {
|
includes/payments/class-edd-payment.php
CHANGED
@@ -908,6 +908,8 @@ class EDD_Payment {
|
|
908 |
break;
|
909 |
|
910 |
case 'email':
|
|
|
|
|
911 |
$this->update_meta( '_edd_payment_user_email', $this->email );
|
912 |
break;
|
913 |
|
@@ -992,8 +994,9 @@ class EDD_Payment {
|
|
992 |
'cart_details' => $this->cart_details,
|
993 |
'fees' => $this->fees,
|
994 |
'currency' => $this->currency,
|
995 |
-
'user_info' => is_array( $this->user_info ) ?
|
996 |
-
'date' => $this->date
|
|
|
997 |
);
|
998 |
|
999 |
// Do some merging of user_info before we merge it all, to honor the edd_payment_meta filter
|
908 |
break;
|
909 |
|
910 |
case 'email':
|
911 |
+
$this->payment_meta['email'] = $this->email;
|
912 |
+
$this->user_info['email'] = $this->email;
|
913 |
$this->update_meta( '_edd_payment_user_email', $this->email );
|
914 |
break;
|
915 |
|
994 |
'cart_details' => $this->cart_details,
|
995 |
'fees' => $this->fees,
|
996 |
'currency' => $this->currency,
|
997 |
+
'user_info' => is_array( $this->user_info ) ? $this->user_info : array(),
|
998 |
+
'date' => $this->date,
|
999 |
+
'email' => $this->email,
|
1000 |
);
|
1001 |
|
1002 |
// Do some merging of user_info before we merge it all, to honor the edd_payment_meta filter
|
includes/payments/class-payments-query.php
CHANGED
@@ -466,7 +466,13 @@ class EDD_Payments_Query extends EDD_Stats {
|
|
466 |
|
467 |
$this->__unset( 's' );
|
468 |
|
469 |
-
} elseif (
|
|
|
|
|
|
|
|
|
|
|
|
|
470 |
|
471 |
$search_meta = array(
|
472 |
'key' => '_edd_payment_number',
|
@@ -489,6 +495,19 @@ class EDD_Payments_Query extends EDD_Stats {
|
|
489 |
$this->__unset( 's' );
|
490 |
}
|
491 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
492 |
} elseif ( '#' == substr( $search, 0, 1 ) ) {
|
493 |
|
494 |
$search = str_replace( '#:', '', $search );
|
466 |
|
467 |
$this->__unset( 's' );
|
468 |
|
469 |
+
} elseif (
|
470 |
+
edd_get_option( 'enable_sequential' ) &&
|
471 |
+
(
|
472 |
+
false !== strpos( $search, edd_get_option( 'sequential_prefix' ) ) ||
|
473 |
+
false !== strpos( $search, edd_get_option( 'sequential_postfix' ) )
|
474 |
+
)
|
475 |
+
) {
|
476 |
|
477 |
$search_meta = array(
|
478 |
'key' => '_edd_payment_number',
|
495 |
$this->__unset( 's' );
|
496 |
}
|
497 |
|
498 |
+
if ( edd_get_option( 'enable_sequential' ) ) {
|
499 |
+
|
500 |
+
$search_meta = array(
|
501 |
+
'key' => '_edd_payment_number',
|
502 |
+
'value' => $search,
|
503 |
+
'compare' => 'LIKE'
|
504 |
+
);
|
505 |
+
|
506 |
+
$this->__set( 'meta_query', $search_meta );
|
507 |
+
$this->__unset( 's' );
|
508 |
+
|
509 |
+
}
|
510 |
+
|
511 |
} elseif ( '#' == substr( $search, 0, 1 ) ) {
|
512 |
|
513 |
$search = str_replace( '#:', '', $search );
|
includes/payments/functions.php
CHANGED
@@ -258,6 +258,14 @@ function edd_insert_payment( $payment_data = array() ) {
|
|
258 |
|
259 |
$payment->save();
|
260 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
261 |
do_action( 'edd_insert_payment', $payment->ID, $payment_data );
|
262 |
|
263 |
if ( ! empty( $payment->ID ) ) {
|
@@ -715,24 +723,38 @@ function edd_get_payment_status( $payment, $return_label = false ) {
|
|
715 |
return false;
|
716 |
}
|
717 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
718 |
$statuses = edd_get_payment_statuses();
|
719 |
|
720 |
if ( ! is_array( $statuses ) || empty( $statuses ) ) {
|
721 |
return false;
|
722 |
}
|
723 |
|
724 |
-
|
725 |
-
|
726 |
-
if ( array_key_exists( $payment->status, $statuses ) ) {
|
727 |
-
if ( true === $return_label ) {
|
728 |
-
return $statuses[ $payment->status ];
|
729 |
-
} else {
|
730 |
-
// Account that our 'publish' status is labeled 'Complete'
|
731 |
-
$post_status = 'publish' == $payment->status ? 'Complete' : $payment->post_status;
|
732 |
-
|
733 |
-
// Make sure we're matching cases, since they matter
|
734 |
-
return array_search( strtolower( $post_status ), array_map( 'strtolower', $statuses ) );
|
735 |
-
}
|
736 |
}
|
737 |
|
738 |
return false;
|
258 |
|
259 |
$payment->save();
|
260 |
|
261 |
+
if ( edd_get_option( 'show_agree_to_terms', false ) && ! empty( $_POST['edd_agree_to_terms'] ) ) {
|
262 |
+
$payment_data['agree_to_terms_time'] = current_time( 'timestamp' );
|
263 |
+
}
|
264 |
+
|
265 |
+
if ( edd_get_option( 'show_agree_to_privacy_policy', false ) && ! empty( $_POST['edd_agree_to_privacy_policy'] ) ) {
|
266 |
+
$payment_data['agree_to_privacy_time'] = current_time( 'timestamp' );
|
267 |
+
}
|
268 |
+
|
269 |
do_action( 'edd_insert_payment', $payment->ID, $payment_data );
|
270 |
|
271 |
if ( ! empty( $payment->ID ) ) {
|
723 |
return false;
|
724 |
}
|
725 |
|
726 |
+
if ( true === $return_label ) {
|
727 |
+
return edd_get_payment_status_label( $payment->post_status );
|
728 |
+
} else {
|
729 |
+
$statuses = edd_get_payment_statuses();
|
730 |
+
|
731 |
+
// Account that our 'publish' status is labeled 'Complete'
|
732 |
+
$post_status = 'publish' == $payment->status ? 'Complete' : $payment->post_status;
|
733 |
+
|
734 |
+
// Make sure we're matching cases, since they matter
|
735 |
+
return array_search( strtolower( $post_status ), array_map( 'strtolower', $statuses ) );
|
736 |
+
}
|
737 |
+
|
738 |
+
return ! empty( $status ) ? $status : false;
|
739 |
+
}
|
740 |
+
|
741 |
+
/**
|
742 |
+
* Given a payment status string, return the label for that string.
|
743 |
+
*
|
744 |
+
* @since 2.9.2
|
745 |
+
* @param string $status
|
746 |
+
*
|
747 |
+
* @return bool|mixed
|
748 |
+
*/
|
749 |
+
function edd_get_payment_status_label( $status = '' ) {
|
750 |
$statuses = edd_get_payment_statuses();
|
751 |
|
752 |
if ( ! is_array( $statuses ) || empty( $statuses ) ) {
|
753 |
return false;
|
754 |
}
|
755 |
|
756 |
+
if ( array_key_exists( $status, $statuses ) ) {
|
757 |
+
return $statuses[ $status ];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
758 |
}
|
759 |
|
760 |
return false;
|
includes/privacy-functions.php
ADDED
@@ -0,0 +1,1374 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Privacy Functions
|
4 |
+
*
|
5 |
+
* @package EDD
|
6 |
+
* @subpackage Functions
|
7 |
+
* @copyright Copyright (c) 2018, Easy Digital Downloads, LLC
|
8 |
+
* @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
|
9 |
+
* @since 2.9.2
|
10 |
+
*/
|
11 |
+
|
12 |
+
// Exit if accessed directly
|
13 |
+
if ( ! defined( 'ABSPATH' ) ) exit;
|
14 |
+
|
15 |
+
/**
|
16 |
+
* Register the EDD template for a privacy policy.
|
17 |
+
*
|
18 |
+
* Note, this is just a suggestion and should be customized to meet your businesses needs.
|
19 |
+
*
|
20 |
+
* @since 2.9.2
|
21 |
+
*/
|
22 |
+
function edd_register_privacy_policy_template() {
|
23 |
+
|
24 |
+
if ( ! function_exists( 'wp_add_privacy_policy_content' ) ) {
|
25 |
+
return;
|
26 |
+
}
|
27 |
+
|
28 |
+
$content = wp_kses_post( apply_filters( 'edd_privacy_policy_content', __( '
|
29 |
+
We collect information about you during the checkout process on our store. This information may include, but is not limited to, your name, billing address, shipping address, email address, phone number, credit card/payment details and any other details that might be requested from you for the purpose of processing your orders.
|
30 |
+
Handling this data also allows us to:
|
31 |
+
- Send you important account/order/service information.
|
32 |
+
- Respond to your queries, refund requests, or complaints.
|
33 |
+
- Process payments and to prevent fraudulent transactions. We do this on the basis of our legitimate business interests.
|
34 |
+
- Set up and administer your account, provide technical and/or customer support, and to verify your identity.
|
35 |
+
', 'easy-digital-downloads' ) ) );
|
36 |
+
|
37 |
+
$content .= "\n\n";
|
38 |
+
|
39 |
+
$additional_collection = array(
|
40 |
+
__( 'Location and traffic data (including IP address and browser type) if you place an order, or if we need to estimate taxes and shipping costs based on your location.', 'easy-digital-downloads' ),
|
41 |
+
__( 'Product pages visited and content viewed while your session is active.', 'easy-digital-downloads' ),
|
42 |
+
__( 'Your comments and product reviews if you choose to leave them on our website.', 'easy-digital-downloads' ),
|
43 |
+
__( 'Account email/password to allow you to access your account, if you have one.', 'easy-digital-downloads' ),
|
44 |
+
__( 'If you choose to create an account with us, your name, address, and email address, which will be used to populate the checkout for future orders.', 'easy-digital-downloads' ),
|
45 |
+
);
|
46 |
+
|
47 |
+
$additional_collection = apply_filters( 'edd_privacy_policy_additional_collection', $additional_collection );
|
48 |
+
|
49 |
+
$content .= __( 'Additionally we may also collect the following information:', 'easy-digital-downloads' ) . "\n";
|
50 |
+
if ( ! empty( $additional_collection ) ) {
|
51 |
+
foreach ( $additional_collection as $item ) {
|
52 |
+
$content .= '- ' . $item . "\n";
|
53 |
+
}
|
54 |
+
}
|
55 |
+
|
56 |
+
wp_add_privacy_policy_content( 'Easy Digital Downloads', wpautop( $content ) );
|
57 |
+
}
|
58 |
+
add_action( 'admin_init', 'edd_register_privacy_policy_template' );
|
59 |
+
|
60 |
+
/** Helper Functions */
|
61 |
+
|
62 |
+
/**
|
63 |
+
* Given a string, mask it with the * character.
|
64 |
+
*
|
65 |
+
* First and last character will remain with the filling characters being changed to *. One Character will
|
66 |
+
* be left in tact as is. Two character strings will have the first character remain and the second be a *.
|
67 |
+
*
|
68 |
+
* @since 2.9.2
|
69 |
+
* @param string $string
|
70 |
+
*
|
71 |
+
* @return string
|
72 |
+
*/
|
73 |
+
function edd_mask_string( $string = '' ) {
|
74 |
+
|
75 |
+
if ( empty( $string ) ) {
|
76 |
+
return '';
|
77 |
+
}
|
78 |
+
|
79 |
+
$first_char = substr( $string, 0, 1 );
|
80 |
+
$last_char = substr( $string, -1, 1 );
|
81 |
+
|
82 |
+
$masked_string = $string;
|
83 |
+
|
84 |
+
if ( strlen( $string ) > 2 ) {
|
85 |
+
|
86 |
+
$total_stars = strlen( $string ) - 2;
|
87 |
+
$masked_string = $first_char . str_repeat( '*', $total_stars ) . $last_char;
|
88 |
+
|
89 |
+
} elseif ( strlen( $string ) === 2 ) {
|
90 |
+
|
91 |
+
$masked_string = $first_char . '*';
|
92 |
+
|
93 |
+
}
|
94 |
+
|
95 |
+
|
96 |
+
|
97 |
+
return $masked_string;
|
98 |
+
|
99 |
+
}
|
100 |
+
|
101 |
+
/**
|
102 |
+
* Given a domain, mask it with the * character.
|
103 |
+
*
|
104 |
+
* TLD parts will remain intact (.com, .co.uk, etc). All subdomains will be masked t**t.e*****e.co.uk.
|
105 |
+
*
|
106 |
+
* @since 2.9.2
|
107 |
+
* @param string $domain
|
108 |
+
*
|
109 |
+
* @return string
|
110 |
+
*/
|
111 |
+
function edd_mask_domain( $domain = '' ) {
|
112 |
+
|
113 |
+
if ( empty( $domain ) ) {
|
114 |
+
return '';
|
115 |
+
}
|
116 |
+
|
117 |
+
$domain_parts = explode( '.', $domain );
|
118 |
+
|
119 |
+
if ( count( $domain_parts ) === 2 ) {
|
120 |
+
|
121 |
+
// We have a single entry tld like .org or .com
|
122 |
+
$domain_parts[0] = edd_mask_string( $domain_parts[0] );
|
123 |
+
|
124 |
+
} else {
|
125 |
+
|
126 |
+
$part_count = count( $domain_parts );
|
127 |
+
$possible_cctld = strlen( $domain_parts[ $part_count - 2 ] ) <= 3 ? true : false;
|
128 |
+
|
129 |
+
$mask_parts = $possible_cctld ? array_slice( $domain_parts, 0, $part_count - 2 ) : array_slice( $domain_parts, 0, $part_count - 1 );
|
130 |
+
|
131 |
+
$i = 0;
|
132 |
+
while ( $i < count( $mask_parts ) ) {
|
133 |
+
$domain_parts[ $i ] = edd_mask_string( $domain_parts[ $i ]);
|
134 |
+
$i++;
|
135 |
+
}
|
136 |
+
|
137 |
+
}
|
138 |
+
|
139 |
+
return implode( '.', $domain_parts );
|
140 |
+
}
|
141 |
+
|
142 |
+
/**
|
143 |
+
* Given an email address, mask the name and domain according to domain and string masking functions.
|
144 |
+
*
|
145 |
+
* Will result in an email address like a***n@e*****e.org for admin@example.org.
|
146 |
+
*
|
147 |
+
* @since 2.9.2
|
148 |
+
* @param $email_address
|
149 |
+
*
|
150 |
+
* @return string
|
151 |
+
*/
|
152 |
+
function edd_pseudo_mask_email( $email_address ) {
|
153 |
+
if ( ! is_email( $email_address ) ) {
|
154 |
+
return $email_address;
|
155 |
+
}
|
156 |
+
|
157 |
+
$email_parts = explode( '@', $email_address );
|
158 |
+
$name = edd_mask_string( $email_parts[0] );
|
159 |
+
$domain = edd_mask_domain( $email_parts[1] );
|
160 |
+
|
161 |
+
$email_address = $name . '@' . $domain;
|
162 |
+
|
163 |
+
|
164 |
+
return $email_address;
|
165 |
+
}
|
166 |
+
|
167 |
+
/**
|
168 |
+
* Log the privacy and terms timestamp for the last completed purchase for a customer.
|
169 |
+
*
|
170 |
+
* Stores the timestamp of the last time the user clicked the 'complete purchase' button for the Agree to Terms and/or
|
171 |
+
* Privacy Policy checkboxes during the checkout process.
|
172 |
+
*
|
173 |
+
* @since 2.9.2
|
174 |
+
*
|
175 |
+
* @param $payment_id
|
176 |
+
* @param $payment_data
|
177 |
+
*
|
178 |
+
* @return void
|
179 |
+
*/
|
180 |
+
function edd_log_terms_and_privacy_times( $payment_id, $payment_data ) {
|
181 |
+
$payment = edd_get_payment( $payment_id );
|
182 |
+
$customer = new EDD_Customer( $payment->customer_id );
|
183 |
+
|
184 |
+
if ( empty( $customer->id ) ) {
|
185 |
+
return;
|
186 |
+
}
|
187 |
+
|
188 |
+
if ( ! empty( $payment_data['agree_to_terms_time'] ) ) {
|
189 |
+
$customer->add_meta( 'agree_to_terms_time', $payment_data['agree_to_terms_time'] );
|
190 |
+
}
|
191 |
+
|
192 |
+
if ( ! empty( $payment_data['agree_to_privacy_time'] ) ) {
|
193 |
+
$customer->add_meta( 'agree_to_privacy_time', $payment_data['agree_to_terms_time'] );
|
194 |
+
}
|
195 |
+
}
|
196 |
+
add_action( 'edd_insert_payment', 'edd_log_terms_and_privacy_times', 10, 2 );
|
197 |
+
|
198 |
+
/*
|
199 |
+
* Return an anonymized email address.
|
200 |
+
*
|
201 |
+
* While WP Core supports anonymizing email addresses with the wp_privacy_anonymize_data function,
|
202 |
+
* it turns every email address into deleted@site.invalid, which does not work when some purchase/customer records
|
203 |
+
* are still needed for legal and regulatory reasons.
|
204 |
+
*
|
205 |
+
* This function will anonymize the email with an MD5 that is salted
|
206 |
+
* and given a randomized uniqid prefixed with the store URL in order to prevent connecting a single customer across
|
207 |
+
* multiple stores, as well as the timestamp at the time of anonymization (so it trying the same email again will not be
|
208 |
+
* repeatable and therefore connected), and return the email address as <hash>@site.invalid.
|
209 |
+
*
|
210 |
+
* @since 2.9.2
|
211 |
+
*
|
212 |
+
* @param string $email_address
|
213 |
+
*
|
214 |
+
* @return string
|
215 |
+
*/
|
216 |
+
function edd_anonymize_email( $email_address ) {
|
217 |
+
|
218 |
+
if ( empty( $email_address ) ) {
|
219 |
+
return $email_address;
|
220 |
+
}
|
221 |
+
|
222 |
+
$email_address = strtolower( $email_address );
|
223 |
+
$email_parts = explode( '@', $email_address );
|
224 |
+
$anonymized_email = wp_hash( uniqid( get_option( 'site_url' ), true ) . $email_parts[0] . current_time( 'timestamp' ), 'nonce' );
|
225 |
+
|
226 |
+
|
227 |
+
return $anonymized_email . '@site.invalid';
|
228 |
+
}
|
229 |
+
|
230 |
+
/**
|
231 |
+
* Given a customer ID, anonymize the data related to that customer.
|
232 |
+
*
|
233 |
+
* Only the customer record is affected in this function. The data that is changed:
|
234 |
+
* - The name is changed to 'Anonymized Customer'
|
235 |
+
* - The email address is anonymized, but kept in a format that passes is_email checks
|
236 |
+
* - The date created is set to the timestamp of 0 (January 1, 1970)
|
237 |
+
* - Notes are fully cleared
|
238 |
+
* - Any additional email addresses are removed
|
239 |
+
*
|
240 |
+
* Once completed, a note is left stating when the customer was anonymized.
|
241 |
+
*
|
242 |
+
* @param int $customer_id
|
243 |
+
*
|
244 |
+
* @return array
|
245 |
+
*/
|
246 |
+
function _edd_anonymize_customer( $customer_id = 0 ) {
|
247 |
+
|
248 |
+
$customer = new EDD_Customer( $customer_id );
|
249 |
+
if ( empty( $customer->id ) ) {
|
250 |
+
return array( 'success' => false, 'message' => sprintf( __( 'No customer with ID %d', 'easy-digital-downloads' ), $customer_id ) );
|
251 |
+
}
|
252 |
+
|
253 |
+
/**
|
254 |
+
* Determines if this customer should be allowed to be anonymized.
|
255 |
+
*
|
256 |
+
* Developers and extensions can use this filter to make it possible to not anonymize a customer. A sample use case
|
257 |
+
* would be if the customer has pending orders, and that payment requires shipping, anonymizing the customer may
|
258 |
+
* not be ideal.
|
259 |
+
*
|
260 |
+
* @since 2.9.2
|
261 |
+
*
|
262 |
+
* @param array {
|
263 |
+
* Contains data related to if the anonymization should take place
|
264 |
+
*
|
265 |
+
* @type bool $should_anonymize If the customer should be anonymized.
|
266 |
+
* @type string $message A message to display if the customer could not be anonymized.
|
267 |
+
* }
|
268 |
+
*/
|
269 |
+
$should_anonymize_customer = apply_filters( 'edd_should_anonymize_customer', array( 'should_anonymize' => true, 'message' => '' ), $customer );
|
270 |
+
|
271 |
+
if ( empty( $should_anonymize_customer['should_anonymize'] ) ) {
|
272 |
+
return array( 'success' => false, 'message' => $should_anonymize_customer['message'] );
|
273 |
+
}
|
274 |
+
|
275 |
+
// Now we should look at payments this customer has associated, and if there are any payments that should not be modified,
|
276 |
+
// do not modify the customer.
|
277 |
+
$payments = edd_get_payments( array(
|
278 |
+
'customer' => $customer->id,
|
279 |
+
'output' => 'payments',
|
280 |
+
'number' => -1,
|
281 |
+
) );
|
282 |
+
|
283 |
+
foreach ( $payments as $payment ) {
|
284 |
+
$action = _edd_privacy_get_payment_action( $payment );
|
285 |
+
if ( 'none' === $action ) {
|
286 |
+
return array(
|
287 |
+
'success' => false,
|
288 |
+
'message' => __( 'Customer could not be anonymized due to payments that could not be anonymized or deleted.', 'easy-digital-downloads' )
|
289 |
+
);
|
290 |
+
}
|
291 |
+
}
|
292 |
+
|
293 |
+
// Loop through all their email addresses, and remove any additional email addresses.
|
294 |
+
foreach ( $customer->emails as $email ) {
|
295 |
+
$customer->remove_email( $email );
|
296 |
+
}
|
297 |
+
|
298 |
+
if ( $customer->user_id > 0 ) {
|
299 |
+
delete_user_meta( $customer->user_id, '_edd_user_address' );
|
300 |
+
}
|
301 |
+
|
302 |
+
$customer->update( array(
|
303 |
+
'name' => __( 'Anonymized Customer', 'easy-digital-downloads' ),
|
304 |
+
'email' => edd_anonymize_email( $customer->email ),
|
305 |
+
'date_created' => date( 'Y-m-d H:i:s', 0 ),
|
306 |
+
'notes' => '',
|
307 |
+
'user_id' => 0,
|
308 |
+
) );
|
309 |
+
|
310 |
+
/**
|
311 |
+
* Run further anonymization on a customer
|
312 |
+
*
|
313 |
+
* Developers and extensions can use the EDD_Customer object passed into the edd_anonymize_customer action
|
314 |
+
* to complete further anonymization.
|
315 |
+
*
|
316 |
+
* @since 2.9.2
|
317 |
+
*
|
318 |
+
* @param EDD_Customer $customer The EDD_Customer object that was found.
|
319 |
+
*/
|
320 |
+
do_action( 'edd_anonymize_customer', $customer );
|
321 |
+
|
322 |
+
$customer->add_note( __( 'Customer anonymized successfully', 'easy-digital-downloads' ) );
|
323 |
+
return array( 'success' => true, 'message' => sprintf( __( 'Customer ID %d successfully anonymized.', 'easy-digital-downloads' ), $customer_id ) );
|
324 |
+
|
325 |
+
}
|
326 |
+
|
327 |
+
/**
|
328 |
+
* Given a payment ID, anonymize the data related to that payment.
|
329 |
+
*
|
330 |
+
* Only the payment record is affected in this function. The data that is changed:
|
331 |
+
* - First Name is made blank
|
332 |
+
* - Last Name is made blank
|
333 |
+
* - All email addresses are converted to the anonymized email address on the customer
|
334 |
+
* - The IP address is run to only be the /24 IP Address (ending in .0) so it cannot be traced back to a user
|
335 |
+
* - Address line 1 is made blank
|
336 |
+
* - Address line 2 is made blank
|
337 |
+
*
|
338 |
+
* @param int $payment_id
|
339 |
+
*
|
340 |
+
* @return array
|
341 |
+
*/
|
342 |
+
function _edd_anonymize_payment( $payment_id = 0 ) {
|
343 |
+
|
344 |
+
$payment = edd_get_payment( $payment_id );
|
345 |
+
if ( false === $payment ) {
|
346 |
+
return array( 'success' => false, 'message' => sprintf( __( 'No payment with ID %d.', 'easy-digital-downloads' ), $payment_id ) );
|
347 |
+
}
|
348 |
+
|
349 |
+
/**
|
350 |
+
* Determines if this payment should be allowed to be anonymized.
|
351 |
+
*
|
352 |
+
* Developers and extensions can use this filter to make it possible to not anonymize a payment. A sample use case
|
353 |
+
* would be if the payment is pending orders, and the payment requires shipping, anonymizing the payment may
|
354 |
+
* not be ideal.
|
355 |
+
*
|
356 |
+
* @since 2.9.2
|
357 |
+
*
|
358 |
+
* @param array {
|
359 |
+
* Contains data related to if the anonymization should take place
|
360 |
+
*
|
361 |
+
* @type bool $should_anonymize If the payment should be anonymized.
|
362 |
+
* @type string $message A message to display if the customer could not be anonymized.
|
363 |
+
* }
|
364 |
+
*/
|
365 |
+
$should_anonymize_payment = apply_filters( 'edd_should_anonymize_payment', array( 'should_anonymize' => true, 'message' => '' ), $payment );
|
366 |
+
|
367 |
+
if ( empty( $should_anonymize_payment['should_anonymize'] ) ) {
|
368 |
+
return array( 'success' => false, 'message' => $should_anonymize_payment['message'] );
|
369 |
+
}
|
370 |
+
|
371 |
+
$action = _edd_privacy_get_payment_action( $payment );
|
372 |
+
|
373 |
+
switch( $action ) {
|
374 |
+
|
375 |
+
case 'none':
|
376 |
+
default:
|
377 |
+
$return = array(
|
378 |
+
'success' => false,
|
379 |
+
'message' => sprintf( __( 'Payment not modified, due to status: %s.', 'easy-digital-downloads' ), $payment->status )
|
380 |
+
);
|
381 |
+
break;
|
382 |
+
|
383 |
+
case 'delete':
|
384 |
+
edd_delete_purchase( $payment->ID, true, true );
|
385 |
+
|
386 |
+
$return = array(
|
387 |
+
'success' => true,
|
388 |
+
'message' => sprintf( __( 'Payment %d with status %s deleted.', 'easy-digital-downloads' ), $payment->ID, $payment->status )
|
389 |
+
);
|
390 |
+
break;
|
391 |
+
|
392 |
+
case 'anonymize':
|
393 |
+
$customer = new EDD_Customer( $payment->customer_id );
|
394 |
+
|
395 |
+
$payment->ip = wp_privacy_anonymize_ip( $payment->ip );
|
396 |
+
$payment->email = $customer->email;
|
397 |
+
|
398 |
+
// Anonymize the line 1 and line 2 of the address. City, state, zip, and country are possibly needed for taxes.
|
399 |
+
$address = $payment->address;
|
400 |
+
if ( isset( $address['line1'] ) ) {
|
401 |
+
$address['line1'] = '';
|
402 |
+
}
|
403 |
+
|
404 |
+
if ( isset( $address['line2'] ) ) {
|
405 |
+
$address['line2'] = '';
|
406 |
+
}
|
407 |
+
|
408 |
+
$payment->address = $address;
|
409 |
+
|
410 |
+
$payment->first_name = '';
|
411 |
+
$payment->last_name = '';
|
412 |
+
|
413 |
+
|
414 |
+
wp_update_post( array(
|
415 |
+
'ID' => $payment->ID,
|
416 |
+
'post_title' => __( 'Anonymized Customer', 'easy-digital-downloads' ),
|
417 |
+
'post_name' => sanitize_title( __( 'Anonymized Customer', 'easy-digital-downloads' ) ),
|
418 |
+
) );
|
419 |
+
|
420 |
+
// Because we changed the post_name, WordPress sets a meta on the item for the `old slug`, we need to kill that.
|
421 |
+
delete_post_meta( $payment->ID, '_wp_old_slug' );
|
422 |
+
|
423 |
+
/**
|
424 |
+
* Run further anonymization on a payment
|
425 |
+
*
|
426 |
+
* Developers and extensions can use the EDD_Payment object passed into the edd_anonymize_payment action
|
427 |
+
* to complete further anonymization.
|
428 |
+
*
|
429 |
+
* @since 2.9.2
|
430 |
+
*
|
431 |
+
* @param EDD_Payment $payment The EDD_Payment object that was found.
|
432 |
+
*/
|
433 |
+
do_action( 'edd_anonymize_payment', $payment );
|
434 |
+
|
435 |
+
$payment->save();
|
436 |
+
$return = array(
|
437 |
+
'success' => true,
|
438 |
+
'message' => sprintf( __( 'Payment ID %d successfully anonymized.', 'easy-digital-downloads' ), $payment_id )
|
439 |
+
);
|
440 |
+
break;
|
441 |
+
}
|
442 |
+
|
443 |
+
return $return;
|
444 |
+
}
|
445 |
+
|
446 |
+
/**
|
447 |
+
* Given an EDD_Payment, determine what action should be taken during the eraser processes.
|
448 |
+
*
|
449 |
+
* @since 2.9.2
|
450 |
+
*
|
451 |
+
* @param EDD_Payment $payment
|
452 |
+
*
|
453 |
+
* @return string
|
454 |
+
*/
|
455 |
+
function _edd_privacy_get_payment_action( EDD_Payment $payment ) {
|
456 |
+
|
457 |
+
$action = edd_get_option( 'payment_privacy_status_action_' . $payment->status, false );
|
458 |
+
|
459 |
+
// If the store owner has not saved any special settings for the actions to be taken, use defaults.
|
460 |
+
if ( empty( $action ) ) {
|
461 |
+
|
462 |
+
switch ( $payment->status ) {
|
463 |
+
|
464 |
+
case 'publish':
|
465 |
+
case 'refunded':
|
466 |
+
case 'revoked':
|
467 |
+
$action = 'anonymize';
|
468 |
+
break;
|
469 |
+
|
470 |
+
case 'failed':
|
471 |
+
case 'abandoned':
|
472 |
+
$action = 'delete';
|
473 |
+
break;
|
474 |
+
|
475 |
+
case 'pending':
|
476 |
+
case 'processing':
|
477 |
+
default:
|
478 |
+
$action = 'none';
|
479 |
+
break;
|
480 |
+
|
481 |
+
}
|
482 |
+
|
483 |
+
}
|
484 |
+
|
485 |
+
/**
|
486 |
+
* Allow filtering of what type of action should be taken for a payment.
|
487 |
+
*
|
488 |
+
* Developers and extensions can use this filter to modify how Easy Digital Downloads will treat an order
|
489 |
+
* that has been requested to be deleted or anonymized.
|
490 |
+
*
|
491 |
+
* @since 2.9.2
|
492 |
+
*
|
493 |
+
* @param string $action What action will be performed (none, delete, anonymize)
|
494 |
+
* @param EDD_Payment $payment The EDD_Payment object that has been requested to be anonymized or deleted.
|
495 |
+
*/
|
496 |
+
$action = apply_filters( 'edd_privacy_payment_status_action_' . $payment->status, $action, $payment );
|
497 |
+
return $action;
|
498 |
+
|
499 |
+
}
|
500 |
+
|
501 |
+
/**
|
502 |
+
* Since our eraser callbacks need to look up a stored customer ID by hashed email address, developers can use this
|
503 |
+
* to retrieve the customer ID associated with an email address that's being requested to be deleted even after the
|
504 |
+
* customer has been anonymized.
|
505 |
+
*
|
506 |
+
* @since 2.9.2
|
507 |
+
*
|
508 |
+
* @param $email_address
|
509 |
+
*
|
510 |
+
* @return EDD_Customer
|
511 |
+
*/
|
512 |
+
function _edd_privacy_get_customer_id_for_email( $email_address ) {
|
513 |
+
$customer_id = get_option( 'edd_priv_' . md5( $email_address ), true );
|
514 |
+
$customer = new EDD_Customer( $customer_id );
|
515 |
+
|
516 |
+
return $customer;
|
517 |
+
}
|
518 |
+
|
519 |
+
/** Exporter Functions */
|
520 |
+
|
521 |
+
/**
|
522 |
+
* Register any of our Privacy Data Exporters
|
523 |
+
*
|
524 |
+
* @since 2.9.2
|
525 |
+
*
|
526 |
+
* @param $exporters
|
527 |
+
*
|
528 |
+
* @return array
|
529 |
+
*/
|
530 |
+
function edd_register_privacy_exporters( $exporters ) {
|
531 |
+
|
532 |
+
$exporters[] = array(
|
533 |
+
'exporter_friendly_name' => __( 'Customer Record', 'easy-digital-downloads' ),
|
534 |
+
'callback' => 'edd_privacy_customer_record_exporter',
|
535 |
+
);
|
536 |
+
|
537 |
+
$exporters[] = array(
|
538 |
+
'exporter_friendly_name' => __( 'Billing Information', 'easy-digital-downloads' ),
|
539 |
+
'callback' => 'edd_privacy_billing_information_exporter',
|
540 |
+
);
|
541 |
+
|
542 |
+
|
543 |
+
$exporters[] = array(
|
544 |
+
'exporter_friendly_name' => __( 'File Downloads', 'easy-digital-downloads' ),
|
545 |
+
'callback' => 'edd_privacy_file_download_log_exporter',
|
546 |
+
);
|
547 |
+
|
548 |
+
$exporters[] = array(
|
549 |
+
'exporter_friendly_name' => __( 'API Access Logs', 'easy-digital-downloads' ),
|
550 |
+
'callback' => 'edd_privacy_api_access_log_exporter',
|
551 |
+
);
|
552 |
+
|
553 |
+
return $exporters;
|
554 |
+
|
555 |
+
}
|
556 |
+
add_filter( 'wp_privacy_personal_data_exporters', 'edd_register_privacy_exporters' );
|
557 |
+
|
558 |
+
/**
|
559 |
+
* Retrieves the Customer record for the Privacy Data Exporter
|
560 |
+
*
|
561 |
+
* @since 2.9.2
|
562 |
+
* @param string $email_address
|
563 |
+
* @param int $page
|
564 |
+
*
|
565 |
+
* @return array
|
566 |
+
*/
|
567 |
+
function edd_privacy_customer_record_exporter( $email_address = '', $page = 1 ) {
|
568 |
+
|
569 |
+
$customer = new EDD_Customer( $email_address );
|
570 |
+
|
571 |
+
if ( empty( $customer->id ) ) {
|
572 |
+
return array( 'data' => array(), 'done' => true );
|
573 |
+
}
|
574 |
+
|
575 |
+
$export_data = array(
|
576 |
+
'group_id' => 'edd-customer-record',
|
577 |
+
'group_label' => __( 'Customer Record', 'easy-digital-downloads' ),
|
578 |
+
'item_id' => "edd-customer-record-{$customer->id}",
|
579 |
+
'data' => array(
|
580 |
+
array(
|
581 |
+
'name' => __( 'Customer ID', 'easy-digital-downloads' ),
|
582 |
+
'value' => $customer->id
|
583 |
+
),
|
584 |
+
array(
|
585 |
+
'name' => __( 'Primary Email', 'easy-digital-downloads' ),
|
586 |
+
'value' => $customer->email
|
587 |
+
),
|
588 |
+
array(
|
589 |
+
'name' => __( 'Name', 'easy-digital-downloads' ),
|
590 |
+
'value' => $customer->name
|
591 |
+
),
|
592 |
+
array(
|
593 |
+
'name' => __( 'Date Created', 'easy-digital-downloads' ),
|
594 |
+
'value' => $customer->date_created
|
595 |
+
),
|
596 |
+
array(
|
597 |
+
'name' => __( 'All Email Addresses', 'easy-digital-downloads' ),
|
598 |
+
'value' => implode( ', ', $customer->emails )
|
599 |
+
),
|
600 |
+
)
|
601 |
+
);
|
602 |
+
|
603 |
+
$agree_to_terms_time = $customer->get_meta( 'agree_to_terms_time', false );
|
604 |
+
if ( ! empty( $agree_to_terms_time ) ) {
|
605 |
+
foreach ( $agree_to_terms_time as $timestamp ) {
|
606 |
+
$export_data['data'][] = array(
|
607 |
+
'name' => __( 'Agreed to Terms', 'easy-digital-downloads' ),
|
608 |
+
'value' => date_i18n( get_option( 'date_format' ) . ' H:i:s', $timestamp )
|
609 |
+
);
|
610 |
+
}
|
611 |
+
}
|
612 |
+
|
613 |
+
$agree_to_privacy_time = $customer->get_meta( 'agree_to_privacy_time', false );
|
614 |
+
if ( ! empty( $agree_to_privacy_time ) ) {
|
615 |
+
foreach ( $agree_to_privacy_time as $timestamp ) {
|
616 |
+
$export_data['data'][] = array(
|
617 |
+
'name' => __( 'Agreed to Privacy Policy', 'easy-digital-downloads' ),
|
618 |
+
'value' => date_i18n( get_option( 'date_format' ) . ' H:i:s', $timestamp )
|
619 |
+
);
|
620 |
+
}
|
621 |
+
}
|
622 |
+
|
623 |
+
$export_data = apply_filters( 'edd_privacy_customer_record', $export_data, $customer );
|
624 |
+
|
625 |
+
return array( 'data' => array( $export_data ), 'done' => true );
|
626 |
+
}
|
627 |
+
|
628 |
+
/**
|
629 |
+
* Retrieves the billing information for the Privacy Exporter
|
630 |
+
*
|
631 |
+
* @since 2.9.2
|
632 |
+
* @param string $email_address
|
633 |
+
* @param int $page
|
634 |
+
*
|
635 |
+
* @return array
|
636 |
+
*/
|
637 |
+
function edd_privacy_billing_information_exporter( $email_address = '', $page = 1 ) {
|
638 |
+
|
639 |
+
$customer = new EDD_Customer( $email_address );
|
640 |
+
$payments = edd_get_payments( array(
|
641 |
+
'customer' => $customer->id,
|
642 |
+
'output' => 'payments',
|
643 |
+
'page' => $page,
|
644 |
+
) );
|
645 |
+
|
646 |
+
// If we haven't found any payments for this page, just return that we're done.
|
647 |
+
if ( empty( $payments ) ) {
|
648 |
+
return array( 'data' => array(), 'done' => true );
|
649 |
+
}
|
650 |
+
|
651 |
+
$export_items = array();
|
652 |
+
foreach ( $payments as $payment ) {
|
653 |
+
|
654 |
+
$order_items = array();
|
655 |
+
foreach ( $payment->downloads as $cart_item ) {
|
656 |
+
$download = new EDD_Download( $cart_item['id'] );
|
657 |
+
$name = $download->get_name();
|
658 |
+
|
659 |
+
if ( $download->has_variable_prices() && isset( $cart_item['options']['price_id'] ) ) {
|
660 |
+
$variation_name = edd_get_price_option_name( $download->ID, $cart_item['options']['price_id'] );
|
661 |
+
if ( ! empty( $variation_name ) ) {
|
662 |
+
$name .= ' - ' . $variation_name;
|
663 |
+
}
|
664 |
+
}
|
665 |
+
|
666 |
+
$order_items[] = $name . ' × ' . $cart_item['quantity'];
|
667 |
+
}
|
668 |
+
|
669 |
+
$items_purchased = implode( ', ', $order_items );
|
670 |
+
|
671 |
+
$billing_name = array();
|
672 |
+
if ( ! empty( $payment->user_info['first_name'] ) ) {
|
673 |
+
$billing_name[] = $payment->user_info['first_name'];
|
674 |
+
}
|
675 |
+
|
676 |
+
if ( ! empty( $payment->user_info['last_name'] ) ) {
|
677 |
+
$billing_name[] = $payment->user_info['last_name'];
|
678 |
+
}
|
679 |
+
$billing_name = implode( ' ', array_values( $billing_name ) );
|
680 |
+
|
681 |
+
$billing_street = array();
|
682 |
+
if ( ! empty( $payment->address['line1'] ) ) {
|
683 |
+
$billing_street[] = $payment->address['line1'];
|
684 |
+
}
|
685 |
+
|
686 |
+
if ( ! empty( $payment->address['line2'] ) ) {
|
687 |
+
$billing_street[] = $payment->address['line2'];
|
688 |
+
}
|
689 |
+
$billing_street = implode( "\n", array_values( $billing_street ) );
|
690 |
+
|
691 |
+
|
692 |
+
$billing_city_state = array();
|
693 |
+
if ( ! empty( $payment->address['city'] ) ) {
|
694 |
+
$billing_city_state[] = $payment->address['city'];
|
695 |
+
}
|
696 |
+
|
697 |
+
if ( ! empty( $payment->address['state'] ) ) {
|
698 |
+
$billing_city_state[] = $payment->address['state'];
|
699 |
+
}
|
700 |
+
$billing_city_state = implode( ', ', array_values( $billing_city_state ) );
|
701 |
+
|
702 |
+
$billing_country_postal = array();
|
703 |
+
if ( ! empty( $payment->address['zip'] ) ) {
|
704 |
+
$billing_country_postal[] = $payment->address['zip'];
|
705 |
+
}
|
706 |
+
|
707 |
+
if ( ! empty( $payment->address['country'] ) ) {
|
708 |
+
$billing_country_postal[] = $payment->address['country'];
|
709 |
+
}
|
710 |
+
$billing_country_postal = implode( "\n", array_values( $billing_country_postal ) );
|
711 |
+
|
712 |
+
$full_billing_address = '';
|
713 |
+
if ( ! empty( $billing_name ) ) {
|
714 |
+
$full_billing_address .= $billing_name . "\n";
|
715 |
+
}
|
716 |
+
|
717 |
+
if ( ! empty( $billing_street ) ) {
|
718 |
+
$full_billing_address .= $billing_street . "\n";
|
719 |
+
}
|
720 |
+
|
721 |
+
if ( ! empty( $billing_city_state ) ) {
|
722 |
+
$full_billing_address .= $billing_city_state . "\n";
|
723 |
+
}
|
724 |
+
|
725 |
+
if ( ! empty( $billing_country_postal ) ) {
|
726 |
+
$full_billing_address .= $billing_country_postal . "\n";
|
727 |
+
}
|
728 |
+
|
729 |
+
|
730 |
+
$data_points = array(
|
731 |
+
array(
|
732 |
+
'name' => __( 'Order ID / Number', 'easy-digital-downloads' ),
|
733 |
+
'value' => $payment->number,
|
734 |
+
),
|
735 |
+
array(
|
736 |
+
'name' => __( 'Order Date', 'easy-digital-downloads' ),
|
737 |
+
'value' => date_i18n( get_option( 'date_format' ) . ' H:i:s', strtotime( $payment->date ) ),
|
738 |
+
),
|
739 |
+
array(
|
740 |
+
'name' => __( 'Order Completed Date', 'easy-digital-downloads' ),
|
741 |
+
'value' => ! empty( $payment->completed_date )
|
742 |
+
? date_i18n( get_option( 'date_format' ) . ' H:i:s', strtotime( $payment->completed_date ) )
|
743 |
+
: '',
|
744 |
+
),
|
745 |
+
array(
|
746 |
+
'name' => __( 'Order Total', 'easy-digital-downloads' ),
|
747 |
+
'value' => edd_currency_filter( edd_format_amount( $payment->total ), $payment->currency ),
|
748 |
+
),
|
749 |
+
array(
|
750 |
+
'name' => __( 'Order Items', 'easy-digital-downloads' ),
|
751 |
+
'value' => $items_purchased,
|
752 |
+
),
|
753 |
+
array(
|
754 |
+
'name' => __( 'Email Address', 'easy-digital-downloads' ),
|
755 |
+
'value' => ! empty( $payment->email ) ? $payment->email : '',
|
756 |
+
),
|
757 |
+
array(
|
758 |
+
'name' => __( 'Billing Address', 'easy-digital-downloads' ),
|
759 |
+
'value' => $full_billing_address,
|
760 |
+
),
|
761 |
+
array(
|
762 |
+
'name' => __( 'IP Address', 'easy-digital-downloads' ),
|
763 |
+
'value' => ! empty( $payment->ip ) ? $payment->ip : '',
|
764 |
+
),
|
765 |
+
array(
|
766 |
+
'name' => __( 'Status', 'easy-digital-downloads' ),
|
767 |
+
'value' => edd_get_payment_status_label( $payment->status ),
|
768 |
+
),
|
769 |
+
);
|
770 |
+
|
771 |
+
$data_points = apply_filters( 'edd_privacy_order_details_item', $data_points, $payment );
|
772 |
+
|
773 |
+
$export_items[] = array(
|
774 |
+
'group_id' => 'edd-order-details',
|
775 |
+
'group_label' => __( 'Customer Orders', 'easy-digital-downloads' ),
|
776 |
+
'item_id' => "edd-order-details-{$payment->ID}",
|
777 |
+
'data' => $data_points,
|
778 |
+
);
|
779 |
+
|
780 |
+
}
|
781 |
+
|
782 |
+
|
783 |
+
// Add the data to the list, and tell the exporter to come back for the next page of payments.
|
784 |
+
return array(
|
785 |
+
'data' => $export_items,
|
786 |
+
'done' => false,
|
787 |
+
);
|
788 |
+
|
789 |
+
}
|
790 |
+
|
791 |
+
/**
|
792 |
+
* Adds the file download logs for a customer to the WP Core Privacy Data exporter
|
793 |
+
*
|
794 |
+
* @since 2.9.2
|
795 |
+
*
|
796 |
+
* @param string $email_address The email address to look up file download logs for.
|
797 |
+
* @param int $page The page of logs to request.
|
798 |
+
*
|
799 |
+
* @return array
|
800 |
+
*/
|
801 |
+
function edd_privacy_file_download_log_exporter( $email_address = '', $page = 1 ) {
|
802 |
+
global $edd_logs;
|
803 |
+
|
804 |
+
$customer = new EDD_Customer( $email_address );
|
805 |
+
$log_query = array(
|
806 |
+
'log_type' => 'file_download',
|
807 |
+
'posts_per_page' => 100,
|
808 |
+
'paged' => $page,
|
809 |
+
'update_post_meta_cache' => false,
|
810 |
+
'update_post_term_cache' => false,
|
811 |
+
'meta_query' => array(
|
812 |
+
array(
|
813 |
+
'key' => '_edd_log_customer_id',
|
814 |
+
'value' => $customer->id,
|
815 |
+
)
|
816 |
+
)
|
817 |
+
);
|
818 |
+
|
819 |
+
$logs = $edd_logs->get_connected_logs( $log_query );
|
820 |
+
|
821 |
+
// If we haven't found any payments for this page, just return that we're done.
|
822 |
+
if ( empty( $logs ) ) {
|
823 |
+
return array( 'data' => array(), 'done' => true );
|
824 |
+
}
|
825 |
+
|
826 |
+
$found_downloads = array();
|
827 |
+
|
828 |
+
$export_items = array();
|
829 |
+
foreach ( $logs as $log ) {
|
830 |
+
|
831 |
+
$log_meta = get_post_meta( $log->ID );
|
832 |
+
|
833 |
+
if ( ! isset( $found_downloads[ $log->post_parent ] ) ) {
|
834 |
+
$found_downloads[ $log->post_parent ] = new EDD_Download( $log->post_parent );
|
835 |
+
}
|
836 |
+
|
837 |
+
$download = $found_downloads[ $log->post_parent ];
|
838 |
+
|
839 |
+
$data_points = array(
|
840 |
+
array(
|
841 |
+
'name' => __( 'Date of Download', 'easy-digital-downloads' ),
|
842 |
+
'value' => date_i18n( get_option( 'date_format' ) . ' H:i:s', strtotime( $log->post_date ) ),
|
843 |
+
),
|
844 |
+
array(
|
845 |
+
'name' => __( 'Product Downloaded', 'easy-digital-downloads' ),
|
846 |
+
'value' => $download->get_name(),
|
847 |
+
),
|
848 |
+
array(
|
849 |
+
'name' => __( 'Order ID', 'easy-digital-downloads' ),
|
850 |
+
'value' => $log_meta['_edd_log_payment_id'][0],
|
851 |
+
),
|
852 |
+
array(
|
853 |
+
'name' => __( 'Customer ID', 'easy-digital-downloads' ),
|
854 |
+
'value' => $log_meta['_edd_log_customer_id'][0],
|
855 |
+
),
|
856 |
+
array(
|
857 |
+
'name' => __( 'User ID', 'easy-digital-downloads' ),
|
858 |
+
'value' => $log_meta['_edd_log_user_id'][0],
|
859 |
+
),
|
860 |
+
array(
|
861 |
+
'name' => __( 'IP Address', 'easy-digital-downloads' ),
|
862 |
+
'value' => $log_meta['_edd_log_ip'][0],
|
863 |
+
),
|
864 |
+
);
|
865 |
+
|
866 |
+
$data_points = apply_filters( 'edd_privacy_file_download_log_item', $data_points, $log, $log_meta );
|
867 |
+
|
868 |
+
$export_items[] = array(
|
869 |
+
'group_id' => 'edd-file-download-logs',
|
870 |
+
'group_label' => __( 'File Download Logs', 'easy-digital-downloads' ),
|
871 |
+
'item_id' => "edd-file-download-logs-{$log->ID}",
|
872 |
+
'data' => $data_points,
|
873 |
+
);
|
874 |
+
|
875 |
+
}
|
876 |
+
|
877 |
+
|
878 |
+
// Add the data to the list, and tell the exporter to come back for the next page of payments.
|
879 |
+
return array(
|
880 |
+
'data' => $export_items,
|
881 |
+
'done' => false,
|
882 |
+
);
|
883 |
+
}
|
884 |
+
|
885 |
+
/**
|
886 |
+
* Adds the api access logs for a user to the WP Core Privacy Data exporter
|
887 |
+
*
|
888 |
+
* @since 2.9.2
|
889 |
+
*
|
890 |
+
* @param string $email_address The email address to look up api access logs for.
|
891 |
+
* @param int $page The page of logs to request.
|
892 |
+
*
|
893 |
+
* @return array
|
894 |
+
*/
|
895 |
+
function edd_privacy_api_access_log_exporter( $email_address = '', $page = 1 ) {
|
896 |
+
global $edd_logs;
|
897 |
+
|
898 |
+
$user = get_user_by( 'email', $email_address );
|
899 |
+
|
900 |
+
if ( false === $user ) {
|
901 |
+
return array( 'data' => array(), 'done' => true );
|
902 |
+
}
|
903 |
+
|
904 |
+
$log_query = array(
|
905 |
+
'log_type' => 'api_access',
|
906 |
+
'posts_per_page' => 100,
|
907 |
+
'paged' => $page,
|
908 |
+
'update_post_meta_cache' => false,
|
909 |
+
'update_post_term_cache' => false,
|
910 |
+
'meta_query' => array(
|
911 |
+
array(
|
912 |
+
'key' => '_edd_log_user',
|
913 |
+
'value' => $user->ID,
|
914 |
+
)
|
915 |
+
)
|
916 |
+
);
|
917 |
+
|
918 |
+
$logs = $edd_logs->get_connected_logs( $log_query );
|
919 |
+
|
920 |
+
// If we haven't found any api access logs for this page, just return that we're done.
|
921 |
+
if ( empty( $logs ) ) {
|
922 |
+
return array( 'data' => array(), 'done' => true );
|
923 |
+
}
|
924 |
+
|
925 |
+
$export_items = array();
|
926 |
+
foreach ( $logs as $log ) {
|
927 |
+
|
928 |
+
$ip_address = get_post_meta( $log->ID, '_edd_log_request_ip', true );
|
929 |
+
|
930 |
+
$data_points = array(
|
931 |
+
array(
|
932 |
+
'name' => __( 'Date', 'easy-digital-downloads' ),
|
933 |
+
'value' => date_i18n( get_option( 'date_format' ) . ' H:i:s', strtotime( $log->post_date ) ),
|
934 |
+
),
|
935 |
+
array(
|
936 |
+
'name' => __( 'Request', 'easy-digital-downloads' ),
|
937 |
+
'value' => $log->post_excerpt,
|
938 |
+
),
|
939 |
+
array(
|
940 |
+
'name' => __( 'IP Address', 'easy-digital-downloads' ),
|
941 |
+
'value' => $ip_address,
|
942 |
+
),
|
943 |
+
);
|
944 |
+
|
945 |
+
$data_points = apply_filters( 'edd_privacy_api_access_log_item', $data_points, $log );
|
946 |
+
|
947 |
+
$export_items[] = array(
|
948 |
+
'group_id' => 'edd-api-access-logs',
|
949 |
+
'group_label' => __( 'API Access Logs', 'easy-digital-downloads' ),
|
950 |
+
'item_id' => "edd-api-access-logs-{$log->ID}",
|
951 |
+
'data' => $data_points,
|
952 |
+
);
|
953 |
+
|
954 |
+
}
|
955 |
+
|
956 |
+
// Add the data to the list, and tell the exporter to come back for the next page of payments.
|
957 |
+
return array(
|
958 |
+
'data' => $export_items,
|
959 |
+
'done' => false,
|
960 |
+
);
|
961 |
+
}
|
962 |
+
|
963 |
+
/** Anonymization Functions */
|
964 |
+
|
965 |
+
/**
|
966 |
+
* This registers a single eraser _very_ early to avoid any other hook into the EDD data from running first.
|
967 |
+
*
|
968 |
+
* We are going to set an option of what customer we're currently deleting for what email address, so that after the customer
|
969 |
+
* is anonymized we can still find them. Then we'll delete it.
|
970 |
+
*
|
971 |
+
* @param array $erasers
|
972 |
+
*/
|
973 |
+
function edd_register_privacy_eraser_customer_id_lookup( $erasers = array() ) {
|
974 |
+
$erasers[] = array(
|
975 |
+
'eraser_friendly_name' => 'pre-eraser-customer-id-lookup',
|
976 |
+
'callback' => 'edd_privacy_prefetch_customer_id',
|
977 |
+
);
|
978 |
+
|
979 |
+
return $erasers;
|
980 |
+
}
|
981 |
+
add_filter( 'wp_privacy_personal_data_erasers', 'edd_register_privacy_eraser_customer_id_lookup', 5, 1 );
|
982 |
+
|
983 |
+
/**
|
984 |
+
* Lookup the customer ID for this email address so that we can use it later in the anonymization process.
|
985 |
+
*
|
986 |
+
* @param $email_address
|
987 |
+
* @param int $page
|
988 |
+
*
|
989 |
+
* @return array
|
990 |
+
*/
|
991 |
+
function edd_privacy_prefetch_customer_id( $email_address, $page = 1 ) {
|
992 |
+
$customer = new EDD_Customer( $email_address );
|
993 |
+
update_option( 'edd_priv_' . md5( $email_address ), $customer->id, false );
|
994 |
+
|
995 |
+
return array(
|
996 |
+
'items_removed' => false,
|
997 |
+
'items_retained' => false,
|
998 |
+
'messages' => array(),
|
999 |
+
'done' => true,
|
1000 |
+
);
|
1001 |
+
}
|
1002 |
+
|
1003 |
+
/**
|
1004 |
+
* This registers a single eraser _very_ late to remove a customer ID that was found for the erasers.
|
1005 |
+
*
|
1006 |
+
* We are now assumed done with our exporters, so we can go ahead and delete the customer ID we found for this eraser.
|
1007 |
+
*
|
1008 |
+
* @param array $erasers
|
1009 |
+
*/
|
1010 |
+
function edd_register_privacy_eraser_customer_id_removal( $erasers = array() ) {
|
1011 |
+
$erasers[] = array(
|
1012 |
+
'eraser_friendly_name' => __( 'Possibly Delete Customer', 'easy-digital-downloads' ),
|
1013 |
+
'callback' => 'edd_privacy_maybe_delete_customer_eraser',
|
1014 |
+
);
|
1015 |
+
|
1016 |
+
$erasers[] = array(
|
1017 |
+
'eraser_friendly_name' => 'post-eraser-customer-id-lookup',
|
1018 |
+
'callback' => 'edd_privacy_remove_customer_id',
|
1019 |
+
);
|
1020 |
+
|
1021 |
+
return $erasers;
|
1022 |
+
}
|
1023 |
+
add_filter( 'wp_privacy_personal_data_erasers', 'edd_register_privacy_eraser_customer_id_removal', 9999, 1 );
|
1024 |
+
|
1025 |
+
/**
|
1026 |
+
* Delete the customer ID for this email address that was found in edd_privacy_prefetch_customer_id()
|
1027 |
+
*
|
1028 |
+
* @param $email_address
|
1029 |
+
* @param int $page
|
1030 |
+
*
|
1031 |
+
* @return array
|
1032 |
+
*/
|
1033 |
+
function edd_privacy_remove_customer_id( $email_address, $page = 1 ) {
|
1034 |
+
delete_option( 'edd_priv_' . md5( $email_address ) );
|
1035 |
+
|
1036 |
+
return array(
|
1037 |
+
'items_removed' => false,
|
1038 |
+
'items_retained' => false,
|
1039 |
+
'messages' => array(),
|
1040 |
+
'done' => true,
|
1041 |
+
);
|
1042 |
+
}
|
1043 |
+
|
1044 |
+
/**
|
1045 |
+
* If after the payment anonymization/erasure methods have been run, and there are no longer payments
|
1046 |
+
* for the requested customer, go ahead and delete the customer
|
1047 |
+
*
|
1048 |
+
* @since 2.9.2
|
1049 |
+
*
|
1050 |
+
* @param string $email_address The email address requesting anonymization/erasure
|
1051 |
+
* @param int $page The page (not needed for this query)
|
1052 |
+
*
|
1053 |
+
* @return array
|
1054 |
+
*/
|
1055 |
+
function edd_privacy_maybe_delete_customer_eraser( $email_address, $page = 1 ) {
|
1056 |
+
$customer = _edd_privacy_get_customer_id_for_email( $email_address );
|
1057 |
+
|
1058 |
+
if ( empty( $customer->id ) ) {
|
1059 |
+
return array(
|
1060 |
+
'items_removed' => false,
|
1061 |
+
'items_retained' => false,
|
1062 |
+
'messages' => array(),
|
1063 |
+
'done' => true,
|
1064 |
+
);
|
1065 |
+
}
|
1066 |
+
|
1067 |
+
$payments = edd_get_payments( array(
|
1068 |
+
'customer' => $customer->id,
|
1069 |
+
'output' => 'payments',
|
1070 |
+
'page' => $page,
|
1071 |
+
) );
|
1072 |
+
|
1073 |
+
if ( ! empty( $payments ) ) {
|
1074 |
+
return array(
|
1075 |
+
'items_removed' => false,
|
1076 |
+
'items_retained' => false,
|
1077 |
+
'messages' => array(
|
1078 |
+
sprintf( __( 'Customer for %s not deleted, due to remaining payments.', 'easy-digital-downloads' ), $email_address ),
|
1079 |
+
),
|
1080 |
+
'done' => true,
|
1081 |
+
);
|
1082 |
+
}
|
1083 |
+
|
1084 |
+
if ( empty( $payments ) ) {
|
1085 |
+
global $wpdb;
|
1086 |
+
|
1087 |
+
$deleted_customer = EDD()->customers->delete( $customer->id );
|
1088 |
+
if ( $deleted_customer ) {
|
1089 |
+
$customer_meta_table = EDD()->customer_meta->table_name;
|
1090 |
+
$deleted_meta = $wpdb->query( "DELETE FROM {$customer_meta_table} WHERE customer_id = {$customer->id}" );
|
1091 |
+
|
1092 |
+
return array(
|
1093 |
+
'items_removed' => true,
|
1094 |
+
'items_retained' => false,
|
1095 |
+
'messages' => array(
|
1096 |
+
sprintf( __( 'Customer for %s successfully deleted.', 'easy-digital-downloads' ), $email_address ),
|
1097 |
+
),
|
1098 |
+
'done' => true,
|
1099 |
+
);
|
1100 |
+
}
|
1101 |
+
}
|
1102 |
+
|
1103 |
+
return array(
|
1104 |
+
'items_removed' => false,
|
1105 |
+
'items_retained' => false,
|
1106 |
+
'messages' => array(
|
1107 |
+
sprintf( __( 'Customer for %s failed to be deleted.', 'easy-digital-downloads' ), $email_address ),
|
1108 |
+
),
|
1109 |
+
'done' => true,
|
1110 |
+
);
|
1111 |
+
}
|
1112 |
+
|
1113 |
+
/**
|
1114 |
+
* Register eraser for EDD Data
|
1115 |
+
*
|
1116 |
+
* @param array $erasers
|
1117 |
+
*
|
1118 |
+
* @return array
|
1119 |
+
*/
|
1120 |
+
function edd_register_privacy_erasers( $erasers = array() ) {
|
1121 |
+
|
1122 |
+
// The order of these matter, customer needs to be anonymized prior to the customer, so that the payment can adopt
|
1123 |
+
// properties of the customer like email.
|
1124 |
+
|
1125 |
+
$erasers[] = array(
|
1126 |
+
'eraser_friendly_name' => __( 'Customer Record', 'easy-digital-downloads' ),
|
1127 |
+
'callback' => 'edd_privacy_customer_anonymizer',
|
1128 |
+
);
|
1129 |
+
|
1130 |
+
$erasers[] = array(
|
1131 |
+
'eraser_friendly_name' => __( 'Payment Record', 'easy-digital-downloads' ),
|
1132 |
+
'callback' => 'edd_privacy_payment_eraser',
|
1133 |
+
);
|
1134 |
+
|
1135 |
+
$erasers[] = array(
|
1136 |
+
'eraser_friendly_name' => __( 'File Download Logs', 'easy-digital-downloads' ),
|
1137 |
+
'callback' => 'edd_privacy_file_download_logs_eraser',
|
1138 |
+
);
|
1139 |
+
|
1140 |
+
$erasers[] = array(
|
1141 |
+
'eraser_friendly_name' => __( 'API Access Logs', 'easy-digital-downloads' ),
|
1142 |
+
'callback' => 'edd_privacy_api_access_logs_eraser',
|
1143 |
+
);
|
1144 |
+
|
1145 |
+
return $erasers;
|
1146 |
+
|
1147 |
+
}
|
1148 |
+
add_filter( 'wp_privacy_personal_data_erasers', 'edd_register_privacy_erasers', 11, 1 );
|
1149 |
+
|
1150 |
+
/**
|
1151 |
+
* Anonymize a customer record through the WP Core Privacy Data Eraser methods.
|
1152 |
+
*
|
1153 |
+
* @param $email_address
|
1154 |
+
* @param int $page
|
1155 |
+
*
|
1156 |
+
* @return array
|
1157 |
+
*/
|
1158 |
+
function edd_privacy_customer_anonymizer( $email_address, $page = 1 ) {
|
1159 |
+
$customer = _edd_privacy_get_customer_id_for_email( $email_address );
|
1160 |
+
|
1161 |
+
$anonymized = _edd_anonymize_customer( $customer->id );
|
1162 |
+
if ( empty( $anonymized['success'] ) ) {
|
1163 |
+
return array(
|
1164 |
+
'items_removed' => false,
|
1165 |
+
'items_retained' => false,
|
1166 |
+
'messages' => array( $anonymized['message'] ),
|
1167 |
+
'done' => true,
|
1168 |
+
);
|
1169 |
+
}
|
1170 |
+
|
1171 |
+
return array(
|
1172 |
+
'items_removed' => true,
|
1173 |
+
'items_retained' => false,
|
1174 |
+
'messages' => array( sprintf( __( 'Customer for %s has been anonymized.', 'easy-digital-downloads' ), $email_address ) ),
|
1175 |
+
'done' => true,
|
1176 |
+
);
|
1177 |
+
}
|
1178 |
+
|
1179 |
+
/**
|
1180 |
+
* Anonymize a payment record through the WP Core Privacy Data Eraser methods.
|
1181 |
+
*
|
1182 |
+
* @param string $email_address
|
1183 |
+
* @param int $page
|
1184 |
+
*
|
1185 |
+
* @return array
|
1186 |
+
*/
|
1187 |
+
function edd_privacy_payment_eraser( $email_address, $page = 1 ) {
|
1188 |
+
$customer = _edd_privacy_get_customer_id_for_email( $email_address );
|
1189 |
+
|
1190 |
+
$payments = edd_get_payments( array(
|
1191 |
+
'customer' => $customer->id,
|
1192 |
+
'output' => 'payments',
|
1193 |
+
'page' => $page,
|
1194 |
+
) );
|
1195 |
+
|
1196 |
+
if ( empty( $payments ) ) {
|
1197 |
+
|
1198 |
+
$message = 1 === $page ?
|
1199 |
+
sprintf( __( 'No payments found for %s.', 'easy-digital-downloads' ), $email_address ) :
|
1200 |
+
sprintf( __( 'All eligible payments anonymized or deleted for %s.', 'easy-digital-downloads' ), $email_address );
|
1201 |
+
|
1202 |
+
return array(
|
1203 |
+
'items_removed' => false,
|
1204 |
+
'items_retained' => false,
|
1205 |
+
'messages' => array( $message ),
|
1206 |
+
'done' => true,
|
1207 |
+
);
|
1208 |
+
}
|
1209 |
+
|
1210 |
+
$items_removed = null;
|
1211 |
+
$items_retained = null;
|
1212 |
+
$messages = array();
|
1213 |
+
foreach ( $payments as $payment ) {
|
1214 |
+
$result = _edd_anonymize_payment( $payment->ID );
|
1215 |
+
|
1216 |
+
if ( ! is_null( $items_removed ) && $result['success'] ) {
|
1217 |
+
$items_removed = true;
|
1218 |
+
}
|
1219 |
+
|
1220 |
+
if ( ! is_null( $items_removed ) && ! $result['success'] ) {
|
1221 |
+
$items_retained = true;
|
1222 |
+
}
|
1223 |
+
|
1224 |
+
$messages[] = $result['message'];
|
1225 |
+
}
|
1226 |
+
|
1227 |
+
|
1228 |
+
|
1229 |
+
return array(
|
1230 |
+
'items_removed' => ! is_null( $items_removed ) ? $items_removed : false,
|
1231 |
+
'items_retained' => ! is_null( $items_retained ) ? $items_retained : false,
|
1232 |
+
'messages' => $messages,
|
1233 |
+
'done' => false,
|
1234 |
+
);
|
1235 |
+
}
|
1236 |
+
|
1237 |
+
/**
|
1238 |
+
* Anonymize the file download logs.
|
1239 |
+
*
|
1240 |
+
* @since 2.9.2
|
1241 |
+
*
|
1242 |
+
* @param string $email_address
|
1243 |
+
* @param int $page
|
1244 |
+
*
|
1245 |
+
* @return array
|
1246 |
+
*/
|
1247 |
+
function edd_privacy_file_download_logs_eraser( $email_address, $page = 1 ) {
|
1248 |
+
global $edd_logs;
|
1249 |
+
|
1250 |
+
$customer = _edd_privacy_get_customer_id_for_email( $email_address );
|
1251 |
+
|
1252 |
+
$log_query = array(
|
1253 |
+
'log_type' => 'file_download',
|
1254 |
+
'posts_per_page' => 25,
|
1255 |
+
'paged' => $page,
|
1256 |
+
'update_post_meta_cache' => false,
|
1257 |
+
'update_post_term_cache' => false,
|
1258 |
+
'meta_query' => array(
|
1259 |
+
array(
|
1260 |
+
'key' => '_edd_log_customer_id',
|
1261 |
+
'value' => $customer->id,
|
1262 |
+
)
|
1263 |
+
)
|
1264 |
+
);
|
1265 |
+
|
1266 |
+
$logs = $edd_logs->get_connected_logs( $log_query );
|
1267 |
+
|
1268 |
+
if ( empty( $logs ) ) {
|
1269 |
+
|
1270 |
+
return array(
|
1271 |
+
'items_removed' => false,
|
1272 |
+
'items_retained' => false,
|
1273 |
+
'messages' => array( sprintf( __( 'All eligible file download logs anonymized or deleted for %s.', 'easy-digital-downloads' ), $email_address ) ),
|
1274 |
+
'done' => true,
|
1275 |
+
);
|
1276 |
+
}
|
1277 |
+
|
1278 |
+
foreach ( $logs as $log ) {
|
1279 |
+
$current_ip = get_post_meta( $log->ID, '_edd_log_ip', true );
|
1280 |
+
update_post_meta( $log->ID, '_edd_log_ip', wp_privacy_anonymize_ip( $current_ip ) );
|
1281 |
+
|
1282 |
+
/**
|
1283 |
+
* Run further anonymization on a file download log
|
1284 |
+
*
|
1285 |
+
* Developers and extensions can use the $log WP_Post object passed into the edd_anonymize_file_download_log action
|
1286 |
+
* to complete further anonymization.
|
1287 |
+
*
|
1288 |
+
* @since 2.9.2
|
1289 |
+
*
|
1290 |
+
* @param WP_Post $log The WP_Post object for the log
|
1291 |
+
*/
|
1292 |
+
do_action( 'edd_anonymize_file_download_log', $log );
|
1293 |
+
}
|
1294 |
+
|
1295 |
+
return array(
|
1296 |
+
'items_removed' => true,
|
1297 |
+
'items_retained' => false,
|
1298 |
+
'messages' => array(),
|
1299 |
+
'done' => false,
|
1300 |
+
);
|
1301 |
+
}
|
1302 |
+
|
1303 |
+
/**
|
1304 |
+
* Delete API Access Logs
|
1305 |
+
*
|
1306 |
+
* @since 2.9.2
|
1307 |
+
*
|
1308 |
+
* @param string $email_address
|
1309 |
+
* @param int $page
|
1310 |
+
*
|
1311 |
+
* @return array
|
1312 |
+
*/
|
1313 |
+
function edd_privacy_api_access_logs_eraser( $email_address, $page = 1 ) {
|
1314 |
+
global $edd_logs;
|
1315 |
+
|
1316 |
+
$user = get_user_by( 'email', $email_address );
|
1317 |
+
|
1318 |
+
if ( false === $user ) {
|
1319 |
+
return array(
|
1320 |
+
'items_removed' => false,
|
1321 |
+
'items_retained' => false,
|
1322 |
+
'messages' => array( sprintf( __( 'No User found for %s, no access logs to remove.', 'easy-digital-downloads' ), $email_address ) ),
|
1323 |
+
'done' => true,
|
1324 |
+
);
|
1325 |
+
}
|
1326 |
+
|
1327 |
+
$log_query = array(
|
1328 |
+
'log_type' => 'api_access',
|
1329 |
+
'posts_per_page' => 25,
|
1330 |
+
'paged' => $page,
|
1331 |
+
'update_post_meta_cache' => false,
|
1332 |
+
'update_post_term_cache' => false,
|
1333 |
+
'meta_query' => array(
|
1334 |
+
array(
|
1335 |
+
'key' => '_edd_log_user',
|
1336 |
+
'value' => $user->ID,
|
1337 |
+
)
|
1338 |
+
)
|
1339 |
+
);
|
1340 |
+
|
1341 |
+
$logs = $edd_logs->get_connected_logs( $log_query );
|
1342 |
+
|
1343 |
+
if ( empty( $logs ) ) {
|
1344 |
+
return array(
|
1345 |
+
'items_removed' => false,
|
1346 |
+
'items_retained' => false,
|
1347 |
+
'messages' => array( sprintf( __( 'All API access logs deleted for %s.', 'easy-digital-downloads' ), $email_address ) ),
|
1348 |
+
'done' => true,
|
1349 |
+
);
|
1350 |
+
}
|
1351 |
+
|
1352 |
+
foreach ( $logs as $log ) {
|
1353 |
+
wp_delete_post( $log->ID );
|
1354 |
+
|
1355 |
+
/**
|
1356 |
+
* Run further actions on an api access log
|
1357 |
+
*
|
1358 |
+
* Developers and extensions can use the $log WP_Post object passed into the edd_delete_api_access_log action
|
1359 |
+
* to complete further actions.
|
1360 |
+
*
|
1361 |
+
* @since 2.9.2
|
1362 |
+
*
|
1363 |
+
* @param WP_Post $log The WP_Post object for the log
|
1364 |
+
*/
|
1365 |
+
do_action( 'edd_delete_api_access_log', $log );
|
1366 |
+
}
|
1367 |
+
|
1368 |
+
return array(
|
1369 |
+
'items_removed' => true,
|
1370 |
+
'items_retained' => false,
|
1371 |
+
'messages' => array(),
|
1372 |
+
'done' => false,
|
1373 |
+
);
|
1374 |
+
}
|
includes/shortcodes.php
CHANGED
@@ -587,6 +587,9 @@ function edd_downloads_query( $atts, $content = null ) {
|
|
587 |
$query = apply_filters( 'edd_downloads_query', $query, $atts );
|
588 |
|
589 |
$downloads = new WP_Query( $query );
|
|
|
|
|
|
|
590 |
if ( $downloads->have_posts() ) :
|
591 |
$i = 1;
|
592 |
$columns_class = array( 'edd_download_columns_' . $atts['columns'] );
|
@@ -594,9 +597,10 @@ function edd_downloads_query( $atts, $content = null ) {
|
|
594 |
$wrapper_classes = array_unique( array_merge( $columns_class, $custom_classes ) );
|
595 |
$wrapper_classes = implode( ' ', $wrapper_classes );
|
596 |
ob_start(); ?>
|
|
|
597 |
<div class="edd_downloads_list <?php echo apply_filters( 'edd_downloads_list_wrapper_class', $wrapper_classes, $atts ); ?>">
|
598 |
|
599 |
-
<?php do_action( 'edd_downloads_list_top', $atts ); ?>
|
600 |
|
601 |
<?php while ( $downloads->have_posts() ) : $downloads->the_post(); ?>
|
602 |
<?php do_action( 'edd_download_shortcode_item', $atts, $i ); ?>
|
@@ -646,6 +650,8 @@ function edd_downloads_query( $atts, $content = null ) {
|
|
646 |
$display = sprintf( _x( 'No %s found', 'download post type name', 'easy-digital-downloads' ), edd_get_label_plural() );
|
647 |
endif;
|
648 |
|
|
|
|
|
649 |
return apply_filters( 'downloads_shortcode', $display, $atts, $atts['buy_button'], $atts['columns'], '', $downloads, $atts['excerpt'], $atts['full_content'], $atts['price'], $atts['thumbnails'], $query );
|
650 |
}
|
651 |
add_shortcode( 'downloads', 'edd_downloads_query' );
|
587 |
$query = apply_filters( 'edd_downloads_query', $query, $atts );
|
588 |
|
589 |
$downloads = new WP_Query( $query );
|
590 |
+
|
591 |
+
do_action( 'edd_downloads_list_before', $atts );
|
592 |
+
|
593 |
if ( $downloads->have_posts() ) :
|
594 |
$i = 1;
|
595 |
$columns_class = array( 'edd_download_columns_' . $atts['columns'] );
|
597 |
$wrapper_classes = array_unique( array_merge( $columns_class, $custom_classes ) );
|
598 |
$wrapper_classes = implode( ' ', $wrapper_classes );
|
599 |
ob_start(); ?>
|
600 |
+
|
601 |
<div class="edd_downloads_list <?php echo apply_filters( 'edd_downloads_list_wrapper_class', $wrapper_classes, $atts ); ?>">
|
602 |
|
603 |
+
<?php do_action( 'edd_downloads_list_top', $atts, $downloads ); ?>
|
604 |
|
605 |
<?php while ( $downloads->have_posts() ) : $downloads->the_post(); ?>
|
606 |
<?php do_action( 'edd_download_shortcode_item', $atts, $i ); ?>
|
650 |
$display = sprintf( _x( 'No %s found', 'download post type name', 'easy-digital-downloads' ), edd_get_label_plural() );
|
651 |
endif;
|
652 |
|
653 |
+
do_action( 'edd_downloads_list_after', $atts, $downloads );
|
654 |
+
|
655 |
return apply_filters( 'downloads_shortcode', $display, $atts, $atts['buy_button'], $atts['columns'], '', $downloads, $atts['excerpt'], $atts['full_content'], $atts['price'], $atts['thumbnails'], $query );
|
656 |
}
|
657 |
add_shortcode( 'downloads', 'edd_downloads_query' );
|
includes/user-functions.php
CHANGED
@@ -354,7 +354,7 @@ function edd_purchase_total_of_user( $user = null ) {
|
|
354 |
}
|
355 |
|
356 |
/**
|
357 |
-
* Counts the total number of files a customer has downloaded
|
358 |
*
|
359 |
* @since 1.3
|
360 |
* @param mixed $user - ID or email
|
@@ -364,13 +364,10 @@ function edd_count_file_downloads_of_user( $user ) {
|
|
364 |
global $edd_logs;
|
365 |
|
366 |
if ( is_email( $user ) ) {
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
|
371 |
-
'compare' => 'LIKE'
|
372 |
-
)
|
373 |
-
);
|
374 |
} else {
|
375 |
$meta_query = array(
|
376 |
array(
|
@@ -383,6 +380,27 @@ function edd_count_file_downloads_of_user( $user ) {
|
|
383 |
return $edd_logs->get_log_count( null, 'file_download', $meta_query );
|
384 |
}
|
385 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
386 |
/**
|
387 |
* Validate a potential username
|
388 |
*
|
354 |
}
|
355 |
|
356 |
/**
|
357 |
+
* Counts the total number of files a user (or customer if an email address is given) has downloaded
|
358 |
*
|
359 |
* @since 1.3
|
360 |
* @param mixed $user - ID or email
|
364 |
global $edd_logs;
|
365 |
|
366 |
if ( is_email( $user ) ) {
|
367 |
+
|
368 |
+
// If we got an email, look up the customer ID and call the direct query for customer download counts.
|
369 |
+
return edd_count_file_downloads_of_customer( $user );
|
370 |
+
|
|
|
|
|
|
|
371 |
} else {
|
372 |
$meta_query = array(
|
373 |
array(
|
380 |
return $edd_logs->get_log_count( null, 'file_download', $meta_query );
|
381 |
}
|
382 |
|
383 |
+
/**
|
384 |
+
* Counts the total number of files a customer has downloaded.
|
385 |
+
*
|
386 |
+
* @param string|int $customer_id_or_email The email address or id of the customer.
|
387 |
+
*
|
388 |
+
* @return int The total number of files the customer has downloaded.
|
389 |
+
*/
|
390 |
+
function edd_count_file_downloads_of_customer( $customer_id_or_email = '' ) {
|
391 |
+
global $edd_logs;
|
392 |
+
|
393 |
+
$customer = new EDD_Customer( $customer_id_or_email );
|
394 |
+
$meta_query = array(
|
395 |
+
array(
|
396 |
+
'key' => '_edd_log_customer_id',
|
397 |
+
'value' => $customer->id,
|
398 |
+
)
|
399 |
+
);
|
400 |
+
|
401 |
+
return $edd_logs->get_log_count( null, 'file_download', $meta_query );
|
402 |
+
}
|
403 |
+
|
404 |
/**
|
405 |
* Validate a potential username
|
406 |
*
|
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.
|
6 |
"Report-Msgid-Bugs-To: https://easydigitaldownloads.com/\n"
|
7 |
-
"POT-Creation-Date: 2018-
|
8 |
"MIME-Version: 1.0\n"
|
9 |
"Content-Type: text/plain; charset=utf-8\n"
|
10 |
"Content-Transfer-Encoding: 8bit\n"
|
@@ -79,14 +79,15 @@ msgstr ""
|
|
79 |
#: includes/admin/tools/class-edd-tools-recount-store-earnings.php:153
|
80 |
#: includes/admin/tools/class-edd-tools-reset-stats.php:179
|
81 |
#: includes/admin/tools.php:1027 includes/admin/tools.php:1033
|
82 |
-
#: includes/admin/upgrades/
|
83 |
-
#: includes/admin/upgrades/upgrade-functions.php:
|
84 |
-
#: includes/admin/upgrades/upgrade-functions.php:
|
85 |
-
#: includes/admin/upgrades/upgrade-functions.php:
|
86 |
-
#: includes/admin/upgrades/upgrade-functions.php:
|
87 |
-
#: includes/admin/upgrades/upgrade-functions.php:
|
88 |
-
#: includes/admin/upgrades/upgrade-functions.php:
|
89 |
-
#: includes/admin/upgrades/upgrade-functions.php:
|
|
|
90 |
#: includes/api/class-edd-api.php:1967 includes/api/class-edd-api.php:1972
|
91 |
#: includes/api/class-edd-api.php:1984 includes/api/class-edd-api.php:1986
|
92 |
#: includes/cart/class-edd-cart.php:1423 includes/cart/class-edd-cart.php:1437
|
@@ -97,8 +98,8 @@ msgstr ""
|
|
97 |
#: includes/error-tracking.php:40 includes/gateways/functions.php:221
|
98 |
#: includes/gateways/manual.php:33 includes/gateways/paypal-standard.php:168
|
99 |
#: includes/process-download.php:293 includes/process-download.php:881
|
100 |
-
#: includes/query-filters.php:48 includes/user-functions.php:
|
101 |
-
#: includes/user-functions.php:
|
102 |
msgid "Error"
|
103 |
msgstr ""
|
104 |
|
@@ -185,7 +186,7 @@ msgstr ""
|
|
185 |
msgid "Easy Digital Downloads Info and Tools"
|
186 |
msgstr ""
|
187 |
|
188 |
-
#: includes/admin/admin-pages.php:42 includes/admin/customers/customers.php:
|
189 |
msgid "Tools"
|
190 |
msgstr ""
|
191 |
|
@@ -195,7 +196,7 @@ msgstr ""
|
|
195 |
|
196 |
#: includes/admin/admin-pages.php:43 includes/admin/plugins.php:57
|
197 |
#: includes/admin/settings/contextual-help.php:87
|
198 |
-
#: includes/admin/settings/register-settings.php:
|
199 |
msgid "Extensions"
|
200 |
msgstr ""
|
201 |
|
@@ -408,7 +409,7 @@ msgstr ""
|
|
408 |
|
409 |
#: includes/admin/customers/class-customer-table.php:72
|
410 |
#: includes/admin/payments/class-payments-table.php:274
|
411 |
-
#: includes/admin/reporting/class-file-downloads-logs-list-table.php:
|
412 |
#: includes/admin/reporting/class-sales-logs-list-table.php:129
|
413 |
msgid "Customer"
|
414 |
msgstr ""
|
@@ -430,7 +431,8 @@ msgstr ""
|
|
430 |
#: includes/admin/discounts/class-discount-codes-table.php:267
|
431 |
#: includes/admin/payments/class-payments-table.php:367
|
432 |
#: includes/admin/payments/class-payments-table.php:435
|
433 |
-
#: includes/
|
|
|
434 |
msgid "Delete"
|
435 |
msgstr ""
|
436 |
|
@@ -447,11 +449,12 @@ msgstr ""
|
|
447 |
#: includes/admin/reporting/class-export-customers.php:74
|
448 |
#: includes/admin/reporting/export/class-batch-export-customers.php:42
|
449 |
#: includes/admin/reporting/export/class-batch-export-downloads.php:43
|
450 |
-
#: templates/shortcode-receipt.php:123
|
451 |
msgid "Name"
|
452 |
msgstr ""
|
453 |
|
454 |
#: includes/admin/customers/class-customer-table.php:177
|
|
|
455 |
msgid "Primary Email"
|
456 |
msgstr ""
|
457 |
|
@@ -465,6 +468,7 @@ msgstr ""
|
|
465 |
|
466 |
#: includes/admin/customers/class-customer-table.php:180
|
467 |
#: includes/admin/reporting/export/class-batch-export-downloads.php:44
|
|
|
468 |
msgid "Date Created"
|
469 |
msgstr ""
|
470 |
|
@@ -511,7 +515,7 @@ msgid "An error has occured. Please try again."
|
|
511 |
msgstr ""
|
512 |
|
513 |
#: includes/admin/customers/customer-actions.php:207
|
514 |
-
#: includes/user-functions.php:
|
515 |
msgid "Nonce verification failed."
|
516 |
msgstr ""
|
517 |
|
@@ -552,7 +556,7 @@ msgid "Nonce verification failed"
|
|
552 |
msgstr ""
|
553 |
|
554 |
#: includes/admin/customers/customer-actions.php:311
|
555 |
-
#: includes/shortcodes.php:
|
556 |
msgid "Email address %s removed by %s"
|
557 |
msgstr ""
|
558 |
|
@@ -635,7 +639,7 @@ msgid "City"
|
|
635 |
msgstr ""
|
636 |
|
637 |
#: includes/admin/customers/customers.php:269
|
638 |
-
#: includes/admin/settings/register-settings.php:
|
639 |
#: includes/admin/tools.php:695 includes/checkout/template.php:435
|
640 |
#: templates/shortcode-profile-editor.php:171
|
641 |
msgid "State / Province"
|
@@ -659,6 +663,7 @@ msgid "Customer since %s"
|
|
659 |
msgstr ""
|
660 |
|
661 |
#: includes/admin/customers/customers.php:313
|
|
|
662 |
msgid "User ID"
|
663 |
msgstr ""
|
664 |
|
@@ -677,7 +682,7 @@ msgid "Update Customer"
|
|
677 |
msgstr ""
|
678 |
|
679 |
#: includes/admin/customers/customers.php:333
|
680 |
-
#: includes/admin/customers/customers.php:
|
681 |
#: includes/admin/payments/view-order-details.php:651
|
682 |
#: includes/admin/payments/view-order-details.php:671
|
683 |
#: includes/admin/thickbox.php:132 includes/class-edd-html-elements.php:796
|
@@ -739,14 +744,14 @@ msgstr ""
|
|
739 |
#: includes/admin/downloads/metabox.php:698
|
740 |
#: includes/admin/downloads/metabox.php:823
|
741 |
#: includes/admin/payments/view-order-details.php:490
|
742 |
-
#: includes/admin/settings/register-settings.php:
|
743 |
#: templates/checkout_cart.php:57 templates/checkout_cart.php:75
|
744 |
#: templates/shortcode-profile-editor.php:123
|
745 |
msgid "Remove"
|
746 |
msgstr ""
|
747 |
|
748 |
#: includes/admin/customers/customers.php:416
|
749 |
-
#: includes/checkout/template.php:182
|
750 |
msgid "Email Address"
|
751 |
msgstr ""
|
752 |
|
@@ -790,15 +795,15 @@ msgstr ""
|
|
790 |
#: includes/admin/reporting/class-export-download-history.php:62
|
791 |
#: includes/admin/reporting/class-export-payments.php:78
|
792 |
#: includes/admin/reporting/class-export.php:67
|
793 |
-
#: includes/admin/reporting/class-file-downloads-logs-list-table.php:
|
794 |
#: includes/admin/reporting/class-gateway-error-logs-list-table.php:131
|
795 |
#: includes/admin/reporting/class-sales-logs-list-table.php:133
|
796 |
#: includes/admin/reporting/export/class-batch-export-api-requests.php:46
|
797 |
#: includes/admin/reporting/export/class-batch-export-file-downloads.php:41
|
798 |
#: includes/admin/reporting/export/class-batch-export-payments.php:60
|
799 |
#: includes/admin/reporting/export/class-batch-export-sales.php:49
|
800 |
-
#: includes/admin/tools.php:587
|
801 |
-
#: templates/shortcode-receipt.php:59
|
802 |
msgid "Date"
|
803 |
msgstr ""
|
804 |
|
@@ -809,7 +814,7 @@ msgstr ""
|
|
809 |
#: includes/admin/reporting/class-export-payments.php:80
|
810 |
#: includes/admin/reporting/export/class-batch-export-downloads.php:48
|
811 |
#: includes/admin/reporting/export/class-batch-export-payments.php:65
|
812 |
-
#: includes/admin/tools.php:614
|
813 |
msgid "Status"
|
814 |
msgstr ""
|
815 |
|
@@ -834,46 +839,89 @@ msgstr ""
|
|
834 |
msgid "No %s Found"
|
835 |
msgstr ""
|
836 |
|
837 |
-
#: includes/admin/customers/customers.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
838 |
#: includes/admin/reporting/export/class-batch-export-downloads.php:56
|
839 |
msgid "Notes"
|
840 |
msgstr ""
|
841 |
|
842 |
-
#: includes/admin/customers/customers.php:
|
843 |
msgid "No Customer Notes"
|
844 |
msgstr ""
|
845 |
|
846 |
-
#: includes/admin/customers/customers.php:
|
847 |
msgid "Are you sure you want to delete this customer?"
|
848 |
msgstr ""
|
849 |
|
850 |
-
#: includes/admin/customers/customers.php:
|
851 |
msgid "Delete all associated payments and records?"
|
852 |
msgstr ""
|
853 |
|
854 |
-
#: includes/admin/customers/customers.php:
|
855 |
msgid "Delete Customer"
|
856 |
msgstr ""
|
857 |
|
858 |
-
#: includes/admin/customers/customers.php:
|
859 |
msgid "Recount Customer Stats"
|
860 |
msgstr ""
|
861 |
|
862 |
-
#: includes/admin/customers/customers.php:
|
863 |
msgid ""
|
864 |
"Use this tool to recalculate the purchase count and total value of the "
|
865 |
"customer."
|
866 |
msgstr ""
|
867 |
|
868 |
-
#: includes/admin/customers/customers.php:
|
869 |
msgid "Recount Stats"
|
870 |
msgstr ""
|
871 |
|
872 |
-
#: includes/admin/customers/customers.php:
|
873 |
msgid "This customer's user account is pending verification."
|
874 |
msgstr ""
|
875 |
|
876 |
-
#: includes/admin/customers/customers.php:
|
877 |
msgid "Verify account."
|
878 |
msgstr ""
|
879 |
|
@@ -1120,7 +1168,7 @@ msgstr ""
|
|
1120 |
|
1121 |
#: includes/admin/discounts/class-discount-codes-table.php:125
|
1122 |
#: includes/admin/payments/class-payments-table.php:247
|
1123 |
-
#: includes/admin/reporting/class-file-downloads-logs-list-table.php:
|
1124 |
#: includes/admin/reporting/class-sales-logs-list-table.php:281
|
1125 |
msgid "All"
|
1126 |
msgstr ""
|
@@ -1205,12 +1253,13 @@ msgstr ""
|
|
1205 |
|
1206 |
#: includes/admin/discounts/contextual-help.php:38
|
1207 |
#: includes/admin/settings/contextual-help.php:42
|
1208 |
-
#: includes/admin/settings/register-settings.php:
|
1209 |
-
#: includes/admin/settings/register-settings.php:
|
1210 |
-
#: includes/admin/settings/register-settings.php:
|
1211 |
-
#: includes/admin/settings/register-settings.php:
|
1212 |
-
#: includes/admin/settings/register-settings.php:
|
1213 |
-
#: includes/admin/settings/register-settings.php:
|
|
|
1214 |
#: includes/admin/tools.php:68
|
1215 |
msgid "General"
|
1216 |
msgstr ""
|
@@ -1906,32 +1955,32 @@ msgid "Completed"
|
|
1906 |
msgstr ""
|
1907 |
|
1908 |
#: includes/admin/payments/class-payments-table.php:249
|
1909 |
-
#: includes/payments/functions.php:
|
1910 |
msgid "Pending"
|
1911 |
msgstr ""
|
1912 |
|
1913 |
#: includes/admin/payments/class-payments-table.php:250
|
1914 |
-
#: includes/payments/functions.php:
|
1915 |
msgid "Processing"
|
1916 |
msgstr ""
|
1917 |
|
1918 |
#: includes/admin/payments/class-payments-table.php:251
|
1919 |
-
#: includes/payments/functions.php:
|
1920 |
msgid "Refunded"
|
1921 |
msgstr ""
|
1922 |
|
1923 |
#: includes/admin/payments/class-payments-table.php:252
|
1924 |
-
#: includes/payments/functions.php:
|
1925 |
msgid "Revoked"
|
1926 |
msgstr ""
|
1927 |
|
1928 |
#: includes/admin/payments/class-payments-table.php:253
|
1929 |
-
#: includes/payments/functions.php:
|
1930 |
msgid "Failed"
|
1931 |
msgstr ""
|
1932 |
|
1933 |
#: includes/admin/payments/class-payments-table.php:254
|
1934 |
-
#: includes/payments/functions.php:
|
1935 |
msgid "Abandoned"
|
1936 |
msgstr ""
|
1937 |
|
@@ -2344,7 +2393,7 @@ msgid "Click \"Save Payment\" to create new customer"
|
|
2344 |
msgstr ""
|
2345 |
|
2346 |
#: includes/admin/payments/view-order-details.php:689
|
2347 |
-
#: includes/checkout/template.php:347
|
2348 |
msgid "Billing Address"
|
2349 |
msgstr ""
|
2350 |
|
@@ -2391,7 +2440,7 @@ msgid "General Settings"
|
|
2391 |
msgstr ""
|
2392 |
|
2393 |
#: includes/admin/reporting/class-api-requests-logs-list-table.php:87
|
2394 |
-
#: includes/admin/reporting/class-file-downloads-logs-list-table.php:
|
2395 |
#: includes/admin/reporting/class-gateway-error-logs-list-table.php:126
|
2396 |
#: includes/admin/reporting/class-sales-logs-list-table.php:128
|
2397 |
#: includes/admin/reporting/export/class-batch-export-api-requests.php:39
|
@@ -2513,11 +2562,12 @@ msgid "Downloaded by"
|
|
2513 |
msgstr ""
|
2514 |
|
2515 |
#: includes/admin/reporting/class-export-download-history.php:64
|
2516 |
-
#: includes/admin/reporting/class-file-downloads-logs-list-table.php:
|
2517 |
#: includes/admin/reporting/export/class-batch-export-api-requests.php:41
|
2518 |
#: includes/admin/reporting/export/class-batch-export-file-downloads.php:43
|
2519 |
#: includes/admin/reporting/export/class-batch-export-payments.php:63
|
2520 |
-
#: includes/admin/tools.php:542
|
|
|
2521 |
msgid "IP Address"
|
2522 |
msgstr ""
|
2523 |
|
@@ -2527,7 +2577,7 @@ msgid "Product"
|
|
2527 |
msgstr ""
|
2528 |
|
2529 |
#: includes/admin/reporting/class-export-download-history.php:66
|
2530 |
-
#: includes/admin/reporting/class-file-downloads-logs-list-table.php:
|
2531 |
#: includes/admin/reporting/export/class-batch-export-file-downloads.php:45
|
2532 |
msgid "File"
|
2533 |
msgstr ""
|
@@ -2555,7 +2605,7 @@ msgstr ""
|
|
2555 |
|
2556 |
#: includes/admin/reporting/class-export-payments.php:68
|
2557 |
#: includes/admin/reporting/export/class-batch-export-payments.php:49
|
2558 |
-
#: includes/admin/settings/register-settings.php:
|
2559 |
#: includes/admin/tools.php:713 templates/shortcode-profile-editor.php:162
|
2560 |
msgid "Country"
|
2561 |
msgstr ""
|
@@ -2617,7 +2667,7 @@ msgstr ""
|
|
2617 |
msgid "You do not have permission to export data."
|
2618 |
msgstr ""
|
2619 |
|
2620 |
-
#: includes/admin/reporting/class-file-downloads-logs-list-table.php:
|
2621 |
#: includes/admin/reporting/class-gateway-error-logs-list-table.php:127
|
2622 |
#: includes/admin/reporting/class-sales-logs-list-table.php:132
|
2623 |
#: includes/admin/reporting/export/class-batch-export-payments.php:39
|
@@ -2809,7 +2859,8 @@ msgstr ""
|
|
2809 |
|
2810 |
#: includes/admin/reporting/export/class-batch-export-payments.php:42
|
2811 |
#: includes/admin/reporting/export/class-batch-export-sales.php:41
|
2812 |
-
#: includes/admin/tools.php:524
|
|
|
2813 |
msgid "Customer ID"
|
2814 |
msgstr ""
|
2815 |
|
@@ -2819,7 +2870,7 @@ msgstr ""
|
|
2819 |
|
2820 |
#: includes/admin/reporting/export/class-batch-export-payments.php:62
|
2821 |
#: includes/admin/settings/register-settings.php:352
|
2822 |
-
#: includes/admin/settings/register-settings.php:
|
2823 |
msgid "Currency"
|
2824 |
msgstr ""
|
2825 |
|
@@ -2951,7 +3002,8 @@ msgid "Refresh Reports"
|
|
2951 |
msgstr ""
|
2952 |
|
2953 |
#: includes/admin/reporting/logs.php:144
|
2954 |
-
#: includes/admin/settings/register-settings.php:
|
|
|
2955 |
msgid "File Downloads"
|
2956 |
msgstr ""
|
2957 |
|
@@ -2981,7 +3033,7 @@ msgstr ""
|
|
2981 |
|
2982 |
#: includes/admin/reporting/reports.php:59
|
2983 |
#: includes/admin/settings/contextual-help.php:71
|
2984 |
-
#: includes/admin/settings/register-settings.php:
|
2985 |
msgid "Taxes"
|
2986 |
msgstr ""
|
2987 |
|
@@ -3128,7 +3180,7 @@ msgstr ""
|
|
3128 |
|
3129 |
#: includes/admin/settings/contextual-help.php:48
|
3130 |
#: includes/admin/settings/register-settings.php:420
|
3131 |
-
#: includes/admin/settings/register-settings.php:
|
3132 |
msgid "Payment Gateways"
|
3133 |
msgstr ""
|
3134 |
|
@@ -3157,7 +3209,7 @@ msgid ""
|
|
3157 |
msgstr ""
|
3158 |
|
3159 |
#: includes/admin/settings/contextual-help.php:57
|
3160 |
-
#: includes/admin/settings/register-settings.php:
|
3161 |
msgid "Emails"
|
3162 |
msgstr ""
|
3163 |
|
@@ -3177,7 +3229,7 @@ msgid ""
|
|
3177 |
msgstr ""
|
3178 |
|
3179 |
#: includes/admin/settings/contextual-help.php:65
|
3180 |
-
#: includes/admin/settings/register-settings.php:
|
3181 |
msgid "Styles"
|
3182 |
msgstr ""
|
3183 |
|
@@ -3260,7 +3312,7 @@ msgid ""
|
|
3260 |
msgstr ""
|
3261 |
|
3262 |
#: includes/admin/settings/contextual-help.php:93
|
3263 |
-
#: includes/admin/settings/register-settings.php:
|
3264 |
msgid "Miscellaneous"
|
3265 |
msgstr ""
|
3266 |
|
@@ -3306,7 +3358,6 @@ msgstr ""
|
|
3306 |
#: includes/admin/settings/register-settings.php:285
|
3307 |
#: includes/admin/settings/register-settings.php:294
|
3308 |
#: includes/admin/settings/register-settings.php:305
|
3309 |
-
#: includes/admin/settings/register-settings.php:909
|
3310 |
msgid "Select a page"
|
3311 |
msgstr ""
|
3312 |
|
@@ -3438,7 +3489,7 @@ msgid "The symbol (usually , or .) to separate decimal points."
|
|
3438 |
msgstr ""
|
3439 |
|
3440 |
#: includes/admin/settings/register-settings.php:388
|
3441 |
-
#: includes/admin/settings/register-settings.php:
|
3442 |
msgid "API"
|
3443 |
msgstr ""
|
3444 |
|
@@ -4100,267 +4151,286 @@ msgid "A postfix to append to all sequential order numbers."
|
|
4100 |
msgstr ""
|
4101 |
|
4102 |
#: includes/admin/settings/register-settings.php:858
|
4103 |
-
msgid "Terms and Privacy Policy"
|
4104 |
-
msgstr ""
|
4105 |
-
|
4106 |
-
#: includes/admin/settings/register-settings.php:861
|
4107 |
-
msgid "Terms and Privacy Policy Settings"
|
4108 |
-
msgstr ""
|
4109 |
-
|
4110 |
-
#: includes/admin/settings/register-settings.php:862
|
4111 |
-
msgid ""
|
4112 |
-
"Depending on legal and regulatory requirements, it may be necessary for "
|
4113 |
-
"your site to show checkboxes for Terms of Agreement and/or Privacy Policy."
|
4114 |
-
msgstr ""
|
4115 |
-
|
4116 |
-
#: includes/admin/settings/register-settings.php:866
|
4117 |
msgid "Agree to Terms"
|
4118 |
msgstr ""
|
4119 |
|
4120 |
-
#: includes/admin/settings/register-settings.php:
|
4121 |
msgid ""
|
4122 |
"Check this to show an agree to terms on the checkout that users must agree "
|
4123 |
"to before purchasing."
|
4124 |
msgstr ""
|
4125 |
|
4126 |
-
#: includes/admin/settings/register-settings.php:
|
4127 |
msgid "Agree to Terms Label"
|
4128 |
msgstr ""
|
4129 |
|
4130 |
-
#: includes/admin/settings/register-settings.php:
|
4131 |
msgid "Label shown next to the agree to terms check box."
|
4132 |
msgstr ""
|
4133 |
|
4134 |
-
#: includes/admin/settings/register-settings.php:
|
4135 |
msgid "Agreement Text"
|
4136 |
msgstr ""
|
4137 |
|
4138 |
-
#: includes/admin/settings/register-settings.php:
|
4139 |
msgid "If Agree to Terms is checked, enter the agreement terms here."
|
4140 |
msgstr ""
|
4141 |
|
4142 |
-
#: includes/admin/settings/register-settings.php:
|
4143 |
msgid "Agree to Privacy Policy"
|
4144 |
msgstr ""
|
4145 |
|
4146 |
-
#: includes/admin/settings/register-settings.php:
|
4147 |
msgid ""
|
4148 |
-
"Check this to show an agree to
|
4149 |
"agree to before purchasing."
|
4150 |
msgstr ""
|
4151 |
|
4152 |
-
#: includes/admin/settings/register-settings.php:
|
4153 |
msgid "Agree to Privacy Policy Label"
|
4154 |
msgstr ""
|
4155 |
|
4156 |
-
#: includes/admin/settings/register-settings.php:
|
4157 |
-
msgid "Label shown next to the agree to
|
4158 |
msgstr ""
|
4159 |
|
4160 |
-
#: includes/admin/settings/register-settings.php:
|
4161 |
-
msgid "Show the
|
4162 |
msgstr ""
|
4163 |
|
4164 |
-
#: includes/admin/settings/register-settings.php:
|
4165 |
-
msgid "Display your
|
4166 |
msgstr ""
|
4167 |
|
4168 |
-
#: includes/admin/settings/register-settings.php:
|
4169 |
-
msgid "Privacy
|
4170 |
msgstr ""
|
4171 |
|
4172 |
-
#: includes/admin/settings/register-settings.php:
|
|
|
|
|
|
|
|
|
4173 |
msgid ""
|
4174 |
-
"
|
4175 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4176 |
msgstr ""
|
4177 |
|
4178 |
-
#: includes/admin/settings/register-settings.php:
|
4179 |
msgid "Buy Now Disabled"
|
4180 |
msgstr ""
|
4181 |
|
4182 |
-
#: includes/admin/settings/register-settings.php:
|
4183 |
msgid ""
|
4184 |
"Buy Now buttons are only available for stores that have a single supported "
|
4185 |
"gateway active and that do not use taxes."
|
4186 |
msgstr ""
|
4187 |
|
4188 |
-
#: includes/admin/settings/register-settings.php:
|
4189 |
msgid "Settings updated."
|
4190 |
msgstr ""
|
4191 |
|
4192 |
-
#: includes/admin/settings/register-settings.php:
|
4193 |
msgid "Error setting default gateway. No gateways are enabled."
|
4194 |
msgstr ""
|
4195 |
|
4196 |
-
#: includes/admin/settings/register-settings.php:
|
4197 |
msgid "%s could not be set as the default gateway. It must first be enabled."
|
4198 |
msgstr ""
|
4199 |
|
4200 |
-
#: includes/admin/settings/register-settings.php:
|
|
|
|
|
|
|
|
|
4201 |
msgid "Licenses"
|
4202 |
msgstr ""
|
4203 |
|
4204 |
-
#: includes/admin/settings/register-settings.php:
|
4205 |
msgid "Misc"
|
4206 |
msgstr ""
|
4207 |
|
4208 |
-
#: includes/admin/settings/register-settings.php:
|
4209 |
#: includes/gateways/functions.php:25 includes/gateways/paypal-standard.php:33
|
4210 |
msgid "PayPal Standard"
|
4211 |
msgstr ""
|
4212 |
|
4213 |
-
#: includes/admin/settings/register-settings.php:
|
4214 |
msgid "Purchase Receipts"
|
4215 |
msgstr ""
|
4216 |
|
4217 |
-
#: includes/admin/settings/register-settings.php:
|
4218 |
msgid "New Sale Notifications"
|
4219 |
msgstr ""
|
4220 |
|
4221 |
-
#: includes/admin/settings/register-settings.php:
|
4222 |
msgid "Main"
|
4223 |
msgstr ""
|
4224 |
|
4225 |
-
#: includes/admin/settings/register-settings.php:
|
4226 |
#: templates/widget-cart-checkout.php:6 templates/widget-cart-empty.php:7
|
4227 |
msgid "Checkout"
|
4228 |
msgstr ""
|
4229 |
|
4230 |
-
#: includes/admin/settings/register-settings.php:
|
4231 |
msgid "Button Text"
|
4232 |
msgstr ""
|
4233 |
|
4234 |
-
#: includes/admin/settings/register-settings.php:
|
4235 |
msgid "Accounting"
|
4236 |
msgstr ""
|
4237 |
|
4238 |
-
#: includes/admin/settings/register-settings.php:
|
4239 |
msgid "Terms of Agreement"
|
4240 |
msgstr ""
|
4241 |
|
4242 |
-
#: includes/admin/settings/register-settings.php:
|
|
|
|
|
|
|
|
|
4243 |
msgid ""
|
4244 |
"Don't see what you need? More Payment Gateway options are available <a "
|
4245 |
"href=\"%s\">here</a>."
|
4246 |
msgstr ""
|
4247 |
|
4248 |
-
#: includes/admin/settings/register-settings.php:
|
4249 |
msgid "The callback function used for the %s setting is missing."
|
4250 |
msgstr ""
|
4251 |
|
4252 |
-
#: includes/admin/settings/register-settings.php:
|
4253 |
msgid "Upload File"
|
4254 |
msgstr ""
|
4255 |
|
4256 |
-
#: includes/admin/settings/register-settings.php:
|
4257 |
msgid "Country Wide"
|
4258 |
msgstr ""
|
4259 |
|
4260 |
-
#: includes/admin/settings/register-settings.php:
|
4261 |
msgid "Rate"
|
4262 |
msgstr ""
|
4263 |
|
4264 |
-
#: includes/admin/settings/register-settings.php:
|
4265 |
msgid ""
|
4266 |
"<strong>Regional tax rates: </strong>When a customer enters an address on "
|
4267 |
"checkout that matches the specified region for this tax rate, the cart tax "
|
4268 |
"will adjust automatically. Enter a percentage, such as 6.5 for 6.5%."
|
4269 |
msgstr ""
|
4270 |
|
4271 |
-
#: includes/admin/settings/register-settings.php:
|
4272 |
-
#: includes/admin/settings/register-settings.php:
|
4273 |
msgid "Choose a country"
|
4274 |
msgstr ""
|
4275 |
|
4276 |
-
#: includes/admin/settings/register-settings.php:
|
4277 |
msgid "Choose a state"
|
4278 |
msgstr ""
|
4279 |
|
4280 |
-
#: includes/admin/settings/register-settings.php:
|
4281 |
-
#: includes/admin/settings/register-settings.php:
|
4282 |
msgid "Apply to whole country"
|
4283 |
msgstr ""
|
4284 |
|
4285 |
-
#: includes/admin/settings/register-settings.php:
|
4286 |
-
#: includes/admin/settings/register-settings.php:
|
4287 |
msgid "Remove Rate"
|
4288 |
msgstr ""
|
4289 |
|
4290 |
-
#: includes/admin/settings/register-settings.php:
|
4291 |
msgid "Add Tax Rate"
|
4292 |
msgstr ""
|
4293 |
|
4294 |
-
#: includes/admin/settings/register-settings.php:
|
4295 |
msgid ""
|
4296 |
"Your license key expired on %s. Please <a href=\"%s\" "
|
4297 |
"target=\"_blank\">renew your license key</a>."
|
4298 |
msgstr ""
|
4299 |
|
4300 |
-
#: includes/admin/settings/register-settings.php:
|
4301 |
msgid ""
|
4302 |
"Your license key has been disabled. Please <a href=\"%s\" "
|
4303 |
"target=\"_blank\">contact support</a> for more information."
|
4304 |
msgstr ""
|
4305 |
|
4306 |
-
#: includes/admin/settings/register-settings.php:
|
4307 |
msgid ""
|
4308 |
"Invalid license. Please <a href=\"%s\" target=\"_blank\">visit your account "
|
4309 |
"page</a> and verify it."
|
4310 |
msgstr ""
|
4311 |
|
4312 |
-
#: includes/admin/settings/register-settings.php:
|
4313 |
msgid ""
|
4314 |
"Your %s is not active for this URL. Please <a href=\"%s\" "
|
4315 |
"target=\"_blank\">visit your account page</a> to manage your license key "
|
4316 |
"URLs."
|
4317 |
msgstr ""
|
4318 |
|
4319 |
-
#: includes/admin/settings/register-settings.php:
|
4320 |
msgid "This appears to be an invalid license key for %s."
|
4321 |
msgstr ""
|
4322 |
|
4323 |
-
#: includes/admin/settings/register-settings.php:
|
4324 |
msgid ""
|
4325 |
"Your license key has reached its activation limit. <a href=\"%s\">View "
|
4326 |
"possible upgrades</a> now."
|
4327 |
msgstr ""
|
4328 |
|
4329 |
-
#: includes/admin/settings/register-settings.php:
|
4330 |
msgid ""
|
4331 |
"The key you entered belongs to a bundle, please use the product specific "
|
4332 |
"license key."
|
4333 |
msgstr ""
|
4334 |
|
4335 |
-
#: includes/admin/settings/register-settings.php:
|
4336 |
msgid "unknown_error"
|
4337 |
msgstr ""
|
4338 |
|
4339 |
-
#: includes/admin/settings/register-settings.php:
|
4340 |
msgid ""
|
4341 |
"There was an error with this license key: %s. Please <a href=\"%s\">contact "
|
4342 |
"our support team</a>."
|
4343 |
msgstr ""
|
4344 |
|
4345 |
-
#: includes/admin/settings/register-settings.php:
|
4346 |
msgid "License key never expires."
|
4347 |
msgstr ""
|
4348 |
|
4349 |
-
#: includes/admin/settings/register-settings.php:
|
4350 |
msgid ""
|
4351 |
"Your license key expires soon! It expires on %s. <a href=\"%s\" "
|
4352 |
"target=\"_blank\">Renew your license key</a>."
|
4353 |
msgstr ""
|
4354 |
|
4355 |
-
#: includes/admin/settings/register-settings.php:
|
4356 |
msgid "Your license key expires on %s."
|
4357 |
msgstr ""
|
4358 |
|
4359 |
-
#: includes/admin/settings/register-settings.php:
|
4360 |
msgid "To receive updates, please enter your valid %s license key."
|
4361 |
msgstr ""
|
4362 |
|
4363 |
-
#: includes/admin/settings/register-settings.php:
|
4364 |
msgid "Deactivate License"
|
4365 |
msgstr ""
|
4366 |
|
@@ -4825,6 +4895,14 @@ msgstr ""
|
|
4825 |
msgid "Do not allow"
|
4826 |
msgstr ""
|
4827 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4828 |
#: includes/admin/upgrades/upgrade-functions.php:78
|
4829 |
msgid "The Payment History needs to be updated. %s"
|
4830 |
msgstr ""
|
@@ -4895,37 +4973,85 @@ msgid ""
|
|
4895 |
"href=\"%s\">here</a> to start the upgrade."
|
4896 |
msgstr ""
|
4897 |
|
4898 |
-
#: includes/admin/upgrades/upgrade-functions.php:
|
4899 |
-
|
4900 |
-
|
4901 |
-
|
4902 |
-
|
4903 |
-
|
4904 |
-
#: includes/admin/upgrades/upgrade-functions.php:
|
4905 |
-
#: includes/admin/upgrades/upgrade-functions.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
4906 |
msgid "You do not have permission to do shop upgrades"
|
4907 |
msgstr ""
|
4908 |
|
4909 |
-
#: includes/admin/upgrades/upgrade-functions.php:
|
4910 |
msgid "Transaction Failed"
|
4911 |
msgstr ""
|
4912 |
|
4913 |
-
#: includes/admin/upgrades/upgrade-functions.php:
|
4914 |
msgid "Your transaction failed, please try again or contact site support."
|
4915 |
msgstr ""
|
4916 |
|
4917 |
-
#: includes/admin/upgrades/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4918 |
msgid "Easy Digital Downloads - Upgrades"
|
4919 |
msgstr ""
|
4920 |
|
4921 |
-
#: includes/admin/upgrades/upgrades.php:
|
4922 |
-
#: includes/admin/upgrades/upgrades.php:
|
4923 |
msgid ""
|
4924 |
"The upgrade process has started, please be patient. This could take several "
|
4925 |
"minutes. You will be automatically redirected when the upgrade is finished."
|
4926 |
msgstr ""
|
4927 |
|
4928 |
-
#: includes/admin/upgrades/upgrades.php:
|
4929 |
msgid "Step %d of approximately %d running"
|
4930 |
msgstr ""
|
4931 |
|
@@ -5000,27 +5126,27 @@ msgstr ""
|
|
5000 |
msgid "No download logs found!"
|
5001 |
msgstr ""
|
5002 |
|
5003 |
-
#: includes/api/class-edd-api.php:1932 includes/user-functions.php:
|
5004 |
msgid "Easy Digital Downloads API Keys"
|
5005 |
msgstr ""
|
5006 |
|
5007 |
-
#: includes/api/class-edd-api.php:1941 includes/user-functions.php:
|
5008 |
msgid "Generate API Key"
|
5009 |
msgstr ""
|
5010 |
|
5011 |
-
#: includes/api/class-edd-api.php:1943 includes/user-functions.php:
|
5012 |
msgid "Public key:"
|
5013 |
msgstr ""
|
5014 |
|
5015 |
-
#: includes/api/class-edd-api.php:1944 includes/user-functions.php:
|
5016 |
msgid "Secret key:"
|
5017 |
msgstr ""
|
5018 |
|
5019 |
-
#: includes/api/class-edd-api.php:1945 includes/user-functions.php:
|
5020 |
msgid "Token:"
|
5021 |
msgstr ""
|
5022 |
|
5023 |
-
#: includes/api/class-edd-api.php:1947 includes/user-functions.php:
|
5024 |
msgid "Revoke API Keys"
|
5025 |
msgstr ""
|
5026 |
|
@@ -5497,8 +5623,8 @@ msgstr ""
|
|
5497 |
msgid "Customer User ID: %s"
|
5498 |
msgstr ""
|
5499 |
|
5500 |
-
#: includes/class-edd-cli.php:334 includes/user-functions.php:
|
5501 |
-
#: includes/user-functions.php:
|
5502 |
msgid "Username: %s"
|
5503 |
msgstr ""
|
5504 |
|
@@ -5635,11 +5761,11 @@ msgstr ""
|
|
5635 |
msgid "Single Use: %s"
|
5636 |
msgstr ""
|
5637 |
|
5638 |
-
#: includes/class-edd-cli.php:506
|
5639 |
msgid "No action specified, did you mean"
|
5640 |
msgstr ""
|
5641 |
|
5642 |
-
#: includes/class-edd-cli.php:508
|
5643 |
msgid "Invalid action specified, did you mean"
|
5644 |
msgstr ""
|
5645 |
|
@@ -6901,11 +7027,11 @@ msgstr ""
|
|
6901 |
msgid "Payment recovery processed"
|
6902 |
msgstr ""
|
6903 |
|
6904 |
-
#: includes/payments/functions.php:
|
6905 |
msgid "Complete"
|
6906 |
msgstr ""
|
6907 |
|
6908 |
-
#: includes/payments/functions.php:
|
6909 |
msgid "EDD Bot"
|
6910 |
msgstr ""
|
6911 |
|
@@ -7207,6 +7333,207 @@ msgid_plural "%1$s %3$s restored from the Trash."
|
|
7207 |
msgstr[0] ""
|
7208 |
msgstr[1] ""
|
7209 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7210 |
#: includes/process-download.php:146
|
7211 |
msgid "Error downloading file. Please contact support."
|
7212 |
msgstr ""
|
@@ -7503,31 +7830,31 @@ msgstr ""
|
|
7503 |
msgid "Purchase All Items"
|
7504 |
msgstr ""
|
7505 |
|
7506 |
-
#: includes/shortcodes.php:
|
7507 |
msgid "Sorry, trouble retrieving payment receipt."
|
7508 |
msgstr ""
|
7509 |
|
7510 |
-
#: includes/shortcodes.php:
|
7511 |
msgid "You must be logged in to view this payment receipt."
|
7512 |
msgstr ""
|
7513 |
|
7514 |
-
#: includes/shortcodes.php:
|
7515 |
msgid "Receipt could not be retrieved, your purchase session has expired."
|
7516 |
msgstr ""
|
7517 |
|
7518 |
-
#: includes/shortcodes.php:
|
7519 |
msgid "The passwords you entered do not match. Please try again."
|
7520 |
msgstr ""
|
7521 |
|
7522 |
-
#: includes/shortcodes.php:
|
7523 |
msgid "The email you entered is invalid. Please enter a valid email."
|
7524 |
msgstr ""
|
7525 |
|
7526 |
-
#: includes/shortcodes.php:
|
7527 |
msgid "The email you entered belongs to another user. Please use another."
|
7528 |
msgstr ""
|
7529 |
|
7530 |
-
#: includes/shortcodes.php:
|
7531 |
msgid "Error removing email address from profile. Please try again later."
|
7532 |
msgstr ""
|
7533 |
|
@@ -7599,51 +7926,51 @@ msgstr ""
|
|
7599 |
msgid "Plain Text"
|
7600 |
msgstr ""
|
7601 |
|
7602 |
-
#: includes/user-functions.php:
|
7603 |
msgid "[%s] New User Registration"
|
7604 |
msgstr ""
|
7605 |
|
7606 |
-
#: includes/user-functions.php:
|
7607 |
msgid "New user registration"
|
7608 |
msgstr ""
|
7609 |
|
7610 |
-
#: includes/user-functions.php:
|
7611 |
msgid "E-mail: %s"
|
7612 |
msgstr ""
|
7613 |
|
7614 |
-
#: includes/user-functions.php:
|
7615 |
msgid "[%s] Your username and password"
|
7616 |
msgstr ""
|
7617 |
|
7618 |
-
#: includes/user-functions.php:
|
7619 |
msgid "Your account info"
|
7620 |
msgstr ""
|
7621 |
|
7622 |
-
#: includes/user-functions.php:
|
7623 |
msgid "Password entered at checkout"
|
7624 |
msgstr ""
|
7625 |
|
7626 |
-
#: includes/user-functions.php:
|
7627 |
msgid "Password entered at registration"
|
7628 |
msgstr ""
|
7629 |
|
7630 |
-
#: includes/user-functions.php:
|
7631 |
msgid "Password: %s"
|
7632 |
msgstr ""
|
7633 |
|
7634 |
-
#: includes/user-functions.php:
|
7635 |
msgid "Click here to log in"
|
7636 |
msgstr ""
|
7637 |
|
7638 |
-
#: includes/user-functions.php:
|
7639 |
msgid "To log in, visit: %s"
|
7640 |
msgstr ""
|
7641 |
|
7642 |
-
#: includes/user-functions.php:
|
7643 |
msgid "Verify your account"
|
7644 |
msgstr ""
|
7645 |
|
7646 |
-
#: includes/user-functions.php:
|
7647 |
msgid ""
|
7648 |
"Hello %s,\n"
|
7649 |
"\n"
|
@@ -7653,33 +7980,33 @@ msgid ""
|
|
7653 |
"Link missing? Visit the following URL: %s"
|
7654 |
msgstr ""
|
7655 |
|
7656 |
-
#: includes/user-functions.php:
|
7657 |
msgid ""
|
7658 |
"Sorry but your account verification link has expired. <a href=\"%s\">Click "
|
7659 |
"here</a> to request a new verification URL."
|
7660 |
msgstr ""
|
7661 |
|
7662 |
-
#: includes/user-functions.php:
|
7663 |
msgid "You must be logged in to verify your account."
|
7664 |
msgstr ""
|
7665 |
|
7666 |
-
#: includes/user-functions.php:
|
7667 |
msgid "Notice"
|
7668 |
msgstr ""
|
7669 |
|
7670 |
-
#: includes/user-functions.php:
|
7671 |
msgid "Your account has already been verified."
|
7672 |
msgstr ""
|
7673 |
|
7674 |
-
#: includes/user-functions.php:
|
7675 |
msgid "Invalid verification token provided."
|
7676 |
msgstr ""
|
7677 |
|
7678 |
-
#: includes/user-functions.php:
|
7679 |
msgid "Easy Digital Downloads <a href=\"%s\">iOS App</a>"
|
7680 |
msgstr ""
|
7681 |
|
7682 |
-
#: includes/user-functions.php:
|
7683 |
msgid "Add to iOS App"
|
7684 |
msgstr ""
|
7685 |
|
@@ -8058,6 +8385,13 @@ msgctxt "text shown on the Add to Cart Button when the product is already in the
|
|
8058 |
msgid "Checkout"
|
8059 |
msgstr ""
|
8060 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8061 |
#: includes/checkout/template.php:738
|
8062 |
msgctxt "Entering a discount code"
|
8063 |
msgid "Click to enter it"
|
@@ -8098,7 +8432,7 @@ msgctxt "download post type name"
|
|
8098 |
msgid "%2$s"
|
8099 |
msgstr ""
|
8100 |
|
8101 |
-
#: includes/shortcodes.php:
|
8102 |
msgctxt "download post type name"
|
8103 |
msgid "No %s found"
|
8104 |
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.2\n"
|
6 |
"Report-Msgid-Bugs-To: https://easydigitaldownloads.com/\n"
|
7 |
+
"POT-Creation-Date: 2018-05-24 22:51:15+00:00\n"
|
8 |
"MIME-Version: 1.0\n"
|
9 |
"Content-Type: text/plain; charset=utf-8\n"
|
10 |
"Content-Transfer-Encoding: 8bit\n"
|
79 |
#: includes/admin/tools/class-edd-tools-recount-store-earnings.php:153
|
80 |
#: includes/admin/tools/class-edd-tools-reset-stats.php:179
|
81 |
#: includes/admin/tools.php:1027 includes/admin/tools.php:1033
|
82 |
+
#: includes/admin/upgrades/classes/class-file-download-log-migration.php:151
|
83 |
+
#: includes/admin/upgrades/upgrade-functions.php:212
|
84 |
+
#: includes/admin/upgrades/upgrade-functions.php:528
|
85 |
+
#: includes/admin/upgrades/upgrade-functions.php:610
|
86 |
+
#: includes/admin/upgrades/upgrade-functions.php:721
|
87 |
+
#: includes/admin/upgrades/upgrade-functions.php:818
|
88 |
+
#: includes/admin/upgrades/upgrade-functions.php:892
|
89 |
+
#: includes/admin/upgrades/upgrade-functions.php:1020
|
90 |
+
#: includes/admin/upgrades/upgrade-functions.php:1105
|
91 |
#: includes/api/class-edd-api.php:1967 includes/api/class-edd-api.php:1972
|
92 |
#: includes/api/class-edd-api.php:1984 includes/api/class-edd-api.php:1986
|
93 |
#: includes/cart/class-edd-cart.php:1423 includes/cart/class-edd-cart.php:1437
|
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 |
|
186 |
msgid "Easy Digital Downloads Info and Tools"
|
187 |
msgstr ""
|
188 |
|
189 |
+
#: includes/admin/admin-pages.php:42 includes/admin/customers/customers.php:720
|
190 |
msgid "Tools"
|
191 |
msgstr ""
|
192 |
|
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 |
|
409 |
|
410 |
#: includes/admin/customers/class-customer-table.php:72
|
411 |
#: includes/admin/payments/class-payments-table.php:274
|
412 |
+
#: includes/admin/reporting/class-file-downloads-logs-list-table.php:153
|
413 |
#: includes/admin/reporting/class-sales-logs-list-table.php:129
|
414 |
msgid "Customer"
|
415 |
msgstr ""
|
431 |
#: includes/admin/discounts/class-discount-codes-table.php:267
|
432 |
#: includes/admin/payments/class-payments-table.php:367
|
433 |
#: includes/admin/payments/class-payments-table.php:435
|
434 |
+
#: includes/admin/settings/register-settings.php:927
|
435 |
+
#: includes/payments/functions.php:1618
|
436 |
msgid "Delete"
|
437 |
msgstr ""
|
438 |
|
449 |
#: includes/admin/reporting/class-export-customers.php:74
|
450 |
#: includes/admin/reporting/export/class-batch-export-customers.php:42
|
451 |
#: includes/admin/reporting/export/class-batch-export-downloads.php:43
|
452 |
+
#: includes/privacy-functions.php:589 templates/shortcode-receipt.php:123
|
453 |
msgid "Name"
|
454 |
msgstr ""
|
455 |
|
456 |
#: includes/admin/customers/class-customer-table.php:177
|
457 |
+
#: includes/privacy-functions.php:585
|
458 |
msgid "Primary Email"
|
459 |
msgstr ""
|
460 |
|
468 |
|
469 |
#: includes/admin/customers/class-customer-table.php:180
|
470 |
#: includes/admin/reporting/export/class-batch-export-downloads.php:44
|
471 |
+
#: includes/privacy-functions.php:593
|
472 |
msgid "Date Created"
|
473 |
msgstr ""
|
474 |
|
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 |
|
556 |
msgstr ""
|
557 |
|
558 |
#: includes/admin/customers/customer-actions.php:311
|
559 |
+
#: includes/shortcodes.php:962
|
560 |
msgid "Email address %s removed by %s"
|
561 |
msgstr ""
|
562 |
|
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"
|
663 |
msgstr ""
|
664 |
|
665 |
#: includes/admin/customers/customers.php:313
|
666 |
+
#: includes/privacy-functions.php:857
|
667 |
msgid "User ID"
|
668 |
msgstr ""
|
669 |
|
682 |
msgstr ""
|
683 |
|
684 |
#: includes/admin/customers/customers.php:333
|
685 |
+
#: includes/admin/customers/customers.php:695
|
686 |
#: includes/admin/payments/view-order-details.php:651
|
687 |
#: includes/admin/payments/view-order-details.php:671
|
688 |
#: includes/admin/thickbox.php:132 includes/class-edd-html-elements.php:796
|
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"
|
751 |
msgstr ""
|
752 |
|
753 |
#: includes/admin/customers/customers.php:416
|
754 |
+
#: includes/checkout/template.php:182 includes/privacy-functions.php:754
|
755 |
msgid "Email Address"
|
756 |
msgstr ""
|
757 |
|
795 |
#: includes/admin/reporting/class-export-download-history.php:62
|
796 |
#: includes/admin/reporting/class-export-payments.php:78
|
797 |
#: includes/admin/reporting/class-export.php:67
|
798 |
+
#: includes/admin/reporting/class-file-downloads-logs-list-table.php:157
|
799 |
#: includes/admin/reporting/class-gateway-error-logs-list-table.php:131
|
800 |
#: includes/admin/reporting/class-sales-logs-list-table.php:133
|
801 |
#: includes/admin/reporting/export/class-batch-export-api-requests.php:46
|
802 |
#: includes/admin/reporting/export/class-batch-export-file-downloads.php:41
|
803 |
#: includes/admin/reporting/export/class-batch-export-payments.php:60
|
804 |
#: includes/admin/reporting/export/class-batch-export-sales.php:49
|
805 |
+
#: includes/admin/tools.php:587 includes/privacy-functions.php:932
|
806 |
+
#: templates/history-purchases.php:19 templates/shortcode-receipt.php:59
|
807 |
msgid "Date"
|
808 |
msgstr ""
|
809 |
|
814 |
#: includes/admin/reporting/class-export-payments.php:80
|
815 |
#: includes/admin/reporting/export/class-batch-export-downloads.php:48
|
816 |
#: includes/admin/reporting/export/class-batch-export-payments.php:65
|
817 |
+
#: includes/admin/tools.php:614 includes/privacy-functions.php:766
|
818 |
msgid "Status"
|
819 |
msgstr ""
|
820 |
|
839 |
msgid "No %s Found"
|
840 |
msgstr ""
|
841 |
|
842 |
+
#: includes/admin/customers/customers.php:564
|
843 |
+
msgid "Agreements"
|
844 |
+
msgstr ""
|
845 |
+
|
846 |
+
#: includes/admin/customers/customers.php:567
|
847 |
+
msgid "Last Agreed to Terms"
|
848 |
+
msgstr ""
|
849 |
+
|
850 |
+
#: includes/admin/customers/customers.php:571
|
851 |
+
#: includes/admin/customers/customers.php:592
|
852 |
+
msgid "Previous Agreement Dates"
|
853 |
+
msgstr ""
|
854 |
+
|
855 |
+
#: includes/admin/customers/customers.php:576
|
856 |
+
#: includes/admin/customers/customers.php:597
|
857 |
+
msgid "No date found."
|
858 |
+
msgstr ""
|
859 |
+
|
860 |
+
#: includes/admin/customers/customers.php:580
|
861 |
+
#: includes/admin/customers/customers.php:601
|
862 |
+
msgid "Estimated Privacy Policy Date"
|
863 |
+
msgstr ""
|
864 |
+
|
865 |
+
#: includes/admin/customers/customers.php:580
|
866 |
+
msgid ""
|
867 |
+
"This customer made a purchase prior to agreement dates being logged, this "
|
868 |
+
"is the date of their last purchase. If your site was displaying the "
|
869 |
+
"agreement checkbox at that time, this is our best estimate as to when they "
|
870 |
+
"last agreed to your terms."
|
871 |
+
msgstr ""
|
872 |
+
|
873 |
+
#: includes/admin/customers/customers.php:588
|
874 |
+
msgid "Last Agreed to Privacy Policy"
|
875 |
+
msgstr ""
|
876 |
+
|
877 |
+
#: includes/admin/customers/customers.php:601
|
878 |
+
msgid ""
|
879 |
+
"This customer made a purchase prior to privacy policy dates being logged, "
|
880 |
+
"this is the date of their last purchase. If your site was displaying the "
|
881 |
+
"privacy policy checkbox at that time, this is our best estimate as to when "
|
882 |
+
"they last agreed to your privacy policy."
|
883 |
+
msgstr ""
|
884 |
+
|
885 |
+
#: includes/admin/customers/customers.php:608
|
886 |
#: includes/admin/reporting/export/class-batch-export-downloads.php:56
|
887 |
msgid "Notes"
|
888 |
msgstr ""
|
889 |
|
890 |
+
#: includes/admin/customers/customers.php:646
|
891 |
msgid "No Customer Notes"
|
892 |
msgstr ""
|
893 |
|
894 |
+
#: includes/admin/customers/customers.php:679
|
895 |
msgid "Are you sure you want to delete this customer?"
|
896 |
msgstr ""
|
897 |
|
898 |
+
#: includes/admin/customers/customers.php:684
|
899 |
msgid "Delete all associated payments and records?"
|
900 |
msgstr ""
|
901 |
|
902 |
+
#: includes/admin/customers/customers.php:694
|
903 |
msgid "Delete Customer"
|
904 |
msgstr ""
|
905 |
|
906 |
+
#: includes/admin/customers/customers.php:723 includes/admin/tools.php:153
|
907 |
msgid "Recount Customer Stats"
|
908 |
msgstr ""
|
909 |
|
910 |
+
#: includes/admin/customers/customers.php:724
|
911 |
msgid ""
|
912 |
"Use this tool to recalculate the purchase count and total value of the "
|
913 |
"customer."
|
914 |
msgstr ""
|
915 |
|
916 |
+
#: includes/admin/customers/customers.php:731 includes/admin/tools.php:140
|
917 |
msgid "Recount Stats"
|
918 |
msgstr ""
|
919 |
|
920 |
+
#: includes/admin/customers/customers.php:761
|
921 |
msgid "This customer's user account is pending verification."
|
922 |
msgstr ""
|
923 |
|
924 |
+
#: includes/admin/customers/customers.php:763
|
925 |
msgid "Verify account."
|
926 |
msgstr ""
|
927 |
|
1168 |
|
1169 |
#: includes/admin/discounts/class-discount-codes-table.php:125
|
1170 |
#: includes/admin/payments/class-payments-table.php:247
|
1171 |
+
#: includes/admin/reporting/class-file-downloads-logs-list-table.php:320
|
1172 |
#: includes/admin/reporting/class-sales-logs-list-table.php:281
|
1173 |
msgid "All"
|
1174 |
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 ""
|
1955 |
msgstr ""
|
1956 |
|
1957 |
#: includes/admin/payments/class-payments-table.php:249
|
1958 |
+
#: includes/payments/functions.php:771
|
1959 |
msgid "Pending"
|
1960 |
msgstr ""
|
1961 |
|
1962 |
#: includes/admin/payments/class-payments-table.php:250
|
1963 |
+
#: includes/payments/functions.php:777
|
1964 |
msgid "Processing"
|
1965 |
msgstr ""
|
1966 |
|
1967 |
#: includes/admin/payments/class-payments-table.php:251
|
1968 |
+
#: includes/payments/functions.php:773
|
1969 |
msgid "Refunded"
|
1970 |
msgstr ""
|
1971 |
|
1972 |
#: includes/admin/payments/class-payments-table.php:252
|
1973 |
+
#: includes/payments/functions.php:776
|
1974 |
msgid "Revoked"
|
1975 |
msgstr ""
|
1976 |
|
1977 |
#: includes/admin/payments/class-payments-table.php:253
|
1978 |
+
#: includes/payments/functions.php:774
|
1979 |
msgid "Failed"
|
1980 |
msgstr ""
|
1981 |
|
1982 |
#: includes/admin/payments/class-payments-table.php:254
|
1983 |
+
#: includes/payments/functions.php:775
|
1984 |
msgid "Abandoned"
|
1985 |
msgstr ""
|
1986 |
|
2393 |
msgstr ""
|
2394 |
|
2395 |
#: includes/admin/payments/view-order-details.php:689
|
2396 |
+
#: includes/checkout/template.php:347 includes/privacy-functions.php:758
|
2397 |
msgid "Billing Address"
|
2398 |
msgstr ""
|
2399 |
|
2440 |
msgstr ""
|
2441 |
|
2442 |
#: includes/admin/reporting/class-api-requests-logs-list-table.php:87
|
2443 |
+
#: includes/admin/reporting/class-file-downloads-logs-list-table.php:151
|
2444 |
#: includes/admin/reporting/class-gateway-error-logs-list-table.php:126
|
2445 |
#: includes/admin/reporting/class-sales-logs-list-table.php:128
|
2446 |
#: includes/admin/reporting/export/class-batch-export-api-requests.php:39
|
2562 |
msgstr ""
|
2563 |
|
2564 |
#: includes/admin/reporting/class-export-download-history.php:64
|
2565 |
+
#: includes/admin/reporting/class-file-downloads-logs-list-table.php:156
|
2566 |
#: includes/admin/reporting/export/class-batch-export-api-requests.php:41
|
2567 |
#: includes/admin/reporting/export/class-batch-export-file-downloads.php:43
|
2568 |
#: includes/admin/reporting/export/class-batch-export-payments.php:63
|
2569 |
+
#: includes/admin/tools.php:542 includes/privacy-functions.php:762
|
2570 |
+
#: includes/privacy-functions.php:861 includes/privacy-functions.php:940
|
2571 |
msgid "IP Address"
|
2572 |
msgstr ""
|
2573 |
|
2577 |
msgstr ""
|
2578 |
|
2579 |
#: includes/admin/reporting/class-export-download-history.php:66
|
2580 |
+
#: includes/admin/reporting/class-file-downloads-logs-list-table.php:155
|
2581 |
#: includes/admin/reporting/export/class-batch-export-file-downloads.php:45
|
2582 |
msgid "File"
|
2583 |
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 ""
|
2667 |
msgid "You do not have permission to export data."
|
2668 |
msgstr ""
|
2669 |
|
2670 |
+
#: includes/admin/reporting/class-file-downloads-logs-list-table.php:154
|
2671 |
#: includes/admin/reporting/class-gateway-error-logs-list-table.php:127
|
2672 |
#: includes/admin/reporting/class-sales-logs-list-table.php:132
|
2673 |
#: includes/admin/reporting/export/class-batch-export-payments.php:39
|
2859 |
|
2860 |
#: includes/admin/reporting/export/class-batch-export-payments.php:42
|
2861 |
#: includes/admin/reporting/export/class-batch-export-sales.php:41
|
2862 |
+
#: includes/admin/tools.php:524 includes/privacy-functions.php:581
|
2863 |
+
#: includes/privacy-functions.php:853
|
2864 |
msgid "Customer ID"
|
2865 |
msgstr ""
|
2866 |
|
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 |
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 ""
|
3009 |
|
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 |
|
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 |
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 |
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 |
msgstr ""
|
3313 |
|
3314 |
#: includes/admin/settings/contextual-help.php:93
|
3315 |
+
#: includes/admin/settings/register-settings.php:1401
|
3316 |
msgid "Miscellaneous"
|
3317 |
msgstr ""
|
3318 |
|
3358 |
#: includes/admin/settings/register-settings.php:285
|
3359 |
#: includes/admin/settings/register-settings.php:294
|
3360 |
#: includes/admin/settings/register-settings.php:305
|
|
|
3361 |
msgid "Select a page"
|
3362 |
msgstr ""
|
3363 |
|
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 |
|
4151 |
msgstr ""
|
4152 |
|
4153 |
#: includes/admin/settings/register-settings.php:858
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4154 |
msgid "Agree to Terms"
|
4155 |
msgstr ""
|
4156 |
|
4157 |
+
#: includes/admin/settings/register-settings.php:859
|
4158 |
msgid ""
|
4159 |
"Check this to show an agree to terms on the checkout that users must agree "
|
4160 |
"to before purchasing."
|
4161 |
msgstr ""
|
4162 |
|
4163 |
+
#: includes/admin/settings/register-settings.php:864
|
4164 |
msgid "Agree to Terms Label"
|
4165 |
msgstr ""
|
4166 |
|
4167 |
+
#: includes/admin/settings/register-settings.php:865
|
4168 |
msgid "Label shown next to the agree to terms check box."
|
4169 |
msgstr ""
|
4170 |
|
4171 |
+
#: includes/admin/settings/register-settings.php:871
|
4172 |
msgid "Agreement Text"
|
4173 |
msgstr ""
|
4174 |
|
4175 |
+
#: includes/admin/settings/register-settings.php:872
|
4176 |
msgid "If Agree to Terms is checked, enter the agreement terms here."
|
4177 |
msgstr ""
|
4178 |
|
4179 |
+
#: includes/admin/settings/register-settings.php:883
|
4180 |
msgid "Agree to Privacy Policy"
|
4181 |
msgstr ""
|
4182 |
|
4183 |
+
#: includes/admin/settings/register-settings.php:884
|
4184 |
msgid ""
|
4185 |
+
"Check this to show an agree to Privacy Policy on checkout that users must "
|
4186 |
"agree to before purchasing."
|
4187 |
msgstr ""
|
4188 |
|
4189 |
+
#: includes/admin/settings/register-settings.php:889
|
4190 |
msgid "Agree to Privacy Policy Label"
|
4191 |
msgstr ""
|
4192 |
|
4193 |
+
#: includes/admin/settings/register-settings.php:890
|
4194 |
+
msgid "Label shown next to the agree to Privacy Policy checkbox."
|
4195 |
msgstr ""
|
4196 |
|
4197 |
+
#: includes/admin/settings/register-settings.php:896
|
4198 |
+
msgid "Show the Privacy Policy on checkout"
|
4199 |
msgstr ""
|
4200 |
|
4201 |
+
#: includes/admin/settings/register-settings.php:897
|
4202 |
+
msgid "Display your Privacy Policy on checkout."
|
4203 |
msgstr ""
|
4204 |
|
4205 |
+
#: includes/admin/settings/register-settings.php:897
|
4206 |
+
msgid "Set your Privacy Policy here"
|
4207 |
msgstr ""
|
4208 |
|
4209 |
+
#: includes/admin/settings/register-settings.php:910
|
4210 |
+
msgid "Payment Status Actions"
|
4211 |
+
msgstr ""
|
4212 |
+
|
4213 |
+
#: includes/admin/settings/register-settings.php:912
|
4214 |
msgid ""
|
4215 |
+
"When a user requests to be anonymized or removed from a site, these are the "
|
4216 |
+
"actions that will be taken on payments associated with their customer, by "
|
4217 |
+
"status."
|
4218 |
+
msgstr ""
|
4219 |
+
|
4220 |
+
#: includes/admin/settings/register-settings.php:913
|
4221 |
+
msgid "What settings should I use?"
|
4222 |
+
msgstr ""
|
4223 |
+
|
4224 |
+
#: includes/admin/settings/register-settings.php:914
|
4225 |
+
msgid ""
|
4226 |
+
"By default, Easy Digital Downloads sets suggested actions based on the "
|
4227 |
+
"Payment Status. These are purely recommendations, and you may need to "
|
4228 |
+
"change them to suit your store's needs. If you are unsure, you can safely "
|
4229 |
+
"leave these settings as is."
|
4230 |
+
msgstr ""
|
4231 |
+
|
4232 |
+
#: includes/admin/settings/register-settings.php:925
|
4233 |
+
msgid "No Action"
|
4234 |
+
msgstr ""
|
4235 |
+
|
4236 |
+
#: includes/admin/settings/register-settings.php:926
|
4237 |
+
msgid "Anonymize"
|
4238 |
msgstr ""
|
4239 |
|
4240 |
+
#: includes/admin/settings/register-settings.php:966
|
4241 |
msgid "Buy Now Disabled"
|
4242 |
msgstr ""
|
4243 |
|
4244 |
+
#: includes/admin/settings/register-settings.php:967
|
4245 |
msgid ""
|
4246 |
"Buy Now buttons are only available for stores that have a single supported "
|
4247 |
"gateway active and that do not use taxes."
|
4248 |
msgstr ""
|
4249 |
|
4250 |
+
#: includes/admin/settings/register-settings.php:1070
|
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 |
|
4895 |
msgid "Do not allow"
|
4896 |
msgstr ""
|
4897 |
|
4898 |
+
#: includes/admin/upgrades/classes/class-file-download-log-migration.php:150
|
4899 |
+
msgid "You do not have permission to run this upgrade."
|
4900 |
+
msgstr ""
|
4901 |
+
|
4902 |
+
#: includes/admin/upgrades/classes/class-file-download-log-migration.php:164
|
4903 |
+
msgid "File download logs updated successfully."
|
4904 |
+
msgstr ""
|
4905 |
+
|
4906 |
#: includes/admin/upgrades/upgrade-functions.php:78
|
4907 |
msgid "The Payment History needs to be updated. %s"
|
4908 |
msgstr ""
|
4973 |
"href=\"%s\">here</a> to start the upgrade."
|
4974 |
msgstr ""
|
4975 |
|
4976 |
+
#: includes/admin/upgrades/upgrade-functions.php:181
|
4977 |
+
msgid ""
|
4978 |
+
"Easy Digital Downloads needs to upgrade the file download logs database, "
|
4979 |
+
"click <a href=\"%s\">here</a> to start the upgrade."
|
4980 |
+
msgstr ""
|
4981 |
+
|
4982 |
+
#: includes/admin/upgrades/upgrade-functions.php:212
|
4983 |
+
#: includes/admin/upgrades/upgrade-functions.php:528
|
4984 |
+
#: includes/admin/upgrades/upgrade-functions.php:610
|
4985 |
+
#: includes/admin/upgrades/upgrade-functions.php:721
|
4986 |
+
#: includes/admin/upgrades/upgrade-functions.php:818
|
4987 |
+
#: includes/admin/upgrades/upgrade-functions.php:892
|
4988 |
+
#: includes/admin/upgrades/upgrade-functions.php:1020
|
4989 |
+
#: includes/admin/upgrades/upgrade-functions.php:1105
|
4990 |
msgid "You do not have permission to do shop upgrades"
|
4991 |
msgstr ""
|
4992 |
|
4993 |
+
#: includes/admin/upgrades/upgrade-functions.php:381 includes/install.php:129
|
4994 |
msgid "Transaction Failed"
|
4995 |
msgstr ""
|
4996 |
|
4997 |
+
#: includes/admin/upgrades/upgrade-functions.php:382 includes/install.php:130
|
4998 |
msgid "Your transaction failed, please try again or contact site support."
|
4999 |
msgstr ""
|
5000 |
|
5001 |
+
#: includes/admin/upgrades/upgrade-functions.php:1181
|
5002 |
+
msgid ""
|
5003 |
+
"<strong>Migration complete:</strong> You have already completed the update "
|
5004 |
+
"to the file download logs."
|
5005 |
+
msgstr ""
|
5006 |
+
|
5007 |
+
#: includes/admin/upgrades/upgrade-functions.php:1189
|
5008 |
+
msgid ""
|
5009 |
+
"<strong>Database Upgrade Complete:</strong> All database upgrades have been "
|
5010 |
+
"completed."
|
5011 |
+
msgstr ""
|
5012 |
+
|
5013 |
+
#: includes/admin/upgrades/upgrade-functions.php:1191
|
5014 |
+
msgid "You may now leave this page."
|
5015 |
+
msgstr ""
|
5016 |
+
|
5017 |
+
#: includes/admin/upgrades/upgrade-functions.php:1197
|
5018 |
+
msgid ""
|
5019 |
+
"<strong>Important:</strong> Please leave this screen open and do not "
|
5020 |
+
"navigate away until the process completes."
|
5021 |
+
msgstr ""
|
5022 |
+
|
5023 |
+
#: includes/admin/upgrades/upgrade-functions.php:1240
|
5024 |
+
msgid "Update file download logs"
|
5025 |
+
msgstr ""
|
5026 |
+
|
5027 |
+
#: includes/admin/upgrades/upgrade-functions.php:1245
|
5028 |
+
msgid ""
|
5029 |
+
"This will update the file download logs to remove some <abbr "
|
5030 |
+
"title=\"Personally Identifiable Information\">PII</abbr> and make file "
|
5031 |
+
"download counts more accurate."
|
5032 |
+
msgstr ""
|
5033 |
+
|
5034 |
+
#: includes/admin/upgrades/upgrade-functions.php:1254
|
5035 |
+
#: includes/admin/upgrades/upgrade-functions.php:1257
|
5036 |
+
msgid "Update File Download Logs"
|
5037 |
+
msgstr ""
|
5038 |
+
|
5039 |
+
#: includes/admin/upgrades/upgrade-functions.php:1258
|
5040 |
+
msgid "File download logs have already been updated."
|
5041 |
+
msgstr ""
|
5042 |
+
|
5043 |
+
#: includes/admin/upgrades/upgrades.php:26
|
5044 |
msgid "Easy Digital Downloads - Upgrades"
|
5045 |
msgstr ""
|
5046 |
|
5047 |
+
#: includes/admin/upgrades/upgrades.php:67
|
5048 |
+
#: includes/admin/upgrades/upgrades.php:81
|
5049 |
msgid ""
|
5050 |
"The upgrade process has started, please be patient. This could take several "
|
5051 |
"minutes. You will be automatically redirected when the upgrade is finished."
|
5052 |
msgstr ""
|
5053 |
|
5054 |
+
#: includes/admin/upgrades/upgrades.php:70
|
5055 |
msgid "Step %d of approximately %d running"
|
5056 |
msgstr ""
|
5057 |
|
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 |
|
5623 |
msgid "Customer User ID: %s"
|
5624 |
msgstr ""
|
5625 |
|
5626 |
+
#: includes/class-edd-cli.php:334 includes/user-functions.php:576
|
5627 |
+
#: includes/user-functions.php:588
|
5628 |
msgid "Username: %s"
|
5629 |
msgstr ""
|
5630 |
|
5761 |
msgid "Single Use: %s"
|
5762 |
msgstr ""
|
5763 |
|
5764 |
+
#: includes/class-edd-cli.php:506 includes/class-edd-cli.php:764
|
5765 |
msgid "No action specified, did you mean"
|
5766 |
msgstr ""
|
5767 |
|
5768 |
+
#: includes/class-edd-cli.php:508 includes/class-edd-cli.php:766
|
5769 |
msgid "Invalid action specified, did you mean"
|
5770 |
msgstr ""
|
5771 |
|
7027 |
msgid "Payment recovery processed"
|
7028 |
msgstr ""
|
7029 |
|
7030 |
+
#: includes/payments/functions.php:772
|
7031 |
msgid "Complete"
|
7032 |
msgstr ""
|
7033 |
|
7034 |
+
#: includes/payments/functions.php:1603
|
7035 |
msgid "EDD Bot"
|
7036 |
msgstr ""
|
7037 |
|
7333 |
msgstr[0] ""
|
7334 |
msgstr[1] ""
|
7335 |
|
7336 |
+
#: includes/privacy-functions.php:28
|
7337 |
+
msgid ""
|
7338 |
+
"\n"
|
7339 |
+
"We collect information about you during the checkout process on our store. "
|
7340 |
+
"This information may include, but is not limited to, your name, billing "
|
7341 |
+
"address, shipping address, email address, phone number, credit card/payment "
|
7342 |
+
"details and any other details that might be requested from you for the "
|
7343 |
+
"purpose of processing your orders.\n"
|
7344 |
+
"Handling this data also allows us to:\n"
|
7345 |
+
"- Send you important account/order/service information.\n"
|
7346 |
+
"- Respond to your queries, refund requests, or complaints.\n"
|
7347 |
+
"- Process payments and to prevent fraudulent transactions. We do this on "
|
7348 |
+
"the basis of our legitimate business interests.\n"
|
7349 |
+
"- Set up and administer your account, provide technical and/or customer "
|
7350 |
+
"support, and to verify your identity.\n"
|
7351 |
+
msgstr ""
|
7352 |
+
|
7353 |
+
#: includes/privacy-functions.php:40
|
7354 |
+
msgid ""
|
7355 |
+
"Location and traffic data (including IP address and browser type) if you "
|
7356 |
+
"place an order, or if we need to estimate taxes and shipping costs based on "
|
7357 |
+
"your location."
|
7358 |
+
msgstr ""
|
7359 |
+
|
7360 |
+
#: includes/privacy-functions.php:41
|
7361 |
+
msgid "Product pages visited and content viewed while your session is active."
|
7362 |
+
msgstr ""
|
7363 |
+
|
7364 |
+
#: includes/privacy-functions.php:42
|
7365 |
+
msgid ""
|
7366 |
+
"Your comments and product reviews if you choose to leave them on our "
|
7367 |
+
"website."
|
7368 |
+
msgstr ""
|
7369 |
+
|
7370 |
+
#: includes/privacy-functions.php:43
|
7371 |
+
msgid "Account email/password to allow you to access your account, if you have one."
|
7372 |
+
msgstr ""
|
7373 |
+
|
7374 |
+
#: includes/privacy-functions.php:44
|
7375 |
+
msgid ""
|
7376 |
+
"If you choose to create an account with us, your name, address, and email "
|
7377 |
+
"address, which will be used to populate the checkout for future orders."
|
7378 |
+
msgstr ""
|
7379 |
+
|
7380 |
+
#: includes/privacy-functions.php:49
|
7381 |
+
msgid "Additionally we may also collect the following information:"
|
7382 |
+
msgstr ""
|
7383 |
+
|
7384 |
+
#: includes/privacy-functions.php:250
|
7385 |
+
msgid "No customer with ID %d"
|
7386 |
+
msgstr ""
|
7387 |
+
|
7388 |
+
#: includes/privacy-functions.php:288
|
7389 |
+
msgid ""
|
7390 |
+
"Customer could not be anonymized due to payments that could not be "
|
7391 |
+
"anonymized or deleted."
|
7392 |
+
msgstr ""
|
7393 |
+
|
7394 |
+
#: includes/privacy-functions.php:303 includes/privacy-functions.php:416
|
7395 |
+
#: includes/privacy-functions.php:417
|
7396 |
+
msgid "Anonymized Customer"
|
7397 |
+
msgstr ""
|
7398 |
+
|
7399 |
+
#: includes/privacy-functions.php:322
|
7400 |
+
msgid "Customer anonymized successfully"
|
7401 |
+
msgstr ""
|
7402 |
+
|
7403 |
+
#: includes/privacy-functions.php:323
|
7404 |
+
msgid "Customer ID %d successfully anonymized."
|
7405 |
+
msgstr ""
|
7406 |
+
|
7407 |
+
#: includes/privacy-functions.php:346
|
7408 |
+
msgid "No payment with ID %d."
|
7409 |
+
msgstr ""
|
7410 |
+
|
7411 |
+
#: includes/privacy-functions.php:379
|
7412 |
+
msgid "Payment not modified, due to status: %s."
|
7413 |
+
msgstr ""
|
7414 |
+
|
7415 |
+
#: includes/privacy-functions.php:388
|
7416 |
+
msgid "Payment %d with status %s deleted."
|
7417 |
+
msgstr ""
|
7418 |
+
|
7419 |
+
#: includes/privacy-functions.php:438
|
7420 |
+
msgid "Payment ID %d successfully anonymized."
|
7421 |
+
msgstr ""
|
7422 |
+
|
7423 |
+
#: includes/privacy-functions.php:533 includes/privacy-functions.php:577
|
7424 |
+
#: includes/privacy-functions.php:1126
|
7425 |
+
msgid "Customer Record"
|
7426 |
+
msgstr ""
|
7427 |
+
|
7428 |
+
#: includes/privacy-functions.php:538
|
7429 |
+
msgid "Billing Information"
|
7430 |
+
msgstr ""
|
7431 |
+
|
7432 |
+
#: includes/privacy-functions.php:549 includes/privacy-functions.php:949
|
7433 |
+
#: includes/privacy-functions.php:1141
|
7434 |
+
msgid "API Access Logs"
|
7435 |
+
msgstr ""
|
7436 |
+
|
7437 |
+
#: includes/privacy-functions.php:597
|
7438 |
+
msgid "All Email Addresses"
|
7439 |
+
msgstr ""
|
7440 |
+
|
7441 |
+
#: includes/privacy-functions.php:607
|
7442 |
+
msgid "Agreed to Terms"
|
7443 |
+
msgstr ""
|
7444 |
+
|
7445 |
+
#: includes/privacy-functions.php:617
|
7446 |
+
msgid "Agreed to Privacy Policy"
|
7447 |
+
msgstr ""
|
7448 |
+
|
7449 |
+
#: includes/privacy-functions.php:732
|
7450 |
+
msgid "Order ID / Number"
|
7451 |
+
msgstr ""
|
7452 |
+
|
7453 |
+
#: includes/privacy-functions.php:736
|
7454 |
+
msgid "Order Date"
|
7455 |
+
msgstr ""
|
7456 |
+
|
7457 |
+
#: includes/privacy-functions.php:740
|
7458 |
+
msgid "Order Completed Date"
|
7459 |
+
msgstr ""
|
7460 |
+
|
7461 |
+
#: includes/privacy-functions.php:746
|
7462 |
+
msgid "Order Total"
|
7463 |
+
msgstr ""
|
7464 |
+
|
7465 |
+
#: includes/privacy-functions.php:750
|
7466 |
+
msgid "Order Items"
|
7467 |
+
msgstr ""
|
7468 |
+
|
7469 |
+
#: includes/privacy-functions.php:775
|
7470 |
+
msgid "Customer Orders"
|
7471 |
+
msgstr ""
|
7472 |
+
|
7473 |
+
#: includes/privacy-functions.php:841
|
7474 |
+
msgid "Date of Download"
|
7475 |
+
msgstr ""
|
7476 |
+
|
7477 |
+
#: includes/privacy-functions.php:845
|
7478 |
+
msgid "Product Downloaded"
|
7479 |
+
msgstr ""
|
7480 |
+
|
7481 |
+
#: includes/privacy-functions.php:849
|
7482 |
+
msgid "Order ID"
|
7483 |
+
msgstr ""
|
7484 |
+
|
7485 |
+
#: includes/privacy-functions.php:870 includes/privacy-functions.php:1136
|
7486 |
+
msgid "File Download Logs"
|
7487 |
+
msgstr ""
|
7488 |
+
|
7489 |
+
#: includes/privacy-functions.php:936
|
7490 |
+
msgid "Request"
|
7491 |
+
msgstr ""
|
7492 |
+
|
7493 |
+
#: includes/privacy-functions.php:1012
|
7494 |
+
msgid "Possibly Delete Customer"
|
7495 |
+
msgstr ""
|
7496 |
+
|
7497 |
+
#: includes/privacy-functions.php:1078
|
7498 |
+
msgid "Customer for %s not deleted, due to remaining payments."
|
7499 |
+
msgstr ""
|
7500 |
+
|
7501 |
+
#: includes/privacy-functions.php:1096
|
7502 |
+
msgid "Customer for %s successfully deleted."
|
7503 |
+
msgstr ""
|
7504 |
+
|
7505 |
+
#: includes/privacy-functions.php:1107
|
7506 |
+
msgid "Customer for %s failed to be deleted."
|
7507 |
+
msgstr ""
|
7508 |
+
|
7509 |
+
#: includes/privacy-functions.php:1131
|
7510 |
+
msgid "Payment Record"
|
7511 |
+
msgstr ""
|
7512 |
+
|
7513 |
+
#: includes/privacy-functions.php:1174
|
7514 |
+
msgid "Customer for %s has been anonymized."
|
7515 |
+
msgstr ""
|
7516 |
+
|
7517 |
+
#: includes/privacy-functions.php:1199
|
7518 |
+
msgid "No payments found for %s."
|
7519 |
+
msgstr ""
|
7520 |
+
|
7521 |
+
#: includes/privacy-functions.php:1200
|
7522 |
+
msgid "All eligible payments anonymized or deleted for %s."
|
7523 |
+
msgstr ""
|
7524 |
+
|
7525 |
+
#: includes/privacy-functions.php:1273
|
7526 |
+
msgid "All eligible file download logs anonymized or deleted for %s."
|
7527 |
+
msgstr ""
|
7528 |
+
|
7529 |
+
#: includes/privacy-functions.php:1322
|
7530 |
+
msgid "No User found for %s, no access logs to remove."
|
7531 |
+
msgstr ""
|
7532 |
+
|
7533 |
+
#: includes/privacy-functions.php:1347
|
7534 |
+
msgid "All API access logs deleted for %s."
|
7535 |
+
msgstr ""
|
7536 |
+
|
7537 |
#: includes/process-download.php:146
|
7538 |
msgid "Error downloading file. Please contact support."
|
7539 |
msgstr ""
|
7830 |
msgid "Purchase All Items"
|
7831 |
msgstr ""
|
7832 |
|
7833 |
+
#: includes/shortcodes.php:699
|
7834 |
msgid "Sorry, trouble retrieving payment receipt."
|
7835 |
msgstr ""
|
7836 |
|
7837 |
+
#: includes/shortcodes.php:734
|
7838 |
msgid "You must be logged in to view this payment receipt."
|
7839 |
msgstr ""
|
7840 |
|
7841 |
+
#: includes/shortcodes.php:746
|
7842 |
msgid "Receipt could not be retrieved, your purchase session has expired."
|
7843 |
msgstr ""
|
7844 |
|
7845 |
+
#: includes/shortcodes.php:876
|
7846 |
msgid "The passwords you entered do not match. Please try again."
|
7847 |
msgstr ""
|
7848 |
|
7849 |
+
#: includes/shortcodes.php:886
|
7850 |
msgid "The email you entered is invalid. Please enter a valid email."
|
7851 |
msgstr ""
|
7852 |
|
7853 |
+
#: includes/shortcodes.php:891
|
7854 |
msgid "The email you entered belongs to another user. Please use another."
|
7855 |
msgstr ""
|
7856 |
|
7857 |
+
#: includes/shortcodes.php:966
|
7858 |
msgid "Error removing email address from profile. Please try again later."
|
7859 |
msgstr ""
|
7860 |
|
7926 |
msgid "Plain Text"
|
7927 |
msgstr ""
|
7928 |
|
7929 |
+
#: includes/user-functions.php:574
|
7930 |
msgid "[%s] New User Registration"
|
7931 |
msgstr ""
|
7932 |
|
7933 |
+
#: includes/user-functions.php:575
|
7934 |
msgid "New user registration"
|
7935 |
msgstr ""
|
7936 |
|
7937 |
+
#: includes/user-functions.php:577
|
7938 |
msgid "E-mail: %s"
|
7939 |
msgstr ""
|
7940 |
|
7941 |
+
#: includes/user-functions.php:586
|
7942 |
msgid "[%s] Your username and password"
|
7943 |
msgstr ""
|
7944 |
|
7945 |
+
#: includes/user-functions.php:587
|
7946 |
msgid "Your account info"
|
7947 |
msgstr ""
|
7948 |
|
7949 |
+
#: includes/user-functions.php:591
|
7950 |
msgid "Password entered at checkout"
|
7951 |
msgstr ""
|
7952 |
|
7953 |
+
#: includes/user-functions.php:593
|
7954 |
msgid "Password entered at registration"
|
7955 |
msgstr ""
|
7956 |
|
7957 |
+
#: includes/user-functions.php:596
|
7958 |
msgid "Password: %s"
|
7959 |
msgstr ""
|
7960 |
|
7961 |
+
#: includes/user-functions.php:601
|
7962 |
msgid "Click here to log in"
|
7963 |
msgstr ""
|
7964 |
|
7965 |
+
#: includes/user-functions.php:605
|
7966 |
msgid "To log in, visit: %s"
|
7967 |
msgstr ""
|
7968 |
|
7969 |
+
#: includes/user-functions.php:759 includes/user-functions.php:760
|
7970 |
msgid "Verify your account"
|
7971 |
msgstr ""
|
7972 |
|
7973 |
+
#: includes/user-functions.php:762
|
7974 |
msgid ""
|
7975 |
"Hello %s,\n"
|
7976 |
"\n"
|
7980 |
"Link missing? Visit the following URL: %s"
|
7981 |
msgstr ""
|
7982 |
|
7983 |
+
#: includes/user-functions.php:887
|
7984 |
msgid ""
|
7985 |
"Sorry but your account verification link has expired. <a href=\"%s\">Click "
|
7986 |
"here</a> to request a new verification URL."
|
7987 |
msgstr ""
|
7988 |
|
7989 |
+
#: includes/user-functions.php:920
|
7990 |
msgid "You must be logged in to verify your account."
|
7991 |
msgstr ""
|
7992 |
|
7993 |
+
#: includes/user-functions.php:920 includes/user-functions.php:924
|
7994 |
msgid "Notice"
|
7995 |
msgstr ""
|
7996 |
|
7997 |
+
#: includes/user-functions.php:924
|
7998 |
msgid "Your account has already been verified."
|
7999 |
msgstr ""
|
8000 |
|
8001 |
+
#: includes/user-functions.php:969
|
8002 |
msgid "Invalid verification token provided."
|
8003 |
msgstr ""
|
8004 |
|
8005 |
+
#: includes/user-functions.php:1091
|
8006 |
msgid "Easy Digital Downloads <a href=\"%s\">iOS App</a>"
|
8007 |
msgstr ""
|
8008 |
|
8009 |
+
#: includes/user-functions.php:1098
|
8010 |
msgid "Add to iOS App"
|
8011 |
msgstr ""
|
8012 |
|
8385 |
msgid "Checkout"
|
8386 |
msgstr ""
|
8387 |
|
8388 |
+
#: includes/admin/settings/register-settings.php:955
|
8389 |
+
msgctxt ""
|
8390 |
+
"payment status labels for the privacy export & erase settings: Pending "
|
8391 |
+
"Payments"
|
8392 |
+
msgid "%s Payments"
|
8393 |
+
msgstr ""
|
8394 |
+
|
8395 |
#: includes/checkout/template.php:738
|
8396 |
msgctxt "Entering a discount code"
|
8397 |
msgid "Click to enter it"
|
8432 |
msgid "%2$s"
|
8433 |
msgstr ""
|
8434 |
|
8435 |
+
#: includes/shortcodes.php:650
|
8436 |
msgctxt "download post type name"
|
8437 |
msgid "No %s found"
|
8438 |
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.
|
9 |
-
Stable Tag: 2.9.
|
10 |
License: GNU Version 2 or Any Later Version
|
11 |
|
12 |
The easiest way to sell digital products with WordPress.
|
@@ -89,7 +89,7 @@ Full searchable docs can be found at [http://docs.easydigitaldownloads.com/](htt
|
|
89 |
|
90 |
= Where can I ask for help? =
|
91 |
|
92 |
-
You can submit a support ticket or pre-sale question from our [support page](
|
93 |
|
94 |
= Is an SSL certificate required? =
|
95 |
|
@@ -190,6 +190,18 @@ Yes. Easy Digital Downloads also includes default support for Amazon Payments an
|
|
190 |
|
191 |
== Changelog ==
|
192 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
193 |
= 2.9.1, April 20, 2018 =
|
194 |
* Fix: Some text field settings were getting emptied when saving a subsection setting.
|
195 |
* Fix: Stats API Endpoint requests were failing when pseudo-date ranges were used other than yesterday and today.
|
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.2
|
10 |
License: GNU Version 2 or Any Later Version
|
11 |
|
12 |
The easiest way to sell digital products with WordPress.
|
89 |
|
90 |
= Where can I ask for help? =
|
91 |
|
92 |
+
You can submit a support ticket or pre-sale question from our [support page](https://easydigitaldownloads.com/support/?utm_source=docs&utm_medium=faq_tab&utm_content=support&utm_campaign=readme) at anytime.
|
93 |
|
94 |
= Is an SSL certificate required? =
|
95 |
|
190 |
|
191 |
== Changelog ==
|
192 |
|
193 |
+
= 2.9.2, May 24, 2018 =
|
194 |
+
* GDPR: Support for WordPress Core Privacy Exporter and Eraser.
|
195 |
+
* GDPR: Added Privacy Policy template for WordPress Core Privacy Policy editor.
|
196 |
+
* GDPR: Added new "Privacy" tab to the Easy Digital Downloads Settings.
|
197 |
+
* Fix: The "button" CSS class was being applied twice to the "Apply Discount" button.
|
198 |
+
* Fix: The toggle link to view the Privacy Policy was not working when the Terms of Agreement were not visible.
|
199 |
+
* Fix: Email addresses that contained a + would not be removed via [edd_profile_editor].
|
200 |
+
* Fix: Searching payments by discount code was not working.
|
201 |
+
* New: Added action hook above short code download list.
|
202 |
+
* New: Improve File download Log accuracy and remove PII from log meta.
|
203 |
+
* New: Allow for target attribute of links in Terms of Service & Privacy Policy labels.
|
204 |
+
|
205 |
= 2.9.1, April 20, 2018 =
|
206 |
* Fix: Some text field settings were getting emptied when saving a subsection setting.
|
207 |
* Fix: Stats API Endpoint requests were failing when pseudo-date ranges were used other than yesterday and today.
|
templates/edd.css
CHANGED
@@ -793,7 +793,7 @@ input.edd_submit_plain {
|
|
793 |
}
|
794 |
.edd-submit,
|
795 |
#edd-purchase-button,
|
796 |
-
|
797 |
display: inline-block;
|
798 |
padding: 6px 12px;
|
799 |
margin: 0;
|
@@ -816,7 +816,7 @@ input[type="submit"].edd-submit {
|
|
816 |
user-select: none;
|
817 |
}
|
818 |
.edd-submit.button:focus,
|
819 |
-
|
820 |
outline: thin dotted #333;
|
821 |
outline: 5px auto -webkit-focus-ring-color;
|
822 |
outline-offset: -2px;
|
793 |
}
|
794 |
.edd-submit,
|
795 |
#edd-purchase-button,
|
796 |
+
[type="submit"].edd-submit {
|
797 |
display: inline-block;
|
798 |
padding: 6px 12px;
|
799 |
margin: 0;
|
816 |
user-select: none;
|
817 |
}
|
818 |
.edd-submit.button:focus,
|
819 |
+
[type="submit"].edd-submit:focus {
|
820 |
outline: thin dotted #333;
|
821 |
outline: 5px auto -webkit-focus-ring-color;
|
822 |
outline-offset: -2px;
|
templates/edd.min.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
@charset "UTF-8";.edd-icon{display:inline-block;fill:currentColor;position:relative;top:-.0625em;vertical-align:middle;width:1em;height:1em}.edd-icon-lock{top:-.125rem}.edd-icon-spin{display:inline-block;-moz-animation:edd-icon-spin 2s infinite linear;-o-animation:edd-icon-spin 2s infinite linear;-webkit-animation:edd-icon-spin 2s infinite linear;animation:edd-icon-spin 2s infinite linear}@-moz-keyframes edd-icon-spin{0%{-moz-transform:rotate(0)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes edd-icon-spin{0%{-webkit-transform:rotate(0)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes edd-icon-spin{0%{-o-transform:rotate(0)}100%{-o-transform:rotate(359deg)}}@-ms-keyframes edd-icon-spin{0%{-ms-transform:rotate(0)}100%{-ms-transform:rotate(359deg)}}@keyframes edd-icon-spin{0%{transform:rotate(0)}100%{transform:rotate(359deg)}}.edd_clearfix:after{display:block;visibility:hidden;float:none;clear:both;text-indent:-9999px;content:"."}#edd_checkout_cart{text-align:left;width:100%;border:none;margin:0 0 21px;table-layout:auto}#edd_checkout_cart td,#edd_checkout_cart th{text-align:left;border:1px solid #eee;color:#666;padding:.5em 1.387em}#edd_checkout_cart .edd_cart_header_row th{background:#fafafa;padding:1.387em}#edd_checkout_cart .edd_cart_discount_row th,#edd_checkout_cart .edd_cart_tax_row th{background:0 0}#edd_checkout_cart th{font-weight:700}#edd_checkout_cart td{line-height:25px;vertical-align:middle;background:#fff}#edd_checkout_cart td.edd_cart_actions,#edd_checkout_cart td:last-child,#edd_checkout_cart th.edd_cart_actions,#edd_checkout_cart th.edd_cart_total,#edd_checkout_cart th:last-child{text-align:right}#edd_checkout_cart td img{float:left;margin:0 8px 0 0;background:0 0;padding:0;border:none}#edd_checkout_cart input.edd-item-quantity{width:3em;padding:2px}#edd_checkout_cart .edd_discount{display:inline-block;margin-left:5px}.edd_discount_remove{display:inline-block;width:10px;height:11px;background:url(images/xit.gif ) 0 0 no-repeat;position:relative;top:3px}.edd_discount_remove:hover{background-position:-10px 0}#edd_checkout_cart br{display:none}#edd_checkout_cart a.edd-cart-saving-button{font-weight:400;text-decoration:none}#edd_checkout_form_wrap legend{display:block;font-size:120%;line-height:1;font-weight:700;width:100%;margin:0 0 21px;padding:0}#edd_checkout_form_wrap label{font-weight:700;display:block;position:relative;line-height:100%;font-size:95%;margin:0 0 5px}#edd_checkout_form_wrap label:after{display:block;visibility:hidden;float:none;clear:both;height:0;text-indent:-9999px;content:"."}#edd_checkout_form_wrap span.edd-description{color:#666;font-size:80%;display:block;margin:0 0 5px}#edd_checkout_form_wrap input.edd-input,#edd_checkout_form_wrap textarea.edd-input{display:inline-block;width:70%}#edd_checkout_form_wrap select.edd-select{display:block;width:60%}#edd_checkout_form_wrap select.edd-select.edd-select-small{display:inline;width:auto}#edd_checkout_form_wrap input.edd-input.error,#edd_checkout_form_wrap textarea.edd-input.error{border-color:#c4554e}#edd_checkout_form_wrap>p{margin:0 0 21px}#edd_checkout_form_wrap span.edd-required-indicator{color:#b94a48;display:inline}#edd_checkout_form_wrap input[type=email],#edd_checkout_form_wrap input[type=password],#edd_checkout_form_wrap input[type=tel],#edd_checkout_form_wrap input[type=text],#edd_checkout_form_wrap textarea{padding:4px 6px}#edd_checkout_form_wrap input[type=radio]{border:none;margin-right:5px}#edd_checkout_form_wrap input[type=checkbox]{display:inline-block;margin:0 5px 0 0}#edd_checkout_form_wrap input[type=checkbox]+label,#edd_checkout_form_wrap input[type=checkbox]+label:after{display:inline}#edd_checkout_form_wrap .edd-payment-icons{height:32px;display:block;margin:0 0 8px}#edd_checkout_form_wrap .edd-payment-icons img.payment-icon{max-height:32px;width:auto;margin:0 3px 0 0;float:left;background:0 0;padding:0;border:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}#edd_checkout_form_wrap #edd-payment-mode-wrap label{display:inline-block;margin:0 20px 0 0}#edd_checkout_form_wrap #edd-payment-mode-wrap .edd-payment-mode-label{font-weight:700;display:inline-block;position:relative;margin-bottom:5px}#edd_checkout_form_wrap fieldset{border:1px solid #eee;padding:1.387em;margin:0 0 21px}#edd_checkout_form_wrap #edd_discount_code,#edd_checkout_form_wrap #edd_purchase_submit,#edd_checkout_form_wrap #edd_register_account_fields{padding:0;border:none}#edd_checkout_form_wrap fieldset fieldset{margin:0;border:none;padding:0}#edd_checkout_form_wrap #edd-login-account-wrap,#edd_checkout_form_wrap #edd-new-account-wrap,#edd_checkout_form_wrap #edd_final_total_wrap,#edd_checkout_form_wrap #edd_show_discount,#edd_checkout_form_wrap .edd-cart-adjustment{background:#fafafa;color:#666;padding:.5em 1.387em}#edd_checkout_form_wrap #edd-discount-code-wrap,#edd_checkout_form_wrap #edd_final_total_wrap,#edd_checkout_form_wrap #edd_show_discount{border:1px solid #eee}#edd_checkout_form_wrap .edd-cart-adjustment{padding:1.387em}#edd_checkout_form_wrap .edd-cart-adjustment input.edd-input,#edd_checkout_form_wrap .edd-cart-adjustment input.edd-submit{display:inline-block}#edd_checkout_form_wrap .edd-cart-adjustment input.edd-submit{padding:3px 12px;margin-bottom:2px}#edd_checkout_form_wrap #edd-discount-error-wrap{width:100%;display:inline-block;margin:1em 0 0}#edd_checkout_form_wrap #edd-login-account-wrap,#edd_checkout_form_wrap #edd-new-account-wrap{margin:-1.387em -1.387em 21px;border-left:none;border-right:none;border-top:none}#edd_checkout_form_wrap #edd_payment_mode_select{margin-bottom:21px}#edd_checkout_form_wrap fieldset#edd_register_fields #edd_checkout_user_info{margin-bottom:21px}#edd_checkout_form_wrap fieldset#edd_register_account_fields legend{padding-top:11px}#edd_checkout_form_wrap fieldset#edd_register_account_fields p.edd_login_password,#edd_checkout_form_wrap fieldset#edd_register_account_fields p.edd_register_password{margin:0}#edd_checkout_form_wrap fieldset#edd_cc_fields{border:1px solid #f0f0f0;background:#f9f9f9;position:relative}#edd_checkout_form_wrap fieldset#edd_cc_fields legend{border:none;padding:0}#edd_checkout_form_wrap fieldset p:last-child{margin-bottom:0}#edd_checkout_form_wrap fieldset#edd_cc_fields #edd-card-number-wrap{margin-top:5px}#edd_checkout_form_wrap #edd_purchase_final_total{margin:21px 0}#edd_checkout_form_wrap #edd_purchase_final_total p{margin:0}#edd_secure_site_wrapper{padding:4px 4px 4px 0;font-weight:700}#edd_checkout_form_wrap input.edd-input.card-number.valid{background-image:url(images/tick.png);background-repeat:no-repeat;background-position:98% 50%}#edd_checkout_form_wrap span.exp-divider{display:inline}#edd_checkout_form_wrap span.card-type{position:absolute;top:-2px;right:0;width:43px;height:32px;background-size:43px 32px!important}#edd_checkout_form_wrap span.card-type.off{display:none}#edd_checkout_form_wrap span.card-type.visa{background:url(images/icons/visa.png ) no-repeat}#edd_checkout_form_wrap span.card-type.mastercard{background:url(images/icons/mastercard.png ) no-repeat}#edd_checkout_form_wrap span.card-type.discover{background:url(images/icons/discover.png ) no-repeat}#edd_checkout_form_wrap span.card-type.amex{background:url(images/icons/americanexpress.png ) no-repeat}#edd_checkout_form_wrap .edd-cart-ajax{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.edd-amazon-profile-wrapper{font-size:12px}.edd-amazon-profile-name{font-weight:600}.edd-amazon-logout{font-size:10px;line-height:12px}.edd-amazon-logout a{cursor:pointer}#edd-amazon-address-box,#edd-amazon-wallet-box{height:228px;width:350px}#edd-amazon-address-box{margin-bottom:15px}@media only screen and (min-width:768px){#edd-amazon-address-box,#edd-amazon-wallet-box{width:100%;height:228px}}.edd_purchase_submit_wrapper{position:relative}.edd_purchase_submit_wrapper a.edd-add-to-cart{text-decoration:none;display:none;position:relative;overflow:hidden}.edd_purchase_submit_wrapper a.edd-add-to-cart.edd-has-js{display:inline-block}.edd_purchase_submit_wrapper .edd-cart-ajax{display:none;position:relative;left:-35px}.edd-submit.button.edd-ajax-loading{padding-right:30px}.edd-add-to-cart .edd-add-to-cart-label{opacity:1}.edd-loading,.edd-loading:after{border-radius:50%;display:block;width:1.5em;height:1.5em}.edd-loading{-webkit-animation:edd-spinning 1.1s infinite linear;animation:edd-spinning 1.1s infinite linear;border-top:.2em solid rgba(255,255,255,.2);border-right:.2em solid rgba(255,255,255,.2);border-bottom:.2em solid rgba(255,255,255,.2);border-left:.2em solid #fff;font-size:.75em;position:absolute;left:calc(50% - .75em);top:calc(50% - .75em);opacity:0;-ms-transform:translateZ(0);transform:translateZ(0)}.edd-discount-loader.edd-loading,.edd-loading-ajax.edd-loading,a.edd-add-to-cart.white .edd-loading{border-top-color:rgba(0,0,0,.2);border-right-color:rgba(0,0,0,.2);border-bottom-color:rgba(0,0,0,.2);border-left-color:#000}.edd-loading-ajax.edd-loading{display:inline-block;position:relative;top:0;left:.25em;vertical-align:middle}#edd_checkout_form_wrap .edd-cart-adjustment .edd-apply-discount.edd-submit{display:inline-block}.edd-discount-loader.edd-loading{display:inline-block;position:relative;left:auto;vertical-align:middle;width:1.25em;height:1.25em}.edd-loading-ajax.edd-loading{opacity:1}@-webkit-keyframes edd-spinning{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes edd-spinning{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.edd-loading,a.edd-add-to-cart .edd-add-to-cart-label{-webkit-transition:.1s opacity!important;-moz-transition:.1s opacity!important;-ms-transition:.1s opacity!important;-o-transition:.1s opacity!important;transition:.1s opacity!important}.edd-add-to-cart[data-edd-loading] .edd-add-to-cart-label{opacity:0}.edd-add-to-cart[data-edd-loading] .edd-loading,.edd-discount-loader.edd-loading{opacity:1}.edd-cart-added-alert{color:#567622;display:block;position:absolute}.edd_form input.edd-input.required,.edd_form select.edd-select.required{color:#000}body.edd_receipt_page{background-color:#fff;color:#141412;margin:0;font-family:Helvetica,sans-serif;font-size:12px}body.edd_receipt_page:before{position:relative}body.edd_receipt_page #edd_receipt_wrapper{width:660px;margin:0 auto;padding:50px 0}body.edd_receipt_page table{display:table;width:100%;border-bottom:1px solid #ededed;border-collapse:collapse;border-spacing:0;font-size:14px;line-height:2;margin:0 0 20px}body.edd_receipt_page td,body.edd_receipt_page th{display:table-cell;text-align:left;border-top:1px solid #ededed;padding:6px 10px;font-weight:400}body.edd_receipt_page th{font-weight:700;text-transform:uppercase}body.edd_receipt_page h3{font-size:22px;margin:40px 0 5px;clear:both;display:block;font-weight:700}body.edd_receipt_page li{list-style:none}table#edd_purchase_receipt,table#edd_purchase_receipt_products{width:100%}table#edd_purchase_receipt td,table#edd_purchase_receipt th,table#edd_purchase_receipt_products td,table#edd_purchase_receipt_products th{text-align:left}table#edd_purchase_receipt .edd_receipt_payment_status.cancelled,table#edd_purchase_receipt .edd_receipt_payment_status.failed,table#edd_purchase_receipt .edd_receipt_payment_status.pending,table#edd_purchase_receipt .edd_receipt_payment_status.revoked{color:#f73f2e}table#edd_purchase_receipt_products li{list-style:none;margin:0 0 8px 10px}table#edd_purchase_receipt ul,table#edd_purchase_receipt_products ul.edd_purchase_receipt_files{margin:0;padding:0}table#edd_purchase_receipt li.edd_download_file{list-style:none;margin:0 0 8px 0}table#edd_purchase_receipt_products .edd_purchase_receipt_product_notes{font-style:italic}table#edd_purchase_receipt_products .edd_purchase_receipt_product_name{font-weight:700}table#edd_purchase_receipt_products .edd_bundled_product_name{font-style:italic;font-weight:700}#edd_user_history{text-align:left;width:100%;border-top:1px solid #f0f0f0;border-bottom:none}#edd_user_history td,#edd_user_history th{text-align:left;padding:3px 5px;border-bottom:1px solid #f0f0f0;border-top:none}#edd_user_history th{font-weight:700;background:#f5f5f5}#edd_user_history td{line-height:25px;vertical-align:middle}#edd_user_history .edd_purchase_status.cancelled,#edd_user_history .edd_purchase_status.failed,#edd_user_history .edd_purchase_status.pending,#edd_user_history .edd_purchase_status.revoked{color:#f73f2e}#edd_login_form legend,#edd_register_form legend{font-size:120%;margin-bottom:1em}#edd_login_form fieldset,#edd_register_form fieldset{border:none}#edd_login_form .edd-input,#edd_register_form .edd-input{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#edd_login_form label,#edd_register_form label{cursor:pointer}#edd_profile_editor_form p{margin-bottom:8px}#edd_profile_editor_form label{display:inline-block}#edd_profile_editor_form .edd-profile-emails{list-style-type:none;display:inline-table;margin-left:0;margin-bottom:0}#edd_profile_editor_form .edd-profile-email{width:auto}#edd_profile_editor_form .edd-profile-email .actions{display:none}#edd_profile_editor_form .edd-profile-email:hover>span{display:inline-block}.edd_added_to_cart_alert{padding:5px;font-size:14px;border:1px solid #046a9e;background:#9ecce2;color:#333;margin:8px 0}.edd_added_to_cart_alert a.edd_alert_checkout_link{color:#000!important}input.edd_submit_plain{background:0 0!important;border:none!important;padding:0!important;display:inline;cursor:pointer}.single-download .edd_download_purchase_form{margin-bottom:1.387em}.edd_download_purchase_form .edd_download_quantity_wrapper{margin:0 0 .5em}.edd_download_purchase_form .edd_download_quantity_wrapper .edd-item-quantity{width:75px}.edd_download_purchase_form .edd_price_options{margin:0 0 15px}.edd_download_purchase_form .edd_price_options ul{margin:0;padding:0;list-style:none}.edd_download_purchase_form .edd_price_options li{display:block;padding:0;margin:0}.edd_download_purchase_form .edd_price_options span{display:inline;padding:0;margin:0}.edd_download_purchase_form .edd_price_options .edd_download_quantity_wrapper{padding-left:18px}.edd_download_purchase_form .edd_price_options .edd_download_quantity_wrapper *{font-size:80%}.edd_download_purchase_form .edd_price_options input.edd-item-quantity{display:inline;width:50px;max-width:90%}#edd-purchase-button,.edd-submit,input[type=submit].edd-submit{display:inline-block;padding:6px 12px;margin:0;font-size:14px;font-weight:400;line-height:1.428571429;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.edd-submit.button:focus,input[type=submit].edd-submit:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.edd-submit.button:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.edd-submit.plain{padding:0;border:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.edd-submit.button,.edd-submit.button.gray,.edd-submit.button:visited{color:#333;background:#f0f0f0;border-color:#ccc}.edd-submit.button.gray:active,.edd-submit.button.gray:focus,.edd-submit.button.gray:hover,.edd-submit.button:active,.edd-submit.button:focus,.edd-submit.button:hover{color:#333;background:#ebebeb;border-color:#adadad}.edd-submit.button.gray:active{background-image:none}.edd-submit.button.white{color:#333;background:#fff;border-color:#ccc}.edd-submit.button.white:active,.edd-submit.button.white:focus,.edd-submit.button.white:hover{color:#333;background:#ebebeb;border-color:#adadad}.edd-submit.button.white:active{background-image:none}.edd-submit.button.blue{color:#fff;background:#428bca;border-color:#357ebd}.edd-submit.button.blue.active,.edd-submit.button.blue:focus,.edd-submit.button.blue:hover{color:#fff;background:#3276b1;border-color:#285e8e}.edd-submit.button.blue.active{background-image:none}.edd-submit.button.red{color:#fff;background:#d9534f;border-color:#d43f3a}.edd-submit.button.red:active,.edd-submit.button.red:focus,.edd-submit.button.red:hover{color:#fff;background:#d2322d;border-color:#ac2925}.edd-submit.button.red:active{background-image:none}.edd-submit.button.green{color:#fff;background:#5cb85c;border-color:#4cae4c}.edd-submit.button.green:active,.edd-submit.button.green:focus,.edd-submit.button.green:hover{color:#fff;background:#47a447;border-color:#398439}.edd-submit.button.green:active{background-image:none}.edd-submit.button.yellow{color:#fff;background:#f0ad4e;border-color:#eea236}.edd-submit.button.yellow:active,.edd-submit.button.yellow:focus,.edd-submit.button.yellow:hover{color:#fff;background:#ed9c28;border-color:#d58512}.edd-submit.button.yellow:active{background-image:none}.edd-submit.button.orange{color:#fff;background:#ed9c28;border-color:#e3921e}.edd-submit.button.orange:active,.edd-submit.button.orange:focus,.edd-submit.button.orange:hover{color:#fff;background:#e59016;border-color:#d58512}.edd-submit.button.orange:active{background-image:none}.edd-submit.button.dark-gray{color:#fff;background:#363636;border-color:#222}.edd-submit.button.dark-gray:active,.edd-submit.button.dark-gray:focus,.edd-submit.button.dark-gray:hover{color:#fff;background:#333;border-color:#adadad}.edd-submit.button.dark-gray:active{background-image:none}.edd_downloads_list:after{content:"";display:table;clear:both}.edd_download{float:left}.edd_download_columns_1 .edd_download{width:100%}.edd_download_columns_2 .edd_download{width:50%}.edd_download_columns_0 .edd_download,.edd_download_columns_3 .edd_download{width:33%}.edd_download_columns_4 .edd_download{width:25%}.edd_download_columns_5 .edd_download{width:20%}.edd_download_columns_6 .edd_download{width:16.6%}.edd_download_inner{padding:0 8px 8px;margin:0 0 10px}.edd_download_columns_2 .edd_download:nth-child(2n+1),.edd_download_columns_3 .edd_download:nth-child(3n+1),.edd_download_columns_4 .edd_download:nth-child(4n+1),.edd_download_columns_5 .edd_download:nth-child(5n+1),.edd_download_columns_6 .edd_download:nth-child(6n+1){clear:left}.edd_download_image{max-width:100%}.edd_download .edd_price{margin-bottom:10px}#edd_download_pagination{clear:both}.edd-hide-on-empty.cart-empty{display:none}edd-hide-on-empty.cart-not.empty{display:block}.edd-cart-ajax{margin:0 8px 0 4px;position:relative;top:2px;background:0 0;border:none;padding:0}.edd-cart-number-of-items{font-style:italic;color:grey}.edd-cart-meta.edd_subtotal{font-weight:700;font-style:italic}.edd-cart-meta.edd_cart_tax{font-size:1em;font-style:italic}.edd-cart-meta.edd_cart_tax::before{font-style:normal}.edd-cart-meta.edd_total{font-weight:700}.edd-cart-meta{padding:2px 5px}.edd-cart-meta.edd_subtotal,.edd-cart-meta.edd_total{background-color:#f9f9f9}.edd_errors:not(.edd-alert){-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;border:1px solid #e6db55;margin:0 0 21px;background:#ffffe0;color:#333}.edd_error{padding:10px}p.edd_error{margin:0!important}.edd_success:not(.edd-alert){-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;border:1px solid #b3ce89;margin:20px 0;background:#d5eab3;color:#567622;padding:6px 8px;box-shadow:inset 0 1px 0 rgba(255,255,255,.7)}.edd-alert{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;margin-bottom:20px;padding:10px;border:1px solid transparent;vertical-align:middle}.edd-alert p{padding:0}.edd-alert p:not(:last-child){margin-bottom:5px}.edd-alert p:last-child{margin-bottom:0}.edd-alert-error{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.edd-alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.edd-alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.edd-alert-warn{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}
|
1 |
+
@charset "UTF-8";.edd-icon{display:inline-block;fill:currentColor;position:relative;top:-.0625em;vertical-align:middle;width:1em;height:1em}.edd-icon-lock{top:-.125rem}.edd-icon-spin{display:inline-block;-moz-animation:edd-icon-spin 2s infinite linear;-o-animation:edd-icon-spin 2s infinite linear;-webkit-animation:edd-icon-spin 2s infinite linear;animation:edd-icon-spin 2s infinite linear}@-moz-keyframes edd-icon-spin{0%{-moz-transform:rotate(0)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes edd-icon-spin{0%{-webkit-transform:rotate(0)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes edd-icon-spin{0%{-o-transform:rotate(0)}100%{-o-transform:rotate(359deg)}}@-ms-keyframes edd-icon-spin{0%{-ms-transform:rotate(0)}100%{-ms-transform:rotate(359deg)}}@keyframes edd-icon-spin{0%{transform:rotate(0)}100%{transform:rotate(359deg)}}.edd_clearfix:after{display:block;visibility:hidden;float:none;clear:both;text-indent:-9999px;content:"."}#edd_checkout_cart{text-align:left;width:100%;border:none;margin:0 0 21px;table-layout:auto}#edd_checkout_cart td,#edd_checkout_cart th{text-align:left;border:1px solid #eee;color:#666;padding:.5em 1.387em}#edd_checkout_cart .edd_cart_header_row th{background:#fafafa;padding:1.387em}#edd_checkout_cart .edd_cart_discount_row th,#edd_checkout_cart .edd_cart_tax_row th{background:0 0}#edd_checkout_cart th{font-weight:700}#edd_checkout_cart td{line-height:25px;vertical-align:middle;background:#fff}#edd_checkout_cart td.edd_cart_actions,#edd_checkout_cart td:last-child,#edd_checkout_cart th.edd_cart_actions,#edd_checkout_cart th.edd_cart_total,#edd_checkout_cart th:last-child{text-align:right}#edd_checkout_cart td img{float:left;margin:0 8px 0 0;background:0 0;padding:0;border:none}#edd_checkout_cart input.edd-item-quantity{width:3em;padding:2px}#edd_checkout_cart .edd_discount{display:inline-block;margin-left:5px}.edd_discount_remove{display:inline-block;width:10px;height:11px;background:url(images/xit.gif ) 0 0 no-repeat;position:relative;top:3px}.edd_discount_remove:hover{background-position:-10px 0}#edd_checkout_cart br{display:none}#edd_checkout_cart a.edd-cart-saving-button{font-weight:400;text-decoration:none}#edd_checkout_form_wrap legend{display:block;font-size:120%;line-height:1;font-weight:700;width:100%;margin:0 0 21px;padding:0}#edd_checkout_form_wrap label{font-weight:700;display:block;position:relative;line-height:100%;font-size:95%;margin:0 0 5px}#edd_checkout_form_wrap label:after{display:block;visibility:hidden;float:none;clear:both;height:0;text-indent:-9999px;content:"."}#edd_checkout_form_wrap span.edd-description{color:#666;font-size:80%;display:block;margin:0 0 5px}#edd_checkout_form_wrap input.edd-input,#edd_checkout_form_wrap textarea.edd-input{display:inline-block;width:70%}#edd_checkout_form_wrap select.edd-select{display:block;width:60%}#edd_checkout_form_wrap select.edd-select.edd-select-small{display:inline;width:auto}#edd_checkout_form_wrap input.edd-input.error,#edd_checkout_form_wrap textarea.edd-input.error{border-color:#c4554e}#edd_checkout_form_wrap>p{margin:0 0 21px}#edd_checkout_form_wrap span.edd-required-indicator{color:#b94a48;display:inline}#edd_checkout_form_wrap input[type=email],#edd_checkout_form_wrap input[type=password],#edd_checkout_form_wrap input[type=tel],#edd_checkout_form_wrap input[type=text],#edd_checkout_form_wrap textarea{padding:4px 6px}#edd_checkout_form_wrap input[type=radio]{border:none;margin-right:5px}#edd_checkout_form_wrap input[type=checkbox]{display:inline-block;margin:0 5px 0 0}#edd_checkout_form_wrap input[type=checkbox]+label,#edd_checkout_form_wrap input[type=checkbox]+label:after{display:inline}#edd_checkout_form_wrap .edd-payment-icons{height:32px;display:block;margin:0 0 8px}#edd_checkout_form_wrap .edd-payment-icons img.payment-icon{max-height:32px;width:auto;margin:0 3px 0 0;float:left;background:0 0;padding:0;border:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}#edd_checkout_form_wrap #edd-payment-mode-wrap label{display:inline-block;margin:0 20px 0 0}#edd_checkout_form_wrap #edd-payment-mode-wrap .edd-payment-mode-label{font-weight:700;display:inline-block;position:relative;margin-bottom:5px}#edd_checkout_form_wrap fieldset{border:1px solid #eee;padding:1.387em;margin:0 0 21px}#edd_checkout_form_wrap #edd_discount_code,#edd_checkout_form_wrap #edd_purchase_submit,#edd_checkout_form_wrap #edd_register_account_fields{padding:0;border:none}#edd_checkout_form_wrap fieldset fieldset{margin:0;border:none;padding:0}#edd_checkout_form_wrap #edd-login-account-wrap,#edd_checkout_form_wrap #edd-new-account-wrap,#edd_checkout_form_wrap #edd_final_total_wrap,#edd_checkout_form_wrap #edd_show_discount,#edd_checkout_form_wrap .edd-cart-adjustment{background:#fafafa;color:#666;padding:.5em 1.387em}#edd_checkout_form_wrap #edd-discount-code-wrap,#edd_checkout_form_wrap #edd_final_total_wrap,#edd_checkout_form_wrap #edd_show_discount{border:1px solid #eee}#edd_checkout_form_wrap .edd-cart-adjustment{padding:1.387em}#edd_checkout_form_wrap .edd-cart-adjustment input.edd-input,#edd_checkout_form_wrap .edd-cart-adjustment input.edd-submit{display:inline-block}#edd_checkout_form_wrap .edd-cart-adjustment input.edd-submit{padding:3px 12px;margin-bottom:2px}#edd_checkout_form_wrap #edd-discount-error-wrap{width:100%;display:inline-block;margin:1em 0 0}#edd_checkout_form_wrap #edd-login-account-wrap,#edd_checkout_form_wrap #edd-new-account-wrap{margin:-1.387em -1.387em 21px;border-left:none;border-right:none;border-top:none}#edd_checkout_form_wrap #edd_payment_mode_select{margin-bottom:21px}#edd_checkout_form_wrap fieldset#edd_register_fields #edd_checkout_user_info{margin-bottom:21px}#edd_checkout_form_wrap fieldset#edd_register_account_fields legend{padding-top:11px}#edd_checkout_form_wrap fieldset#edd_register_account_fields p.edd_login_password,#edd_checkout_form_wrap fieldset#edd_register_account_fields p.edd_register_password{margin:0}#edd_checkout_form_wrap fieldset#edd_cc_fields{border:1px solid #f0f0f0;background:#f9f9f9;position:relative}#edd_checkout_form_wrap fieldset#edd_cc_fields legend{border:none;padding:0}#edd_checkout_form_wrap fieldset p:last-child{margin-bottom:0}#edd_checkout_form_wrap fieldset#edd_cc_fields #edd-card-number-wrap{margin-top:5px}#edd_checkout_form_wrap #edd_purchase_final_total{margin:21px 0}#edd_checkout_form_wrap #edd_purchase_final_total p{margin:0}#edd_secure_site_wrapper{padding:4px 4px 4px 0;font-weight:700}#edd_checkout_form_wrap input.edd-input.card-number.valid{background-image:url(images/tick.png);background-repeat:no-repeat;background-position:98% 50%}#edd_checkout_form_wrap span.exp-divider{display:inline}#edd_checkout_form_wrap span.card-type{position:absolute;top:-2px;right:0;width:43px;height:32px;background-size:43px 32px!important}#edd_checkout_form_wrap span.card-type.off{display:none}#edd_checkout_form_wrap span.card-type.visa{background:url(images/icons/visa.png ) no-repeat}#edd_checkout_form_wrap span.card-type.mastercard{background:url(images/icons/mastercard.png ) no-repeat}#edd_checkout_form_wrap span.card-type.discover{background:url(images/icons/discover.png ) no-repeat}#edd_checkout_form_wrap span.card-type.amex{background:url(images/icons/americanexpress.png ) no-repeat}#edd_checkout_form_wrap .edd-cart-ajax{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.edd-amazon-profile-wrapper{font-size:12px}.edd-amazon-profile-name{font-weight:600}.edd-amazon-logout{font-size:10px;line-height:12px}.edd-amazon-logout a{cursor:pointer}#edd-amazon-address-box,#edd-amazon-wallet-box{height:228px;width:350px}#edd-amazon-address-box{margin-bottom:15px}@media only screen and (min-width:768px){#edd-amazon-address-box,#edd-amazon-wallet-box{width:100%;height:228px}}.edd_purchase_submit_wrapper{position:relative}.edd_purchase_submit_wrapper a.edd-add-to-cart{text-decoration:none;display:none;position:relative;overflow:hidden}.edd_purchase_submit_wrapper a.edd-add-to-cart.edd-has-js{display:inline-block}.edd_purchase_submit_wrapper .edd-cart-ajax{display:none;position:relative;left:-35px}.edd-submit.button.edd-ajax-loading{padding-right:30px}.edd-add-to-cart .edd-add-to-cart-label{opacity:1}.edd-loading,.edd-loading:after{border-radius:50%;display:block;width:1.5em;height:1.5em}.edd-loading{-webkit-animation:edd-spinning 1.1s infinite linear;animation:edd-spinning 1.1s infinite linear;border-top:.2em solid rgba(255,255,255,.2);border-right:.2em solid rgba(255,255,255,.2);border-bottom:.2em solid rgba(255,255,255,.2);border-left:.2em solid #fff;font-size:.75em;position:absolute;left:calc(50% - .75em);top:calc(50% - .75em);opacity:0;-ms-transform:translateZ(0);transform:translateZ(0)}.edd-discount-loader.edd-loading,.edd-loading-ajax.edd-loading,a.edd-add-to-cart.white .edd-loading{border-top-color:rgba(0,0,0,.2);border-right-color:rgba(0,0,0,.2);border-bottom-color:rgba(0,0,0,.2);border-left-color:#000}.edd-loading-ajax.edd-loading{display:inline-block;position:relative;top:0;left:.25em;vertical-align:middle}#edd_checkout_form_wrap .edd-cart-adjustment .edd-apply-discount.edd-submit{display:inline-block}.edd-discount-loader.edd-loading{display:inline-block;position:relative;left:auto;vertical-align:middle;width:1.25em;height:1.25em}.edd-loading-ajax.edd-loading{opacity:1}@-webkit-keyframes edd-spinning{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes edd-spinning{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.edd-loading,a.edd-add-to-cart .edd-add-to-cart-label{-webkit-transition:.1s opacity!important;-moz-transition:.1s opacity!important;-ms-transition:.1s opacity!important;-o-transition:.1s opacity!important;transition:.1s opacity!important}.edd-add-to-cart[data-edd-loading] .edd-add-to-cart-label{opacity:0}.edd-add-to-cart[data-edd-loading] .edd-loading,.edd-discount-loader.edd-loading{opacity:1}.edd-cart-added-alert{color:#567622;display:block;position:absolute}.edd_form input.edd-input.required,.edd_form select.edd-select.required{color:#000}body.edd_receipt_page{background-color:#fff;color:#141412;margin:0;font-family:Helvetica,sans-serif;font-size:12px}body.edd_receipt_page:before{position:relative}body.edd_receipt_page #edd_receipt_wrapper{width:660px;margin:0 auto;padding:50px 0}body.edd_receipt_page table{display:table;width:100%;border-bottom:1px solid #ededed;border-collapse:collapse;border-spacing:0;font-size:14px;line-height:2;margin:0 0 20px}body.edd_receipt_page td,body.edd_receipt_page th{display:table-cell;text-align:left;border-top:1px solid #ededed;padding:6px 10px;font-weight:400}body.edd_receipt_page th{font-weight:700;text-transform:uppercase}body.edd_receipt_page h3{font-size:22px;margin:40px 0 5px;clear:both;display:block;font-weight:700}body.edd_receipt_page li{list-style:none}table#edd_purchase_receipt,table#edd_purchase_receipt_products{width:100%}table#edd_purchase_receipt td,table#edd_purchase_receipt th,table#edd_purchase_receipt_products td,table#edd_purchase_receipt_products th{text-align:left}table#edd_purchase_receipt .edd_receipt_payment_status.cancelled,table#edd_purchase_receipt .edd_receipt_payment_status.failed,table#edd_purchase_receipt .edd_receipt_payment_status.pending,table#edd_purchase_receipt .edd_receipt_payment_status.revoked{color:#f73f2e}table#edd_purchase_receipt_products li{list-style:none;margin:0 0 8px 10px}table#edd_purchase_receipt ul,table#edd_purchase_receipt_products ul.edd_purchase_receipt_files{margin:0;padding:0}table#edd_purchase_receipt li.edd_download_file{list-style:none;margin:0 0 8px 0}table#edd_purchase_receipt_products .edd_purchase_receipt_product_notes{font-style:italic}table#edd_purchase_receipt_products .edd_purchase_receipt_product_name{font-weight:700}table#edd_purchase_receipt_products .edd_bundled_product_name{font-style:italic;font-weight:700}#edd_user_history{text-align:left;width:100%;border-top:1px solid #f0f0f0;border-bottom:none}#edd_user_history td,#edd_user_history th{text-align:left;padding:3px 5px;border-bottom:1px solid #f0f0f0;border-top:none}#edd_user_history th{font-weight:700;background:#f5f5f5}#edd_user_history td{line-height:25px;vertical-align:middle}#edd_user_history .edd_purchase_status.cancelled,#edd_user_history .edd_purchase_status.failed,#edd_user_history .edd_purchase_status.pending,#edd_user_history .edd_purchase_status.revoked{color:#f73f2e}#edd_login_form legend,#edd_register_form legend{font-size:120%;margin-bottom:1em}#edd_login_form fieldset,#edd_register_form fieldset{border:none}#edd_login_form .edd-input,#edd_register_form .edd-input{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#edd_login_form label,#edd_register_form label{cursor:pointer}#edd_profile_editor_form p{margin-bottom:8px}#edd_profile_editor_form label{display:inline-block}#edd_profile_editor_form .edd-profile-emails{list-style-type:none;display:inline-table;margin-left:0;margin-bottom:0}#edd_profile_editor_form .edd-profile-email{width:auto}#edd_profile_editor_form .edd-profile-email .actions{display:none}#edd_profile_editor_form .edd-profile-email:hover>span{display:inline-block}.edd_added_to_cart_alert{padding:5px;font-size:14px;border:1px solid #046a9e;background:#9ecce2;color:#333;margin:8px 0}.edd_added_to_cart_alert a.edd_alert_checkout_link{color:#000!important}input.edd_submit_plain{background:0 0!important;border:none!important;padding:0!important;display:inline;cursor:pointer}.single-download .edd_download_purchase_form{margin-bottom:1.387em}.edd_download_purchase_form .edd_download_quantity_wrapper{margin:0 0 .5em}.edd_download_purchase_form .edd_download_quantity_wrapper .edd-item-quantity{width:75px}.edd_download_purchase_form .edd_price_options{margin:0 0 15px}.edd_download_purchase_form .edd_price_options ul{margin:0;padding:0;list-style:none}.edd_download_purchase_form .edd_price_options li{display:block;padding:0;margin:0}.edd_download_purchase_form .edd_price_options span{display:inline;padding:0;margin:0}.edd_download_purchase_form .edd_price_options .edd_download_quantity_wrapper{padding-left:18px}.edd_download_purchase_form .edd_price_options .edd_download_quantity_wrapper *{font-size:80%}.edd_download_purchase_form .edd_price_options input.edd-item-quantity{display:inline;width:50px;max-width:90%}#edd-purchase-button,.edd-submit,[type=submit].edd-submit{display:inline-block;padding:6px 12px;margin:0;font-size:14px;font-weight:400;line-height:1.428571429;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.edd-submit.button:focus,[type=submit].edd-submit:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.edd-submit.button:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.edd-submit.plain{padding:0;border:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.edd-submit.button,.edd-submit.button.gray,.edd-submit.button:visited{color:#333;background:#f0f0f0;border-color:#ccc}.edd-submit.button.gray:active,.edd-submit.button.gray:focus,.edd-submit.button.gray:hover,.edd-submit.button:active,.edd-submit.button:focus,.edd-submit.button:hover{color:#333;background:#ebebeb;border-color:#adadad}.edd-submit.button.gray:active{background-image:none}.edd-submit.button.white{color:#333;background:#fff;border-color:#ccc}.edd-submit.button.white:active,.edd-submit.button.white:focus,.edd-submit.button.white:hover{color:#333;background:#ebebeb;border-color:#adadad}.edd-submit.button.white:active{background-image:none}.edd-submit.button.blue{color:#fff;background:#428bca;border-color:#357ebd}.edd-submit.button.blue.active,.edd-submit.button.blue:focus,.edd-submit.button.blue:hover{color:#fff;background:#3276b1;border-color:#285e8e}.edd-submit.button.blue.active{background-image:none}.edd-submit.button.red{color:#fff;background:#d9534f;border-color:#d43f3a}.edd-submit.button.red:active,.edd-submit.button.red:focus,.edd-submit.button.red:hover{color:#fff;background:#d2322d;border-color:#ac2925}.edd-submit.button.red:active{background-image:none}.edd-submit.button.green{color:#fff;background:#5cb85c;border-color:#4cae4c}.edd-submit.button.green:active,.edd-submit.button.green:focus,.edd-submit.button.green:hover{color:#fff;background:#47a447;border-color:#398439}.edd-submit.button.green:active{background-image:none}.edd-submit.button.yellow{color:#fff;background:#f0ad4e;border-color:#eea236}.edd-submit.button.yellow:active,.edd-submit.button.yellow:focus,.edd-submit.button.yellow:hover{color:#fff;background:#ed9c28;border-color:#d58512}.edd-submit.button.yellow:active{background-image:none}.edd-submit.button.orange{color:#fff;background:#ed9c28;border-color:#e3921e}.edd-submit.button.orange:active,.edd-submit.button.orange:focus,.edd-submit.button.orange:hover{color:#fff;background:#e59016;border-color:#d58512}.edd-submit.button.orange:active{background-image:none}.edd-submit.button.dark-gray{color:#fff;background:#363636;border-color:#222}.edd-submit.button.dark-gray:active,.edd-submit.button.dark-gray:focus,.edd-submit.button.dark-gray:hover{color:#fff;background:#333;border-color:#adadad}.edd-submit.button.dark-gray:active{background-image:none}.edd_downloads_list:after{content:"";display:table;clear:both}.edd_download{float:left}.edd_download_columns_1 .edd_download{width:100%}.edd_download_columns_2 .edd_download{width:50%}.edd_download_columns_0 .edd_download,.edd_download_columns_3 .edd_download{width:33%}.edd_download_columns_4 .edd_download{width:25%}.edd_download_columns_5 .edd_download{width:20%}.edd_download_columns_6 .edd_download{width:16.6%}.edd_download_inner{padding:0 8px 8px;margin:0 0 10px}.edd_download_columns_2 .edd_download:nth-child(2n+1),.edd_download_columns_3 .edd_download:nth-child(3n+1),.edd_download_columns_4 .edd_download:nth-child(4n+1),.edd_download_columns_5 .edd_download:nth-child(5n+1),.edd_download_columns_6 .edd_download:nth-child(6n+1){clear:left}.edd_download_image{max-width:100%}.edd_download .edd_price{margin-bottom:10px}#edd_download_pagination{clear:both}.edd-hide-on-empty.cart-empty{display:none}edd-hide-on-empty.cart-not.empty{display:block}.edd-cart-ajax{margin:0 8px 0 4px;position:relative;top:2px;background:0 0;border:none;padding:0}.edd-cart-number-of-items{font-style:italic;color:grey}.edd-cart-meta.edd_subtotal{font-weight:700;font-style:italic}.edd-cart-meta.edd_cart_tax{font-size:1em;font-style:italic}.edd-cart-meta.edd_cart_tax::before{font-style:normal}.edd-cart-meta.edd_total{font-weight:700}.edd-cart-meta{padding:2px 5px}.edd-cart-meta.edd_subtotal,.edd-cart-meta.edd_total{background-color:#f9f9f9}.edd_errors:not(.edd-alert){-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;border:1px solid #e6db55;margin:0 0 21px;background:#ffffe0;color:#333}.edd_error{padding:10px}p.edd_error{margin:0!important}.edd_success:not(.edd-alert){-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;border:1px solid #b3ce89;margin:20px 0;background:#d5eab3;color:#567622;padding:6px 8px;box-shadow:inset 0 1px 0 rgba(255,255,255,.7)}.edd-alert{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;margin-bottom:20px;padding:10px;border:1px solid transparent;vertical-align:middle}.edd-alert p{padding:0}.edd-alert p:not(:last-child){margin-bottom:5px}.edd-alert p:last-child{margin-bottom:0}.edd-alert-error{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.edd-alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.edd-alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.edd-alert-warn{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}
|
templates/history-downloads.php
CHANGED
@@ -67,7 +67,7 @@ if ( $purchases ) :
|
|
67 |
</a>
|
68 |
</div>
|
69 |
|
70 |
-
<?php do_action( 'edd_download_history_files', $filekey, $file, $id, $payment->ID, $purchase_data );
|
71 |
endforeach;
|
72 |
|
73 |
else :
|
67 |
</a>
|
68 |
</div>
|
69 |
|
70 |
+
<?php do_action( 'edd_download_history_files', $filekey, $file, $download['id'], $payment->ID, $purchase_data );
|
71 |
endforeach;
|
72 |
|
73 |
else :
|
templates/shortcode-profile-editor.php
CHANGED
@@ -112,7 +112,7 @@ if ( is_user_logged_in() ):
|
|
112 |
$remove_url = wp_nonce_url(
|
113 |
add_query_arg(
|
114 |
array(
|
115 |
-
'email' => $email,
|
116 |
'edd_action' => 'profile-remove-email',
|
117 |
'redirect' => esc_url( edd_get_current_page_url() ),
|
118 |
)
|
112 |
$remove_url = wp_nonce_url(
|
113 |
add_query_arg(
|
114 |
array(
|
115 |
+
'email' => rawurlencode( $email ),
|
116 |
'edd_action' => 'profile-remove-email',
|
117 |
'redirect' => esc_url( edd_get_current_page_url() ),
|
118 |
)
|