277 lines
8.0 KiB
PHP
277 lines
8.0 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Trigger preapproved payment charge
|
|
*
|
|
* @since 1.6
|
|
* @return void
|
|
*/
|
|
function edds_process_preapproved_charge() {
|
|
|
|
if( empty( $_GET['nonce'] ) )
|
|
return;
|
|
|
|
if( ! wp_verify_nonce( $_GET['nonce'], 'edds-process-preapproval' ) )
|
|
return;
|
|
|
|
$payment_id = absint( $_GET['payment_id'] );
|
|
$charge = edds_charge_preapproved( $payment_id );
|
|
|
|
if ( $charge ) {
|
|
wp_redirect( esc_url_raw( add_query_arg( array( 'edd-message' => 'preapproval-charged' ), admin_url( 'edit.php?post_type=download&page=edd-payment-history' ) ) ) ); exit;
|
|
} else {
|
|
wp_redirect( esc_url_raw( add_query_arg( array( 'edd-message' => 'preapproval-failed' ), admin_url( 'edit.php?post_type=download&page=edd-payment-history' ) ) ) ); exit;
|
|
}
|
|
|
|
}
|
|
add_action( 'edd_charge_stripe_preapproval', 'edds_process_preapproved_charge' );
|
|
|
|
|
|
/**
|
|
* Cancel a preapproved payment
|
|
*
|
|
* @since 1.6
|
|
* @return void
|
|
*/
|
|
function edds_process_preapproved_cancel() {
|
|
global $edd_options;
|
|
|
|
if( empty( $_GET['nonce'] ) )
|
|
return;
|
|
|
|
if( ! wp_verify_nonce( $_GET['nonce'], 'edds-process-preapproval' ) )
|
|
return;
|
|
|
|
$payment_id = absint( $_GET['payment_id'] );
|
|
|
|
if ( empty( $payment_id ) ) {
|
|
return;
|
|
}
|
|
|
|
$payment = edd_get_payment( $payment_id );
|
|
$customer_id = $payment->get_meta( '_edds_stripe_customer_id', true );
|
|
$status = $payment->status;
|
|
|
|
if ( empty( $customer_id ) ) {
|
|
return;
|
|
}
|
|
|
|
if ( 'preapproval' !== $status ) {
|
|
return;
|
|
}
|
|
|
|
edd_insert_payment_note( $payment_id, __( 'Preapproval cancelled', 'easy-digital-downloads' ) );
|
|
edd_update_payment_status( $payment_id, 'cancelled' );
|
|
$payment->delete_meta( '_edds_stripe_customer_id' );
|
|
|
|
wp_redirect( esc_url_raw( add_query_arg( array( 'edd-message' => 'preapproval-cancelled' ), admin_url( 'edit.php?post_type=download&page=edd-payment-history' ) ) ) ); exit;
|
|
}
|
|
add_action( 'edd_cancel_stripe_preapproval', 'edds_process_preapproved_cancel' );
|
|
|
|
/**
|
|
* Adds a JS confirmation to check whether a preapproved payment should really be cancelled.
|
|
*
|
|
* @since 2.8.10
|
|
* @return void
|
|
*/
|
|
add_action( 'admin_print_footer_scripts-download_page_edd-payment-history', function () {
|
|
?>
|
|
<script>
|
|
document.addEventListener( 'DOMContentLoaded', function() {
|
|
var cancelLinks = document.querySelectorAll( '.row-actions .cancel-preapproval a' );
|
|
cancelLinks.forEach( function( link ) {
|
|
link.addEventListener( 'click', function( e ) {
|
|
if ( ! confirm( '<?php esc_attr_e( 'Are you sure you want to cancel this order?', 'easy-digital-downloads' ); ?>' ) ) {
|
|
e.preventDefault();
|
|
}
|
|
} );
|
|
} );
|
|
} );
|
|
</script>
|
|
<?php
|
|
} );
|
|
|
|
/**
|
|
* Admin Messages
|
|
*
|
|
* @since 1.6
|
|
* @return void
|
|
*/
|
|
function edds_admin_messages() {
|
|
|
|
if ( isset( $_GET['edd-message'] ) && 'preapproval-charged' == $_GET['edd-message'] ) {
|
|
add_settings_error( 'edds-notices', 'edds-preapproval-charged', __( 'The preapproved payment was successfully charged.', 'easy-digital-downloads' ), 'updated' );
|
|
}
|
|
if ( isset( $_GET['edd-message'] ) && 'preapproval-failed' == $_GET['edd-message'] ) {
|
|
add_settings_error( 'edds-notices', 'edds-preapproval-charged', __( 'The preapproved payment failed to be charged. View order details for further details.', 'easy-digital-downloads' ), 'error' );
|
|
}
|
|
if ( isset( $_GET['edd-message'] ) && 'preapproval-cancelled' == $_GET['edd-message'] ) {
|
|
add_settings_error( 'edds-notices', 'edds-preapproval-cancelled', __( 'The preapproved payment was successfully cancelled.', 'easy-digital-downloads' ), 'updated' );
|
|
}
|
|
|
|
if( isset( $_GET['edd_gateway_connect_error'], $_GET['edd-message'] ) ) {
|
|
/* translators: %1$s Stripe Connect error message. %2$s Retry URL. */
|
|
echo '<div class="notice notice-error"><p>' . sprintf( __( 'There was an error connecting your Stripe account. Message: %1$s. Please <a href="%2$s">try again</a>.', 'easy-digital-downloads' ), esc_html( urldecode( $_GET['edd-message'] ) ), esc_url( admin_url( 'edit.php?post_type=download&page=edd-settings&tab=gateways§ion=edd-stripe' ) ) ) . '</p></div>';
|
|
add_filter( 'wp_parse_str', function( $ar ) {
|
|
if( isset( $ar['edd_gateway_connect_error'] ) ) {
|
|
unset( $ar['edd_gateway_connect_error'] );
|
|
}
|
|
|
|
if( isset( $ar['edd-message'] ) ) {
|
|
unset( $ar['edd-message'] );
|
|
}
|
|
return $ar;
|
|
});
|
|
}
|
|
|
|
settings_errors( 'edds-notices' );
|
|
}
|
|
add_action( 'admin_notices', 'edds_admin_messages' );
|
|
|
|
/**
|
|
* Add payment meta item to payments that used an existing card
|
|
*
|
|
* @since 2.6
|
|
* @param $payment_id
|
|
* @return void
|
|
*/
|
|
function edds_show_existing_card_meta( $payment_id ) {
|
|
$payment = new EDD_Payment( $payment_id );
|
|
$existing_card = $payment->get_meta( '_edds_used_existing_card' );
|
|
if ( ! empty( $existing_card ) ) {
|
|
?>
|
|
<div class="edd-order-stripe-existing-card edd-admin-box-inside">
|
|
<p>
|
|
<span class="label"><?php _e( 'Used Existing Card:', 'easy-digital-downloads' ); ?></span>
|
|
<span><?php _e( 'Yes', 'easy-digital-downloads' ); ?></span>
|
|
</p>
|
|
</div>
|
|
<?php
|
|
}
|
|
}
|
|
add_action( 'edd_view_order_details_payment_meta_after', 'edds_show_existing_card_meta', 10, 1 );
|
|
|
|
/**
|
|
* Handles redirects to the Stripe settings page under certain conditions.
|
|
*
|
|
* @since 2.6.14
|
|
*/
|
|
function edds_stripe_connect_test_mode_toggle_redirect() {
|
|
|
|
// Check for our marker
|
|
if( ! isset( $_POST['edd-test-mode-toggled'] ) ) {
|
|
return;
|
|
}
|
|
|
|
if( ! current_user_can( 'manage_shop_settings' ) ) {
|
|
return;
|
|
}
|
|
|
|
if ( false === edds_is_gateway_active() ) {
|
|
return;
|
|
}
|
|
|
|
/**
|
|
* Filter the redirect that happens when options are saved and
|
|
* add query args to redirect to the Stripe settings page
|
|
* and to show a notice about connecting with Stripe.
|
|
*/
|
|
add_filter( 'wp_redirect', function( $location ) {
|
|
if( false !== strpos( $location, 'page=edd-settings' ) && false !== strpos( $location, 'settings-updated=true' ) ) {
|
|
$location = add_query_arg(
|
|
array(
|
|
'edd-message' => 'connect-to-stripe',
|
|
),
|
|
$location
|
|
);
|
|
}
|
|
return $location;
|
|
} );
|
|
|
|
}
|
|
add_action( 'admin_init', 'edds_stripe_connect_test_mode_toggle_redirect' );
|
|
|
|
/**
|
|
* Adds a "Refund Charge in Stripe" checkbox to the refund UI.
|
|
*
|
|
* @param \EDD\Orders\Order $order
|
|
*
|
|
* @since 2.8.7
|
|
*/
|
|
function edds_show_refund_checkbox( \EDD\Orders\Order $order ) {
|
|
if ( 'stripe' !== $order->gateway ) {
|
|
return;
|
|
}
|
|
?>
|
|
<div class="edd-form-group edd-stripe-refund-transaction">
|
|
<div class="edd-form-group__control">
|
|
<input type="checkbox" id="edd-stripe-refund" name="edd-stripe-refund" class="edd-form-group__input" value="1">
|
|
<label for="edd-stripe-refund" class="edd-form-group__label">
|
|
<?php esc_html_e( 'Refund Charge in Stripe', 'easy-digital-downloads' ); ?>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
<?php
|
|
}
|
|
add_action( 'edd_after_submit_refund_table', 'edds_show_refund_checkbox' );
|
|
|
|
/**
|
|
* Allows processing flags for the EDD Stripe settings.
|
|
*
|
|
* As we transition settings like the Card Elements, we need a way to be able to toggle
|
|
* these things back on for some people. Enabling debug mode, setting flags, and then disabling
|
|
* debug mode allows us to handle this.
|
|
*
|
|
* @since 2.9.4
|
|
*/
|
|
function edds_process_settings_flags() {
|
|
// If we're not on the settings page, bail.
|
|
if ( ! edd_is_admin_page( 'settings', 'gateways' ) ) {
|
|
return;
|
|
}
|
|
|
|
// If it isn't the Stripe section, bail.
|
|
if ( ! isset( $_GET['section'] ) || 'edd-stripe' !== $_GET['section'] ) {
|
|
return;
|
|
}
|
|
|
|
// Gather the flag we're trying to set.
|
|
$flag = isset( $_GET['flag'] ) ? $_GET['flag'] : false;
|
|
|
|
if ( false === $flag ) {
|
|
return;
|
|
}
|
|
|
|
if ( ! current_user_can( 'manage_shop_settings' ) ) {
|
|
return;
|
|
}
|
|
|
|
$nonce = isset( $_GET['_wpnonce'] ) ? $_GET['_wpnonce'] : false;
|
|
if ( empty( $nonce ) || ! wp_verify_nonce( $nonce, $flag ) ) {
|
|
return;
|
|
}
|
|
|
|
switch( $flag ) {
|
|
case 'disable-card-elements':
|
|
delete_option( '_edds_legacy_elements_enabled' );
|
|
break;
|
|
|
|
case 'enable-card-elements':
|
|
add_option( '_edds_legacy_elements_enabled', 1, false );
|
|
break;
|
|
}
|
|
|
|
// Redirect to the settings page.
|
|
wp_safe_redirect(
|
|
edd_get_admin_url(
|
|
array(
|
|
'page' => 'edd-settings',
|
|
'tab' => 'gateways',
|
|
'section' => 'edd-stripe',
|
|
)
|
|
)
|
|
);
|
|
|
|
exit;
|
|
}
|
|
add_action( 'admin_init', 'edds_process_settings_flags', 1 );
|