WordPress.org

Make WordPress Core

Ticket #12432: 12432.diff

File 12432.diff, 7.5 KB (added by garyc40, 7 years ago)

refreshed and reworked

  • wp-admin/admin-ajax.php

    diff --git wp-admin/admin-ajax.php wp-admin/admin-ajax.php
    index d2a8d4d..e3caf71 100644
    if ( ! is_user_logged_in() ) { 
    5050
    5151if ( isset( $_GET['action'] ) ) :
    5252switch ( $action = $_GET['action'] ) :
     53case 'recent-comments-refill' :
     54        check_ajax_referer( 'recent-comments-refill' );
     55
     56        // comment river for Dashboard Recent Comment
     57        require_once( ABSPATH . 'wp-admin/includes/dashboard.php' );
     58
     59        ob_start();
     60        wp_dashboard_recent_comments( true );
     61        $rows = ob_get_clean();
     62
     63        $response = array( 'rows' => $rows );
     64        die( json_encode( $response ) );
     65        exit;
    5366case 'fetch-list' :
    5467
    5568        $list_class = $_GET['list_args']['class'];
    case 'fetch-list' : 
    6679        $wp_list_table = _get_list_table( $list_class );
    6780        if ( ! $wp_list_table )
    6881                die( '0' );
    69 
     82               
    7083        if ( ! $wp_list_table->ajax_user_can() )
    7184                die( '-1' );
    7285
  • wp-admin/includes/dashboard.php

    diff --git wp-admin/includes/dashboard.php wp-admin/includes/dashboard.php
    index 8f937f3..456d3e6 100644
    function wp_dashboard_recent_drafts( $drafts = false ) { 
    593593 *
    594594 * @since 2.5.0
    595595 */
    596 function wp_dashboard_recent_comments() {
     596function wp_dashboard_recent_comments( $refill = false ) {
    597597        global $wpdb;
    598598
    599599        if ( current_user_can('edit_posts') )
    function wp_dashboard_recent_comments() { 
    604604        // Select all comment types and filter out spam later for better query performance.
    605605        $comments = array();
    606606        $start = 0;
    607 
    608607        $widgets = get_option( 'dashboard_widget_options' );
    609         $total_items = isset( $widgets['dashboard_recent_comments'] ) && isset( $widgets['dashboard_recent_comments']['items'] )
     608        $comments_shown = isset( $widgets['dashboard_recent_comments'] ) && isset( $widgets['dashboard_recent_comments']['items'] )
    610609                ? absint( $widgets['dashboard_recent_comments']['items'] ) : 5;
     610       
     611        if ( $refill ) {
     612                $total_items = 1; // only needs to fetch 1 to refill the river
     613                $offset = $comments_shown + 2; // comments being shown plus 3 in the extra list minus 1 just deleted / spammed
     614        } else {
     615                $total_items = $comments_shown + 3; // extra items for the river
     616        }
    611617
    612         while ( count( $comments ) < 5 && $possible = $wpdb->get_results( "SELECT * FROM $wpdb->comments c LEFT JOIN $wpdb->posts p ON c.comment_post_ID = p.ID WHERE p.post_status != 'trash' ORDER BY c.comment_date_gmt DESC LIMIT $start, 50" ) ) {
     618        while ( count( $comments ) < $total_items && $possible = $wpdb->get_results( "SELECT * FROM $wpdb->comments c LEFT JOIN $wpdb->posts p ON c.comment_post_ID = p.ID WHERE p.post_status != 'trash' ORDER BY c.comment_date_gmt DESC LIMIT $start, 50" ) ) {
    613619
    614620                foreach ( $possible as $comment ) {
    615621                        if ( count( $comments ) >= $total_items )
    616622                                break;
    617                         if ( in_array( $comment->comment_approved, $allowed_states ) && current_user_can( 'read_post', $comment->comment_post_ID ) )
     623                        if ( in_array( $comment->comment_approved, $allowed_states ) && current_user_can( 'read_post', $comment->comment_post_ID ) ) {
     624                                // skip if we're refilling, and this comment is already shown
     625                                if ( $refill && $offset > 0 ) {
     626                                        $offset --;
     627                                        continue;
     628                                }
     629                               
    618630                                $comments[] = $comment;
     631                        }
    619632                }
    620633
    621634                $start = $start + 50;
    622635        }
    623636
    624637        if ( $comments ) :
     638                if ( $refill ) :
     639                        _wp_dashboard_recent_comments_row( $comments[0] );
     640                else : // $refill
    625641?>
    626 
    627                 <div id="the-comment-list" class="list:comment">
     642                        <div id="the-comment-list" class="list:comment">
    628643<?php
    629                 foreach ( $comments as $comment )
    630                         _wp_dashboard_recent_comments_row( $comment );
     644                        $i = 0;
     645                        while ( $i < $comments_shown && $i < count( $comments ) ) {
     646                                _wp_dashboard_recent_comments_row( $comments[$i] );
     647                                $i++;
     648                        }
    631649?>
    632650
    633                 </div>
     651                        </div>
     652               
     653                        <div id="the-extra-comment-list" class="list:comment" style="display:none">
     654                                <?php
     655                                        while ( $i < $total_items && $i < count( $comments ) ) {
     656                                                _wp_dashboard_recent_comments_row( $comments[$i] );
     657                                                $i++;
     658                                        }
     659                                ?>
     660                        </div>
    634661
    635662<?php
    636                 if ( current_user_can('edit_posts') ) { ?>
    637                         <p class="textright"><a href="edit-comments.php" class="button"><?php _e('View all'); ?></a></p>
     663                        if ( current_user_can('edit_posts') ) { ?>
     664                                <p class="textright"><a href="edit-comments.php" class="button"><?php _e('View all'); ?></a></p>
    638665<?php   }
    639666
    640                 wp_comment_reply( -1, false, 'dashboard', false );
    641                 wp_comment_trashnotice();
    642 
    643         else :
     667                        wp_comment_reply( -1, false, 'dashboard', false );
     668                        wp_comment_trashnotice();
     669                endif; // $refill
     670        else :// $comments
     671                if ( $refill )
     672                        return FALSE;
    644673?>
    645 
    646         <p><?php _e( 'No comments yet.' ); ?></p>
    647 
     674                <p><?php _e( 'No comments yet.' ); ?></p>
    648675<?php
    649676        endif; // $comments;
    650677}
  • wp-admin/index.php

    diff --git wp-admin/index.php wp-admin/index.php
    index 748141e..ac3149a 100644
    require_once(ABSPATH . 'wp-admin/includes/dashboard.php'); 
    1515wp_dashboard_setup();
    1616
    1717wp_enqueue_script( 'dashboard' );
     18wp_localize_script( 'dashboard', 'recentCommentsWidget', array( 'nonce' => wp_create_nonce( 'recent-comments-refill' ) ) );
    1819wp_enqueue_script( 'plugin-install' );
    1920wp_enqueue_script( 'media-upload' );
    2021wp_admin_css( 'dashboard' );
  • wp-admin/js/edit-comments.dev.js

    diff --git wp-admin/js/edit-comments.dev.js wp-admin/js/edit-comments.dev.js
    index fbadeba..e178048 100644
    setCommentsList = function() { 
    217217
    218218        var refillTheExtraList = function(ev) {
    219219                // var args = $.query.get(), total_pages = listTable.get_total_pages(), per_page = $('input[name=_per_page]', '#comments-form').val(), r;
    220                 var args = $.query.get(), total_pages = $('.total-pages').text(), per_page = $('input[name=_per_page]', '#comments-form').val(), r;
    221                
    222                 if (! args.paged)
    223                         args.paged = 1;
    224                
    225                 if (args.paged > total_pages) {
    226                         return;
    227                 }
     220                var args, total_pages = $('.total-pages').text(), per_page = $('input[name=_per_page]', '#comments-form').val(), r;
    228221
    229                 if (ev) {
    230                         theExtraList.empty();
    231                         args.number = Math.min(8, per_page); // see WP_Comments_List_Table::prepare_items() @ class-wp-comments-list-table.php
     222                if (pagenow == 'dashboard') {
     223                        args = {
     224                                action : 'recent-comments-refill',
     225                                _ajax_nonce : recentCommentsWidget.nonce
     226                        };
    232227                } else {
    233                         args.number = 1;
    234                         args.offset = Math.min(8, per_page) - 1; // fetch only the next item on the extra list
     228                        args = $.query.get();
     229                        if (! args.paged)
     230                                args.paged = 1;
     231                               
     232                        if (total_pages && args.paged > total_pages)
     233                                return;
     234                               
     235                        if (ev) {
     236                                theExtraList.empty();
     237                                args.number = Math.min(8, per_page); // see WP_Comments_List_Table::prepare_items() @ class-wp-comments-list-table.php
     238                        } else {
     239                                args.number = 1;
     240                                args.offset = Math.min(8, per_page) - 1; // fetch only the next item on the extra list
     241                        }
     242                       
     243                        args.paged ++;
     244                        args.no_placeholder = true;
     245                       
     246                        // $.query.get() needs some correction to be sent into an ajax request
     247                        if ( true === args.comment_type )
     248                                args.comment_type = '';
     249
     250                        args = $.extend(args, {
     251                                'action': 'fetch-list',
     252                                'list_args': list_args,
     253                                '_ajax_fetch_list_nonce': $('#_ajax_fetch_list_nonce').val()
     254                        });
    235255                }
    236256
    237                 args.no_placeholder = true;
    238 
    239                 args.paged ++;
    240 
    241                 // $.query.get() needs some correction to be sent into an ajax request
    242                 if ( true === args.comment_type )
    243                         args.comment_type = '';
    244 
    245                 args = $.extend(args, {
    246                         'action': 'fetch-list',
    247                         'list_args': list_args,
    248                         '_ajax_fetch_list_nonce': $('#_ajax_fetch_list_nonce').val()
    249                 });
    250 
    251257                $.ajax({
    252258                        url: ajaxurl,
    253259                        global: false,