Skip to:
Content

BuddyPress.org

Changeset 5822


Ignore:
Timestamp:
02/21/2012 08:50:41 PM (12 years ago)
Author:
johnjamesjacoby
Message:

Add ajax search to Private Messages inbox and sentbox. Fixes #3993. Props sbrajesh.

Location:
trunk
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/bp-core/bp-core-template.php

    r5783 r5822  
    14531453}
    14541454
     1455function bp_is_messages_conversation() {
     1456    if ( bp_is_user_messages() && ( bp_is_current_action( 'view' ) ) )
     1457        return true;
     1458
     1459    return false;
     1460}
    14551461
    14561462function bp_is_single( $component, $callback ) {
  • trunk/bp-messages/bp-messages-classes.php

    r5729 r5822  
    8989    }
    9090
    91     function get_current_threads_for_user( $user_id, $box = 'inbox', $type = 'all', $limit = null, $page = null ) {
    92         global $wpdb, $bp;
    93 
    94         $pag_sql = $type_sql = '';
     91    function get_current_threads_for_user( $user_id, $box = 'inbox', $type = 'all', $limit = null, $page = null, $search_terms = '' ) {
     92        global $wpdb, $bp;
     93
     94        $pag_sql = $type_sql = $search_sql = '';
    9595        if ( $limit && $page )
    9696            $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) );
     
    101101            $type_sql = $wpdb->prepare( " AND r.unread_count = 0 " );
    102102
     103        if ( !empty( $search_terms ) ) {
     104            $search_terms = like_escape( $wpdb->escape( $search_terms ) );
     105            $search_sql   = "AND ( subject LIKE '%%$search_terms%%' OR message LIKE '%%$search_terms%%' )";
     106        }
     107               
    103108        if ( 'sentbox' == $box ) {
    104             $thread_ids = $wpdb->get_results( $wpdb->prepare( "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 m.sender_id = %d AND r.is_deleted = 0 GROUP BY m.thread_id ORDER BY date_sent DESC {$pag_sql}", $user_id ) );
    105             $total_threads = $wpdb->get_var( $wpdb->prepare( "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 m.sender_id = %d AND r.is_deleted = 0 ", $user_id ) );
     109            $thread_ids    = $wpdb->get_results( $wpdb->prepare( "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 m.sender_id = %d AND r.is_deleted = 0 {$search_sql} GROUP BY m.thread_id ORDER BY date_sent DESC {$pag_sql}", $user_id ) );
     110            $total_threads = $wpdb->get_var( $wpdb->prepare( "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 m.sender_id = %d AND r.is_deleted = 0 {$search_sql} ", $user_id ) );
    106111        } else {
    107             $thread_ids = $wpdb->get_results( $wpdb->prepare( "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 r.user_id = %d AND r.sender_only = 0 {$type_sql} GROUP BY m.thread_id ORDER BY date_sent DESC {$pag_sql}", $user_id ) );
    108             $total_threads = $wpdb->get_var( $wpdb->prepare( "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 r.user_id = %d AND r.sender_only = 0 {$type_sql}", $user_id ) );
     112            $thread_ids = $wpdb->get_results( $wpdb->prepare( "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 r.user_id = %d AND r.sender_only = 0 {$type_sql} {$search_sql} GROUP BY m.thread_id ORDER BY date_sent DESC {$pag_sql}", $user_id ) );
     113            $total_threads = $wpdb->get_var( $wpdb->prepare( "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 r.user_id = %d AND r.sender_only = 0 {$type_sql} {$search_sql} ", $user_id ) );
    109114        }
    110115
  • trunk/bp-messages/bp-messages-template.php

    r5773 r5822  
    2828    var $pag_num;
    2929    var $pag_links;
     30    var $search_terms;
    3031
    3132    function bp_messages_box_template( $user_id, $box, $per_page, $max, $type ) {
     
    3334    }
    3435
    35     function __construct( $user_id, $box, $per_page, $max, $type ) {
     36    function __construct( $user_id, $box, $per_page, $max, $type, $search_terms ) {
    3637        $this->pag_page = isset( $_GET['mpage'] ) ? intval( $_GET['mpage'] ) : 1;
    37         $this->pag_num  = isset( $_GET['num'] ) ? intval( $_GET['num'] ) : $per_page;
    38 
    39         $this->user_id  = $user_id;
    40         $this->box      = $box;
    41         $this->type     = $type;
    42 
     38        $this->pag_num  = isset( $_GET['num'] )   ? intval( $_GET['num'] )   : $per_page;
     39
     40        $this->user_id      = $user_id;
     41        $this->box          = $box;
     42        $this->type         = $type;
     43        $this->search_terms = $search_terms;
     44       
    4345        if ( 'notices' == $this->box ) {
    4446            $this->threads = BP_Messages_Notice::get_notices();
    4547        } else {
    46             $threads = BP_Messages_Thread::get_current_threads_for_user( $this->user_id, $this->box, $this->type, $this->pag_num, $this->pag_page );
     48            $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 );
    4749
    4850            $this->threads            = $threads['threads'];
     
    169171
    170172    $defaults = array(
    171         'user_id'  => bp_loggedin_user_id(),
    172         'box'      => 'inbox',
    173         'per_page' => 10,
    174         'max'      => false,
    175         'type'     => 'all'
     173        'user_id'      => bp_loggedin_user_id(),
     174        'box'          => 'inbox',
     175        'per_page'     => 10,
     176        'max'          => false,
     177        'type'         => 'all',
     178        'search_terms' => isset( $_REQUEST['s'] ) ? stripslashes( $_REQUEST['s'] ) : ''
    176179    );
    177180
     
    194197        }
    195198
    196         $messages_template = new BP_Messages_Box_Template( $user_id, $box, $per_page, $max, $type );
     199        $messages_template = new BP_Messages_Box_Template( $user_id, $box, $per_page, $max, $type, $search_terms );
    197200    }
    198201
     
    354357
    355358    echo sprintf( __( 'Viewing message %1$s to %2$s (of %3$s messages)', 'buddypress' ), $from_num, $to_num, $total ); ?><?php
     359}
     360
     361/**
     362 * Output the Private Message search form
     363 *
     364 * @since BuddyPress (1.6)
     365 */
     366function bp_message_search_form() {
     367
     368    $default_search_value = bp_get_search_default_text( 'messages' );
     369    $search_value         = !empty( $_REQUEST['s'] ) ? stripslashes( $_REQUEST['s'] ) : $default_search_value; ?>
     370
     371    <form action="" method="get" id="search-message-form">
     372        <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>
     373        <input type="submit" id="messages_search_submit" name="messages_search_submit" value="<?php _e( 'Search', 'buddypress' ) ?>" />
     374    </form>
     375
     376<?php
    356377}
    357378
  • trunk/bp-themes/bp-default/_inc/ajax.php

    r5737 r5822  
    101101    locate_template( array( "$object/$object-loop.php" ), true );
    102102}
    103 add_action( 'wp_ajax_members_filter', 'bp_dtheme_object_template_loader' );
    104 add_action( 'wp_ajax_groups_filter',  'bp_dtheme_object_template_loader' );
    105 add_action( 'wp_ajax_blogs_filter',   'bp_dtheme_object_template_loader' );
    106 add_action( 'wp_ajax_forums_filter',  'bp_dtheme_object_template_loader' );
     103add_action( 'wp_ajax_members_filter',  'bp_dtheme_object_template_loader'   );
     104add_action( 'wp_ajax_groups_filter',   'bp_dtheme_object_template_loader'   );
     105add_action( 'wp_ajax_blogs_filter',    'bp_dtheme_object_template_loader'   );
     106add_action( 'wp_ajax_forums_filter',   'bp_dtheme_object_template_loader'   );
     107add_action( 'wp_ajax_messages_filter', 'bp_dtheme_messages_template_loader' );
     108
     109/*
     110 * Load messages when searched on the private message page
     111 */
     112
     113function bp_dtheme_messages_template_loader(){
     114    locate_template( array( 'members/single/messages/messages-loop.php' ), true );
     115}
    107116
    108117// This function will load the activity loop template when activity is requested via AJAX
  • trunk/bp-themes/bp-default/_inc/css/default-rtl.css

    r5509 r5822  
    762762    text-align: left;
    763763}
     764div.message-search {
     765    float: left;
     766}
  • trunk/bp-themes/bp-default/_inc/css/default.css

    r5797 r5822  
    23612361}
    23622362
     2363div.message-search {
     2364    float: right;
     2365    margin: 0 20px;
     2366}
     2367
    23632368/*--------------------------------------------------------------
    236423696.9 - Extended Profiles
  • trunk/bp-themes/bp-default/_inc/global.js

    r5792 r5822  
    982982    /** Private Messaging ******************************************/
    983983
     984    /** Message search*/
     985    jq('.message-search').click( function(event) {
     986        if ( jq(this).hasClass('no-ajax') )
     987            return;
     988
     989        var target = jq(event.target);
     990
     991        if ( target.attr('type') == 'submit' ) {
     992            //var css_id = jq('.item-list-tabs li.selected').attr('id').split( '-' );
     993            var object = 'messages';
     994
     995            bp_filter_request( object, jq.cookie('bp-' + object + '-filter'), jq.cookie('bp-' + object + '-scope') , 'div.' + object, target.parent().children('label').children('input').val(), 1, jq.cookie('bp-' + object + '-extras') );
     996
     997            return false;
     998        }
     999    });
     1000
    9841001    /* AJAX send reply functionality */
    9851002    jq("input#send_reply_button").click(
  • trunk/bp-themes/bp-default/members/single/messages.php

    r3810 r5822  
    1616
    1717    </ul>
     18   
     19    <?php if ( bp_is_messages_inbox() || bp_is_messages_sentbox() ) : ?>
     20
     21        <div class="message-search"><?php bp_message_search_form(); ?></div>
     22
     23    <?php endif; ?>
     24
    1825</div><!-- .item-list-tabs -->
    1926
  • trunk/bp-themes/bp-default/members/single/messages/messages-loop.php

    r5737 r5822  
    11<?php do_action( 'bp_before_member_messages_loop' ); ?>
    22
    3 <?php if ( bp_has_message_threads() ) : ?>
     3<?php if ( bp_has_message_threads( bp_ajax_querystring( 'messages' ) ) ) : ?>
    44
    55    <div class="pagination no-ajax" id="user-pag">
     
    1616
    1717    <?php do_action( 'bp_after_member_messages_pagination' ); ?>
    18     <?php do_action( 'bp_before_member_messages_threads' ); ?>
     18
     19    <?php do_action( 'bp_before_member_messages_threads'   ); ?>
    1920
    2021    <table id="message-threads" class="messages-notices">
Note: See TracChangeset for help on using the changeset viewer.