Make WordPress Core

Ticket #25699: 25699.5.patch

File 25699.5.patch, 5.9 KB (added by ethitter, 11 years ago)
  • src/wp-includes/comment.php

     
    13771377 * See {@link http://core.trac.wordpress.org/ticket/9235}
    13781378 *
    13791379 * @since 1.5.0
    1380  * @uses apply_filters() Calls 'preprocess_comment' hook on $commentdata parameter array before processing
    1381  * @uses do_action() Calls 'comment_post' hook on $comment_ID returned from adding the comment and if the comment was approved.
    1382  * @uses wp_filter_comment() Used to filter comment before adding comment.
    1383  * @uses wp_allow_comment() checks to see if comment is approved.
    1384  * @uses wp_insert_comment() Does the actual comment insertion to the database.
    1385  *
    13861380 * @param array $commentdata Contains information on the comment.
     1381 * @uses apply_filters()
     1382 * @uses wp_get_comment_status()
     1383 * @uses wp_filter_comment()
     1384 * @uses wp_allow_comment()
     1385 * @uses wp_insert_comment()
     1386 * @uses do_action()
     1387 * @uses wp_notify_moderator()
     1388 * @uses get_option()
     1389 * @uses wp_notify_postauthor()
    13871390 * @return int The ID of the comment after adding.
    13881391 */
    13891392function wp_new_comment( $commentdata ) {
     
    14181421                        wp_notify_moderator( $comment_ID );
    14191422                }
    14201423
    1421                 if ( get_option('comments_notify') && $commentdata['comment_approved'] ) {
    1422                         $post = get_post( $commentdata['comment_post_ID'] );
    1423                         // Don't notify if it's your own comment
    1424                         if ( ! isset( $commentdata['user_id'] ) || $post->post_author != $commentdata['user_id'] ) {
    1425                                 wp_notify_postauthor( $comment_ID );
    1426                         }
     1424                // wp_notify_postauthor() checks if notifying the author of his/her own comment.
     1425                // By default, it won't, but filters can override this.
     1426                if ( get_option( 'comments_notify' ) && $commentdata['comment_approved'] ) {
     1427                        wp_notify_postauthor( $comment_ID );
    14271428                }
    14281429        }
    14291430
     
    14571458                case '1':
    14581459                        $status = '1';
    14591460                        if ( get_option('comments_notify') ) {
    1460                                 wp_notify_postauthor( $comment_id ); 
     1461                                wp_notify_postauthor( $comment_id );
    14611462                        }
    14621463                        break;
    14631464                case 'spam':
  • src/wp-includes/pluggable.php

     
    10001000
    10011001if ( ! function_exists('wp_notify_postauthor') ) :
    10021002/**
    1003  * Notify an author of a comment/trackback/pingback to one of their posts.
     1003 * Notify an author (and/or others) of a comment/trackback/pingback on a post.
    10041004 *
    10051005 * @since 1.0.0
    10061006 *
    10071007 * @param int $comment_id Comment ID
    10081008 * @param string $deprecated Not used
    1009  * @return bool False if user email does not exist. True on completion.
     1009 * @uses get_comment()
     1010 * @uses get_post()
     1011 * @uses get_userdata()
     1012 * @uses apply_filters()
     1013 * @uses wp_specialchars_decode()
     1014 * @uses get_option()
     1015 * @uses __()
     1016 * @uses get_permalink()
     1017 * @uses admin_url()
     1018 * @uses wp_mail()
     1019 * @return bool True on completion. False if no email addresses were specified.
    10101020 */
    10111021function wp_notify_postauthor( $comment_id, $deprecated = null ) {
    10121022        if ( null !== $deprecated ) {
     
    10201030        $post    = get_post( $comment->comment_post_ID );
    10211031        $author  = get_userdata( $post->post_author );
    10221032
    1023         // The comment was left by the author
    1024         if ( $comment->user_id == $post->post_author )
     1033        // Who to notify? By default, just the post author, but others can be added.
     1034        $emails = array( $author->user_email );
     1035        $emails = apply_filters( 'comment_notification_recipients', $emails, $comment_id );
     1036        $emails = array_filter( $emails );
     1037
     1038        // If there are no addresses to send the comment to, bail.
     1039        if ( ! count( $emails ) ) {
    10251040                return false;
     1041        }
    10261042
     1043        // Facilitate unsetting below without knowing the keys.
     1044        $emails = array_flip( $emails );
     1045
     1046        // Post author may want to receive notifications for their own comments
     1047        $notify_author = apply_filters( 'comment_notification_notify_author', false, $comment_id );
     1048
     1049        // The comment was left by the author
     1050        if ( ! $notify_author && $comment->user_id == $post->post_author ) {
     1051                unset( $emails[ $author->user_email ] );
     1052        }
     1053
    10271054        // The author moderated a comment on his own post
    1028         if ( $post->post_author == get_current_user_id() )
    1029                 return false;
     1055        if ( ! $notify_author && $post->post_author == get_current_user_id() ) {
     1056                unset( $emails[ $author->user_email ] );
     1057        }
    10301058
    10311059        // The post author is no longer a member of the blog
    1032         if ( ! user_can( $post->post_author, 'read_post', $post->ID ) )
    1033                 return false;
     1060        if ( ! $notify_author && ! user_can( $post->post_author, 'read_post', $post->ID ) ) {
     1061                unset( $emails[ $author->user_email ] );
     1062        }
    10341063
    1035         // If there's no email to send the comment to
    1036         if ( '' == $author->user_email )
     1064        // If there's no email to send the comment to, bail, otherwise flip array back around for use below
     1065        if ( ! count( $emails ) ) {
    10371066                return false;
     1067        } else {
     1068                $emails = array_flip( $emails );
     1069        }
    10381070
    10391071        $comment_author_domain = @gethostbyaddr($comment->comment_author_IP);
    10401072
     
    10421074        // we want to reverse this for the plain text arena of emails.
    10431075        $blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);
    10441076
    1045         $comment_type = $comment->comment_type ? $comment->comment_type : 'comment';
    1046 
    1047         switch ( $comment_type ) {
     1077        switch ( $comment->comment_type ) {
    10481078                case 'trackback':
    10491079                        $notify_message  = sprintf( __( 'New trackback on your post "%s"' ), $post->post_title ) . "\r\n";
    10501080                        /* translators: 1: website name, 2: author IP, 3: author domain */
     
    11071137        if ( isset($reply_to) )
    11081138                $message_headers .= $reply_to . "\n";
    11091139
    1110         $emails = array( $author->user_email );
    1111 
    1112         $emails          = apply_filters( 'comment_notification_recipients', $emails,          $comment_id );
    11131140        $notify_message  = apply_filters( 'comment_notification_text',       $notify_message,  $comment_id );
    11141141        $subject         = apply_filters( 'comment_notification_subject',    $subject,         $comment_id );
    11151142        $message_headers = apply_filters( 'comment_notification_headers',    $message_headers, $comment_id );