WordPress.org

Make WordPress Core

Ticket #12432: 12432.diff

File 12432.diff, 7.5 KB (added by garyc40, 4 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,