Use JS + AJAX to resend the confirmation email

This commit is contained in:
Kelly Dwan 2019-11-12 16:17:29 -05:00
parent 7dbc725581
commit d5c740ae84
No known key found for this signature in database
GPG key ID: 8BA5575F3D11575D
5 changed files with 88 additions and 11 deletions

View file

@ -0,0 +1,28 @@
/* global ajaxurl, FiveForTheFuture_ManageNonce, jQuery */
/* eslint no-alert: "off" */
jQuery( document ).ready( function( $ ) {
function sendAjaxRequest( data, callback ) {
$.ajax( {
type: 'POST',
url: ajaxurl,
data: {
action: 'manage_contributors',
pledge_id: data.pledgePost || 0,
contributor_id: data.contributorPost || 0,
manage_action: data.action || '',
_ajax_nonce: FiveForTheFuture_ManageNonce,
},
success: callback,
dataType: 'json',
} );
}
$( '.contributor-list [data-action="resend-contributor-confirmation"]' ).click( function( event ) {
event.preventDefault();
sendAjaxRequest( event.currentTarget.dataset, function( response ) {
if ( response.message ) {
alert( response.message );
}
} );
} );
} );

View file

@ -0,0 +1,35 @@
<?php
/**
* Handle submissions to admin-ajax.php.
*/
namespace WordPressDotOrg\FiveForTheFuture\Endpoints;
use WordPressDotOrg\FiveForTheFuture\{ Contributor, PledgeForm };
add_action( 'wp_ajax_manage_contributors', __NAMESPACE__ . '\handler' );
/**
* Handle the AJAX request.
*/
function handler() {
check_ajax_referer( 'manage-pledge', '_ajax_nonce' );
$action = filter_input( INPUT_POST, 'manage_action' );
$pledge_id = filter_input( INPUT_POST, 'pledge_id', FILTER_VALIDATE_INT );
$contributor_id = filter_input( INPUT_POST, 'contributor_id', FILTER_VALIDATE_INT );
switch ( $action ) {
case 'resend-contributor-confirmation':
$contribution = get_post( $contributor_id );
PledgeForm\send_contributor_confirmation_emails( $pledge_id, $contributor_id );
wp_die( wp_json_encode( [
'success' => true,
'message' => sprintf( __( 'Confirmation email sent to %s.', 'wporg-5ftf' ), $contribution->post_title ),
] ) );
break;
}
// No matching action, we can just exit.
wp_die();
}

View file

@ -279,13 +279,6 @@ function save_pledge( $pledge_id, $pledge ) {
get_page_by_path( 'for-organizations' )->ID
);
}
if ( filter_input( INPUT_POST, 'resend-contributor-confirmation' ) ) {
Email\send_contributor_confirmation_emails(
$pledge_id,
filter_input( INPUT_GET, 'resend-contributor-id', FILTER_VALIDATE_INT )
);
}
}
/**
@ -485,8 +478,13 @@ function enqueue_assets() {
$ver = filemtime( FiveForTheFuture\PATH . '/assets/css/admin.css' );
wp_register_style( '5ftf-admin', plugins_url( 'assets/css/admin.css', __DIR__ ), [], $ver );
$ver = filemtime( FiveForTheFuture\PATH . '/assets/js/admin.js' );
wp_register_script( '5ftf-admin', plugins_url( 'assets/js/admin.js', __DIR__ ), [ 'jquery' ], $ver );
wp_localize_script( '5ftf-admin', 'FiveForTheFuture_ManageNonce', wp_create_nonce( 'manage-pledge' ) );
$current_page = get_current_screen();
if ( Pledge\CPT_ID === $current_page->id ) {
wp_enqueue_style( '5ftf-admin' );
wp_enqueue_script( '5ftf-admin' );
}
}

View file

@ -32,6 +32,7 @@ function load() {
require_once get_includes_path() . 'pledge-meta.php';
require_once get_includes_path() . 'pledge-form.php';
require_once get_includes_path() . 'xprofile.php';
require_once get_includes_path() . 'endpoints.php';
require_once get_includes_path() . 'miscellaneous.php';
// The logger expects things like `$_POST` which aren't set during unit tests.

View file

@ -25,18 +25,33 @@ namespace WordPressDotOrg\FiveForTheFuture\View;
<ul class="contributor-list <?php echo esc_attr( $contributor_status ); ?>">
<?php foreach ( $group as $contributor_post ) :
$contributor = get_user_by( 'login', $contributor_post->post_title );
$name = $contributor_post->post_title;
$contributor = get_user_by( 'login', $name );
$remove_confirm = sprintf( __( 'Remove %s from this pledge?', 'wporg-5ftf' ), $name );
$remove_label = sprintf( __( 'Remove %s', 'wporg' ), $name );
?>
<li>
<button class="button-link button-link-delete" data-action="remove-contributor" data-contributor-post="<?php echo esc_attr( $contributor_post->ID ); ?>" aria-label="<?php esc_html_e( 'Remove', 'wporg' ); ?>">
<button
class="button-link button-link-delete"
data-action="remove-contributor"
data-pledge-post="<?php the_ID(); ?>"
data-contributor-post="<?php echo esc_attr( $contributor_post->ID ); ?>"
data-confirm="<?php echo esc_attr( $remove_confirm ); ?>"
aria-label="<?php echo esc_attr( $remove_label ); ?>"
>
<span class="dashicons dashicons-no-alt" aria-hidden="true"></span>
</button>
<?php echo get_avatar( $contributor->user_email, 32 ); ?>
<span class="contributor-list__name">
<?php echo esc_html( $contributor_post->post_title ); ?>
<?php echo esc_html( $name ); ?>
</span>
<?php if ( 'pending' === $contributor_post->post_status ) : ?>
<button class="button" data-action="resend-contributor-confirmation" data-contributor-post="<?php echo esc_attr( $contributor_post->ID ); ?>">
<button
class="button"
data-action="resend-contributor-confirmation"
data-pledge-post="<?php the_ID(); ?>"
data-contributor-post="<?php echo esc_attr( $contributor_post->ID ); ?>"
>
<?php esc_html_e( 'Resend Confirmation', 'wporg' ); ?>
</button>
<?php endif; ?>