Skip to:
Content

BuddyPress.org

Ticket #5193: 5193.02.patch

File 5193.02.patch, 30.9 KB (added by slaFFik, 9 years ago)

Some additions

  • 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 => '%#%',
     
    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(),
     
    656663 *
    657664 * @see bp_get_message_thread_avatar() for a description of arguments.
    658665 *
    659  * @param array $args See {@link bp_get_message_thread_avatar()}.
     666 * @param array|string $args See {@link bp_get_message_thread_avatar()}.
    660667 */
    661668function bp_message_thread_avatar( $args = '' ) {
    662669        echo bp_get_message_thread_avatar( $args );
     
    667674         * @see bp_core_fetch_avatar() For a description of arguments and
    668675         *      return values.
    669676         *
    670          * @param array $args {
     677         * @param array|string $args {
    671678         *     Arguments are listed here with an explanation of their defaults.
    672679         *     For more information about the arguments, see
    673680         *     {@link bp_core_fetch_avatar()}.
     
    678685         *     @type string|bool $id Default: false.
    679686         *     @type string $alt Default: 'Profile picture of [display name]'.
    680687         * }
    681          * @return User avatar string.
     688         * @return string User avatar string.
    682689         */
    683690        function bp_get_message_thread_avatar( $args = '' ) {
    684691                global $messages_template;
     
    745752function bp_messages_pagination_count() {
    746753        global $messages_template;
    747754
    748         $start_num = intval( ( $messages_template->pag_page - 1 ) * $messages_template->pag_num ) + 1;
    749         $from_num  = bp_core_number_format( $start_num );
    750         $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 ) );
    751         $total     = bp_core_number_format( $messages_template->total_thread_count );
     755        $start_num = apply_filters( 'bp_messages_pagination_count_start_num', intval( ( $messages_template->pag_page - 1 ) * $messages_template->pag_num ) + 1, $messages_template );
     756        $from_num  = apply_filters( 'bp_messages_pagination_count_from_number', bp_core_number_format( $start_num ), $start_num );
     757        $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 );
     758        $total     = apply_filters( 'bp_messages_pagination_count_total', bp_core_number_format( $messages_template->total_thread_count ), $messages_template );
    752759
    753760        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 ) );
    754761}
     
    763770        $default_search_value = bp_get_search_default_text( 'messages' );
    764771        $search_value         = !empty( $_REQUEST['s'] ) ? stripslashes( $_REQUEST['s'] ) : $default_search_value; ?>
    765772
     773        <!--suppress ALL -->
    766774        <form action="" method="get" id="search-message-form">
    767775                <label><input type="text" name="s" id="messages_search" <?php if ( $search_value === $default_search_value ) : ?>placeholder="<?php echo esc_html( $search_value ); ?>"<?php endif; ?> <?php if ( $search_value !== $default_search_value ) : ?>value="<?php echo esc_html( $search_value ); ?>"<?php endif; ?> /></label>
    768776                <input type="submit" id="messages_search_submit" name="messages_search_submit" value="<?php esc_attr_e( 'Search', 'buddypress' ) ?>" />
     
    798806         * @return string
    799807         */
    800808        function bp_get_messages_username_value() {
     809                $user_name = '';
     810
    801811                if ( isset( $_COOKIE['bp_messages_send_to'] ) ) {
    802                         return apply_filters( 'bp_get_messages_username_value', $_COOKIE['bp_messages_send_to'] );
     812                        $user_name = apply_filters( 'bp_get_messages_username_value', $_COOKIE['bp_messages_send_to'] );
    803813                } else if ( isset( $_GET['r'] ) && !isset( $_COOKIE['bp_messages_send_to'] ) ) {
    804                         return apply_filters( 'bp_get_messages_username_value', $_GET['r'] );
     814                        $user_name = apply_filters( 'bp_get_messages_username_value', $_GET['r'] );
    805815                }
     816
     817                return $user_name;
    806818        }
    807819
    808820/**
     
    854866 * Output the markup for the message type dropdown.
    855867 */
    856868function bp_messages_options() {
    857 ?>
    858869
     870        $messages_types = apply_filters( 'bp_messages_options_types', array(
     871                'empty'  => '',
     872                'read'   => _x('Read', 'Message dropdown filter', 'buddypress'),
     873                'unread' => _x('Unread', 'Message dropdown filter', 'buddypress'),
     874                'all'    => _x('All', 'Message dropdown filter', 'buddypress')
     875        ) );
     876        ?>
     877
    859878        <?php _e( 'Select:', 'buddypress' ) ?>
    860879
    861880        <select name="message-type-select" id="message-type-select">
    862                 <option value=""></option>
    863                 <option value="read"><?php _ex('Read', 'Message dropdown filter', 'buddypress') ?></option>
    864                 <option value="unread"><?php _ex('Unread', 'Message dropdown filter', 'buddypress') ?></option>
    865                 <option value="all"><?php _ex('All', 'Message dropdown filter', 'buddypress') ?></option>
     881
     882                <?php foreach($messages_types as $value => $label) : ?>
     883
     884                        <option value="<?php echo $value; ?>"><?php echo $label; ?></option>
     885
     886                <?php endforeach; ?>
     887
    866888        </select> &nbsp;
    867889
     890        <?php do_action( 'bp_messages_options_before_actions' ); ?>
     891
    868892        <?php if ( ! bp_is_current_action( 'sentbox' ) && ! bp_is_current_action( 'notices' ) ) : ?>
    869893
    870894                <a href="#" id="mark_as_read"><?php _ex('Mark as Read', 'Message management markup', 'buddypress') ?></a> &nbsp;
     
    874898
    875899        <a href="#" id="delete_<?php echo bp_current_action(); ?>_messages"><?php _e( 'Delete Selected', 'buddypress' ); ?></a> &nbsp;
    876900
     901        <?php do_action( 'bp_messages_options_after_actions' ); ?>
     902
    877903<?php
    878904}
    879905
     
    13081334                $this->message_count = count( $this->thread->messages );
    13091335
    13101336                $last_message_index                 = $this->message_count - 1;
    1311                 $this->thread->last_message_id      = $this->thread->messages[ $last_message_index ]->id;
    1312                 $this->thread->last_message_date    = $this->thread->messages[ $last_message_index ]->date_sent;
    1313                 $this->thread->last_sender_id       = $this->thread->messages[ $last_message_index ]->sender_id;
    1314                 $this->thread->last_message_subject = $this->thread->messages[ $last_message_index ]->subject;
    1315                 $this->thread->last_message_content = $this->thread->messages[ $last_message_index ]->message;
     1337                $this->thread->last_message_id      = apply_filters( 'messages_thread_template_id',        $this->thread->messages[ $last_message_index ]->id );
     1338                $this->thread->last_message_date    = apply_filters( 'messages_thread_template_date_sent', $this->thread->messages[ $last_message_index ]->date_sent );
     1339                $this->thread->last_sender_id       = apply_filters( 'messages_thread_template_sender_id', $this->thread->messages[ $last_message_index ]->sender_id );
     1340                $this->thread->last_message_subject = apply_filters( 'messages_thread_template_subject',   $this->thread->messages[ $last_message_index ]->subject );
     1341                $this->thread->last_message_content = apply_filters( 'messages_thread_template_message',   $this->thread->messages[ $last_message_index ]->message );
    13161342        }
    13171343
    13181344        /**
     
    13991425/**
    14001426 * Initialize the messages template loop for a specific thread.
    14011427 *
    1402  * @param array $args {
     1428 * @param array|string $args {
    14031429 *     Array of arguments. All are optional.
    14041430 *     @type int $thread_id ID of the thread whose messages you are displaying.
    14051431 *           Default: if viewing a thread, the thread ID will be parsed from
     
    14111437function bp_thread_has_messages( $args = '' ) {
    14121438        global $thread_template;
    14131439
    1414         $r = bp_parse_args( $args, array(
     1440        $r = apply_filters( 'messages_thread_has_messages_args', bp_parse_args( $args, array(
    14151441                'thread_id' => false,
    14161442                'order'     => 'ASC'
    1417         ), 'thread_has_messages' );
     1443        ), 'thread_has_messages' ) );
    14181444
    14191445        if ( empty( $r['thread_id'] ) && bp_is_messages_component() && bp_is_current_action( 'view' ) ) {
    14201446                $r['thread_id'] = (int) bp_action_variable( 0 );
     
    14221448
    14231449        $thread_template = new BP_Messages_Thread_Template( $r['thread_id'], $r['order'] );
    14241450
    1425         return $thread_template->has_messages();
     1451        return apply_filters( 'bp_thread_has_messages', $thread_template->has_messages(), $thread_template );
    14261452}
    14271453
    14281454/**
     
    14381464         */
    14391465        function bp_get_thread_messages_order() {
    14401466                global $thread_template;
    1441                 return $thread_template->thread->messages_order;
     1467                return apply_filters( 'bp_get_thread_messages_order', $thread_template->thread->messages_order );
    14421468        }
    14431469
    14441470/**
     
    15251551 */
    15261552function bp_get_thread_recipients_count() {
    15271553        global $thread_template;
    1528         return count( $thread_template->thread->recipients );
     1554        return apply_filters( 'bp_get_thread_recipients_count', count( $thread_template->thread->recipients ) );
    15291555}
    15301556
    15311557/**
     
    16751701/**
    16761702 * Output the avatar for the current message sender.
    16771703 *
    1678  * @param array $args See {@link bp_get_the_thread_message_sender_avatar_thumb()}
     1704 * @param array|string $args See {@link bp_get_the_thread_message_sender_avatar_thumb()}
    16791705 *        for a description.
    16801706 */
    16811707function bp_the_thread_message_sender_avatar( $args = '' ) {
     
    16841710        /**
    16851711         * Get the avatar for the current message sender.
    16861712         *
    1687          * @param array $args {
     1713         * @param array|string $args {
    16881714         *     Array of arguments. See {@link bp_core_fetch_avatar()} for more
    16891715         *     complete details. All arguments are optional.
    16901716         *     @type string $type Avatar type. Default: 'thumb'.