Skip to:
Content

BuddyPress.org

Ticket #5193: 5193.patch

File 5193.patch, 29.3 KB (added by boonebgorges, 9 years ago)
  • src/bp-messages/bp-messages-classes.php

    diff --git src/bp-messages/bp-messages-classes.php src/bp-messages/bp-messages-classes.php
    index 088fefc..21306d0 100644
    class BP_Messages_Thread { 
    285285        public static function get_current_threads_for_user( $user_id, $box = 'inbox', $type = 'all', $limit = null, $page = null, $search_terms = '' ) {
    286286                global $wpdb, $bp;
    287287
    288                 $user_id_sql = $pag_sql = $type_sql = $search_sql = '';
     288                $user_id_sql  = $pag_sql = $type_sql = $search_sql = $total_threads = '';
     289                $thread_ids   = array();
     290                $box              = apply_filters( 'messages_thread_current_threads_box', $box );
     291                $type             = apply_filters( 'messages_thread_current_threads_type', $type );
     292                $search_terms = apply_filters( 'messages_thread_current_threads_search_terms', $search_terms );
    289293
    290294                if ( $limit && $page ) {
    291295                        $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) );
    class BP_Messages_Thread { 
    297301                        $type_sql = " AND r.unread_count = 0 ";
    298302                }
    299303
     304                $type_sql = apply_filters( 'messages_thread_current_threads_type_sql', $type_sql );
     305
    300306                if ( ! empty( $search_terms ) ) {
    301307                        $search_terms_like = '%' . bp_esc_like( $search_terms ) . '%';
    302308                        $search_sql        = $wpdb->prepare( "AND ( subject LIKE %s OR message LIKE %s )", $search_terms_like, $search_terms_like );
    303309                }
    304310
     311                $search_sql = apply_filters( 'messages_thread_current_threads_search_sql', $search_sql );
     312
    305313                if ( 'sentbox' == $box ) {
    306                         $user_id_sql = $wpdb->prepare( 'm.sender_id = %d', $user_id );
    307                         $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}" );
     314                        $user_id_sql   = $wpdb->prepare( 'm.sender_id = %d', $user_id );
     315                        $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}" );
    308316                        $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} " );
    309                 } else {
    310                         $user_id_sql = $wpdb->prepare( 'r.user_id = %d', $user_id );
    311                         $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}" );
     317                } elseif ( 'inbox' == $box ) {
     318                        $user_id_sql   = $wpdb->prepare( 'r.user_id = %d', $user_id );
     319                        $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}" );
    312320                        $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}" );
    313321                }
    314322
     323                $thread_ids    = apply_filters( 'messages_thread_current_threads_thread_ids',    $thread_ids );
     324                $total_threads = apply_filters( 'messages_thread_current_threads_total_threads', $total_threads );
     325
    315326                if ( empty( $thread_ids ) ) {
    316327                        return false;
    317328                }
    class BP_Messages_Thread { 
    347358         * @since BuddyPress (1.0.0)
    348359         *
    349360         * @param int $thread_id The message thread ID.
     361         * @return mixed False of failure, interger on success updating
    350362         */
    351363        public static function mark_as_read( $thread_id ) {
    352364                global $wpdb, $bp;
    353365
    354                 $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 );
    355                 $wpdb->query($sql);
     366                $user_id = bp_loggedin_user_id();
     367
     368                $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 );
     369                $result = $wpdb->query($sql);
     370
     371                do_action( 'messages_thread_marked_as_read', $user_id, $thread_id );
     372
     373                wp_cache_delete( $user_id, 'bp_messages_unread_count' );
    356374
    357                 wp_cache_delete( bp_loggedin_user_id(), 'bp_messages_unread_count' );
     375                return $result;
    358376        }
    359377
    360378        /**
    class BP_Messages_Thread { 
    363381         * @since BuddyPress (1.0.0)
    364382         *
    365383         * @param int $thread_id The message thread ID.
     384         * @return mixed False of failure, interger on success updating
    366385         */
    367386        public static function mark_as_unread( $thread_id ) {
    368387                global $wpdb, $bp;
    369388
    370                 $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 );
    371                 $wpdb->query($sql);
     389                $user_id = bp_loggedin_user_id();
    372390
    373                 wp_cache_delete( bp_loggedin_user_id(), 'bp_messages_unread_count' );
     391                $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 );
     392                $result = $wpdb->query($sql);
     393
     394                do_action( 'messages_thread_marked_as_unread', $user_id, $thread_id );
     395
     396                wp_cache_delete( $user_id, 'bp_messages_unread_count' );
     397
     398                return $result;
    374399        }
    375400
    376401        /**
    class BP_Messages_Thread { 
    388413        public static function get_total_threads_for_user( $user_id, $box = 'inbox', $type = 'all' ) {
    389414                global $wpdb, $bp;
    390415
    391                 $exclude_sender = '';
    392                 if ( $box != 'sentbox' )
    393                         $exclude_sender = ' AND sender_only != 1';
     416                $exclude_sender_sql = $type_sql = '';
     417
     418                if ( $box != 'sentbox' ) {
     419                        $exclude_sender_sql = ' AND sender_only != 1';
     420                }
     421
     422                $exclude_sender_sql = apply_filters( 'messages_thread_total_threads_for_user_exclude_sender_sql', $exclude_sender_sql, $user_id );
    394423
    395                 if ( $type == 'unread' )
     424                if ( $type == 'unread' ) {
    396425                        $type_sql = " AND unread_count != 0 ";
    397                 else if ( $type == 'read' )
     426                } else if ( $type == 'read' ) {
    398427                        $type_sql = " AND unread_count = 0 ";
     428                }
     429
     430                $type_sql = apply_filters( 'messages_thread_total_threads_for_user_type_sql', $type_sql, $user_id );
    399431
    400                 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 ) );
     432                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 );
    401433        }
    402434
    403435        /**
    class BP_Messages_Thread { 
    487519                if ( empty( $user_id ) )
    488520                        $user_id = bp_loggedin_user_id();
    489521
    490                 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 ) );
     522                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 );
    491523        }
    492524
    493525        /**
    class BP_Messages_Thread { 
    508540
    509541                $bp = buddypress();
    510542
    511                 return $wpdb->get_var( $wpdb->prepare( "SELECT thread_id FROM {$bp->messages->table_name_messages} WHERE thread_id = %d LIMIT 1", $thread_id ) );
     543                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 );
    512544        }
    513545
    514546        /**
    class BP_Messages_Thread { 
    525557         * @return string
    526558         */
    527559        public static function get_recipient_links( $recipients ) {
    528                 if ( count( $recipients ) >= 5 )
    529                         return sprintf( __( '%s Recipients', 'buddypress' ), number_format_i18n( count( $recipients ) ) );
     560                if ( count( $recipients ) >= 5 ) {
     561                        return sprintf(__('%s Recipients', 'buddypress'), number_format_i18n(count($recipients)));
     562                }
    530563
    531564                $recipient_links = array();
    532565
    class BP_Messages_Thread { 
    540573                        $recipient_links[] = $recipient_link;
    541574                }
    542575
     576                $recipient_links = apply_filters( 'messages_thread_recipient_links', $recipient_links );
     577
    543578                return implode( ', ', (array) $recipient_links );
    544579        }
    545580
    class BP_Messages_Message { 
    660695
    661696                if ( $message = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$bp->messages->table_name_messages} WHERE id = %d", $id ) ) ) {
    662697                        $this->id        = $message->id;
    663                         $this->thread_id = $message->thread_id;
    664                         $this->sender_id = $message->sender_id;
    665                         $this->subject   = $message->subject;
    666                         $this->message   = $message->message;
    667                         $this->date_sent = $message->date_sent;
     698                        $this->thread_id = apply_filters( 'messages_message_populate_thread_id', $message->thread_id );
     699                        $this->sender_id = apply_filters( 'messages_message_populate_sender_id', $message->sender_id );
     700                        $this->subject   = apply_filters( 'messages_message_populate_subject',   $message->subject   );
     701                        $this->message   = apply_filters( 'messages_message_populate_message',   $message->message   );
     702                        $this->date_sent = apply_filters( 'messages_message_populate_date_sent', $message->date_sent );
    668703                }
    669704        }
    670705
    class BP_Messages_Message { 
    686721                do_action_ref_array( 'messages_message_before_save', array( &$this ) );
    687722
    688723                // Make sure we have at least one recipient before sending.
    689                 if ( empty( $this->recipients ) )
     724                if ( empty( $this->recipients ) ) {
    690725                        return false;
     726                }
    691727
    692728                $new_thread = false;
    693729
    class BP_Messages_Message { 
    698734                }
    699735
    700736                // First insert the message into the messages table
    701                 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 ) ) )
     737                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 ) ) ) {
    702738                        return false;
     739                }
    703740
    704741                $this->id = $wpdb->insert_id;
    705742
    class BP_Messages_Message { 
    734771         */
    735772        public function get_recipients() {
    736773                global $bp, $wpdb;
    737                 return $wpdb->get_results( $wpdb->prepare( "SELECT user_id FROM {$bp->messages->table_name_recipients} WHERE thread_id = %d", $this->thread_id ) );
     774                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 );
    738775        }
    739776
    740777        /** Static Functions **************************************************/
    class BP_Messages_Message { 
    746783         * @return array
    747784         */
    748785        public static function get_recipient_ids( $recipient_usernames ) {
    749                 if ( !$recipient_usernames )
     786                if ( !$recipient_usernames ) {
    750787                        return false;
     788                }
     789
     790                $recipient_ids = array();
    751791
    752792                if ( is_array( $recipient_usernames ) ) {
    753793                        for ( $i = 0, $count = count( $recipient_usernames ); $i < $count; ++$i ) {
    class BP_Messages_Message { 
    757797                        }
    758798                }
    759799
    760                 return $recipient_ids;
     800                return apply_filters( 'messages_message_get_recipient_ids', $recipient_ids, $recipient_usernames );
    761801        }
    762802
    763803        /**
    class BP_Messages_Message { 
    768808         */
    769809        public static function get_last_sent_for_user( $thread_id ) {
    770810                global $wpdb, $bp;
    771                 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 ) );
     811                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 );
    772812        }
    773813
    774814        /**
    class BP_Messages_Message { 
    781821         */
    782822        public static function is_user_sender( $user_id, $message_id ) {
    783823                global $wpdb, $bp;
    784                 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 ) );
     824                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 );
    785825        }
    786826
    787827        /**
    class BP_Messages_Message { 
    792832         */
    793833        public static function get_message_sender( $message_id ) {
    794834                global $wpdb, $bp;
    795                 return $wpdb->get_var( $wpdb->prepare( "SELECT sender_id FROM {$bp->messages->table_name_messages} WHERE id = %d", $message_id ) );
     835                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 );
    796836        }
    797837}
    798838
    class BP_Messages_Notice { 
    865905                $notice = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$bp->messages->table_name_notices} WHERE id = %d", $this->id ) );
    866906
    867907                if ( $notice ) {
    868                         $this->subject   = $notice->subject;
    869                         $this->message   = $notice->message;
    870                         $this->date_sent = $notice->date_sent;
    871                         $this->is_active = $notice->is_active;
     908                        $this->subject   = apply_filters( 'messages_notice_populate_subject',   $notice->subject   );
     909                        $this->message   = apply_filters( 'messages_notice_populate_message',   $notice->message   );
     910                        $this->date_sent = apply_filters( 'messages_notice_populate_date_sent', $notice->date_sent );
     911                        $this->is_active = apply_filters( 'messages_notice_populate_is_active', $notice->is_active );
    872912                }
    873913        }
    874914
    class BP_Messages_Notice { 
    919959         * @return bool
    920960         */
    921961        public function activate() {
    922                 $this->is_active = 1;
     962                $this->is_active = apply_filters( 'messages_notice_activate', 1 );
    923963                return (bool) $this->save();
    924964        }
    925965
    class BP_Messages_Notice { 
    931971         * @return bool
    932972         */
    933973        public function deactivate() {
    934                 $this->is_active = 0;
     974                $this->is_active = apply_filters( 'messages_notice_deactivate', 0 );
    935975                return (bool) $this->save();
    936976        }
    937977
    class BP_Messages_Notice { 
    953993                        return false;
    954994                }
    955995
     996                do_action( 'messages_notice_after_delete' );
     997
    956998                return true;
    957999        }
    9581000
    class BP_Messages_Notice { 
    9801022                        'pag_page' => 1   // Page number
    9811023                ) );
    9821024
     1025                $r = apply_filters( 'messages_notice_get_notices_arg', $r);
     1026
    9831027                $limit_sql = '';
    9841028                if ( (int) $r['pag_num'] >= 0 ) {
    9851029                        $limit_sql = $wpdb->prepare( "LIMIT %d, %d", (int) ( ( $r['pag_page'] - 1 ) * $r['pag_num'] ), (int) $r['pag_num'] );
    class BP_Messages_Notice { 
    10021046
    10031047                $notice_count = $wpdb->get_var( "SELECT COUNT(id) FROM " . $bp->messages->table_name_notices );
    10041048
    1005                 return $notice_count;
     1049                return apply_filters( 'messages_notice_total_count', $notice_count );
    10061050        }
    10071051
    10081052        /**
  • src/bp-messages/bp-messages-functions.php

    diff --git src/bp-messages/bp-messages-functions.php src/bp-messages/bp-messages-functions.php
    index 3709533..8af9ca4 100644
    function messages_check_thread_access( $thread_id, $user_id = 0 ) { 
    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 );
    function messages_mark_thread_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

    diff --git src/bp-messages/bp-messages-template.php src/bp-messages/bp-messages-template.php
    index d71e9a1..2b9f6ff 100644
    class BP_Messages_Box_Template { 
    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'];
    class BP_Messages_Box_Template { 
    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 => '%#%',
    class BP_Messages_Box_Template { 
    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.
    function bp_has_message_threads( $args = '' ) { 
    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(),
    function bp_message_thread_unread_count() { 
    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 );
    function bp_message_thread_total_count( $thread_id = false ) { 
    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         */
    function bp_message_thread_total_count( $thread_id = false ) { 
    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 );
    function bp_message_thread_total_and_unread_count( $thread_id = false ) { 
    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 ) {
    function bp_message_thread_last_post_date() { 
    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 );
    function bp_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()}.
    function bp_message_thread_avatar( $args = '' ) { 
    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;
    function bp_messages_pagination() { 
    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}
    function bp_messages_username_value() { 
    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/**
    function bp_messages_content_value() { 
    10011012 * Output the markup for the message type dropdown.
    10021013 */
    10031014function bp_messages_options() {
    1004 ?>
     1015
     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        ?>
    10051023
    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;
    function bp_messages_options() { 
    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
    function bp_message_get_notices() { 
    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 );
    class BP_Messages_Thread_Template { 
    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        /**
    class BP_Messages_Thread_Template { 
    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
    function bp_thread_has_messages( $args = '' ) { 
    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/**
    function bp_thread_messages_order() { 
    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/**
    function bp_get_the_thread_recipients(){ 
    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/**
    function bp_the_thread_message_sender_id() { 
    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 = '' ) {
    function 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'.