diff options
Diffstat (limited to 'plugins/jetpack/modules/contact-form/js/grunion-admin.js')
-rw-r--r-- | plugins/jetpack/modules/contact-form/js/grunion-admin.js | 124 |
1 files changed, 109 insertions, 15 deletions
diff --git a/plugins/jetpack/modules/contact-form/js/grunion-admin.js b/plugins/jetpack/modules/contact-form/js/grunion-admin.js index 100fb22b..571eed81 100644 --- a/plugins/jetpack/modules/contact-form/js/grunion-admin.js +++ b/plugins/jetpack/modules/contact-form/js/grunion-admin.js @@ -1,30 +1,124 @@ -/* global ajaxurl */ -jQuery( function( $ ) { - $( document ).on( 'click', '#jetpack-check-feedback-spam:not(.button-disabled)', function( e ) { +/* global ajaxurl jetpack_empty_spam_button_parameters */ +jQuery( function ( $ ) { + if ( typeof jetpack_empty_spam_button_parameters !== 'undefined' ) { + // Create the "Empty Spam" button and add it above and below the list of spam feedbacks. + var jetpack_empty_spam_feedbacks_button_container = $( '<div/>' ).addClass( + 'jetpack-empty-spam-container' + ); + + var jetpack_empty_spam_feedbacks_button = $( '<a />' ) + .addClass( 'button-secondary' ) + .addClass( 'jetpack-empty-spam' ) + .attr( 'href', '#' ) + .attr( 'data-progress-label', jetpack_empty_spam_button_parameters.progress_label ) + .attr( 'data-success-url', jetpack_empty_spam_button_parameters.success_url ) + .attr( 'data-failure-url', jetpack_empty_spam_button_parameters.failure_url ) + .attr( 'data-spam-feedbacks-count', jetpack_empty_spam_button_parameters.spam_count ) + .attr( 'data-nonce', jetpack_empty_spam_button_parameters.nonce ) + .text( jetpack_empty_spam_button_parameters.label ); + jetpack_empty_spam_feedbacks_button_container.append( jetpack_empty_spam_feedbacks_button ); + + var jetpack_empty_spam_feedbacks_spinner = $( '<span />' ).addClass( + 'jetpack-empty-spam-spinner' + ); + jetpack_empty_spam_feedbacks_button_container.append( jetpack_empty_spam_feedbacks_spinner ); + + // Add the button both above and below the list of spam feedbacks. + $( '.tablenav.top .actions, .tablenav.bottom .actions' ) + .not( '.bulkactions' ) + .append( jetpack_empty_spam_feedbacks_button_container ); + } + + $( document ).on( 'click', '#jetpack-check-feedback-spam:not(.button-disabled)', function ( e ) { e.preventDefault(); $( '#jetpack-check-feedback-spam:not(.button-disabled)' ).addClass( 'button-disabled' ); - $( '.jetpack-check-feedback-spam-spinner' ) - .addClass( 'spinner' ) - .show(); + $( '.jetpack-check-feedback-spam-spinner' ).addClass( 'spinner' ).show(); grunion_check_for_spam( 0, 100 ); } ); function grunion_check_for_spam( offset, limit ) { - $.post( - ajaxurl, - { - action: 'grunion_recheck_queue', - offset: offset, - limit: limit, - }, - function( result ) { + var nonceName = $( '#jetpack-check-feedback-spam' ).data( 'nonce-name' ); + var nonce = $( '#' + nonceName ).attr( 'value' ); + var failureUrl = $( '#jetpack-check-feedback-spam' ).data( 'failure-url' ); + + var requestOptions = { + action: 'grunion_recheck_queue', + offset: offset, + limit: limit, + }; + requestOptions[ nonceName ] = nonce; + + $.post( ajaxurl, requestOptions ) + .fail( function ( result ) { + // An error is only returned in the case of a missing nonce or invalid permissions, so we don't need the actual error message. + window.location.href = failureUrl; + return; + } ) + .done( function ( result ) { if ( result.processed < limit ) { window.location.reload(); } else { grunion_check_for_spam( offset + limit, limit ); } - } + } ); + } + + var initial_spam_count = 0; + var deleted_spam_count = 0; + + $( document ).on( 'click', '.jetpack-empty-spam', function ( e ) { + e.preventDefault(); + + if ( $( this ).hasClass( 'button-disabled' ) ) { + // An Emptying process is already underway or the button is otherwise disabled. + return; + } + + $( '.jetpack-empty-spam' ).addClass( 'button-disabled' ).addClass( 'emptying' ); + $( '.jetpack-empty-spam-spinner' ).addClass( 'spinner' ).addClass( 'is-active' ); + + // Update the label on the "Empty Spam" button to use the active "Emptying Spam" language. + $( '.jetpack-empty-spam' ).text( + $( '.jetpack-empty-spam' ).data( 'progress-label' ).replace( '%1$s', '0' ) + ); + + initial_spam_count = parseInt( $( this ).data( 'spam-feedbacks-count' ), 10 ); + + grunion_delete_spam(); + } ); + + function grunion_delete_spam() { + var empty_spam_buttons = $( '.jetpack-empty-spam' ); + + var nonce = empty_spam_buttons.data( 'nonce' ); + + // We show the percentage complete down to one decimal point so even with 100k + // spam feedbacks, it will show some progress pretty quickly. + var percentage_complete = Math.round( ( deleted_spam_count / initial_spam_count ) * 1000 ) / 10; + + // Update the progress counter on the "Check for Spam" button. + empty_spam_buttons.text( + empty_spam_buttons.data( 'progress-label' ).replace( '%1$s', percentage_complete ) ); + + $.post( ajaxurl, { + action: 'jetpack_delete_spam_feedbacks', + nonce: nonce, + } ) + .fail( function ( result ) { + // An error is only returned in the case of a missing nonce or invalid permissions, so we don't need the actual error message. + window.location.href = empty_spam_buttons.data( 'failure-url' ); + return; + } ) + .done( function ( result ) { + deleted_spam_count += result.data.counts.deleted; + + if ( result.data.counts.deleted < result.data.counts.limit ) { + window.location.href = empty_spam_buttons.data( 'success-url' ); + } else { + grunion_delete_spam(); + } + } ); } } ); |