Skip to:
Content

BuddyPress.org

Ticket #5266: 5266.messages.patch

File 5266.messages.patch, 9.2 KB (added by johnjamesjacoby, 12 years ago)

Clean up Messages Notifications integration

  • plugins/buddypress/bp-messages/bp-messages-functions.php

    diff --git a/plugins/buddypress/bp-messages/bp-messages-functions.php b/plugins/buddypress/bp-messages/bp-messages-functions.php
    index cede937..f63a24d 100644
    a b  
    114114        }
    115115
    116116        if ( $message->send() ) {
    117 
    118                 // Send screen notifications to the recipients
    119                 foreach ( (array) $message->recipients as $recipient ) {
    120                         bp_core_add_notification( $message->id, $recipient->user_id, 'messages', 'new_message', $message->sender_id );
    121                 }
    122 
    123                 // Send email notifications to the recipients
    124                 messages_notification_new_message( array( 'message_id' => $message->id, 'sender_id' => $message->sender_id, 'subject' => $message->subject, 'content' => $message->message, 'recipients' => $message->recipients, 'thread_id' => $message->thread_id) );
    125 
    126117                do_action_ref_array( 'messages_message_sent', array( &$message ) );
    127118
    128119                return $message->thread_id;
     
    222213
    223214function messages_is_valid_thread( $thread_id ) {
    224215        return BP_Messages_Thread::is_valid( $thread_id );
    225 }
    226 
    227 /**
    228  * Format the BuddyBar/Toolbar notifications for the Messages component
    229  *
    230  * @package BuddyPress
    231  *
    232  * @param string $action The kind of notification being rendered
    233  * @param int $item_id The primary item id
    234  * @param int $secondary_item_id The secondary item id
    235  * @param int $total_items The total number of messaging-related notifications waiting for the user
    236  * @param string $format 'string' for BuddyBar-compatible notifications; 'array' for WP Toolbar
    237  */
    238 function messages_format_notifications( $action, $item_id, $secondary_item_id, $total_items, $format = 'string' ) {
    239 
    240         if ( 'new_message' == $action ) {
    241                 $link  = trailingslashit( bp_loggedin_user_domain() . bp_get_messages_slug() . '/inbox' );
    242                 $title = __( 'Inbox', 'buddypress' );
    243 
    244                 if ( (int) $total_items > 1 ) {
    245                         $text   = sprintf( __('You have %d new messages', 'buddypress' ), (int) $total_items );
    246                         $filter = 'bp_messages_multiple_new_message_notification';
    247                 } else {
    248                         if ( !empty( $secondary_item_id ) ) {
    249                                 $text = sprintf( __('You have %d new message from %s', 'buddypress' ), (int) $total_items, bp_core_get_user_displayname( $secondary_item_id ) );
    250                         } else {
    251                                 $text = sprintf( __('You have %d new message',         'buddypress' ), (int) $total_items );
    252                         }
    253                         $filter = 'bp_messages_single_new_message_notification';
    254                 }
    255         }
    256 
    257         if ( 'string' == $format ) {
    258                 $return = apply_filters( $filter, '<a href="' . $link . '" title="' . $title . '">' . $text . '</a>', (int) $total_items, $text, $link );
    259         } else {
    260                 $return = apply_filters( $filter, array(
    261                         'text' => $text,
    262                         'link' => $link
    263                 ), $link, (int) $total_items, $text, $link );
    264         }
    265 
    266         do_action( 'messages_format_notifications', $action, $item_id, $secondary_item_id, $total_items );
    267 
    268         return $return;
    269216}
  • plugins/buddypress/bp-messages/bp-messages-notifications.php

    diff --git a/plugins/buddypress/bp-messages/bp-messages-notifications.php b/plugins/buddypress/bp-messages/bp-messages-notifications.php
    index a55d0d1..1033896 100644
    a b  
    77 * @subpackage MessagesNotifications
    88 */
    99
    10 
    1110// Exit if accessed directly
    1211if ( !defined( 'ABSPATH' ) ) exit;
    1312
     13/** Email *********************************************************************/
     14
     15/**
     16 * Email message recipients to alert them of a new unread private message
     17 *
     18 * @since BuddyPress (1.0)
     19 * @param array $args
     20 */
    1421function messages_notification_new_message( $args = array() ) {
     22
     23        // Cast possible $message object as an array
     24        if ( is_object( $args ) ) {
     25                $args = (array) $args;
     26        }
    1527
    1628        // These should be extracted below
    1729        $recipients    = array();
    1830        $email_subject = $email_content = '';
     31        $sender_id     = 0;
    1932
     33        // Barf
    2034        extract( $args );
    2135
     36        // Get the sender display name
    2237        $sender_name = bp_core_get_user_displayname( $sender_id );
    2338
    2439        // Bail if no recipients
    2540        if ( ! empty( $recipients ) ) {
    2641
    27                 foreach( $recipients as $recipient ) {
     42                foreach ( $recipients as $recipient ) {
    2843
    29                         if ( $sender_id == $recipient->user_id || 'no' == bp_get_user_meta( $recipient->user_id, 'notification_messages_new_message', true ) )
     44                        if ( $sender_id == $recipient->user_id || 'no' == bp_get_user_meta( $recipient->user_id, 'notification_messages_new_message', true ) ) {
    3045                                continue;
     46                        }
    3147
    3248                        // User data and links
    33                         $ud            = get_userdata( $recipient->user_id );
     49                        $ud = get_userdata( $recipient->user_id );
    3450
    3551                        // Bail if user cannot be found
    36                         if ( empty( $ud ) )
     52                        if ( empty( $ud ) ) {
    3753                                continue;
     54                        }
    3855
    3956                        $message_link  = bp_core_get_user_domain( $recipient->user_id ) . bp_get_messages_slug() .'/';
    4057                        $settings_slug = function_exists( 'bp_get_settings_slug' ) ? bp_get_settings_slug() : 'settings';
     
    7794
    7895        do_action( 'bp_messages_sent_notification_email', $recipients, $email_subject, $email_content, $args );
    7996}
     97add_action( 'messages_message_sent', 'messages_notification_new_message', 10 );
     98
     99/** Notifications *************************************************************/
     100
     101/**
     102 * Format the BuddyBar/Toolbar notifications for the Messages component
     103 *
     104 * @since BuddyPress (1.0)
     105 * @param string $action The kind of notification being rendered
     106 * @param int $item_id The primary item id
     107 * @param int $secondary_item_id The secondary item id
     108 * @param int $total_items The total number of messaging-related notifications waiting for the user
     109 * @param string $format 'string' for BuddyBar-compatible notifications; 'array' for WP Toolbar
     110 */
     111function messages_format_notifications( $action, $item_id, $secondary_item_id, $total_items, $format = 'string' ) {
     112
     113        if ( 'new_message' === $action ) {
     114                $link  = trailingslashit( bp_loggedin_user_domain() . bp_get_messages_slug() . '/inbox' );
     115                $title = __( 'Inbox', 'buddypress' );
     116
     117                if ( (int) $total_items > 1 ) {
     118                        $text   = sprintf( __('You have %d new messages', 'buddypress' ), (int) $total_items );
     119                        $filter = 'bp_messages_multiple_new_message_notification';
     120                } else {
     121                        if ( !empty( $secondary_item_id ) ) {
     122                                $text = sprintf( __('You have %d new message from %s', 'buddypress' ), (int) $total_items, bp_core_get_user_displayname( $secondary_item_id ) );
     123                        } else {
     124                                $text = sprintf( __('You have %d new message',         'buddypress' ), (int) $total_items );
     125                        }
     126                        $filter = 'bp_messages_single_new_message_notification';
     127                }
     128        }
     129
     130        if ( 'string' === $format ) {
     131                $return = apply_filters( $filter, '<a href="' . esc_url( $link ) . '" title="' . esc_attr( $title ) . '">' . esc_html( $text ) . '</a>', (int) $total_items, $text, $link );
     132        } else {
     133                $return = apply_filters( $filter, array(
     134                        'text' => $text,
     135                        'link' => $link
     136                ), $link, (int) $total_items, $text, $link );
     137        }
     138
     139        do_action( 'messages_format_notifications', $action, $item_id, $secondary_item_id, $total_items );
     140
     141        return $return;
     142}
     143
     144/**
     145 * Send notifications to message recipients
     146 *
     147 * @since BuddyPress (1.9.0)
     148 * @param obj $message
     149 */
     150function bp_messages_message_sent_add_notification( $message ) {
     151        if ( bp_is_active( 'notifications' ) && ! empty( $message->recipients ) ) {
     152                foreach ( (array) $message->recipients as $recipient ) {
     153                        bp_notifications_add_notification( array(
     154                                'user_id'           => $recipient->user_id,
     155                                'item_id'           => $message->id,
     156                                'secondary_item_id' => $message->sender_id,
     157                                'component_name'    => buddypress()->messages->id,
     158                                'component_action'  => 'new_message',
     159                                'date_notified'     => bp_core_current_time(),
     160                                'is_new'            => 1,
     161                        ) );
     162                }
     163        }
     164}
     165add_action( 'messages_message_sent', 'bp_messages_message_sent_add_notification', 10 );
     166
     167/**
     168 * Mark new message notifications when member views their inbox.
     169 *
     170 * @since BuddyPress (1.9.0)
     171 */
     172function bp_messages_screen_inbox_mark_notifications() {
     173        if ( bp_is_active( 'notifications' ) ) {
     174                bp_notifications_mark_notifications_by_type( bp_loggedin_user_id(), buddypress()->messages->id, 'new_message' );
     175        }
     176}
     177add_action( 'messages_screen_inbox', 'bp_messages_screen_inbox_mark_notifications', 10 );
     178
     179/**
     180 * Mark new message notification when member reads a message thread directly.
     181 *
     182 * @since BuddyPress (1.9.0)
     183 */
     184function bp_messages_screen_conversation_mark_notifications() {
     185        if ( bp_is_active( 'notifications' ) ) {
     186                bp_notifications_mark_notifications_by_item_id( bp_loggedin_user_id(), (int) bp_action_variable( 0 ), buddypress()->messages->id, 'new_message' );
     187        }
     188}
     189add_action( 'messages_screen_conversation', 'bp_messages_screen_inbox_mark_notifications', 10 );
  • plugins/buddypress/bp-messages/bp-messages-template.php

    diff --git a/plugins/buddypress/bp-messages/bp-messages-template.php b/plugins/buddypress/bp-messages/bp-messages-template.php
    index 324b794..9827f52 100644
    a b  
    184184        if ( bp_is_current_action( 'notices' ) && !bp_current_user_can( 'bp_moderate' ) ) {
    185185                wp_redirect( bp_displayed_user_id() );
    186186        } else {
    187                 if ( bp_is_current_action( 'inbox' ) ) {
    188                         bp_core_mark_notifications_by_type( bp_loggedin_user_id(), $bp->messages->id, 'new_message' );
    189                 }
    190 
    191187                if ( bp_is_current_action( 'sentbox' ) ) {
    192188                        $box = 'sentbox';
    193189                }