Skip to:
Content

BuddyPress.org

Ticket #6483: 6483.02.patch

File 6483.02.patch, 4.9 KB (added by imath, 10 years ago)
  • src/bp-messages/bp-messages-star.php

    diff --git src/bp-messages/bp-messages-star.php src/bp-messages/bp-messages-star.php
    index 08e4143..59d662e 100644
    function bp_messages_star_content() { 
    350350 * @return array
    351351 */
    352352function bp_messages_filter_starred_message_threads( $r = array() ) {
    353         $r['user_id'] = 0;
     353        $r['box'] = 'starred';
    354354        $r['meta_query'] = array( array(
    355355                'key'   => 'starred_by_user',
    356356                'value' => bp_loggedin_user_id()
  • src/bp-messages/classes/class-bp-messages-thread.php

    diff --git src/bp-messages/classes/class-bp-messages-thread.php src/bp-messages/classes/class-bp-messages-thread.php
    index f7e81f3..617c24c 100644
    class BP_Messages_Thread { 
    460460                        $search_sql        = $wpdb->prepare( "AND ( subject LIKE %s OR message LIKE %s )", $search_terms_like, $search_terms_like );
    461461                }
    462462
     463                // Default deleted SQL
     464                $deleted_sql = 'r.is_deleted = 0';
     465
     466                // Set up SQL statements depending on message box type and user ID
    463467                if ( ! empty( $r['user_id'] ) ) {
    464                         if ( 'sentbox' == $r['box'] ) {
    465                                 $user_id_sql = 'AND ' . $wpdb->prepare( 'm.sender_id = %d', $r['user_id'] );
    466                                 $sender_sql  = ' AND m.sender_id = r.user_id';
    467                         } else {
    468                                 $user_id_sql = 'AND ' . $wpdb->prepare( 'r.user_id = %d', $r['user_id'] );
    469                                 $sender_sql  = ' AND r.sender_only = 0';
     468                        switch ( $r['box'] ) {
     469                                case 'sentbox' :
     470                                        $user_id_sql = 'AND ' . $wpdb->prepare( 'm.sender_id = %d', $r['user_id'] );
     471                                        $sender_sql  = ' AND m.sender_id = r.user_id';
     472                                        break;
     473
     474                                case 'inbox' :
     475                                        $user_id_sql = 'AND ' . $wpdb->prepare( 'r.user_id = %d', $r['user_id'] );
     476                                        $sender_sql  = ' AND r.sender_only = 0';
     477                                        break;
     478
     479                                default :
     480                                        // Omit user-deleted threads from all other custom message boxes
     481                                        $deleted_sql = $wpdb->prepare( '( r.user_id = %d AND r.is_deleted = 0 )', $r['user_id'] );
     482                                        break;
    470483                        }
    471484                }
    472485
    class BP_Messages_Thread { 
    485498                $sql = array();
    486499                $sql['select'] = 'SELECT m.thread_id, MAX(m.date_sent) AS date_sent';
    487500                $sql['from']   = "FROM {$bp->messages->table_name_recipients} r INNER JOIN {$bp->messages->table_name_messages} m ON m.thread_id = r.thread_id {$meta_query_sql['join']}";
    488                 $sql['where']  = "WHERE r.is_deleted = 0 {$user_id_sql} {$sender_sql} {$type_sql} {$search_sql} {$meta_query_sql['where']}";
     501                $sql['where']  = "WHERE {$deleted_sql} {$user_id_sql} {$sender_sql} {$type_sql} {$search_sql} {$meta_query_sql['where']}";
    489502                $sql['misc']   = "GROUP BY m.thread_id ORDER BY date_sent DESC {$pag_sql}";
    490503
    491504                // get thread IDs
  • tests/phpunit/testcases/messages/star.php

    diff --git tests/phpunit/testcases/messages/star.php tests/phpunit/testcases/messages/star.php
    index 476fecc..5b1bfba 100644
    class BP_Tests_Messages_Star_ extends BP_UnitTestCase { 
    107107        }
    108108
    109109        /**
     110         * @group bp_messages_filter_starred_message_threads
     111         */
     112        public function test_get_starred_threads_without_deleted_thread() {
     113                $old_current_user = get_current_user_id();
     114                $u1 = $this->factory->user->create();
     115                $u2 = $this->factory->user->create();
     116
     117                // create three threads
     118                $t1 = $this->factory->message->create( array(
     119                        'sender_id'  => $u1,
     120                        'recipients' => array( $u2 ),
     121                        'subject'    => 'A',
     122                ) );
     123                $t2 = $this->factory->message->create( array(
     124                        'sender_id'  => $u1,
     125                        'recipients' => array( $u2 ),
     126                        'subject'    => 'B',
     127                ) );
     128                $t3 = $this->factory->message->create( array(
     129                        'sender_id'  => $u1,
     130                        'recipients' => array( $u2 ),
     131                        'subject'    => 'C',
     132                ) );
     133
     134                // grab the message ids as individual variables
     135                list( $m1 ) = $this->get_message_ids( $t1 );
     136                list( $m2 ) = $this->get_message_ids( $t2 );
     137                list( $m3 ) = $this->get_message_ids( $t3 );
     138
     139                // star all threads
     140                bp_messages_star_set_action( array(
     141                        'user_id'    => $u2,
     142                        'message_id' => $m1,
     143                ) );
     144                bp_messages_star_set_action( array(
     145                        'user_id'    => $u2,
     146                        'message_id' => $m2,
     147                ) );
     148                bp_messages_star_set_action( array(
     149                        'user_id'    => $u2,
     150                        'message_id' => $m3,
     151                ) );
     152
     153                // delete the second thread
     154                $this->set_current_user( $u2 );
     155                messages_delete_thread( $t2 );
     156
     157                // load the starred threads loop
     158                global $messages_template;
     159                add_filter( 'bp_after_has_message_threads_parse_args', 'bp_messages_filter_starred_message_threads' );
     160                bp_has_message_threads();
     161                remove_filter( 'bp_after_has_message_threads_parse_args', 'bp_messages_filter_starred_message_threads' );
     162
     163                // assert that second thread isn't in starred thread loop
     164                $thread_ids = wp_list_pluck( $messages_template->threads, 'thread_id' );
     165                $this->assertFalse( in_array( $t2, $thread_ids ) );
     166
     167                // reset
     168                $this->set_current_user( $old_current_user );
     169        }
     170
     171        /**
    110172         * Helper method to grab the message IDs from a message thread.
    111173         *
    112174         * @param int $thread_id The message thread ID