Skip to:
Content

BuddyPress.org

Changeset 7135


Ignore:
Timestamp:
06/03/2013 02:32:50 AM (11 years ago)
Author:
boonebgorges
Message:

Introduces bp_user_query_online_interval filter

This will allow site admins or plugins to adjust the number of minutes used as
an interval when querying for 'online' users using BP_User_Query.

Fixes #4347

Location:
trunk
Files:
2 edited

Legend:

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

    r7024 r7135  
    199199
    200200            // 'online' query happens against the last_activity usermeta key
     201            // Filter 'bp_user_query_online_interval' to modify the
     202            // number of minutes used as an interval
    201203            case 'online' :
    202204                $this->uid_name = 'user_id';
    203205                $sql['select']  = "SELECT DISTINCT u.{$this->uid_name} as id FROM {$wpdb->usermeta} u";
    204206                $sql['where'][] = $wpdb->prepare( "u.meta_key = %s", bp_get_user_meta_key( 'last_activity' ) );
    205                 $sql['where'][] = 'u.meta_value >= DATE_SUB( UTC_TIMESTAMP(), INTERVAL 5 MINUTE )';
     207                $sql['where'][] = $wpdb->prepare( "u.meta_value >= DATE_SUB( UTC_TIMESTAMP(), INTERVAL %d MINUTE )", apply_filters( 'bp_user_query_online_interval', 15 ) );
    206208                $sql['orderby'] = "ORDER BY u.meta_value";
    207209                $sql['order']   = "DESC";
  • trunk/tests/testcases/core/class-bp-user-query.php

    r7090 r7135  
    103103    }
    104104
     105    /**
     106     * @group online
     107     */
     108    public function test_bp_user_query_type_online() {
     109        $now = time();
     110        $u1 = $this->create_user( array(
     111            'last_activity' => date( 'Y-m-d H:i:s', $now ),
     112        ) );
     113        $u2 = $this->create_user( array(
     114            'last_activity' => date( 'Y-m-d H:i:s', $now - 60*13 ),
     115        ) );
     116        $u3 = $this->create_user( array(
     117            'last_activity' => date( 'Y-m-d H:i:s', $now - 60*16 ),
     118        ) );
     119
     120        $q = new BP_User_Query( array(
     121            'type' => 'online',
     122        ) );
     123
     124        $users = is_array( $q->results ) ? array_values( $q->results ) : array();
     125        $user_ids = wp_parse_id_list( wp_list_pluck( $users, 'ID' ) );
     126        $this->assertEquals( array( $u1, $u2 ), $user_ids );
     127    }
     128
     129    /**
     130     * @group online
     131     */
     132    public function test_bp_user_query_type_online_five_minute_interval() {
     133        $now = time();
     134        $u1 = $this->create_user( array(
     135            'last_activity' => date( 'Y-m-d H:i:s', $now ),
     136        ) );
     137        $u2 = $this->create_user( array(
     138            'last_activity' => date( 'Y-m-d H:i:s', $now - 60*4 ),
     139        ) );
     140        $u3 = $this->create_user( array(
     141            'last_activity' => date( 'Y-m-d H:i:s', $now - 60*6 ),
     142        ) );
     143
     144        add_filter( 'bp_user_query_online_interval', create_function( '', 'return 5;' ) );
     145
     146        $q = new BP_User_Query( array(
     147            'type' => 'online',
     148        ) );
     149
     150        $users = is_array( $q->results ) ? array_values( $q->results ) : array();
     151        $user_ids = wp_parse_id_list( wp_list_pluck( $users, 'ID' ) );
     152        $this->assertEquals( array( $u1, $u2 ), $user_ids );
     153    }
     154
     155
    105156    public function test_bp_user_query_search_with_apostrophe() {
    106157        // Apostrophe. Search_terms must escaped to mimic POST payload
Note: See TracChangeset for help on using the changeset viewer.