Skip to:
Content

BuddyPress.org

Ticket #5193: 5193.04.patch

File 5193.04.patch, 31.8 KB (added by slaFFik, 10 years ago)

Last thing from the trunk that was left out of the board

  • src/bp-messages/bp-messages-classes.php

     
    109109         *
    110110         * @since BuddyPress (1.0.0)
    111111         *
    112          * @param int $thread_id The message thread ID.
     112         * @param bool|int $thread_id The message thread ID.
    113113         * @param string $order The order to sort the messages. Either 'ASC' or 'DESC'.
    114114         */
    115115        public function __construct( $thread_id = false, $order = 'ASC' ) {
     
    127127         *
    128128         * @param int $thread_id The message thread ID.
    129129         * @param string $order The order to sort the messages. Either 'ASC' or 'DESC'.
     130         * @return bool False on failure
    130131         */
    131132        public function populate( $thread_id, $order ) {
    132133                global $wpdb, $bp;
     
    135136                        $order= 'ASC';
    136137                }
    137138
    138                 $this->messages_order = $order;
     139                $this->messages_order = apply_filters( 'messages_thread_populate_order', $order );
    139140                $this->thread_id      = $thread_id;
    140141
    141142                if ( !$this->messages = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$bp->messages->table_name_messages} WHERE thread_id = %d ORDER BY date_sent " . $order, $this->thread_id ) ) ) {
    142143                        return false;
    143144                }
    144145
     146                $this->messages = apply_filters( 'messages_thread_messages', $this->messages );
     147
    145148                foreach ( (array) $this->messages as $key => $message ) {
    146149                        $this->sender_ids[$message->sender_id] = $message->sender_id;
    147150                }
    148151
     152                $this->sender_ids = apply_filters( 'messages_thread_populate_sender_ids', $this->sender_ids );
     153
    149154                // Fetch the recipients
    150                 $this->recipients = $this->get_recipients();
     155                $this->recipients = apply_filters( 'messages_thread_populate_recipients', $this->get_recipients() );
    151156
    152157                // Get the unread count for the logged in user
    153158                if ( isset( $this->recipients[bp_loggedin_user_id()] ) ) {
    154                         $this->unread_count = $this->recipients[bp_loggedin_user_id()]->unread_count;
     159                        $this->unread_count = apply_filters( 'messages_thread_populate_unread_count', $this->recipients[bp_loggedin_user_id()]->unread_count );
    155160                }
    156161        }
    157162
     
    190195                $recipients = array();
    191196                $results    = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$bp->messages->table_name_recipients} WHERE thread_id = %d", $this->thread_id ) );
    192197
    193                 foreach ( (array) $results as $recipient )
     198                foreach ( (array) $results as $recipient ) {
    194199                        $recipients[$recipient->user_id] = $recipient;
     200                }
    195201
    196                 return $recipients;
     202                return apply_filters( 'messages_thread_get_recipients', $recipients, $this->thread_id );
    197203        }
    198204
    199205        /** Static Functions ******************************************************/
     
    209215        public static function delete( $thread_id ) {
    210216                global $wpdb, $bp;
    211217
     218                do_action( 'messages_thread_delete_thread_before', $thread_id );
     219
    212220                // Mark messages as deleted
    213221                $wpdb->query( $wpdb->prepare( "UPDATE {$bp->messages->table_name_recipients} SET is_deleted = 1 WHERE thread_id = %d AND user_id = %d", $thread_id, bp_loggedin_user_id() ) );
    214222
     
    250258        public static function get_current_threads_for_user( $user_id, $box = 'inbox', $type = 'all', $limit = null, $page = null, $search_terms = '' ) {
    251259                global $wpdb, $bp;
    252260
    253                 $user_id_sql = $pag_sql = $type_sql = $search_sql = '';
     261                $user_id_sql  = $pag_sql = $type_sql = $search_sql = $total_threads = '';
     262                $thread_ids   = array();
     263                $box              = apply_filters( 'messages_thread_current_threads_box', $box );
     264                $type             = apply_filters( 'messages_thread_current_threads_type', $type );
     265                $search_terms = apply_filters( 'messages_thread_current_threads_search_terms', $search_terms );
    254266
    255267                if ( $limit && $page ) {
    256268                        $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) );
     
    262274                        $type_sql = " AND r.unread_count = 0 ";
    263275                }
    264276
     277                $type_sql = apply_filters( 'messages_thread_current_threads_type_sql', $type_sql );
     278
    265279                if ( ! empty( $search_terms ) ) {
    266280                        $search_terms_like = '%' . bp_esc_like( $search_terms ) . '%';
    267281                        $search_sql        = $wpdb->prepare( "AND ( subject LIKE %s OR message LIKE %s )", $search_terms_like, $search_terms_like );
    268282                }
    269283
     284                $search_sql = apply_filters( 'messages_thread_current_threads_search_sql', $search_sql );
     285
    270286                if ( 'sentbox' == $box ) {
    271                         $user_id_sql = $wpdb->prepare( 'm.sender_id = %d', $user_id );
    272                         $thread_ids  = $wpdb->get_results( "SELECT m.thread_id, MAX(m.date_sent) AS date_sent FROM {$bp->messages->table_name_recipients} r, {$bp->messages->table_name_messages} m WHERE m.thread_id = r.thread_id AND m.sender_id = r.user_id AND {$user_id_sql} AND r.is_deleted = 0 {$search_sql} GROUP BY m.thread_id ORDER BY date_sent DESC {$pag_sql}" );
     287                        $user_id_sql   = $wpdb->prepare( 'm.sender_id = %d', $user_id );
     288                        $thread_ids    = $wpdb->get_results( "SELECT m.thread_id, MAX(m.date_sent) AS date_sent FROM {$bp->messages->table_name_recipients} r, {$bp->messages->table_name_messages} m WHERE m.thread_id = r.thread_id AND m.sender_id = r.user_id AND {$user_id_sql} AND r.is_deleted = 0 {$search_sql} GROUP BY m.thread_id ORDER BY date_sent DESC {$pag_sql}" );
    273289                        $total_threads = $wpdb->get_var( "SELECT COUNT( DISTINCT m.thread_id ) FROM {$bp->messages->table_name_recipients} r, {$bp->messages->table_name_messages} m WHERE m.thread_id = r.thread_id AND m.sender_id = r.user_id AND {$user_id_sql} AND r.is_deleted = 0 {$search_sql} " );
    274                 } else {
    275                         $user_id_sql = $wpdb->prepare( 'r.user_id = %d', $user_id );
    276                         $thread_ids = $wpdb->get_results( "SELECT m.thread_id, MAX(m.date_sent) AS date_sent FROM {$bp->messages->table_name_recipients} r, {$bp->messages->table_name_messages} m WHERE m.thread_id = r.thread_id AND r.is_deleted = 0 AND {$user_id_sql} AND r.sender_only = 0 {$type_sql} {$search_sql} GROUP BY m.thread_id ORDER BY date_sent DESC {$pag_sql}" );
     290                } elseif ( 'inbox' == $box ) {
     291                        $user_id_sql   = $wpdb->prepare( 'r.user_id = %d', $user_id );
     292                        $thread_ids    = $wpdb->get_results( "SELECT m.thread_id, MAX(m.date_sent) AS date_sent FROM {$bp->messages->table_name_recipients} r, {$bp->messages->table_name_messages} m WHERE m.thread_id = r.thread_id AND r.is_deleted = 0 AND {$user_id_sql} AND r.sender_only = 0 {$type_sql} {$search_sql} GROUP BY m.thread_id ORDER BY date_sent DESC {$pag_sql}" );
    277293                        $total_threads = $wpdb->get_var( "SELECT COUNT( DISTINCT m.thread_id ) FROM {$bp->messages->table_name_recipients} r, {$bp->messages->table_name_messages} m WHERE m.thread_id = r.thread_id AND r.is_deleted = 0 AND {$user_id_sql} AND r.sender_only = 0 {$type_sql} {$search_sql}" );
    278294                }
    279295
     296                $thread_ids    = apply_filters( 'messages_thread_current_threads_thread_ids',    $thread_ids );
     297                $total_threads = apply_filters( 'messages_thread_current_threads_total_threads', $total_threads );
     298
    280299                if ( empty( $thread_ids ) ) {
    281300                        return false;
    282301                }
     
    293312                        $threads[] = new BP_Messages_Thread( $thread_id );
    294313                }
    295314
    296                 return array( 'threads' => &$threads, 'total' => (int) $total_threads );
     315                return apply_filters( 'messages_thread_current_threads', array( 'threads' => &$threads, 'total' => (int) $total_threads ) );
    297316        }
    298317
    299318        /**
     
    302321         * @since BuddyPress (1.0.0)
    303322         *
    304323         * @param int $thread_id The message thread ID.
     324         * @return mixed False of failure, interger on success updating
    305325         */
    306326        public static function mark_as_read( $thread_id ) {
    307327                global $wpdb, $bp;
    308328
    309                 $sql = $wpdb->prepare( "UPDATE {$bp->messages->table_name_recipients} SET unread_count = 0 WHERE user_id = %d AND thread_id = %d", bp_loggedin_user_id(), $thread_id );
    310                 $wpdb->query($sql);
     329                $user_id = bp_loggedin_user_id();
    311330
    312                 wp_cache_delete( bp_loggedin_user_id(), 'bp_messages_unread_count' );
     331                $sql    = $wpdb->prepare( "UPDATE {$bp->messages->table_name_recipients} SET unread_count = 0 WHERE user_id = %d AND thread_id = %d", $user_id, $thread_id );
     332                $result = $wpdb->query($sql);
     333
     334                do_action( 'messages_thread_marked_as_read', $user_id, $thread_id );
     335
     336                wp_cache_delete( $user_id, 'bp_messages_unread_count' );
     337
     338                return $result;
    313339        }
    314340
    315341        /**
     
    318344         * @since BuddyPress (1.0.0)
    319345         *
    320346         * @param int $thread_id The message thread ID.
     347         * @return mixed False of failure, interger on success updating
    321348         */
    322349        public static function mark_as_unread( $thread_id ) {
    323350                global $wpdb, $bp;
    324351
    325                 $sql = $wpdb->prepare( "UPDATE {$bp->messages->table_name_recipients} SET unread_count = 1 WHERE user_id = %d AND thread_id = %d", bp_loggedin_user_id(), $thread_id );
    326                 $wpdb->query($sql);
     352                $user_id = bp_loggedin_user_id();
    327353
    328                 wp_cache_delete( bp_loggedin_user_id(), 'bp_messages_unread_count' );
     354                $sql    = $wpdb->prepare( "UPDATE {$bp->messages->table_name_recipients} SET unread_count = 1 WHERE user_id = %d AND thread_id = %d", $user_id, $thread_id );
     355                $result = $wpdb->query($sql);
     356
     357                do_action( 'messages_thread_marked_as_unread', $user_id, $thread_id );
     358
     359                wp_cache_delete( $user_id, 'bp_messages_unread_count' );
     360
     361                return $result;
    329362        }
    330363
    331364        /**
     
    343376        public static function get_total_threads_for_user( $user_id, $box = 'inbox', $type = 'all' ) {
    344377                global $wpdb, $bp;
    345378
    346                 $exclude_sender = '';
    347                 if ( $box != 'sentbox' )
    348                         $exclude_sender = ' AND sender_only != 1';
     379                $exclude_sender_sql = $type_sql = '';
    349380
    350                 if ( $type == 'unread' )
     381                if ( $box != 'sentbox' ) {
     382                        $exclude_sender_sql = ' AND sender_only != 1';
     383                }
     384
     385                $exclude_sender_sql = apply_filters( 'messages_thread_total_threads_for_user_exclude_sender_sql', $exclude_sender_sql, $user_id );
     386
     387                if ( $type == 'unread' ) {
    351388                        $type_sql = " AND unread_count != 0 ";
    352                 else if ( $type == 'read' )
     389                } else if ( $type == 'read' ) {
    353390                        $type_sql = " AND unread_count = 0 ";
     391                }
    354392
    355                 return (int) $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(thread_id) FROM {$bp->messages->table_name_recipients} WHERE user_id = %d AND is_deleted = 0{$exclude_sender} {$type_sql}", $user_id ) );
     393                $type_sql = apply_filters( 'messages_thread_total_threads_for_user_type_sql', $type_sql, $user_id );
     394
     395                return apply_filters( 'messages_thread_total_threads_for_user', (int) $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(thread_id) FROM {$bp->messages->table_name_recipients} WHERE user_id = %d AND is_deleted = 0{$exclude_sender_sql} {$type_sql}", $user_id ) ), $user_id, $box, $type );
    356396        }
    357397
    358398        /**
     
    361401         * @since BuddyPress (1.0.0)
    362402         *
    363403         * @param int $thread_id The message thread ID.
    364          * @param bool
     404         * @return bool
    365405         */
    366406        public static function user_is_sender( $thread_id ) {
    367407                global $wpdb, $bp;
     
    416456                        wp_cache_set( $user_id, $unread_count, 'bp_messages_unread_count' );
    417457                }
    418458
    419                 return (int) $unread_count;
     459                return apply_filters( 'messages_thread_get_inbox_count', (int) $unread_count );
    420460        }
    421461
    422462        /**
     
    434474                if ( empty( $user_id ) )
    435475                        $user_id = bp_loggedin_user_id();
    436476
    437                 return $wpdb->get_var( $wpdb->prepare( "SELECT id FROM {$bp->messages->table_name_recipients} WHERE thread_id = %d AND is_deleted = 0 AND user_id = %d", $thread_id, $user_id ) );
     477                return apply_filters( 'messages_thread_check_access', $wpdb->get_var( $wpdb->prepare( "SELECT id FROM {$bp->messages->table_name_recipients} WHERE thread_id = %d AND is_deleted = 0 AND user_id = %d", $thread_id, $user_id ) ), $thread_id, $user_id );
    438478        }
    439479
    440480        /**
     
    455495
    456496                $bp = buddypress();
    457497
    458                 return $wpdb->get_var( $wpdb->prepare( "SELECT thread_id FROM {$bp->messages->table_name_messages} WHERE thread_id = %d LIMIT 1", $thread_id ) );
     498                return apply_filters( 'messages_thread_is_valid', $wpdb->get_var( $wpdb->prepare( "SELECT thread_id FROM {$bp->messages->table_name_messages} WHERE thread_id = %d LIMIT 1", $thread_id ) ), $thread_id );
    459499        }
    460500
    461501        /**
     
    468508         *
    469509         * @since BuddyPress (1.0.0)
    470510         *
    471          * @param object $recipients Object containing the message recipients.
     511         * @param array $recipients Array containing the message recipients (array of objects).
    472512         * @return string
    473513         */
    474514        public static function get_recipient_links( $recipients ) {
    475                 if ( count( $recipients ) >= 5 )
    476                         return sprintf( __( '%s Recipients', 'buddypress' ), number_format_i18n( count( $recipients ) ) );
     515                if ( count( $recipients ) >= 5 ) {
     516                        return sprintf(__('%s Recipients', 'buddypress'), number_format_i18n(count($recipients)));
     517                }
    477518
    478519                $recipient_links = array();
    479520
     
    487528                        $recipient_links[] = $recipient_link;
    488529                }
    489530
     531                $recipient_links = apply_filters( 'messages_thread_recipient_links', $recipient_links );
     532
    490533                return implode( ', ', (array) $recipient_links );
    491534        }
    492535
     
    607650
    608651                if ( $message = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$bp->messages->table_name_messages} WHERE id = %d", $id ) ) ) {
    609652                        $this->id        = $message->id;
    610                         $this->thread_id = $message->thread_id;
    611                         $this->sender_id = $message->sender_id;
    612                         $this->subject   = $message->subject;
    613                         $this->message   = $message->message;
    614                         $this->date_sent = $message->date_sent;
     653                        $this->thread_id = apply_filters( 'messages_message_populate_thread_id', $message->thread_id );
     654                        $this->sender_id = apply_filters( 'messages_message_populate_sender_id', $message->sender_id );
     655                        $this->subject   = apply_filters( 'messages_message_populate_subject',   $message->subject   );
     656                        $this->message   = apply_filters( 'messages_message_populate_message',   $message->message   );
     657                        $this->date_sent = apply_filters( 'messages_message_populate_date_sent', $message->date_sent );
    615658                }
    616659        }
    617660
     
    633676                do_action_ref_array( 'messages_message_before_save', array( &$this ) );
    634677
    635678                // Make sure we have at least one recipient before sending.
    636                 if ( empty( $this->recipients ) )
     679                if ( empty( $this->recipients ) ) {
    637680                        return false;
     681                }
    638682
    639683                $new_thread = false;
    640684
     
    645689                }
    646690
    647691                // First insert the message into the messages table
    648                 if ( !$wpdb->query( $wpdb->prepare( "INSERT INTO {$bp->messages->table_name_messages} ( thread_id, sender_id, subject, message, date_sent ) VALUES ( %d, %d, %s, %s, %s )", $this->thread_id, $this->sender_id, $this->subject, $this->message, $this->date_sent ) ) )
     692                if ( !$wpdb->query( $wpdb->prepare( "INSERT INTO {$bp->messages->table_name_messages} ( thread_id, sender_id, subject, message, date_sent ) VALUES ( %d, %d, %s, %s, %s )", $this->thread_id, $this->sender_id, $this->subject, $this->message, $this->date_sent ) ) ) {
    649693                        return false;
     694                }
    650695
    651696                $this->id = $wpdb->insert_id;
    652697
     
    681726         */
    682727        public function get_recipients() {
    683728                global $bp, $wpdb;
    684                 return $wpdb->get_results( $wpdb->prepare( "SELECT user_id FROM {$bp->messages->table_name_recipients} WHERE thread_id = %d", $this->thread_id ) );
     729                return apply_filters( 'messages_message_get_recipients', $wpdb->get_results( $wpdb->prepare( "SELECT user_id FROM {$bp->messages->table_name_recipients} WHERE thread_id = %d", $this->thread_id ) ), $this->thread_id );
    685730        }
    686731
    687732        /** Static Functions **************************************************/
     
    693738         * @return array
    694739         */
    695740        public static function get_recipient_ids( $recipient_usernames ) {
    696                 if ( !$recipient_usernames )
     741                if ( !$recipient_usernames ) {
    697742                        return false;
     743                }
    698744
     745                $recipient_ids = array();
     746
    699747                if ( is_array( $recipient_usernames ) ) {
    700748                        for ( $i = 0, $count = count( $recipient_usernames ); $i < $count; ++$i ) {
    701749                                if ( $rid = bp_core_get_userid( trim($recipient_usernames[$i]) ) ) {
     
    704752                        }
    705753                }
    706754
    707                 return $recipient_ids;
     755                return apply_filters( 'messages_message_get_recipient_ids', $recipient_ids, $recipient_usernames );
    708756        }
    709757
    710758        /**
     
    715763         */
    716764        public static function get_last_sent_for_user( $thread_id ) {
    717765                global $wpdb, $bp;
    718                 return $wpdb->get_var( $wpdb->prepare( "SELECT id FROM {$bp->messages->table_name_messages} WHERE sender_id = %d AND thread_id = %d ORDER BY date_sent DESC LIMIT 1", bp_loggedin_user_id(), $thread_id ) );
     766                return apply_filters( 'messages_message_last_sent_for_user', $wpdb->get_var( $wpdb->prepare( "SELECT id FROM {$bp->messages->table_name_messages} WHERE sender_id = %d AND thread_id = %d ORDER BY date_sent DESC LIMIT 1", bp_loggedin_user_id(), $thread_id ) ), $thread_id );
    719767        }
    720768
    721769        /**
     
    728776         */
    729777        public static function is_user_sender( $user_id, $message_id ) {
    730778                global $wpdb, $bp;
    731                 return $wpdb->get_var( $wpdb->prepare( "SELECT id FROM {$bp->messages->table_name_messages} WHERE sender_id = %d AND id = %d", $user_id, $message_id ) );
     779                return apply_filters( 'messages_message_is_user_sender', $wpdb->get_var( $wpdb->prepare( "SELECT id FROM {$bp->messages->table_name_messages} WHERE sender_id = %d AND id = %d", $user_id, $message_id ) ), $user_id, $message_id );
    732780        }
    733781
    734782        /**
     
    739787         */
    740788        public static function get_message_sender( $message_id ) {
    741789                global $wpdb, $bp;
    742                 return $wpdb->get_var( $wpdb->prepare( "SELECT sender_id FROM {$bp->messages->table_name_messages} WHERE id = %d", $message_id ) );
     790                return apply_filters( 'messages_message_get_message_sender', $wpdb->get_var( $wpdb->prepare( "SELECT sender_id FROM {$bp->messages->table_name_messages} WHERE id = %d", $message_id ) ), $message_id );
    743791        }
    744792}
    745793
     
    790838         * Constructor.
    791839         *
    792840         * @since BuddyPress (1.0.0)
     841         * @param null $id
    793842         */
    794843        public function __construct( $id = null ) {
    795844                if ( $id ) {
     
    811860                $notice = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$bp->messages->table_name_notices} WHERE id = %d", $this->id ) );
    812861
    813862                if ( $notice ) {
    814                         $this->subject   = $notice->subject;
    815                         $this->message   = $notice->message;
    816                         $this->date_sent = $notice->date_sent;
    817                         $this->is_active = $notice->is_active;
     863                        $this->subject   = apply_filters( 'messages_notice_populate_subject',   $notice->subject   );
     864                        $this->message   = apply_filters( 'messages_notice_populate_message',   $notice->message   );
     865                        $this->date_sent = apply_filters( 'messages_notice_populate_date_sent', $notice->date_sent );
     866                        $this->is_active = apply_filters( 'messages_notice_populate_is_active', $notice->is_active );
    818867                }
    819868        }
    820869
     
    865914         * @return bool
    866915         */
    867916        public function activate() {
    868                 $this->is_active = 1;
     917                $this->is_active = apply_filters( 'messages_notice_activate', 1 );
    869918                return (bool) $this->save();
    870919        }
    871920
     
    877926         * @return bool
    878927         */
    879928        public function deactivate() {
    880                 $this->is_active = 0;
     929                $this->is_active = apply_filters( 'messages_notice_deactivate', 0 );
    881930                return (bool) $this->save();
    882931        }
    883932
     
    899948                        return false;
    900949                }
    901950
     951                do_action( 'messages_notice_after_delete' );
     952
    902953                return true;
    903954        }
    904955
     
    911962         *
    912963         * @since BuddyPress (1.0.0)
    913964         *
    914          * @param array $data {
     965         * @param array $args {
    915966         *     Array of parameters.
    916967         *     @type int $pag_num Number of notices per page. Defaults to 20.
    917968         *     @type int $pag_page The page number.  Defaults to 1.
     
    926977                        'pag_page' => 1   // Page number
    927978                ) );
    928979
     980                $r = apply_filters( 'messages_notice_get_notices_arg', $r);
     981
    929982                $limit_sql = '';
    930983                if ( (int) $r['pag_num'] >= 0 ) {
    931984                        $limit_sql = $wpdb->prepare( "LIMIT %d, %d", (int) ( ( $r['pag_page'] - 1 ) * $r['pag_num'] ), (int) $r['pag_num'] );
     
    9481001
    9491002                $notice_count = $wpdb->get_var( "SELECT COUNT(id) FROM " . $bp->messages->table_name_notices );
    9501003
    951                 return $notice_count;
     1004                return apply_filters( 'messages_notice_total_count', $notice_count );
    9521005        }
    9531006
    9541007        /**
  • src/bp-messages/bp-messages-functions.php

     
    245245 * Wrapper for {@link BP_Messages_Thread::mark_as_read()}.
    246246 *
    247247 * @param int $thread_id ID of the thread.
     248 * @return mixed
    248249 */
    249250function messages_mark_thread_read( $thread_id ) {
    250251        return BP_Messages_Thread::mark_as_read( $thread_id );
     
    256257 * Wrapper for {@link BP_Messages_Thread::mark_as_unread()}.
    257258 *
    258259 * @param int $thread_id ID of the thread.
     260 * @return mixed
    259261 */
    260262function messages_mark_thread_unread( $thread_id ) {
    261263        return BP_Messages_Thread::mark_as_unread( $thread_id );
  • src/bp-messages/bp-messages-template.php

     
    130130                $this->pag_page = isset( $_GET[$page_arg] ) ? intval( $_GET[$page_arg] ) : 1;
    131131                $this->pag_num  = isset( $_GET['num'] )   ? intval( $_GET['num'] )   : $per_page;
    132132
    133                 $this->user_id      = $user_id;
    134                 $this->box          = $box;
    135                 $this->type         = $type;
    136                 $this->search_terms = $search_terms;
     133                $this->user_id      = apply_filters( 'bp_messages_box_template_user_id',          $user_id );
     134                $this->box          = apply_filters( 'bp_messages_box_template_box',              $box );
     135                $this->type         = apply_filters( 'bp_messages_box_template_type',             $type );
     136                $this->search_terms = apply_filters( 'bp_messages_box_template_search_terms', $search_terms );
    137137
    138138                if ( 'notices' == $this->box ) {
    139139                        $this->threads = BP_Messages_Notice::get_notices( array(
    140140                                'pag_num'  => $this->pag_num,
    141141                                'pag_page' => $this->pag_page
    142142                        ) );
    143                 } else {
     143                } elseif ( 'sentbox' == $this->box || 'inbox' == $this->box ) {
    144144                        $threads = BP_Messages_Thread::get_current_threads_for_user( $this->user_id, $this->box, $this->type, $this->pag_num, $this->pag_page, $this->search_terms );
    145145
    146146                        $this->threads            = $threads['threads'];
     
    172172                        }
    173173                }
    174174
     175                // These hooks needed for other boxes, which might not be processed above
     176                $this->threads                    = apply_filters( 'messages_box_template_threads',                $this->threads );
     177                $this->thread_count       = apply_filters( 'messages_box_template_thread_count',           $this->thread_count );
     178                $this->total_thread_count = apply_filters( 'messages_box_template_total_thread_count', $this->total_thread_count );
     179
    175180                if ( (int) $this->total_thread_count && (int) $this->pag_num ) {
    176181                        $pag_args = array(
    177182                                $page_arg => '%#%',
     
    323328 *
    324329 * @global BP_Messages_Box_Template $messages_template
    325330 *
    326  * @param array $args {
     331 * @param array|string $args {
    327332 *     Array of arguments. All are optional.
    328333 *     @type int $user_id ID of the user whose threads are being loaded.
    329334 *           Default: ID of the logged-in user.
     
    350355                $default_box = 'inbox';
    351356        }
    352357
     358        $default_box = apply_filters( 'messages_has_message_threads_default_box', $default_box );
     359
    353360        // Parse the arguments
    354361        $r = bp_parse_args( $args, array(
    355362                'user_id'      => bp_loggedin_user_id(),
     
    706713 *
    707714 * @since BuddyPress (2.2.0)
    708715 *
    709  * @param int $thread_id Optional. ID of the thread. Defaults to current thread ID.
     716 * @param int|bool $thread_id Optional. ID of the thread. Defaults to current thread ID.
    710717 */
    711718function bp_message_thread_total_count( $thread_id = false ) {
    712719        echo bp_get_message_thread_total_count( $thread_id );
     
    716723         *
    717724         * @since BuddyPress (2.2.0)
    718725         *
    719          * @param int $thread_id Optional. ID of the thread. Defaults to
     726         * @param int|bool $thread_id Optional. ID of the thread. Defaults to
    720727         *        current thread ID.
    721728         * @return int
    722729         */
     
    740747 *
    741748 * @since Buddypress (2.2.0)
    742749 *
    743  * @param int $thread_id Optional. ID of the thread. Default: current thread ID.
     750 * @param int|bool $thread_id Optional. ID of the thread. Default: current thread ID.
    744751 */
    745752function bp_message_thread_total_and_unread_count( $thread_id = false ) {
    746753        echo bp_get_message_thread_total_and_unread_count( $thread_id );
     
    748755        /**
    749756         * Get markup for the current thread's total and unread count.
    750757         *
    751          * @param int $thread_id Optional. ID of the thread. Default: current thread ID.
     758         * @param int|bool $thread_id Optional. ID of the thread. Default: current thread ID.
    752759         * @return string Markup displaying the total and unread count for the thread.
    753760         */
    754761        function bp_get_message_thread_total_and_unread_count( $thread_id = false ) {
     
    803810 *
    804811 * @see bp_get_message_thread_avatar() for a description of arguments.
    805812 *
    806  * @param array $args See {@link bp_get_message_thread_avatar()}.
     813 * @param array|string $args See {@link bp_get_message_thread_avatar()}.
    807814 */
    808815function bp_message_thread_avatar( $args = '' ) {
    809816        echo bp_get_message_thread_avatar( $args );
     
    814821         * @see bp_core_fetch_avatar() For a description of arguments and
    815822         *      return values.
    816823         *
    817          * @param array $args {
     824         * @param array|string $args {
    818825         *     Arguments are listed here with an explanation of their defaults.
    819826         *     For more information about the arguments, see
    820827         *     {@link bp_core_fetch_avatar()}.
     
    825832         *     @type string|bool $id Default: false.
    826833         *     @type string $alt Default: 'Profile picture of [display name]'.
    827834         * }
    828          * @return User avatar string.
     835         * @return string User avatar string.
    829836         */
    830837        function bp_get_message_thread_avatar( $args = '' ) {
    831838                global $messages_template;
     
    892899function bp_messages_pagination_count() {
    893900        global $messages_template;
    894901
    895         $start_num = intval( ( $messages_template->pag_page - 1 ) * $messages_template->pag_num ) + 1;
    896         $from_num  = bp_core_number_format( $start_num );
    897         $to_num    = bp_core_number_format( ( $start_num + ( $messages_template->pag_num - 1 ) > $messages_template->total_thread_count ) ? $messages_template->total_thread_count : $start_num + ( $messages_template->pag_num - 1 ) );
    898         $total     = bp_core_number_format( $messages_template->total_thread_count );
     902        $start_num = apply_filters( 'bp_messages_pagination_count_start_num', intval( ( $messages_template->pag_page - 1 ) * $messages_template->pag_num ) + 1, $messages_template );
     903        $from_num  = apply_filters( 'bp_messages_pagination_count_from_number', bp_core_number_format( $start_num ), $start_num );
     904        $to_num    = apply_filters( 'bp_messages_pagination_count_to_num', bp_core_number_format( ( $start_num + ( $messages_template->pag_num - 1 ) > $messages_template->total_thread_count ) ? $messages_template->total_thread_count : $start_num + ( $messages_template->pag_num - 1 ) ), $start_num, $messages_template );
     905        $total     = apply_filters( 'bp_messages_pagination_count_total', bp_core_number_format( $messages_template->total_thread_count ), $messages_template );
    899906
    900907        echo sprintf( _n( 'Viewing 1 message', 'Viewing %1$s - %2$s of %3$s messages', $total, 'buddypress' ), $from_num, $to_num, number_format_i18n( $total ) );
    901908}
     
    945952         * @return string
    946953         */
    947954        function bp_get_messages_username_value() {
     955                $user_name = '';
     956
    948957                if ( isset( $_COOKIE['bp_messages_send_to'] ) ) {
    949                         return apply_filters( 'bp_get_messages_username_value', $_COOKIE['bp_messages_send_to'] );
     958                        $user_name = apply_filters( 'bp_get_messages_username_value', $_COOKIE['bp_messages_send_to'] );
    950959                } else if ( isset( $_GET['r'] ) && !isset( $_COOKIE['bp_messages_send_to'] ) ) {
    951                         return apply_filters( 'bp_get_messages_username_value', $_GET['r'] );
     960                        $user_name = apply_filters( 'bp_get_messages_username_value', $_GET['r'] );
    952961                }
     962
     963                return $user_name;
    953964        }
    954965
    955966/**
     
    10011012 * Output the markup for the message type dropdown.
    10021013 */
    10031014function bp_messages_options() {
    1004 ?>
    10051015
     1016        $messages_types = apply_filters( 'bp_messages_options_types', array(
     1017                ''       => _x( 'Select', 'Message dropdown filter', 'buddypress' ),
     1018                'read'   => _x( 'Read', 'Message dropdown filter', 'buddypress' ),
     1019                'unread' => _x( 'Unread', 'Message dropdown filter', 'buddypress' ),
     1020                'all'    => _x( 'All', 'Message dropdown filter', 'buddypress' )
     1021        ) );
     1022        ?>
     1023
    10061024        <label for="message-type-select" class="bp-screen-reader-text">
    10071025                <?php _e( 'Select:', 'buddypress' ) ?>
    1008          </label>
     1026        </label>
    10091027
    10101028        <select name="message-type-select" id="message-type-select">
    1011                 <option value=""><?php _e( 'Select', 'buddypress' ); ?></option>
    1012                 <option value="read"><?php _ex('Read', 'Message dropdown filter', 'buddypress') ?></option>
    1013                 <option value="unread"><?php _ex('Unread', 'Message dropdown filter', 'buddypress') ?></option>
    1014                 <option value="all"><?php _ex('All', 'Message dropdown filter', 'buddypress') ?></option>
     1029
     1030                <?php foreach($messages_types as $value => $label) : ?>
     1031
     1032                        <option value="<?php echo $value; ?>"><?php echo $label; ?></option>
     1033
     1034                <?php endforeach; ?>
     1035
    10151036        </select> &nbsp;
    10161037
     1038        <?php do_action( 'bp_messages_options_before_actions' ); ?>
     1039
    10171040        <?php if ( ! bp_is_current_action( 'sentbox' ) && ! bp_is_current_action( 'notices' ) ) : ?>
    10181041
    10191042                <a href="#" id="mark_as_read"><?php _ex('Mark as Read', 'Message management markup', 'buddypress') ?></a> &nbsp;
     
    10231046
    10241047        <a href="#" id="delete_<?php echo bp_current_action(); ?>_messages"><?php _e( 'Delete Selected', 'buddypress' ); ?></a> &nbsp;
    10251048
     1049        <?php do_action( 'bp_messages_options_after_actions' ); ?>
     1050
    10261051<?php
    10271052}
    10281053
     
    12431268        $notice = BP_Messages_Notice::get_active();
    12441269
    12451270        if ( empty( $notice ) ) {
    1246                 return false;
     1271                return;
    12471272        }
    12481273
    12491274        $closed_notices = bp_get_user_meta( bp_loggedin_user_id(), 'closed_notices', true );
     
    14751500                $this->message_count = count( $this->thread->messages );
    14761501
    14771502                $last_message_index                 = $this->message_count - 1;
    1478                 $this->thread->last_message_id      = $this->thread->messages[ $last_message_index ]->id;
    1479                 $this->thread->last_message_date    = $this->thread->messages[ $last_message_index ]->date_sent;
    1480                 $this->thread->last_sender_id       = $this->thread->messages[ $last_message_index ]->sender_id;
    1481                 $this->thread->last_message_subject = $this->thread->messages[ $last_message_index ]->subject;
    1482                 $this->thread->last_message_content = $this->thread->messages[ $last_message_index ]->message;
     1503                $this->thread->last_message_id      = apply_filters( 'messages_thread_template_id',        $this->thread->messages[ $last_message_index ]->id );
     1504                $this->thread->last_message_date    = apply_filters( 'messages_thread_template_date_sent', $this->thread->messages[ $last_message_index ]->date_sent );
     1505                $this->thread->last_sender_id       = apply_filters( 'messages_thread_template_sender_id', $this->thread->messages[ $last_message_index ]->sender_id );
     1506                $this->thread->last_message_subject = apply_filters( 'messages_thread_template_subject',   $this->thread->messages[ $last_message_index ]->subject );
     1507                $this->thread->last_message_content = apply_filters( 'messages_thread_template_message',   $this->thread->messages[ $last_message_index ]->message );
    14831508        }
    14841509
    14851510        /**
     
    15661591/**
    15671592 * Initialize the messages template loop for a specific thread.
    15681593 *
    1569  * @param array $args {
     1594 * @param array|string $args {
    15701595 *     Array of arguments. All are optional.
    15711596 *     @type int $thread_id ID of the thread whose messages you are displaying.
    15721597 *           Default: if viewing a thread, the thread ID will be parsed from
     
    15891614
    15901615        $thread_template = new BP_Messages_Thread_Template( $r['thread_id'], $r['order'] );
    15911616
    1592         return $thread_template->has_messages();
     1617        return apply_filters( 'bp_thread_has_messages', $thread_template->has_messages(), $thread_template );
    15931618}
    15941619
    15951620/**
     
    16051630         */
    16061631        function bp_get_thread_messages_order() {
    16071632                global $thread_template;
    1608                 return $thread_template->thread->messages_order;
     1633                return apply_filters( 'bp_get_thread_messages_order', $thread_template->thread->messages_order );
    16091634        }
    16101635
    16111636/**
     
    16921717 */
    16931718function bp_get_thread_recipients_count() {
    16941719        global $thread_template;
    1695         return count( $thread_template->thread->recipients );
     1720        return apply_filters( 'bp_get_thread_recipients_count', count( $thread_template->thread->recipients ) );
    16961721}
    16971722
    16981723/**
     
    18421867/**
    18431868 * Output the avatar for the current message sender.
    18441869 *
    1845  * @param array $args See {@link bp_get_the_thread_message_sender_avatar_thumb()}
     1870 * @param array|string $args See {@link bp_get_the_thread_message_sender_avatar_thumb()}
    18461871 *        for a description.
    18471872 */
    18481873function bp_the_thread_message_sender_avatar( $args = '' ) {
     
    18511876        /**
    18521877         * Get the avatar for the current message sender.
    18531878         *
    1854          * @param array $args {
     1879         * @param array|string $args {
    18551880         *     Array of arguments. See {@link bp_core_fetch_avatar()} for more
    18561881         *     complete details. All arguments are optional.
    18571882         *     @type string $type Avatar type. Default: 'thumb'.