Make WordPress Core

Ticket #11200: 11200.4.diff

File 11200.4.diff, 10.8 KB (added by wonderboymusic, 9 years ago)
  • src/wp-admin/includes/ajax-actions.php

     
    347347        $url      = isset( $_POST['_url'] )      ? esc_url_raw( $_POST['_url'] ) : '';
    348348
    349349        // JS didn't send us everything we need to know. Just die with success message
    350         if ( !$total || !$per_page || !$page || !$url )
    351                 wp_die( time() );
     350        if ( !$total || !$per_page || !$page || !$url ) {
     351                $time = time();
     352                $comment = get_comment( $comment_id );
    352353
     354                $x = new WP_Ajax_Response( array(
     355                        'what' => 'comment',
     356                        // Here for completeness - not used.
     357                        'id' => $comment_id,
     358                        'supplemental' => array(
     359                                'status' => $comment ? $comment->comment_approved : '',
     360                                'time' => $time
     361                        )
     362                ) );
     363                $x->send();
     364        }
     365
    353366        $total += $delta;
    354367        if ( $total < 0 )
    355368                $total = 0;
     
    377390
    378391        // The time since the last comment count.
    379392        $time = time();
     393        $comment = get_comment( $comment_id );
    380394
    381395        $x = new WP_Ajax_Response( array(
    382396                'what' => 'comment',
     
    383397                // Here for completeness - not used.
    384398                'id' => $comment_id,
    385399                'supplemental' => array(
     400                        'status' => $comment ? $comment->comment_approved : '',
    386401                        'total_items_i18n' => sprintf( _n( '%s item', '%s items', $total ), number_format_i18n( $total ) ),
    387402                        'total_pages' => ceil( $total / $per_page ),
    388403                        'total_pages_i18n' => number_format_i18n( ceil( $total / $per_page ) ),
  • src/wp-admin/includes/class-wp-comments-list-table.php

     
    198198                $stati = array(
    199199                                'all' => _nx_noop('All', 'All', 'comments'), // singular not used
    200200                                'moderated' => _n_noop('Pending <span class="count">(<span class="pending-count">%s</span>)</span>', 'Pending <span class="count">(<span class="pending-count">%s</span>)</span>'),
    201                                 'approved' => _n_noop('Approved', 'Approved'), // singular not used
     201                                'approved' => _n_noop('Approved <span class="count">(<span class="approved-count">%s</span>)</span>', 'Approved <span class="count">(<span class="approved-count">%s</span>)</span>'),
    202202                                'spam' => _n_noop('Spam <span class="count">(<span class="spam-count">%s</span>)</span>', 'Spam <span class="count">(<span class="spam-count">%s</span>)</span>'),
    203203                                'trash' => _n_noop('Trash <span class="count">(<span class="trash-count">%s</span>)</span>', 'Trash <span class="count">(<span class="trash-count">%s</span>)</span>')
    204204                        );
  • src/wp-admin/js/edit-comments.js

     
    1212        perPageInput = $('input[name="_per_page"]', '#comments-form');
    1313        pageInput = $('input[name="_page"]', '#comments-form');
    1414
     15        // this fires when viewing "All"
    1516        dimAfter = function( r, settings ) {
    1617                var editRow, replyID, replyButton,
    1718                        c = $( '#' + settings.element );
     
    3435
    3536                diff = $('#' + settings.element).is('.' + settings.dimClass) ? 1 : -1;
    3637                updatePending( diff );
     38                updateCountText( 'span.approved-count', -1 * diff );
    3739        };
    3840
    3941        // Send current total, page, per_page and url
     
    137139                });
    138140        };
    139141
     142        updateCountText = function( selector, diff ) {
     143                $( selector ).each(function() {
     144                        var a = $(this), n = getCount(a) + diff;
     145                        if ( n < 1 ) {
     146                                n = 0;
     147                        }
     148                        updateCount( a, n );
     149                });
     150        };
     151
    140152        // In admin-ajax.php, we send back the unix time stamp instead of 1 on success
    141153        delAfter = function( r, settings ) {
    142                 var total_items_i18n, total, spam, trash, pending,
    143                         untrash = $(settings.target).parent().is('span.untrash'),
    144                         unspam = $(settings.target).parent().is('span.unspam'),
    145                         unapproved = $('#' + settings.element).is('.unapproved');
     154                var total_items_i18n, total,
     155                        response = true === settings.parsed ? {} : settings.parsed.responses[0],
     156                        commentStatus = true === settings.parsed ? '' : response.supplemental.status,
    146157
    147                 function getUpdate(s) {
    148                         if ( $(settings.target).parent().is('span.' + s) )
    149                                 return 1;
    150                         else if ( $('#' + settings.element).is('.' + s) )
    151                                 return -1;
     158                        targetParent = $( settings.target ).parent(),
     159                        commentRow = $('#' + settings.element),
    152160
    153                         return 0;
    154                 }
     161                        spamDiff, trashDiff, pendingDiff, approvedDiff,
    155162
    156                 if ( untrash )
    157                         trash = -1;
    158                 else
    159                         trash = getUpdate('trash');
     163                        approved = commentRow.hasClass( 'approved' ),
     164                        unapproved = commentRow.hasClass( 'unapproved' ),
     165                        spammed = commentRow.hasClass( 'spam' ),
     166                        trashed = commentRow.hasClass( 'trash' );
    160167
    161                 if ( unspam )
    162                         spam = -1;
    163                 else
    164                         spam = getUpdate('spam');
     168                // the order of these checks is important
     169                // .unspam can also have .approve or .unapprove
     170                // .untrash can also have .approve or .unapprove
    165171
    166                 if ( $(settings.target).parent().is('span.unapprove') || ( ( untrash || unspam ) && unapproved ) ) {
    167                         // a comment was 'deleted' from another list (e.g. approved, spam, trash) and moved to pending,
    168                         // or a trash/spam of a pending comment was undone
    169                         pending = 1;
    170                 } else if ( unapproved ) {
    171                         // a pending comment was trashed/spammed/approved
    172                         pending = -1;
     172                if ( targetParent.is( 'span.undo' ) ) {
     173                        // the comment was spammed
     174                        if ( targetParent.hasClass( 'unspam' ) ) {
     175                                spamDiff = -1;
     176
     177                                if ( 'trash' === commentStatus ) {
     178                                        trashDiff = 1;
     179                                } else if ( '1' === commentStatus ) {
     180                                        approvedDiff = 1;
     181                                } else if ( '0' === commentStatus ) {
     182                                        pendingDiff = 1;
     183                                }
     184
     185                        // the comment was trashed
     186                        } else if ( targetParent.hasClass( 'untrash' ) ) {
     187                                trashDiff = -1;
     188
     189                                if ( 'spam' === commentStatus ) {
     190                                        spamDiff = 1;
     191                                } else if ( '1' === commentStatus ) {
     192                                        approvedDiff = 1;
     193                                } else if ( '0' === commentStatus ) {
     194                                        pendingDiff = 1;
     195                                }
     196                        }
     197
     198                // user clicked "Spam"
     199                } else if ( targetParent.is( 'span.spam' ) ) {
     200                        // the comment is currently approved
     201                        if ( approved ) {
     202                                approvedDiff = -1;
     203                        // the comment is currently pending
     204                        } else if ( unapproved ) {
     205                                pendingDiff = -1;
     206                        // the comment was in the trash
     207                        } else if ( trashed ) {
     208                                trashDiff = -1;
     209                        }
     210                        // you can't spam an item on the spam screen
     211                        spamDiff = 1;
     212
     213                // user clicked "Unspam"
     214                } else if ( targetParent.is( 'span.unspam' ) ) {
     215                        if ( approved ) {
     216                                pendingDiff = 1;
     217                        } else if ( unapproved ) {
     218                                approvedDiff = 1;
     219                        } else if ( trashed ) {
     220                                // the comment was previously approved
     221                                if ( targetParent.hasClass( 'approve' ) ) {
     222                                        approvedDiff = 1;
     223                                // the comment was previously pending
     224                                } else if ( targetParent.hasClass( 'unapprove' ) ) {
     225                                        pendingDiff = 1;
     226                                }
     227                        } else if ( spammed ) {
     228                                if ( targetParent.hasClass( 'approve' ) ) {
     229                                        approvedDiff = 1;
     230
     231                                } else if ( targetParent.hasClass( 'unapprove' ) ) {
     232                                        pendingDiff = 1;
     233                                }
     234                        }
     235                        // you can Unspam an item on the spam screen
     236                        spamDiff = -1;
     237
     238                // user clicked "Trash"
     239                } else if ( targetParent.is( 'span.trash' ) ) {
     240                        if ( approved ) {
     241                                approvedDiff = -1;
     242                        } else if ( unapproved ) {
     243                                pendingDiff = -1;
     244                        // the comment was in the spam queue
     245                        } else if ( spammed ) {
     246                                spamDiff = -1;
     247                        }
     248                        // you can't trash an item on the trash screen
     249                        trashDiff = 1;
     250
     251                // user clicked "Restore"
     252                } else if ( targetParent.is( 'span.untrash' ) ) {
     253                        if ( approved ) {
     254                                pendingDiff = 1;
     255                        } else if ( unapproved ) {
     256                                approvedDiff = 1;
     257                        } else if ( trashed ) {
     258                                if ( targetParent.hasClass( 'approve' ) ) {
     259                                        approvedDiff = 1;
     260                                } else if ( targetParent.hasClass( 'unapprove' ) ) {
     261                                        pendingDiff = 1;
     262                                }
     263                        }
     264                        // you can't go from trash to spam
     265                        // you can untrash on the trash screen
     266                        trashDiff = -1;
     267
     268                // User clicked "Approve"
     269                } else if ( targetParent.is( 'span.approve:not(.unspam):not(.untrash)' ) ) {
     270                        approvedDiff = 1;
     271                        pendingDiff = -1;
     272
     273                // User clicked "Unapprove"
     274                } else if ( targetParent.is( 'span.unapprove:not(.unspam):not(.untrash)' ) ) {
     275                        approvedDiff = -1;
     276                        pendingDiff = 1;
     277
     278                // User clicked "Delete Permanently"
     279                } else if ( targetParent.is( 'span.delete' ) ) {
     280                        if ( spammed ) {
     281                                spamDiff = -1;
     282                        } else if ( trashed ) {
     283                                trashDiff = -1;
     284                        }
    173285                }
    174286
    175                 if ( pending )
    176                         updatePending(pending);
     287                if ( pendingDiff ) {
     288                        updatePending( pendingDiff );
     289                }
    177290
    178                 $('span.spam-count').each( function() {
    179                         var a = $(this), n = getCount(a) + spam;
    180                         updateCount(a, n);
    181                 });
     291                if ( approvedDiff ) {
     292                        updateCountText( 'span.approved-count', approvedDiff );
     293                }
    182294
    183                 $('span.trash-count').each( function() {
    184                         var a = $(this), n = getCount(a) + trash;
    185                         updateCount(a, n);
    186                 });
     295                if ( spamDiff ) {
     296                        updateCountText( 'span.spam-count', spamDiff );
     297                }
    187298
     299                if ( trashDiff ) {
     300                        updateCountText( 'span.trash-count', trashDiff );
     301                }
     302
    188303                if ( ! $('#dashboard_right_now').length ) {
    189304                        total = totalInput.val() ? parseInt( totalInput.val(), 10 ) : 0;
    190305                        if ( $(settings.target).parent().is('span.undo') )
     
    195310                        if ( total < 0 )
    196311                                total = 0;
    197312
    198                         if ( ( 'object' == typeof r ) && lastConfidentTime < settings.parsed.responses[0].supplemental.time ) {
    199                                 total_items_i18n = settings.parsed.responses[0].supplemental.total_items_i18n || '';
    200                                 if ( total_items_i18n ) {
    201                                         $('.displaying-num').text( total_items_i18n );
    202                                         $('.total-pages').text( settings.parsed.responses[0].supplemental.total_pages_i18n );
    203                                         $('.tablenav-pages').find('.next-page, .last-page').toggleClass('disabled', settings.parsed.responses[0].supplemental.total_pages == $('.current-page').val());
     313                        if ( 'object' === typeof r ) {
     314                                if ( response.supplemental.total_items_i18n && lastConfidentTime < response.supplemental.time ) {
     315                                        total_items_i18n = response.supplemental.total_items_i18n || '';
     316                                        if ( total_items_i18n ) {
     317                                                $('.displaying-num').text( total_items_i18n );
     318                                                $('.total-pages').text( response.supplemental.total_pages_i18n );
     319                                                $('.tablenav-pages').find('.next-page, .last-page').toggleClass('disabled', response.supplemental.total_pages == $('.current-page').val());
     320                                        }
     321                                        updateTotalCount( total, response.supplemental.time, true );
     322                                } else if ( response.supplemental.time ) {
     323                                        updateTotalCount( total, response.supplemental.time, false );
    204324                                }
    205                                 updateTotalCount( total, settings.parsed.responses[0].supplemental.time, true );
    206325                        } else {
    207326                                updateTotalCount( total, r, false );
    208327                        }
    209328                }
    210329
    211                 if ( ! theExtraList || theExtraList.size() === 0 || theExtraList.children().size() === 0 || untrash || unspam ) {
     330                if ( ! theExtraList || theExtraList.size() === 0 || theExtraList.children().size() === 0 ) {
    212331                        return;
    213332                }
    214333