Make WordPress Core

Ticket #34059: 34059.diff

File 34059.diff, 11.2 KB (added by johnbillion, 11 years ago)
  • src/wp-comments-post.php

     
    1717
    1818nocache_headers();
    1919
    20 $comment_post_ID = isset($_POST['comment_post_ID']) ? (int) $_POST['comment_post_ID'] : 0;
    21 
    22 $post = get_post($comment_post_ID);
    23 
    24 if ( empty( $post->comment_status ) ) {
    25         /**
    26          * Fires when a comment is attempted on a post that does not exist.
    27          *
    28          * @since 1.5.0
    29          *
    30          * @param int $comment_post_ID Post ID.
    31          */
    32         do_action( 'comment_id_not_found', $comment_post_ID );
    33         exit;
    34 }
    35 
    36 // get_post_status() will get the parent status for attachments.
    37 $status = get_post_status($post);
    38 
    39 $status_obj = get_post_status_object($status);
    40 
    41 if ( ! comments_open( $comment_post_ID ) ) {
    42         /**
    43          * Fires when a comment is attempted on a post that has comments closed.
    44          *
    45          * @since 1.5.0
    46          *
    47          * @param int $comment_post_ID Post ID.
    48          */
    49         do_action( 'comment_closed', $comment_post_ID );
    50         wp_die( __( 'Sorry, comments are closed for this item.' ), 403 );
    51 } elseif ( 'trash' == $status ) {
    52         /**
    53          * Fires when a comment is attempted on a trashed post.
    54          *
    55          * @since 2.9.0
    56          *
    57          * @param int $comment_post_ID Post ID.
    58          */
    59         do_action( 'comment_on_trash', $comment_post_ID );
    60         exit;
    61 } elseif ( ! $status_obj->public && ! $status_obj->private ) {
    62         /**
    63          * Fires when a comment is attempted on a post in draft mode.
    64          *
    65          * @since 1.5.1
    66          *
    67          * @param int $comment_post_ID Post ID.
    68          */
    69         do_action( 'comment_on_draft', $comment_post_ID );
    70         exit;
    71 } elseif ( post_password_required( $comment_post_ID ) ) {
    72         /**
    73          * Fires when a comment is attempted on a password-protected post.
    74          *
    75          * @since 2.9.0
    76          *
    77          * @param int $comment_post_ID Post ID.
    78          */
    79         do_action( 'comment_on_password_protected', $comment_post_ID );
    80         exit;
    81 } else {
    82         /**
    83          * Fires before a comment is posted.
    84          *
    85          * @since 2.8.0
    86          *
    87          * @param int $comment_post_ID Post ID.
    88          */
    89         do_action( 'pre_comment_on_post', $comment_post_ID );
    90 }
    91 
    92 $comment_author       = ( isset( $_POST['author'] ) && is_string( $_POST['author'] ) ) ? trim( strip_tags( $_POST['author'] ) ) : null;
    93 $comment_author_email = ( isset( $_POST['email'] ) && is_email( $_POST['email'] ) ) ? trim( $_POST['email'] ) : null;
    94 $comment_author_url   = ( isset( $_POST['url'] ) && is_string( $_POST['url'] ) ) ? trim( $_POST['url'] ) : null;
    95 $comment_content      = ( isset( $_POST['comment'] ) && is_string( $_POST['comment'] ) ) ? trim( $_POST['comment'] ) : null;
    96 
    97 // If the user is logged in
    98 $user = wp_get_current_user();
    99 if ( $user->exists() ) {
    100         if ( empty( $user->display_name ) )
    101                 $user->display_name=$user->user_login;
    102         $comment_author       = wp_slash( $user->display_name );
    103         $comment_author_email = wp_slash( $user->user_email );
    104         $comment_author_url   = wp_slash( $user->user_url );
    105         if ( current_user_can( 'unfiltered_html' ) ) {
    106                 if ( ! isset( $_POST['_wp_unfiltered_html_comment'] )
    107                         || ! wp_verify_nonce( $_POST['_wp_unfiltered_html_comment'], 'unfiltered-html-comment_' . $comment_post_ID )
    108                 ) {
    109                         kses_remove_filters(); // start with a clean slate
    110                         kses_init_filters(); // set up the filters
    111                 }
    112         }
    113 } else {
    114         if ( get_option( 'comment_registration' ) || 'private' == $status ) {
    115                 wp_die( __( 'Sorry, you must be logged in to post a comment.' ), 403 );
     20$comment = wp_handle_comment_post( wp_unslash( $_POST ) );
     21if ( is_wp_error( $comment ) ) {
     22        $data = $comment->get_error_data();
     23        if ( ! empty( $data ) ) {
     24                wp_die( $comment->get_error_message(), $data );
     25        } else {
     26                exit;
    11627        }
    11728}
    11829
    119 $comment_type = '';
    120 
    121 if ( get_option('require_name_email') && !$user->exists() ) {
    122         if ( 6 > strlen( $comment_author_email ) || '' == $comment_author ) {
    123                 wp_die( __( '<strong>ERROR</strong>: please fill the required fields (name, email).' ), 200 );
    124         } elseif ( ! is_email( $comment_author_email ) ) {
    125                 wp_die( __( '<strong>ERROR</strong>: please enter a valid email address.' ), 200 );
    126         }
    127 }
    128 
    129 if ( '' == $comment_content ) {
    130         wp_die( __( '<strong>ERROR</strong>: please type a comment.' ), 200 );
    131 }
    132 
    133 $comment_parent = isset($_POST['comment_parent']) ? absint($_POST['comment_parent']) : 0;
    134 
    135 $commentdata = compact('comment_post_ID', 'comment_author', 'comment_author_email', 'comment_author_url', 'comment_content', 'comment_type', 'comment_parent', 'user_ID');
    136 
    137 $comment_id = wp_new_comment( $commentdata );
    138 if ( ! $comment_id ) {
    139         wp_die( __( "<strong>ERROR</strong>: The comment could not be saved. Please try again later." ) );
    140 }
    141 
    142 $comment = get_comment( $comment_id );
     30$user = wp_get_current_user();
    14331
    14432/**
    14533 * Perform other actions when comment cookies are set.
     
    15139 */
    15240do_action( 'set_comment_cookies', $comment, $user );
    15341
    154 $location = empty($_POST['redirect_to']) ? get_comment_link( $comment ) : $_POST['redirect_to'] . '#comment-' . $comment_id;
     42$location = empty( $_POST['redirect_to'] ) ? get_comment_link( $comment ) : $_POST['redirect_to'] . '#comment-' . $comment->comment_ID;
    15543
    15644/**
    15745 * Filter the location URI to send the commenter after posting.
  • src/wp-includes/comment-functions.php

     
    25502550
    25512551        return $open;
    25522552}
     2553
     2554/**
     2555 * Handles the submission of a comment, usually posted to wp-comments-post.php via a comment form.
     2556 *
     2557 * @param array $comment_data {
     2558 *     Comment data.
     2559 *
     2560 *     @type string|int $comment_post_ID             The ID of the post that relates to the comment.
     2561 *     @type string     $author                      The name of the comment author.
     2562 *     @type string     $email                       The comment author email address.
     2563 *     @type string     $url                         The comment author URL.
     2564 *     @type string     $comment                     The content of the comment.
     2565 *     @type string|int $comment_parent              The ID of this comment's parent, if any. Default 0.
     2566 *     @type string     $_wp_unfiltered_html_comment The nonce value for allowing unfiltered HTML.
     2567 * }
     2568 * @return WP_Comment|WP_Error A WP_Comment object on success, a WP_Error object on failure.
     2569 */
     2570function wp_handle_comment_post( $comment_data ) {
     2571
     2572        $comment_post_ID = isset( $comment_data['comment_post_ID'] )
     2573                ? (int) $comment_data['comment_post_ID']
     2574                : 0;
     2575        $comment_author = ( isset( $comment_data['author'] ) && is_string( $comment_data['author'] ) )
     2576                ? trim( strip_tags( $comment_data['author'] ) )
     2577                : null;
     2578        $comment_author_email = ( isset( $comment_data['email'] ) && is_email( $comment_data['email'] ) )
     2579                ? trim( $comment_data['email'] )
     2580                : null;
     2581        $comment_author_url = ( isset( $comment_data['url'] ) && is_string( $comment_data['url'] ) )
     2582                ? trim( $comment_data['url'] )
     2583                : null;
     2584        $comment_content = ( isset( $comment_data['comment'] ) && is_string( $comment_data['comment'] ) )
     2585                ? trim( $comment_data['comment'] )
     2586                : null;
     2587        $comment_parent = isset( $comment_data['comment_parent'] )
     2588                ? absint( $comment_data['comment_parent'] )
     2589                : 0;
     2590        $_wp_unfiltered_html_comment = ( isset( $comment_data['_wp_unfiltered_html_comment'] ) && is_string( $comment_data['_wp_unfiltered_html_comment'] ) )
     2591                ? trim( $comment_data['_wp_unfiltered_html_comment'] )
     2592                : null;
     2593
     2594        $post = get_post( $comment_post_ID );
     2595
     2596        if ( empty( $post->comment_status ) ) {
     2597
     2598                /**
     2599                 * Fires when a comment is attempted on a post that does not exist.
     2600                 *
     2601                 * @since 1.5.0
     2602                 *
     2603                 * @param int $comment_post_ID Post ID.
     2604                 */
     2605                do_action( 'comment_id_not_found', $comment_post_ID );
     2606
     2607                return new WP_Error( 'comment_id_not_found' );
     2608
     2609        }
     2610
     2611        // get_post_status() will get the parent status for attachments.
     2612        $status = get_post_status( $post );
     2613
     2614        $status_obj = get_post_status_object( $status );
     2615
     2616        if ( ! comments_open( $comment_post_ID ) ) {
     2617
     2618                /**
     2619                 * Fires when a comment is attempted on a post that has comments closed.
     2620                 *
     2621                 * @since 1.5.0
     2622                 *
     2623                 * @param int $comment_post_ID Post ID.
     2624                 */
     2625                do_action( 'comment_closed', $comment_post_ID );
     2626
     2627                return new WP_Error( 'comment_closed', __( 'Sorry, comments are closed for this item.' ), 403 );
     2628
     2629        } elseif ( 'trash' == $status ) {
     2630
     2631                /**
     2632                 * Fires when a comment is attempted on a trashed post.
     2633                 *
     2634                 * @since 2.9.0
     2635                 *
     2636                 * @param int $comment_post_ID Post ID.
     2637                 */
     2638                do_action( 'comment_on_trash', $comment_post_ID );
     2639
     2640                return new WP_Error( 'comment_on_trash' );
     2641
     2642        } elseif ( ! $status_obj->public && ! $status_obj->private ) {
     2643
     2644                /**
     2645                 * Fires when a comment is attempted on a post in draft mode.
     2646                 *
     2647                 * @since 1.5.1
     2648                 *
     2649                 * @param int $comment_post_ID Post ID.
     2650                 */
     2651                do_action( 'comment_on_draft', $comment_post_ID );
     2652
     2653                return new WP_Error( 'comment_on_draft' );
     2654
     2655        } elseif ( post_password_required( $comment_post_ID ) ) {
     2656
     2657                /**
     2658                 * Fires when a comment is attempted on a password-protected post.
     2659                 *
     2660                 * @since 2.9.0
     2661                 *
     2662                 * @param int $comment_post_ID Post ID.
     2663                 */
     2664                do_action( 'comment_on_password_protected', $comment_post_ID );
     2665
     2666                return new WP_Error( 'comment_on_password_protected' );
     2667
     2668        } else {
     2669
     2670                /**
     2671                 * Fires before a comment is posted.
     2672                 *
     2673                 * @since 2.8.0
     2674                 *
     2675                 * @param int $comment_post_ID Post ID.
     2676                 */
     2677                do_action( 'pre_comment_on_post', $comment_post_ID );
     2678
     2679        }
     2680
     2681        // If the user is logged in
     2682        $user = wp_get_current_user();
     2683        if ( $user->exists() ) {
     2684                if ( empty( $user->display_name ) ) {
     2685                        $user->display_name=$user->user_login;
     2686                }
     2687                $comment_author       = $user->display_name;
     2688                $comment_author_email = $user->user_email;
     2689                $comment_author_url   = $user->user_url;
     2690                if ( current_user_can( 'unfiltered_html' ) ) {
     2691                        if ( ! isset( $comment_data['_wp_unfiltered_html_comment'] )
     2692                                || ! wp_verify_nonce( $comment_data['_wp_unfiltered_html_comment'], 'unfiltered-html-comment_' . $comment_post_ID )
     2693                        ) {
     2694                                kses_remove_filters(); // start with a clean slate
     2695                                kses_init_filters(); // set up the filters
     2696                        }
     2697                }
     2698        } else {
     2699                if ( get_option( 'comment_registration' ) || 'private' == $status ) {
     2700                        return new WP_Error( 'not_logged_in', __( 'Sorry, you must be logged in to post a comment.' ), 403 );
     2701                }
     2702        }
     2703
     2704        $comment_type = '';
     2705
     2706        if ( get_option( 'require_name_email' ) && ! $user->exists() ) {
     2707                if ( 6 > strlen( $comment_author_email ) || '' == $comment_author ) {
     2708                        return new WP_Error( 'require_name_email', __( '<strong>ERROR</strong>: please fill the required fields (name, email).' ), 200 );
     2709                } elseif ( ! is_email( $comment_author_email ) ) {
     2710                        return new WP_Error( 'require_valid_email', __( '<strong>ERROR</strong>: please enter a valid email address.' ), 200 );
     2711                }
     2712        }
     2713
     2714        if ( '' == $comment_content ) {
     2715                return new WP_Error( 'require_valid_comment', __( '<strong>ERROR</strong>: please type a comment.' ), 200 );
     2716        }
     2717
     2718        $commentdata = compact(
     2719                'comment_post_ID',
     2720                'comment_author',
     2721                'comment_author_email',
     2722                'comment_author_url',
     2723                'comment_content',
     2724                'comment_type',
     2725                'comment_parent',
     2726                'user_ID'
     2727        );
     2728
     2729        $comment_id = wp_new_comment( wp_slash( $commentdata ) );
     2730        if ( ! $comment_id ) {
     2731                return new WP_Error( 'comment_save_error', __( '<strong>ERROR</strong>: The comment could not be saved. Please try again later.' ), 500 );
     2732        }
     2733
     2734        return get_comment( $comment_id );
     2735
     2736}