From 1a8ca4adb5dd844f7ec21a2501d1160186a1b783 Mon Sep 17 00:00:00 2001 From: Erick Hitter <ehitter@gmail.com> Date: Sat, 6 Jul 2013 14:29:36 -0400 Subject: [PATCH] Post-specific revisions changes cleanup * More inline documentation * Actually purges when requested * Better error handling Closes #1 --- js/post.js | 39 +++++++++++++++++------------ wp-revisions-control.php | 53 +++++++++++++++++++++++++++++++++++----- 2 files changed, 70 insertions(+), 22 deletions(-) diff --git a/js/post.js b/js/post.js index a7b8f38..a3f7128 100644 --- a/js/post.js +++ b/js/post.js @@ -10,7 +10,7 @@ $( purge_button ).on( 'click', click_handler_purge ); /** - * + * Click handler for purging a post's revisions */ function click_handler_purge() { post_id = parseInt( $( this ).data( 'postid' ) ); @@ -30,8 +30,8 @@ }, type: 'post', dataType: 'json', - success: ajax_request_success, - error: ajax_request_error + success: ajax_purge_request_success, + error: ajax_purge_request_error }); } else { $( purge_button ).text( button_text ); @@ -39,28 +39,35 @@ } /** - * + * User feedback when Ajax request succeeds + * Does not indicate that purge request successeded */ - function ajax_request_success( response ) { - console.log( 'Yippee' ); + function ajax_purge_request_success( response ) { + if ( response.error ) { + alert( response.error ); - var list_table = $( 'ul.post-revisions > li' ); + $( purge_button ).text( button_text ); + } else if ( response.success ) { + var list_table = $( 'ul.post-revisions > li' ); - $( list_table ).each( function() { - var autosave = $( this ).text().match( wp_revisions_control.autosave ); + $( list_table ).each( function() { + var autosave = $( this ).text().match( wp_revisions_control.autosave ); - if ( ! autosave ) - $( this ).slideUp( 'slow' ).remove(); - } ); + if ( ! autosave ) + $( this ).slideUp( 'slow' ).remove(); + } ); - $( purge_button ).fadeOut( 'slow' ).after( wp_revisions_control.nothing_text ); + $( purge_button ).fadeOut( 'slow' ).after( wp_revisions_control.nothing_text ); + } } /** - * + * Return a generic error when the Ajax request fails */ - function ajax_request_error() { - console.log( 'Sad panda' ); + function ajax_purge_request_error() { + alert( wp_revisions_control.error ); + + $( purge_button ).text( button_text ); } } ); } )( jQuery ); \ No newline at end of file diff --git a/wp-revisions-control.php b/wp-revisions-control.php index 66160b4..57c385d 100644 --- a/wp-revisions-control.php +++ b/wp-revisions-control.php @@ -239,15 +239,26 @@ class WP_Revisions_Control { * * @param string $post_type * @param object $post + * @uses post_type_supports + * @uses get_post_status + * @uses wp_get_post_revisions + * @uses remove_meta_box + * @uses add_meta_box + * @uses wp_enqueue_script + * @uses plugins_url + * @uses wp_localize_script + * @uses wpautop + * @uses add_action * @action add_meta_boxes * @return null */ public function action_add_meta_boxes( $post_type, $post ) { - remove_meta_box( 'revisionsdiv', null, 'normal' ); - if ( post_type_supports( $post_type, 'revisions' ) && 'auto-draft' != get_post_status() && count( wp_get_post_revisions( $post ) ) > 1 ) { + // Replace the metabox + remove_meta_box( 'revisionsdiv', null, 'normal' ); add_meta_box( 'revisionsdiv-wp-rev-ctl', __('Revisions'), array( $this, 'revisions_meta_box' ), null, 'normal', 'core' ); + // A bit of JS for us $handle = 'wp-revisions-control-post'; wp_enqueue_script( $handle, plugins_url( 'js/post.js', __FILE__ ), array( 'jquery' ), '20130706', true ); wp_localize_script( $handle, $this->settings_section, array( @@ -256,8 +267,12 @@ class WP_Revisions_Control { 'processing_text' => __( 'Processing…', 'wp_revisions_control' ), 'ays' => __( 'Are you sure?', 'wp_revisions_control' ), 'autosave' => __( 'Autosave' ), - 'nothing_text' => __( wpautop( 'There are no revisions to remove.' ), 'wp_revisions_control' ) + 'nothing_text' => __( wpautop( 'There are no revisions to remove.' ), 'wp_revisions_control' ), + 'error' => __( 'An error occurred. Please refresh the page and try again.', 'wp_revisions_control' ) ) ); + + // Add some styling to our metabox additions + add_action( 'admin_head', array( $this, 'action_admin_head' ), 999 ); } } @@ -265,6 +280,7 @@ class WP_Revisions_Control { * Render Revisions metabox with plugin's additions * * @uses post_revisions_meta_box + * @uses the_ID * @uses esc_attr * @uses wp_create_nonce * @uses this::get_post_revisions_to_keep @@ -319,9 +335,9 @@ class WP_Revisions_Control { $count = count( $revisions ); - // foreach ( $revisions as $revision ) { - // wp_delete_post_revision( $revision->ID ); - // } + foreach ( $revisions as $revision ) { + wp_delete_post_revision( $revision->ID ); + } $response['success'] = sprintf( __( 'Removed %s revisions associated with this post.', 'wp_revisions_control' ), number_format_i18n( $count, 0 ) ); $response['count'] = $count; @@ -351,6 +367,31 @@ class WP_Revisions_Control { } } + /** + * Add a border between the regular revisions list and this plugin's additions + * + * @uses esc_attr + * @action admin_head + * @return string + */ + public function action_admin_head() { + ?> + <style type="text/css"> + #revisionsdiv-wp-rev-ctl #<?php echo esc_attr( $this->settings_section ); ?> { + border-top: 1px solid #dfdfdf; + padding-top: 0; + margin-top: 20px; + } + + #revisionsdiv-wp-rev-ctl #<?php echo esc_attr( $this->settings_section ); ?> h4 { + border-top: 1px solid #fff; + padding-top: 1.33em; + margin-top: 0; + } + </style> + <?php + } + /** ** PLUGIN UTILITIES **/ -- GitLab