Make WordPress Core

Ticket #6286: individual notifications.diff

File individual notifications.diff, 11.5 KB (added by simonwheatley, 15 years ago)

Individual notifications

  • Users/simon/Projects/WordPress-Bleeding/site/wp-includes/comment.php

     
    13501350
    13511351                $post = &get_post($commentdata['comment_post_ID']); // Don't notify if it's your own comment
    13521352
    1353                 if ( get_option('comments_notify') && $commentdata['comment_approved'] && ( ! isset( $commentdata['user_id'] ) || $post->post_author != $commentdata['user_id'] ) )
     1353                if ( get_user_option('comments_notify', $post->post_author) && $commentdata['comment_approved'] && ( ! isset( $commentdata['user_id'] ) || $post->post_author != $commentdata['user_id'] ) )
    13541354                        wp_notify_postauthor($comment_ID, isset( $commentdata['comment_type'] ) ? $commentdata['comment_type'] : '' );
    13551355        }
    13561356
     
    13861386                case 'approve':
    13871387                case '1':
    13881388                        $status = '1';
    1389                         if ( get_option('comments_notify') ) {
    1390                                 $comment = get_comment($comment_id);
     1389                        $comment = get_comment($comment_id);
     1390                        $post = get_post($comment->comment_post_ID);
     1391                        if ( get_user_option('comments_notify', $post->post_author) )
    13911392                                wp_notify_postauthor($comment_id, $comment->comment_type);
    1392                         }
    13931393                        break;
    13941394                case 'spam':
    13951395                        $status = 'spam';
     
    15751575        return true;
    15761576}
    15771577
     1578/**
     1579 * Gets the User IDs of the users who should be emailed if a
     1580 * particular comment is held for moderation.
     1581 *
     1582 * @param int $comment_id The ID of the comment we want moderation recipients for
     1583 * @return array An array of WP_User objects
     1584 **/
     1585function wp_get_moderation_recipients( $comment_id ) {
     1586        global $wpdb;
     1587
     1588        $comment = get_comment( $comment_id );
     1589        $post = get_post( $comment->comment_post_ID );
     1590
     1591        // Find the IDs of the users who have requested moderation notifications in
     1592        // one way or another.
     1593        $sql  = " SELECT user_id FROM $wpdb->usermeta WHERE meta_key = %s OR ( user_id = %d AND meta_key = %s ) ";
     1594        $moderation_notify = $wpdb->prefix . 'moderation_notify';
     1595        $moderation_notify_all = $wpdb->prefix . 'moderation_notify_all';
     1596        $user_ids = $wpdb->get_col( $wpdb->prepare( $sql, $comments_notify, $post->post_author, $comments_notify_all ) );
     1597
     1598        $user_ids = array_unique( $user_ids );
     1599       
     1600        $users = array();
     1601        foreach ( $user_ids as $user_id )
     1602                $users[] = new WP_User( $user_id );
     1603
     1604        return $users;
     1605}
     1606
    15781607//
    15791608// Ping and trackback functions.
    15801609//
  • Users/simon/Projects/WordPress-Bleeding/site/wp-includes/capabilities.php

     
    10841084 * @return bool
    10851085 */
    10861086function user_can( $user, $capability ) {
     1087        error_log( "User: $user" );
    10871088        if ( ! is_object( $user ) )
    10881089                $user = new WP_User( $user );
    10891090
     1091        error_log( "User: " . print_r( $user, true ) );
     1092
    10901093        if ( ! $user || ! $user->ID )
    10911094                return false;
    10921095
  • Users/simon/Projects/WordPress-Bleeding/site/wp-includes/pluggable.php

     
    11021102function wp_notify_moderator($comment_id) {
    11031103        global $wpdb;
    11041104
    1105         if ( 0 == get_option( 'moderation_notify' ) )
     1105        if ( ! $recipients = wp_get_moderation_recipients( $comment_id ) )
    11061106                return true;
    11071107
     1108        $email_to = array();
     1109        foreach ( $recipients as $recipient )
     1110                $email_to[] = $recipient->user_email;
     1111
    11081112        $comment = get_comment($comment_id);
    11091113        $post = get_post($comment->comment_post_ID);
    1110         $user = get_userdata( $post->post_author );
    1111         // Send to the administation and to the post author if the author can modify the comment.
    1112         $email_to = array( get_option('admin_email') );
    1113         if ( user_can($user->ID, 'edit_comment', $comment_id) && !empty($user->user_email) && ( get_option('admin_email') != $user->user_email) )
    1114                 $email_to[] = $user->user_email;
    11151114
    11161115        $comment_author_domain = @gethostbyaddr($comment->comment_author_IP);
    11171116        $comments_waiting = $wpdb->get_var("SELECT count(comment_ID) FROM $wpdb->comments WHERE comment_approved = '0'");
  • Users/simon/Projects/WordPress-Bleeding/site/wp-admin/includes/schema.php

     
    206206        'use_balanceTags' => 0,
    207207        'use_smilies' => 1,
    208208        'require_name_email' => 1,
    209         'comments_notify' => 1,
    210209        'posts_per_rss' => 10,
    211210        'rss_use_excerpt' => 0,
    212211        'mailserver_url' => 'mail.example.com',
     
    229228        'links_recently_updated_append' => '</em>',
    230229        'links_recently_updated_time' => 120,
    231230        'comment_moderation' => 0,
    232         'moderation_notify' => 1,
    233231        'permalink_structure' => '',
    234232        'gzipcompression' => 0,
    235233        'hack_file' => 0,
  • Users/simon/Projects/WordPress-Bleeding/site/wp-admin/includes/user.php

     
    185185                $user_id = wp_insert_user( get_object_vars( $user ) );
    186186                wp_new_user_notification( $user_id, isset($_POST['send_password']) ? $pass1 : '' );
    187187        }
     188
     189        // Per site email notification settings
     190        // Only change these if the user can moderate comments
     191        if ( user_can( $user_id, 'moderate_comments' ) ) {
     192                // @TODO: Some of these options probably need to be defaulted on when the first user in a site is created
     193                $comments_notify = (bool) @ $_POST['comments_notify'];
     194                $moderation_notify = (bool) @ $_POST['moderation_notify'];
     195                $moderation_notify_all = (bool) @ $_POST['moderation_notify_all'];
     196                update_user_option( $user_id, 'comments_notify', $comments_notify );
     197                update_user_option( $user_id, 'moderation_notify', $moderation_notify );
     198                update_user_option( $user_id, 'moderation_notify_all', $moderation_notify_all );
     199        }
     200
    188201        return $user_id;
    189202}
    190203
  • Users/simon/Projects/WordPress-Bleeding/site/wp-admin/options-discussion.php

     
    113113</fieldset></td>
    114114</tr>
    115115<tr valign="top">
    116 <th scope="row"><?php _e('E-mail me whenever') ?></th>
    117 <td><fieldset><legend class="screen-reader-text"><span><?php _e('E-mail me whenever') ?></span></legend>
    118 <label for="comments_notify">
    119 <input name="comments_notify" type="checkbox" id="comments_notify" value="1" <?php checked('1', get_option('comments_notify')); ?> />
    120 <?php _e('Anyone posts a comment') ?> </label>
    121 <br />
    122 <label for="moderation_notify">
    123 <input name="moderation_notify" type="checkbox" id="moderation_notify" value="1" <?php checked('1', get_option('moderation_notify')); ?> />
    124 <?php _e('A comment is held for moderation') ?> </label>
    125 </fieldset></td>
    126 </tr>
    127 <tr valign="top">
    128116<th scope="row"><?php _e('Before a comment appears') ?></th>
    129117<td><fieldset><legend class="screen-reader-text"><span><?php _e('Before a comment appears') ?></span></legend>
    130118<label for="comment_moderation">
  • Users/simon/Projects/WordPress-Bleeding/site/wp-admin/options.php

     
    5656
    5757$whitelist_options = array(
    5858        'general' => array( 'blogname', 'blogdescription', 'gmt_offset', 'date_format', 'time_format', 'start_of_week', 'timezone_string' ),
    59         'discussion' => array( 'default_pingback_flag', 'default_ping_status', 'default_comment_status', 'comments_notify', 'moderation_notify', 'comment_moderation', 'require_name_email', 'comment_whitelist', 'comment_max_links', 'moderation_keys', 'blacklist_keys', 'show_avatars', 'avatar_rating', 'avatar_default', 'close_comments_for_old_posts', 'close_comments_days_old', 'thread_comments', 'thread_comments_depth', 'page_comments', 'comments_per_page', 'default_comments_page', 'comment_order', 'comment_registration' ),
     59        'discussion' => array( 'default_pingback_flag', 'default_ping_status', 'default_comment_status', 'comment_moderation', 'require_name_email', 'comment_whitelist', 'comment_max_links', 'moderation_keys', 'blacklist_keys', 'show_avatars', 'avatar_rating', 'avatar_default', 'close_comments_for_old_posts', 'close_comments_days_old', 'thread_comments', 'thread_comments_depth', 'page_comments', 'comments_per_page', 'default_comments_page', 'comment_order', 'comment_registration' ),
    6060        'media' => array( 'thumbnail_size_w', 'thumbnail_size_h', 'thumbnail_crop', 'medium_size_w', 'medium_size_h', 'large_size_w', 'large_size_h', 'image_default_size', 'image_default_align', 'image_default_link_type', 'embed_autourls', 'embed_size_w', 'embed_size_h' ),
    6161        'privacy' => array( 'blog_public' ),
    6262        'reading' => array( 'posts_per_page', 'posts_per_rss', 'rss_use_excerpt', 'blog_charset', 'show_on_front', 'page_on_front', 'page_for_posts' ),
  • Users/simon/Projects/WordPress-Bleeding/site/wp-admin/user-edit.php

     
    211211<th scope="row"><?php _e( 'Keyboard Shortcuts' ); ?></th>
    212212<td><label for="comment_shortcuts"><input type="checkbox" name="comment_shortcuts" id="comment_shortcuts" value="true" <?php if ( !empty($profileuser->comment_shortcuts) ) checked('true', $profileuser->comment_shortcuts); ?> /> <?php _e('Enable keyboard shortcuts for comment moderation.'); ?></label> <?php _e('<a href="http://codex.wordpress.org/Keyboard_Shortcuts" target="_blank">More information</a>'); ?></td>
    213213</tr>
     214<?php if ( user_can( $profileuser->ID, 'moderate_comments' ) ) : ?>
     215        <input type="hidden" name="email_notifications" value="1" />
     216        <tr valign="top">
     217        <th scope="row"><?php _e('E-mail me whenever') ?></th>
     218        <td><fieldset><legend class="screen-reader-text"><span><?php _e('E-mail me whenever') ?></span></legend>
     219        <label for="comments_notify">
     220        <input name="comments_notify" type="checkbox" id="comments_notify" value="1" <?php checked('1', get_user_option('comments_notify', $profileuser->ID)); ?> />
     221        <?php _e('A comment is posted on one of my posts') ?>
     222        </label>
     223        <br />
     224        <br />
     225        <label for="moderation_notify">
     226        <input name="moderation_notify" type="checkbox" id="moderation_notify" value="1" <?php checked('1', get_user_option('moderation_notify', $profileuser->ID)); ?> />
     227        <?php _e('A comment on one of my posts is held for moderation') ?> </label>
     228        <br />
     229        <label for="moderation_notify_all">
     230        <input name="moderation_notify_all" type="checkbox" id="moderation_notify_all" value="1" <?php checked('1', get_user_option('moderation_notify_all', $profileuser->ID)); ?> />
     231        <?php _e('Any comment is held for moderation') ?> </label>
     232        </fieldset></td>
     233        </tr>
     234<?php endif; // current_user_can moderate_comments ?>
    214235<?php
    215236endif;
    216237do_action('personal_options', $profileuser);