WordPress.org

Make WordPress Core

Ticket #15527: garyc40-15527.patch

File garyc40-15527.patch, 12.9 KB (added by garyc40, 7 years ago)

there's a patch for that

  • wp-admin/admin-ajax.php

    diff --git wp-admin/admin-ajax.php wp-admin/admin-ajax.php
    index 5eb33e1..4319950 100644
    function _wp_ajax_add_hierarchical_term() { 
    317317        $x->send();
    318318}
    319319
     320function _wp_add_comment( $action ) {
     321        global $wpdb;
     322       
     323        check_ajax_referer( 'replyto-comment', '_ajax_nonce-replyto-comment' );
     324
     325        set_current_screen( 'edit-comments' );
     326
     327        $comment_post_ID = (int) $_POST['comment_post_ID'];
     328        if ( !current_user_can( 'edit_post', $comment_post_ID ) )
     329                die('-1');
     330
     331        $error_messages = array(
     332                'replyto-comment' => array(
     333                        'invalid_status' => __('Error: you are replying to a comment on a draft post.'),
     334                        'must_log_in' => __('Sorry, you must be logged in to reply to a comment.'),
     335                        'type_something' => __('Error: please type a comment.'),
     336                ),
     337                'add-comment' => array(
     338                        'invalid_status' => __('Error: you are adding comment on a draft post.'),
     339                        'must_log_in' => __('Sorry, you must be logged in to add a comment.'),
     340                        'type_something' => __('Error: please type a comment.'),
     341                ),
     342        );
     343
     344        $status = get_post_status( $comment_post_ID );
     345
     346        if ( empty($status) )
     347                die('1');
     348        elseif ( in_array($status, array('draft', 'pending', 'trash') ) )
     349                die( $error_messages[$action]['invalid_status'] );
     350
     351        $user = wp_get_current_user();
     352        if ( ! $user->ID ) {
     353                die( $error_messages[$action]['must_log_in'] );
     354        }
     355       
     356        $comment_content      = trim($_POST['content']);
     357       
     358        if ( '' == $comment_content )
     359                die( $error_messages[$action]['type_something'] );
     360       
     361        $comment_author       = $wpdb->escape($user->display_name);
     362        $comment_author_email = $wpdb->escape($user->user_email);
     363        $comment_author_url   = $wpdb->escape($user->user_url);
     364        $comment_type         = '';
     365       
     366        if ( current_user_can('unfiltered_html') ) {
     367                if ( wp_create_nonce('unfiltered-html-comment_' . $comment_post_ID) != $_POST['_wp_unfiltered_html_comment'] ) {
     368                        kses_remove_filters(); // start with a clean slate
     369                        kses_init_filters(); // set up the filters
     370                }
     371        }
     372
     373        $comment_parent = ( $action == 'replyto-comment' ) ? absint($_POST['comment_ID']) : 0;
     374        $commentdata = compact('comment_post_ID', 'comment_author', 'comment_author_email', 'comment_author_url', 'comment_content', 'comment_type', 'comment_parent', 'user_ID');
     375
     376        $comment_id = wp_new_comment( $commentdata );
     377        $comment = get_comment($comment_id);
     378        if ( ! $comment ) die('1');
     379
     380        $position = ( isset($_POST['position']) && (int) $_POST['position']) ? (int) $_POST['position'] : '-1';
     381
     382        $x = new WP_Ajax_Response();
     383
     384        ob_start();
     385                if ( 'dashboard' == $_REQUEST['mode'] ) {
     386                        require_once( ABSPATH . 'wp-admin/includes/dashboard.php' );
     387                        _wp_dashboard_recent_comments_row( $comment );
     388                } else {
     389                        if ( 'single' == $_REQUEST['mode'] ) {
     390                                $wp_list_table = get_list_table('WP_Post_Comments_List_Table');
     391                        } else {                               
     392                                $wp_list_table = get_list_table('WP_Comments_List_Table');
     393                        }
     394                        $wp_list_table->single_row( $comment );
     395                }
     396                $comment_list_item = ob_get_contents();
     397        ob_end_clean();
     398
     399        $x->add( array(
     400                'what' => 'comment',
     401                'id' => $comment->comment_ID,
     402                'data' => $comment_list_item,
     403                'position' => $position
     404        ));
     405
     406        $x->send();
     407        break;
     408}
     409
    320410$id = isset($_POST['id'])? (int) $_POST['id'] : 0;
    321411switch ( $action = $_POST['action'] ) :
    322412case 'delete-comment' : // On success, die with time() instead of 1
    case 'get-comments' : 
    620710        ) );
    621711        $x->send();
    622712        break;
    623 case 'replyto-comment' :
    624         check_ajax_referer( $action, '_ajax_nonce-replyto-comment' );
    625 
    626         set_current_screen( 'edit-comments' );
    627 
    628         $comment_post_ID = (int) $_POST['comment_post_ID'];
    629         if ( !current_user_can( 'edit_post', $comment_post_ID ) )
    630                 die('-1');
    631 
    632         $status = $wpdb->get_var( $wpdb->prepare("SELECT post_status FROM $wpdb->posts WHERE ID = %d", $comment_post_ID) );
    633 
    634         if ( empty($status) )
    635                 die('1');
    636         elseif ( in_array($status, array('draft', 'pending', 'trash') ) )
    637                 die( __('Error: you are replying to a comment on a draft post.') );
    638 
    639         $user = wp_get_current_user();
    640         if ( $user->ID ) {
    641                 $comment_author       = $wpdb->escape($user->display_name);
    642                 $comment_author_email = $wpdb->escape($user->user_email);
    643                 $comment_author_url   = $wpdb->escape($user->user_url);
    644                 $comment_content      = trim($_POST['content']);
    645                 if ( current_user_can('unfiltered_html') ) {
    646                         if ( wp_create_nonce('unfiltered-html-comment_' . $comment_post_ID) != $_POST['_wp_unfiltered_html_comment'] ) {
    647                                 kses_remove_filters(); // start with a clean slate
    648                                 kses_init_filters(); // set up the filters
    649                         }
    650                 }
    651         } else {
    652                 die( __('Sorry, you must be logged in to reply to a comment.') );
    653         }
    654 
    655         if ( '' == $comment_content )
    656                 die( __('Error: please type a comment.') );
    657 
    658         $comment_parent = absint($_POST['comment_ID']);
    659         $commentdata = compact('comment_post_ID', 'comment_author', 'comment_author_email', 'comment_author_url', 'comment_content', 'comment_type', 'comment_parent', 'user_ID');
    660 
    661         $comment_id = wp_new_comment( $commentdata );
    662         $comment = get_comment($comment_id);
    663         if ( ! $comment ) die('1');
    664 
    665         $position = ( isset($_POST['position']) && (int) $_POST['position']) ? (int) $_POST['position'] : '-1';
    666 
    667         $x = new WP_Ajax_Response();
    668 
    669         ob_start();
    670                 if ( 'dashboard' == $_REQUEST['mode'] ) {
    671                         require_once( ABSPATH . 'wp-admin/includes/dashboard.php' );
    672                         _wp_dashboard_recent_comments_row( $comment );
    673                 } else {
    674                         if ( 'single' == $_REQUEST['mode'] ) {
    675                                 $wp_list_table = get_list_table('WP_Post_Comments_List_Table');
    676                         } else {                               
    677                                 $wp_list_table = get_list_table('WP_Comments_List_Table');
    678                         }
    679                         $wp_list_table->single_row( $comment );
    680                 }
    681                 $comment_list_item = ob_get_contents();
    682         ob_end_clean();
    683 
    684         $x->add( array(
    685                 'what' => 'comment',
    686                 'id' => $comment->comment_ID,
    687                 'data' => $comment_list_item,
    688                 'position' => $position
    689         ));
    690 
    691         $x->send();
     713case 'add-comment':
     714case 'replyto-comment':
     715        _wp_add_comment( $_POST['action'] );
    692716        break;
    693717case 'edit-comment' :
    694718        check_ajax_referer( 'replyto-comment', '_ajax_nonce-replyto-comment' );
  • wp-admin/css/colors-classic.dev.css

    diff --git wp-admin/css/colors-classic.dev.css wp-admin/css/colors-classic.dev.css
    index 0b8183c..5e93f00 100644
    table.diff .diff-addedline ins { 
    13151315}
    13161316
    13171317#edithead,
    1318 #replyhead {
     1318#replyhead,
     1319#addhead {
    13191320        background-color: #f1f1f1;
    13201321}
    13211322
  • wp-admin/css/colors-fresh.dev.css

    diff --git wp-admin/css/colors-fresh.dev.css wp-admin/css/colors-fresh.dev.css
    index ede8f38..f165b66 100644
    table.diff .diff-addedline ins { 
    13121312}
    13131313
    13141314#edithead,
    1315 #replyhead {
     1315#replyhead,
     1316#addhead {
    13161317        background-color: #f1f1f1;
    13171318}
    13181319
  • wp-admin/css/dashboard-rtl.dev.css

    diff --git wp-admin/css/dashboard-rtl.dev.css wp-admin/css/dashboard-rtl.dev.css
    index b0219f2..b6d40a4 100644
     
    4141        float: left;
    4242        clear: left;
    4343}
    44 #dashboard-widgets h3 .postbox-title-action {
    45         right: auto;
    46         left: 30px;
    47 }
    4844#the-comment-list .pingback {
    4945        padding-left: 0 !important;
    5046        padding-right: 9px !important;
  • wp-admin/css/dashboard.dev.css

    diff --git wp-admin/css/dashboard.dev.css wp-admin/css/dashboard.dev.css
    index 406fe80..7c82571 100644
     
    11.postbox p, .postbox ul, .postbox ol, .postbox blockquote, #wp-version-message { font-size: 11px; }
    22
    3 .edit-box {
    4         display: none;
    5 }
    6 
    7 h3:hover .edit-box {
    8         display: inline;
    9 }
    10 
    113form .input-text-wrap {
    124        border-style: solid;
    135        border-width: 1px;
    div.postbox div.inside { 
    6961        text-decoration: underline;
    7062}
    7163
    72 #dashboard-widgets h3 .postbox-title-action {
    73         position: absolute;
    74         right: 30px;
    75         padding: 0;
    76 }
    77 
    7864#dashboard-widgets h4 {
    7965        font-family: Georgia, "Times New Roman", "Bitstream Charter", Times, serif;
    8066        font-size: 13px;
  • wp-admin/css/wp-admin-rtl.dev.css

    diff --git wp-admin/css/wp-admin-rtl.dev.css wp-admin/css/wp-admin-rtl.dev.css
    index 44ec7c3..b3a16fc 100644
    ol { 
    558558        padding-left: 0.5%;
    559559        padding-right: 0;
    560560}
     561.postbox h3 .postbox-title-action {
     562        right: auto;
     563        left: 30px;
     564}
    561565
    562566/* Media library */
    563567#wpbody-content .describe th {
  • wp-admin/css/wp-admin.dev.css

    diff --git wp-admin/css/wp-admin.dev.css wp-admin/css/wp-admin.dev.css
    index 1781101..c223c7c 100644
    body.admin-bar { 
    11991199        padding: 6px 0;
    12001200}
    12011201
     1202.postbox h3 .postbox-title-action {
     1203        display:none;
     1204        position:absolute;
     1205        right:30px;
     1206        padding:0;
     1207}
     1208
     1209.postbox h3:hover .postbox-title-action {
     1210        display:inline;
     1211}
     1212
    12021213.postbox .hndle {
    12031214        cursor: move;
    12041215}
    span.imgedit-scale-warn { 
    34703481        display: none;
    34713482}
    34723483
    3473 #replyhead {
     3484#addhead, #replyhead {
    34743485        font-size: 12px;
    34753486        font-weight: bold;
    34763487        padding: 2px 10px 4px;
  • wp-admin/edit-form-advanced.php

    diff --git wp-admin/edit-form-advanced.php wp-admin/edit-form-advanced.php
    index 017a163..9fce136 100644
    if ( post_type_supports($post_type, 'comments') ) 
    146146        add_meta_box('commentstatusdiv', __('Discussion'), 'post_comment_status_meta_box', $post_type, 'normal', 'core');
    147147
    148148if ( ('publish' == $post->post_status || 'private' == $post->post_status) && post_type_supports($post_type, 'comments') )
    149         add_meta_box('commentsdiv', __('Comments'), 'post_comment_meta_box', $post_type, 'normal', 'core');
     149        add_meta_box('commentsdiv', sprintf( '%s<span class="postbox-title-action"><a href="#">%s</a></span>', __('Comments'), __('Add new comment') ), 'post_comment_meta_box', $post_type, 'normal', 'core');
    150150
    151151if ( !( 'pending' == $post->post_status && !current_user_can( $post_type_object->cap->publish_posts ) ) )
    152152        add_meta_box('slugdiv', __('Slug'), 'post_slug_meta_box', $post_type, 'normal', 'core');
  • wp-admin/includes/template.php

    diff --git wp-admin/includes/template.php wp-admin/includes/template.php
    index 8a1e995..fd7c585 100644
    function wp_comment_reply($position = '1', $checkbox = false, $mode = 'single', 
    341341<div id="com-reply" style="display:none;"><div id="replyrow" style="display:none;">
    342342<?php endif; ?>
    343343        <div id="replyhead" style="display:none;"><?php _e('Reply to Comment'); ?></div>
     344       
     345        <div id="addhead" style="display:none;"><?php _e('Add new Comment'); ?></div>
    344346
    345347        <div id="edithead" style="display:none;">
    346348                <div class="inside">
    function wp_comment_reply($position = '1', $checkbox = false, $mode = 'single', 
    365367        <p id="replysubmit" class="submit">
    366368        <a href="#comments-form" class="cancel button-secondary alignleft" tabindex="106"><?php _e('Cancel'); ?></a>
    367369        <a href="#comments-form" class="save button-primary alignright" tabindex="104">
     370        <span id="addbtn" style="display:none;"><?php _e('Add Comment'); ?></span>
    368371        <span id="savebtn" style="display:none;"><?php _e('Update Comment'); ?></span>
    369372        <span id="replybtn" style="display:none;"><?php _e('Submit Reply'); ?></span></a>
    370373        <img class="waiting" style="display:none;" src="<?php echo esc_url( admin_url( 'images/wpspin_light.gif' ) ); ?>" alt="" />
  • wp-admin/js/edit-comments.dev.js

    diff --git wp-admin/js/edit-comments.dev.js wp-admin/js/edit-comments.dev.js
    index ccb3508..01c1b82 100644
    commentReply = { 
    281281                $(listTable).bind('beforeChangePage', function(){
    282282                        commentReply.close();
    283283                });
     284               
     285                $('#commentsdiv .postbox-title-action a').click(function(){
     286                        var postID = $('input[name=post_ID]').val();
     287                        commentReply.open('new', postID, 'add');
     288                        return false;
     289                });
    284290        },
    285291
    286292        addEvents : function(r) {
    commentReply = { 
    341347                $('td', '#replyrow').attr('colspan', $('table.widefat thead th:visible').length);
    342348                editRow = $('#replyrow');
    343349                rowData = $('#inline-'+id);
    344                 act = t.act = (a == 'edit') ? 'edit-comment' : 'replyto-comment';
     350               
     351                if (! a) {
     352                        a = 'replyto';
     353                }
     354               
     355                act = t.act = a + '-comment';
    345356
    346357                $('#action', editRow).val(act);
    347358                $('#comment_post_ID', editRow).val(p);
    commentReply = { 
    354365                        $('#status', editRow).val( $('div.comment_status', rowData).text() );
    355366                        $('#replycontent', editRow).val( $('textarea.comment', rowData).val() );
    356367                        $('#edithead, #savebtn', editRow).show();
    357                         $('#replyhead, #replybtn', editRow).hide();
     368                        $('#replyhead, #replybtn, #addhead, #addbtn', editRow).hide();
    358369
    359370                        h = c.height();
    360371                        if ( h > 220 )
    commentReply = { 
    366377                        c.after( editRow ).fadeOut('fast', function(){
    367378                                $('#replyrow').fadeIn(300, function(){ $(this).show() });
    368379                        });
     380                } else if (a == 'add') {
     381                        $('#addhead, #addbtn', editRow).show();
     382                        $('#replyhead, #replybtn, #edithead, #editbtn', editRow).hide();
     383                        $('#the-comment-list').prepend(editRow);
     384                        $('#replyrow').fadeIn(300);
    369385                } else {
    370                         $('#edithead, #savebtn', editRow).hide();
     386                        $('#edithead, #savebtn, #addhead, #addbtn', editRow).hide();
    371387                        $('#replyhead, #replybtn', editRow).show();
    372388                        c.after(editRow);
    373389                        $('#replyrow').fadeIn(300, function(){ $(this).show() });