Skip to:
Content

BuddyPress.org

Ticket #5193: 5193.01.patch

File 5193.01.patch, 28.4 KB (added by slaFFik, 9 years ago)

1 cumulative patch, please ignore all other non-5193 patches (oops, forgot file extension)

  • 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 ) ) ) {
     
    146147                        $this->sender_ids[$message->sender_id] = $message->sender_id;
    147148                }
    148149
     150                $this->sender_ids = apply_filters( 'messages_thread_populate_sender_ids', $this->sender_ids );
     151
    149152                // Fetch the recipients
    150                 $this->recipients = $this->get_recipients();
     153                $this->recipients = apply_filters( 'messages_thread_populate_recipients', $this->get_recipients() );
    151154
    152155                // Get the unread count for the logged in user
    153156                if ( isset( $this->recipients[bp_loggedin_user_id()] ) ) {
    154                         $this->unread_count = $this->recipients[bp_loggedin_user_id()]->unread_count;
     157                        $this->unread_count = apply_filters( 'messages_thread_populate_unread_count', $this->recipients[bp_loggedin_user_id()]->unread_count );
    155158                }
    156159        }
    157160
     
    190193                $recipients = array();
    191194                $results    = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$bp->messages->table_name_recipients} WHERE thread_id = %d", $this->thread_id ) );
    192195
    193                 foreach ( (array) $results as $recipient )
     196                foreach ( (array) $results as $recipient ) {
    194197                        $recipients[$recipient->user_id] = $recipient;
     198                }
    195199
    196                 return $recipients;
     200                return apply_filters( 'messages_thread_get_recipients', $recipients, $this->thread_id );
    197201        }
    198202
    199203        /** Static Functions ******************************************************/
     
    209213        public static function delete( $thread_id ) {
    210214                global $wpdb, $bp;
    211215
     216                do_action( 'messages_thread_delete_thread_before', $thread_id );
     217
    212218                // Mark messages as deleted
    213219                $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() ) );
    214220
     
    250256        public static function get_current_threads_for_user( $user_id, $box = 'inbox', $type = 'all', $limit = null, $page = null, $search_terms = '' ) {
    251257                global $wpdb, $bp;
    252258
    253                 $user_id_sql = $pag_sql = $type_sql = $search_sql = '';
     259                $user_id_sql  = $pag_sql = $type_sql = $search_sql = $total_threads = '';
     260                $thread_ids   = array();
     261                $box              = apply_filters( 'messages_thread_current_threads_box', $box );
     262                $type             = apply_filters( 'messages_thread_current_threads_type', $type );
     263                $search_terms = apply_filters( 'messages_thread_current_threads_search_terms', $search_terms );
    254264
    255265                if ( $limit && $page ) {
    256266                        $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) );
     
    262272                        $type_sql = " AND r.unread_count = 0 ";
    263273                }
    264274
     275                $type_sql = apply_filters( 'messages_thread_current_threads_type_sql', $type_sql );
     276
    265277                if ( ! empty( $search_terms ) ) {
    266278                        $search_terms_like = '%' . bp_esc_like( $search_terms ) . '%';
    267279                        $search_sql        = $wpdb->prepare( "AND ( subject LIKE %s OR message LIKE %s )", $search_terms_like, $search_terms_like );
    268280                }
    269281
     282                $search_sql = apply_filters( 'messages_thread_current_threads_search_sql', $search_sql );
     283
    270284                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}" );
     285                        $user_id_sql   = $wpdb->prepare( 'm.sender_id = %d', $user_id );
     286                        $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}" );
    273287                        $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}" );
     288                } elseif ( 'inbox' == $box ) {
     289                        $user_id_sql   = $wpdb->prepare( 'r.user_id = %d', $user_id );
     290                        $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}" );
    277291                        $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}" );
    278292                }
    279293
     294                $thread_ids    = apply_filters( 'messages_thread_current_threads_thread_ids',    $thread_ids );
     295                $total_threads = apply_filters( 'messages_thread_current_threads_total_threads', $total_threads );
     296
    280297                if ( empty( $thread_ids ) ) {
    281298                        return false;
    282299                }
     
    293310                        $threads[] = new BP_Messages_Thread( $thread_id );
    294311                }
    295312
    296                 return array( 'threads' => &$threads, 'total' => (int) $total_threads );
     313                return apply_filters( 'messages_thread_current_threads', array( 'threads' => &$threads, 'total' => (int) $total_threads ) );
    297314        }
    298315
    299316        /**
     
    306323        public static function mark_as_read( $thread_id ) {
    307324                global $wpdb, $bp;
    308325
    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 );
     326                $user_id = bp_loggedin_user_id();
     327
     328                $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 );
    310329                $wpdb->query($sql);
    311330
    312                 wp_cache_delete( bp_loggedin_user_id(), 'bp_messages_unread_count' );
     331                do_action( 'messages_thread_marked_as_read', $user_id, $thread_id );
     332
     333                wp_cache_delete( $user_id, 'bp_messages_unread_count' );
    313334        }
    314335
    315336        /**
     
    322343        public static function mark_as_unread( $thread_id ) {
    323344                global $wpdb, $bp;
    324345
    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 );
     346                $user_id = bp_loggedin_user_id();
     347
     348                $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 );
    326349                $wpdb->query($sql);
    327350
    328                 wp_cache_delete( bp_loggedin_user_id(), 'bp_messages_unread_count' );
     351                do_action( 'messages_thread_marked_as_unread', $user_id, $thread_id );
     352
     353                wp_cache_delete( $user_id, 'bp_messages_unread_count' );
    329354        }
    330355
    331356        /**
     
    343368        public static function get_total_threads_for_user( $user_id, $box = 'inbox', $type = 'all' ) {
    344369                global $wpdb, $bp;
    345370
    346                 $exclude_sender = '';
    347                 if ( $box != 'sentbox' )
    348                         $exclude_sender = ' AND sender_only != 1';
     371                $exclude_sender_sql = $type_sql = '';
    349372
    350                 if ( $type == 'unread' )
     373                if ( $box != 'sentbox' ) {
     374                        $exclude_sender_sql = ' AND sender_only != 1';
     375                }
     376
     377                $exclude_sender_sql = apply_filters( 'messages_thread_total_threads_for_user_exclude_sender_sql', $exclude_sender_sql, $user_id );
     378
     379                if ( $type == 'unread' ) {
    351380                        $type_sql = " AND unread_count != 0 ";
    352                 else if ( $type == 'read' )
     381                } else if ( $type == 'read' ) {
    353382                        $type_sql = " AND unread_count = 0 ";
     383                }
    354384
    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 ) );
     385                $type_sql = apply_filters( 'messages_thread_total_threads_for_user_type_sql', $type_sql, $user_id );
     386
     387                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 );
    356388        }
    357389
    358390        /**
     
    361393         * @since BuddyPress (1.0.0)
    362394         *
    363395         * @param int $thread_id The message thread ID.
    364          * @param bool
     396         * @return bool
    365397         */
    366398        public static function user_is_sender( $thread_id ) {
    367399                global $wpdb, $bp;
     
    434466                if ( empty( $user_id ) )
    435467                        $user_id = bp_loggedin_user_id();
    436468
    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 ) );
     469                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 );
    438470        }
    439471
    440472        /**
     
    455487
    456488                $bp = buddypress();
    457489
    458                 return $wpdb->get_var( $wpdb->prepare( "SELECT thread_id FROM {$bp->messages->table_name_messages} WHERE thread_id = %d LIMIT 1", $thread_id ) );
     490                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 );
    459491        }
    460492
    461493        /**
     
    468500         *
    469501         * @since BuddyPress (1.0.0)
    470502         *
    471          * @param object $recipients Object containing the message recipients.
     503         * @param array $recipients Array containing the message recipients (array of objects).
    472504         * @return string
    473505         */
    474506        public static function get_recipient_links( $recipients ) {
    475                 if ( count( $recipients ) >= 5 )
    476                         return sprintf( __( '%s Recipients', 'buddypress' ), number_format_i18n( count( $recipients ) ) );
     507                if ( count( $recipients ) >= 5 ) {
     508                        return sprintf(__('%s Recipients', 'buddypress'), number_format_i18n(count($recipients)));
     509                }
    477510
    478511                $recipient_links = array();
    479512
     
    487520                        $recipient_links[] = $recipient_link;
    488521                }
    489522
     523                $recipient_links = apply_filters( 'messages_thread_recipient_links', $recipient_links );
     524
    490525                return implode( ', ', (array) $recipient_links );
    491526        }
    492527
     
    607642
    608643                if ( $message = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$bp->messages->table_name_messages} WHERE id = %d", $id ) ) ) {
    609644                        $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;
     645                        $this->thread_id = apply_filters( 'messages_message_populate_thread_id', $message->thread_id );
     646                        $this->sender_id = apply_filters( 'messages_message_populate_sender_id', $message->sender_id );
     647                        $this->subject   = apply_filters( 'messages_message_populate_subject',   $message->subject   );
     648                        $this->message   = apply_filters( 'messages_message_populate_message',   $message->message   );
     649                        $this->date_sent = apply_filters( 'messages_message_populate_date_sent', $message->date_sent );
    615650                }
    616651        }
    617652
     
    633668                do_action_ref_array( 'messages_message_before_save', array( &$this ) );
    634669
    635670                // Make sure we have at least one recipient before sending.
    636                 if ( empty( $this->recipients ) )
     671                if ( empty( $this->recipients ) ) {
    637672                        return false;
     673                }
    638674
    639675                $new_thread = false;
    640676
     
    645681                }
    646682
    647683                // 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 ) ) )
     684                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 ) ) ) {
    649685                        return false;
     686                }
    650687
    651688                $this->id = $wpdb->insert_id;
    652689
     
    681718         */
    682719        public function get_recipients() {
    683720                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 ) );
     721                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 );
    685722        }
    686723
    687724        /** Static Functions **************************************************/
     
    693730         * @return array
    694731         */
    695732        public static function get_recipient_ids( $recipient_usernames ) {
    696                 if ( !$recipient_usernames )
     733                if ( !$recipient_usernames ) {
    697734                        return false;
     735                }
    698736
     737                $recipient_ids = array();
     738
    699739                if ( is_array( $recipient_usernames ) ) {
    700740                        for ( $i = 0, $count = count( $recipient_usernames ); $i < $count; ++$i ) {
    701741                                if ( $rid = bp_core_get_userid( trim($recipient_usernames[$i]) ) ) {
     
    704744                        }
    705745                }
    706746
    707                 return $recipient_ids;
     747                return apply_filters( 'messages_message_get_recipient_ids', $recipient_ids, $recipient_usernames );
    708748        }
    709749
    710750        /**
     
    715755         */
    716756        public static function get_last_sent_for_user( $thread_id ) {
    717757                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 ) );
     758                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 );
    719759        }
    720760
    721761        /**
     
    790830         * Constructor.
    791831         *
    792832         * @since BuddyPress (1.0.0)
     833         * @param null $id
    793834         */
    794835        public function __construct( $id = null ) {
    795836                if ( $id ) {
     
    811852                $notice = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$bp->messages->table_name_notices} WHERE id = %d", $this->id ) );
    812853
    813854                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;
     855                        $this->subject   = apply_filters( 'messages_notice_populate_subject',   $notice->subject   );
     856                        $this->message   = apply_filters( 'messages_notice_populate_message',   $notice->message   );
     857                        $this->date_sent = apply_filters( 'messages_notice_populate_date_sent', $notice->date_sent );
     858                        $this->is_active = apply_filters( 'messages_notice_populate_is_active', $notice->is_active );
    818859                }
    819860        }
    820861
     
    865906         * @return bool
    866907         */
    867908        public function activate() {
    868                 $this->is_active = 1;
     909                $this->is_active = apply_filters( 'messages_notice_activate', 1 );
    869910                return (bool) $this->save();
    870911        }
    871912
     
    877918         * @return bool
    878919         */
    879920        public function deactivate() {
    880                 $this->is_active = 0;
     921                $this->is_active = apply_filters( 'messages_notice_deactivate', 0 );
    881922                return (bool) $this->save();
    882923        }
    883924
     
    899940                        return false;
    900941                }
    901942
     943                do_action( 'messages_notice_after_delete' );
     944
    902945                return true;
    903946        }
    904947
     
    911954         *
    912955         * @since BuddyPress (1.0.0)
    913956         *
    914          * @param array $data {
     957         * @param array $args {
    915958         *     Array of parameters.
    916959         *     @type int $pag_num Number of notices per page. Defaults to 20.
    917960         *     @type int $pag_page The page number.  Defaults to 1.
     
    926969                        'pag_page' => 1   // Page number
    927970                ) );
    928971
     972                $r = apply_filters( 'messages_notice_get_notices_arg', $r);
     973
    929974                $limit_sql = '';
    930975                if ( (int) $r['pag_num'] >= 0 ) {
    931976                        $limit_sql = $wpdb->prepare( "LIMIT %d, %d", (int) ( ( $r['pag_page'] - 1 ) * $r['pag_num'] ), (int) $r['pag_num'] );
     
    948993
    949994                $notice_count = $wpdb->get_var( "SELECT COUNT(id) FROM " . $bp->messages->table_name_notices );
    950995
    951                 return $notice_count;
     996                return apply_filters( 'messages_notice_total_count', $notice_count );
    952997        }
    953998
    954999        /**
  • 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'.