Skip to:
Content

Changeset 11578


Ignore:
Timestamp:
06/06/17 17:46:21 (7 months ago)
Author:
dcavins
Message:

Show displayed user's messages on messages screens.

When a site administrator visits another user’s messages, she is shown
her own messages because the display logic for messages refers to the
logged-in user rather than the displayed user. This changeset updates
the logic to allow the site admin to view and interact with another
user’s messages.

Fixes #7096.

Location:
trunk/src
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bp-messages/bp-messages-actions.php

    r11537 r11578  
    248248    } 
    249249 
    250     // Mark message read. 
    251     messages_mark_thread_read( $thread_id ); 
     250    /* 
     251     * Mark message read, but only run on the logged-in user's profile. 
     252     * If an admin visits a thread, it shouldn't change the read status. 
     253     */ 
     254    if ( bp_is_my_profile() ) { 
     255        messages_mark_thread_read( $thread_id ); 
     256    } 
    252257 
    253258    /** 
     
    320325 
    321326    // Check access to the message and mark as read. 
    322     if ( messages_check_thread_access( $id ) ) { 
     327    if ( messages_check_thread_access( $id ) || bp_current_user_can( 'bp_moderate' ) ) { 
    323328        messages_mark_thread_read( $id ); 
    324329        bp_core_add_message( __( 'Message marked as read.', 'buddypress' ) ); 
     
    361366 
    362367    // Check access to the message and mark unread. 
    363     if ( messages_check_thread_access( $id ) ) { 
     368    if ( messages_check_thread_access( $id ) || bp_current_user_can( 'bp_moderate' ) ) { 
    364369        messages_mark_thread_unread( $id ); 
    365370        bp_core_add_message( __( 'Message marked unread.', 'buddypress' ) ); 
     
    405410    // Make sure the user has access to all notifications before managing them. 
    406411    foreach ( $messages as $message ) { 
    407         if ( ! messages_check_thread_access( $message ) ) { 
     412        if ( ! messages_check_thread_access( $message ) && ! bp_current_user_can( 'bp_moderate' ) ) { 
    408413            bp_core_add_message( __( 'There was a problem managing your messages.', 'buddypress' ), 'error' ); 
    409414            bp_core_redirect( bp_displayed_user_domain() . bp_get_messages_slug() . '/' . bp_current_action() . '/' ); 
  • trunk/src/bp-messages/bp-messages-cache.php

    r10417 r11578  
    7575 * @param int|array $thread_ids If single thread, the thread ID. 
    7676 *                              Otherwise, an array of thread IDs. 
     77 * @param int       $user_id    ID of the user that the threads were deleted for. 
    7778 */ 
    78 function bp_messages_clear_cache_on_message_delete( $thread_ids ) { 
     79function bp_messages_clear_cache_on_message_delete( $thread_ids, $user_id ) { 
    7980    // Delete thread and thread recipient cache. 
    8081    foreach( (array) $thread_ids as $thread_id ) { 
     
    8485 
    8586    // Delete unread count for logged-in user. 
    86     wp_cache_delete( bp_loggedin_user_id(), 'bp_messages_unread_count' ); 
     87    wp_cache_delete( $user_id, 'bp_messages_unread_count' ); 
    8788} 
    88 add_action( 'messages_delete_thread', 'bp_messages_clear_cache_on_message_delete' ); 
     89add_action( 'messages_delete_thread', 'bp_messages_clear_cache_on_message_delete', 10, 2 ); 
    8990 
    9091/** 
  • trunk/src/bp-messages/bp-messages-functions.php

    r11562 r11578  
    255255 
    256256    if ( empty( $user_id ) ) { 
    257         $user_id = bp_loggedin_user_id(); 
     257        $user_id = 
     258            bp_displayed_user_id() ? 
     259            bp_displayed_user_id() : 
     260            bp_loggedin_user_id(); 
    258261    } 
    259262 
     
    381384 */ 
    382385function messages_get_unread_count( $user_id = 0 ) { 
    383     if ( empty( $user_id ) ) { 
    384         $user_id = bp_loggedin_user_id(); 
    385     } 
    386  
    387386    return BP_Messages_Thread::get_inbox_count( $user_id ); 
    388387} 
  • trunk/src/bp-messages/bp-messages-notifications.php

    r11022 r11578  
    172172    global $thread_template; 
    173173 
     174    /* 
     175     * Only run on the logged-in user's profile. 
     176     * If an admin visits a thread, it shouldn't change the read status. 
     177     */ 
     178    if ( ! bp_is_my_profile() ) { 
     179        return; 
     180    } 
     181 
    174182    // Get unread PM notifications for the user. 
    175183    $new_pm_notifications = BP_Notifications_Notification::get( array( 
  • trunk/src/bp-messages/bp-messages-star.php

    r10417 r11578  
    4242function bp_messages_is_message_starred( $mid = 0, $user_id = 0 ) { 
    4343    if ( empty( $user_id ) ) { 
    44         $user_id = bp_loggedin_user_id(); 
     44        $user_id = bp_displayed_user_id(); 
    4545    } 
    4646 
     
    255255        'thread_id'  => 0, 
    256256        'message_id' => 0, 
    257         'user_id'    => bp_loggedin_user_id(), 
     257        'user_id'    => bp_displayed_user_id(), 
    258258        'bulk'       => false 
    259259    ) ); 
     
    398398 
    399399    // Redirect back to previous screen. 
    400     $redirect = wp_get_referer() ? wp_get_referer() : bp_loggedin_user_domain() . bp_get_messages_slug(); 
     400    $redirect = wp_get_referer() ? wp_get_referer() : bp_displayed_user_domain() . bp_get_messages_slug(); 
    401401    bp_core_redirect( $redirect ); 
    402402    die(); 
  • trunk/src/bp-messages/bp-messages-template.php

    r11576 r11578  
    5959    // User ID 
    6060    // @todo displayed user for moderators that get this far? 
    61     $user_id = bp_loggedin_user_id(); 
     61    $user_id = bp_displayed_user_id(); 
    6262 
    6363    // Search Terms. 
     
    305305         * @param int    $thread_id ID of the thread. 
    306306         */ 
    307         return apply_filters( 'bp_get_message_thread_view_link', trailingslashit( bp_loggedin_user_domain() . bp_get_messages_slug() . '/view/' . $thread_id ), $thread_id ); 
     307        return apply_filters( 'bp_get_message_thread_view_link', trailingslashit( bp_displayed_user_domain() . bp_get_messages_slug() . '/view/' . $thread_id ), $thread_id ); 
    308308    } 
    309309 
     
    330330         * @param string $value Text indicating action being executed. 
    331331         */ 
    332         return apply_filters( 'bp_get_message_thread_delete_link', wp_nonce_url( trailingslashit( bp_loggedin_user_domain() . bp_get_messages_slug() . '/' . bp_current_action() . '/delete/' . $messages_template->thread->thread_id ), 'messages_delete_thread' ) ); 
     332        return apply_filters( 'bp_get_message_thread_delete_link', wp_nonce_url( trailingslashit( bp_displayed_user_domain() . bp_get_messages_slug() . '/' . bp_current_action() . '/delete/' . $messages_template->thread->thread_id ), 'messages_delete_thread' ) ); 
    333333    } 
    334334 
     
    362362 
    363363        // Base unread URL. 
    364         $url = trailingslashit( bp_loggedin_user_domain() . bp_get_messages_slug() . '/' . bp_current_action() . '/unread' ); 
     364        $url = trailingslashit( bp_displayed_user_domain() . bp_get_messages_slug() . '/' . bp_current_action() . '/unread' ); 
    365365 
    366366        // Add the args to the URL. 
     
    409409 
    410410        // Base read URL. 
    411         $url = trailingslashit( bp_loggedin_user_domain() . bp_get_messages_slug() . '/' . bp_current_action() . '/read' ); 
     411        $url = trailingslashit( bp_displayed_user_domain() . bp_get_messages_slug() . '/' . bp_current_action() . '/read' ); 
    412412 
    413413        // Add the args to the URL. 
     
    697697/** 
    698698 * Output the unread messages count for the current inbox. 
    699  */ 
    700 function bp_total_unread_messages_count() { 
    701     echo bp_get_total_unread_messages_count(); 
     699 * 
     700 * @since 2.6.x Added $user_id argument. 
     701 * 
     702 * @param int $user_id The user ID. 
     703 * 
     704 * @return int $unread_count Total inbox unread count for user. 
     705 */ 
     706function bp_total_unread_messages_count( $user_id = 0 ) { 
     707    echo bp_get_total_unread_messages_count( $user_id ); 
    702708} 
    703709    /** 
    704710     * Get the unread messages count for the current inbox. 
    705711     * 
    706      * @return int 
    707      */ 
    708     function bp_get_total_unread_messages_count() { 
     712     * @since 2.6.x Added $user_id argument. 
     713     * 
     714     * @param int $user_id The user ID. 
     715     * 
     716     * @return int $unread_count Total inbox unread count for user. 
     717     */ 
     718    function bp_get_total_unread_messages_count( $user_id = 0 ) { 
    709719 
    710720        /** 
     
    715725         * @param int $value Unread messages count for the current inbox. 
    716726         */ 
    717         return apply_filters( 'bp_get_total_unread_messages_count', BP_Messages_Thread::get_inbox_count() ); 
     727        return apply_filters( 'bp_get_total_unread_messages_count', BP_Messages_Thread::get_inbox_count( $user_id ) ); 
    718728    } 
    719729 
     
    825835         * @param string $value The form action. 
    826836         */ 
    827         return apply_filters( 'bp_get_messages_form_action', trailingslashit( bp_loggedin_user_domain() . bp_get_messages_slug() . '/' . bp_current_action() . '/' . bp_action_variable( 0 ) ) ); 
     837        return apply_filters( 'bp_get_messages_form_action', trailingslashit( bp_displayed_user_domain() . bp_get_messages_slug() . '/' . bp_current_action() . '/' . bp_action_variable( 0 ) ) ); 
    828838    } 
    829839 
     
    11541164         * @param string $value Text indicating action being executed. 
    11551165         */ 
    1156         return apply_filters( 'bp_get_message_notice_delete_link', wp_nonce_url( bp_loggedin_user_domain() . bp_get_messages_slug() . '/notices/delete/' . $messages_template->thread->id, 'messages_delete_thread' ) ); 
     1166        return apply_filters( 'bp_get_message_notice_delete_link', wp_nonce_url( bp_displayed_user_domain() . bp_get_messages_slug() . '/notices/delete/' . $messages_template->thread->id, 'messages_delete_thread' ) ); 
    11571167    } 
    11581168 
     
    11721182 
    11731183        if ( 1 === (int) $messages_template->thread->is_active ) { 
    1174             $link = wp_nonce_url( trailingslashit( bp_loggedin_user_domain() . bp_get_messages_slug() . '/notices/deactivate/' . $messages_template->thread->id ), 'messages_deactivate_notice' ); 
     1184            $link = wp_nonce_url( trailingslashit( bp_displayed_user_domain() . bp_get_messages_slug() . '/notices/deactivate/' . $messages_template->thread->id ), 'messages_deactivate_notice' ); 
    11751185        } else { 
    1176             $link = wp_nonce_url( trailingslashit( bp_loggedin_user_domain() . bp_get_messages_slug() . '/notices/activate/' . $messages_template->thread->id ), 'messages_activate_notice' ); 
     1186            $link = wp_nonce_url( trailingslashit( bp_displayed_user_domain() . bp_get_messages_slug() . '/notices/activate/' . $messages_template->thread->id ), 'messages_activate_notice' ); 
    11771187        } 
    11781188 
     
    19251935         * @param string $value Text indicating action being executed. 
    19261936         */ 
    1927         return apply_filters( 'bp_get_message_thread_delete_link', wp_nonce_url( bp_loggedin_user_domain() . bp_get_messages_slug() . '/inbox/delete/' . bp_get_the_thread_id(), 'messages_delete_thread' ) ); 
     1937        return apply_filters( 'bp_get_message_thread_delete_link', wp_nonce_url( bp_displayed_user_domain() . bp_get_messages_slug() . '/inbox/delete/' . bp_get_the_thread_id(), 'messages_delete_thread' ) ); 
    19281938    } 
    19291939 
  • trunk/src/bp-messages/classes/class-bp-messages-component.php

    r11577 r11578  
    146146        // Only grab count if we're on a user page and current user has access. 
    147147        if ( bp_is_user() && bp_user_has_access() ) { 
    148             $count    = bp_get_total_unread_messages_count(); 
     148            $count    = bp_get_total_unread_messages_count( bp_displayed_user_id() ); 
    149149            $class    = ( 0 === $count ) ? 'no-count' : 'count'; 
    150150            $nav_name = sprintf( 
     
    253253 
    254254            // Unread message count. 
    255             $count = messages_get_unread_count(); 
     255            $count = messages_get_unread_count( bp_loggedin_user_id() ); 
    256256            if ( !empty( $count ) ) { 
    257257                $title = sprintf( 
  • trunk/src/bp-messages/classes/class-bp-messages-thread.php

    r11447 r11578  
    145145        } 
    146146 
     147        $user_id = 
     148            bp_displayed_user_id() ? 
     149            bp_displayed_user_id() : 
     150            bp_loggedin_user_id(); 
     151 
    147152        // Merge $args with our defaults. 
    148153        $r = wp_parse_args( $args, array( 
    149             'user_id'           => bp_loggedin_user_id(), 
     154            'user_id'           => $user_id, 
    150155            'update_meta_cache' => true 
    151156        ) ); 
     
    614619        global $wpdb; 
    615620 
     621        $user_id = 
     622            bp_displayed_user_id() ? 
     623            bp_displayed_user_id() : 
     624            bp_loggedin_user_id(); 
     625 
    616626        $bp     = buddypress(); 
    617         $retval = $wpdb->query( $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 ) ); 
     627        $retval = $wpdb->query( $wpdb->prepare( "UPDATE {$bp->messages->table_name_recipients} SET unread_count = 0 WHERE user_id = %d AND thread_id = %d", $user_id, $thread_id ) ); 
    618628 
    619629        wp_cache_delete( 'thread_recipients_' . $thread_id, 'bp_messages' ); 
    620         wp_cache_delete( bp_loggedin_user_id(), 'bp_messages_unread_count' ); 
     630        wp_cache_delete( $user_id, 'bp_messages_unread_count' ); 
    621631 
    622632        /** 
     
    644654        global $wpdb; 
    645655 
     656        $user_id = 
     657            bp_displayed_user_id() ? 
     658            bp_displayed_user_id() : 
     659            bp_loggedin_user_id(); 
     660 
    646661        $bp     = buddypress(); 
    647         $retval = $wpdb->query( $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 ) ); 
     662        $retval = $wpdb->query( $wpdb->prepare( "UPDATE {$bp->messages->table_name_recipients} SET unread_count = 1 WHERE user_id = %d AND thread_id = %d", $user_id, $thread_id ) ); 
    648663 
    649664        wp_cache_delete( 'thread_recipients_' . $thread_id, 'bp_messages' ); 
    650         wp_cache_delete( bp_loggedin_user_id(), 'bp_messages_unread_count' ); 
     665        wp_cache_delete( $user_id, 'bp_messages_unread_count' ); 
    651666 
    652667        /** 
  • trunk/src/bp-templates/bp-legacy/buddypress/members/single/messages/messages-loop.php

    r11166 r11578  
    5151    do_action( 'bp_before_member_messages_threads' ); ?> 
    5252 
    53     <form action="<?php echo bp_loggedin_user_domain() . bp_get_messages_slug() . '/' . bp_current_action() ?>/bulk-manage/" method="post" id="messages-bulk-management"> 
     53    <form action="<?php echo bp_displayed_user_domain() . bp_get_messages_slug() . '/' . bp_current_action() ?>/bulk-manage/" method="post" id="messages-bulk-management"> 
    5454 
    5555        <table id="message-threads" class="messages-notices"> 
Note: See TracChangeset for help on using the changeset viewer.