Skip to:
Content

BuddyPress.org

Changeset 7860


Ignore:
Timestamp:
02/12/2014 09:27:20 PM (13 years ago)
Author:
boonebgorges
Message:

Migrate user 'last_activity' data from usermeta to the activity table

Storing last_activity in usermeta caused severe bottlenecks on sites with
large user bases. The usermeta table has a tendency to get bloated. Its
option_value column is not indexed, and even if it were, it would not be
indexed properly for the kind of chronological sorting that BuddyPress was
using it for.

This changeset refactors all core last_activity user functionality, so that
the data is stored in the wp_bp_activity table (even when the activity
component is disabled).

For backward compatibility with plugins that reference last_activity metadata
entries, all last_activity data is retained in wp_usermeta, and new data will
be mirrored there until further notice.

See #5128

Location:
trunk
Files:
11 edited

Legend:

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

    r7854 r7860  
    362362                }
    363363
     364                // Exclude 'last_activity' items unless the 'action' filter has
     365                // been explicitly set
     366                if ( empty( $filter['object'] ) ) {
     367                        $where_conditions[] = "a.type != 'last_activity'";
     368                }
     369
    364370                // Filter the where conditions
    365371                $where_conditions = apply_filters( 'bp_activity_get_where_conditions', $where_conditions, $r, $select_sql, $from_sql, $join_sql );
     
    10631069
    10641070                // split items at the comma
    1065                 $items_dirty = explode( ',', $items );
     1071                if ( ! is_array( $items ) ) {
     1072                        $items = explode( ',', $items );
     1073                }
    10661074
    10671075                // array of prepared integers or quoted strings
     
    10691077
    10701078                // clean up and format each item
    1071                 foreach ( $items_dirty as $item ) {
     1079                foreach ( $items as $item ) {
    10721080                        // clean up the string
    10731081                        $item = trim( $item );
     
    11211129                if ( !empty( $filter_array['action'] ) ) {
    11221130                        $action_sql = BP_Activity_Activity::get_in_operator_sql( 'a.type', $filter_array['action'] );
    1123                         if ( !empty( $action_sql ) )
     1131                        if ( ! empty( $action_sql ) )
    11241132                                $filter_sql[] = $action_sql;
    11251133                }
  • trunk/bp-core/admin/bp-core-schema.php

    r7521 r7860  
    2424                $active_components = apply_filters( 'bp_active_components', bp_get_option( 'bp-active-components' ) );
    2525
     26        // Activity Streams
     27        // Install tables even when inactive, to store last_activity data
     28        bp_core_install_activity_streams();
     29
    2630        // Notifications
    2731        if ( !empty( $active_components['notifications'] ) )
    2832                bp_core_install_notifications();
    29 
    30         // Activity Streams
    31         if ( !empty( $active_components['activity'] ) )
    32                 bp_core_install_activity_streams();
    3333
    3434        // Friend Connections
  • trunk/bp-core/bp-core-classes.php

    r7812 r7860  
    246246                        case 'online' :
    247247                                $this->uid_name = 'user_id';
    248                                 $sql['select']  = "SELECT u.{$this->uid_name} as id FROM {$wpdb->usermeta} u";
    249                                 $sql['where'][] = $wpdb->prepare( "u.meta_key = %s", bp_get_user_meta_key( 'last_activity' ) );
    250                                 $sql['where'][] = $wpdb->prepare( "u.meta_value >= DATE_SUB( UTC_TIMESTAMP(), INTERVAL %d MINUTE )", apply_filters( 'bp_user_query_online_interval', 15 ) );
    251                                 $sql['orderby'] = "ORDER BY u.meta_value";
     248                                $sql['select']  = "SELECT u.{$this->uid_name} as id FROM {$bp->members->table_name_last_activity} u";
     249                                $sql['where'][] = $wpdb->prepare( "u.component = %s AND u.type = 'last_activity'", buddypress()->members->id );
     250                                $sql['where'][] = $wpdb->prepare( "u.date_recorded >= DATE_SUB( UTC_TIMESTAMP(), INTERVAL %d MINUTE )", apply_filters( 'bp_user_query_online_interval', 15 ) );
     251                                $sql['orderby'] = "ORDER BY u.date_recorded";
    252252                                $sql['order']   = "DESC";
    253253
     
    260260                        case 'random' :
    261261                                $this->uid_name = 'user_id';
    262                                 $sql['select']  = "SELECT u.{$this->uid_name} as id FROM {$wpdb->usermeta} u";
    263                                 $sql['where'][] = $wpdb->prepare( "u.meta_key = %s", bp_get_user_meta_key( 'last_activity' ) );
     262                                $sql['select']  = "SELECT u.{$this->uid_name} as id FROM {$bp->members->table_name_last_activity} u";
     263                                $sql['where'][] = $wpdb->prepare( "u.component = %s AND u.type = 'last_activity'", buddypress()->members->id );
    264264
    265265                                if ( 'newest' == $type ) {
     
    269269                                        $sql['orderby'] = "ORDER BY rand()";
    270270                                } else {
    271                                         $sql['orderby'] = "ORDER BY u.meta_value";
     271                                        $sql['orderby'] = "ORDER BY u.date_recorded";
    272272                                        $sql['order'] = "DESC";
    273273                                }
     
    538538                // Turn user ID's into a query-usable, comma separated value
    539539                $user_ids_sql = implode( ',', wp_parse_id_list( $this->user_ids ) );
     540
     541                $bp = buddypress();
    540542
    541543                /**
     
    554556                do_action_ref_array( 'bp_user_query_populate_extras', array( $this, $user_ids_sql ) );
    555557
     558                // Fetch last_active data from the activity table
     559                $last_activities = BP_Core_User::get_last_activity( $this->user_ids );
     560
     561                if ( ! empty( $last_activities ) ) {
     562                        foreach ( $last_activities as $la_user => $la_value ) {
     563                                if ( isset( $this->results[ $la_user ] ) ) {
     564                                        $this->results[ $la_user ]->last_activity = $la_value['date_recorded'];
     565                                }
     566                        }
     567                }
     568
    556569                // Fetch usermeta data
    557570                // We want the three following pieces of info from usermeta:
    558571                // - friend count
    559                 // - last activity
    560572                // - latest update
    561573                $total_friend_count_key = bp_get_user_meta_key( 'total_friend_count' );
    562                 $last_activity_key      = bp_get_user_meta_key( 'last_activity'      );
    563574                $bp_latest_update_key   = bp_get_user_meta_key( 'bp_latest_update'   );
    564575
     
    570581
    571582                // Create, prepare, and run the seperate usermeta query
    572                 $user_metas = $wpdb->get_results( $wpdb->prepare( "SELECT user_id, meta_key, meta_value FROM {$wpdb->usermeta} WHERE meta_key IN (%s,%s,%s) AND user_id IN ({$user_ids_sql})", $total_friend_count_key, $last_activity_key, $bp_latest_update_key ) );
     583                $user_metas = $wpdb->get_results( $wpdb->prepare( "SELECT user_id, meta_key, meta_value FROM {$wpdb->usermeta} WHERE meta_key IN (%s,%s) AND user_id IN ({$user_ids_sql})", $total_friend_count_key, $bp_latest_update_key ) );
    573584
    574585                // The $members_template global expects the index key to be different
     
    578589                                case $total_friend_count_key :
    579590                                        $key = 'total_friend_count';
    580                                         break;
    581 
    582                                 case $last_activity_key :
    583                                         $key = 'last_activity';
    584591                                        break;
    585592
     
    12971304
    12981305                return $user;
     1306        }
     1307
     1308        /**
     1309         * Get last activity data for a user or set of users.
     1310         *
     1311         * @param int|array User IDs or multiple user IDs.
     1312         * @return array
     1313         */
     1314        public static function get_last_activity( $user_id ) {
     1315                global $wpdb;
     1316
     1317                if ( is_array( $user_id ) ) {
     1318                        $user_ids = wp_parse_id_list( $user_id );
     1319                } else {
     1320                        $user_ids = array( absint( $user_id ) );
     1321                }
     1322
     1323                if ( empty( $user_ids ) ) {
     1324                        return false;
     1325                }
     1326
     1327                $bp = buddypress();
     1328
     1329                $user_ids_sql = implode( ',', $user_ids );
     1330                $user_count   = count( $user_ids );
     1331
     1332                $last_activities = $wpdb->get_results( $wpdb->prepare( "SELECT id, user_id, date_recorded FROM {$bp->members->table_name_last_activity} WHERE component = %s AND type = 'last_activity' AND user_id IN ({$user_ids_sql}) LIMIT {$user_count}", $bp->members->id ) );
     1333
     1334                // Re-key
     1335                $retval = array();
     1336                foreach ( $last_activities as $last_activity ) {
     1337                        $retval[ $last_activity->user_id ] = array(
     1338                                'user_id'       => $last_activity->user_id,
     1339                                'date_recorded' => $last_activity->date_recorded,
     1340                                'activity_id'   => $last_activity->id,
     1341                        );
     1342                }
     1343
     1344                return $retval;
     1345        }
     1346
     1347        /**
     1348         * Set a user's last_activity value.
     1349         *
     1350         * Will create a new entry if it does not exist. Otherwise updates the
     1351         * existing entry.
     1352         *
     1353         * @since 2.0
     1354         *
     1355         * @param int $user_id ID of the user whose last_activity you are updating.
     1356         * @param string $time MySQL-formatted time string.
     1357         * @return bool True on success, false on failure.
     1358         */
     1359        public static function update_last_activity( $user_id, $time ) {
     1360                global $wpdb;
     1361
     1362                $table_name = buddypress()->members->table_name_last_activity;
     1363
     1364                $existing = self::get_last_activity( $user_id );
     1365
     1366                if ( ! empty( $existing ) ) {
     1367                        $data = array(
     1368                                'date_recorded' => $time,
     1369                        );
     1370
     1371                        $data_format = array(
     1372                                '%s',
     1373                        );
     1374
     1375                        $where = array(
     1376                        );
     1377
     1378                        $where_format = array(
     1379                                '%d',
     1380                        );
     1381
     1382                        $updated = $wpdb->update(
     1383                                $table_name,
     1384
     1385                                // Data to update
     1386                                array(
     1387                                        'date_recorded' => $time,
     1388                                ),
     1389
     1390                                // WHERE
     1391                                array(
     1392                                        'id' => $existing[ $user_id ]['activity_id'],
     1393                                ),
     1394
     1395                                // Data sanitization format
     1396                                array(
     1397                                        '%s',
     1398                                ),
     1399
     1400                                // WHERE sanitization format
     1401                                array(
     1402                                        '%d',
     1403                                )
     1404                        );
     1405                } else {
     1406                        $updated = $wpdb->insert(
     1407                                $table_name,
     1408
     1409                                // Data
     1410                                array(
     1411                                        'user_id'       => $user_id,
     1412                                        'component'     => buddypress()->members->id,
     1413                                        'type'          => 'last_activity',
     1414                                        'date_recorded' => $time,
     1415                                ),
     1416
     1417                                // Data sanitization format
     1418                                array(
     1419                                        '%d',
     1420                                        '%s',
     1421                                        '%s',
     1422                                        '%s',
     1423                                )
     1424                        );
     1425                }
     1426
     1427                return $updated;
     1428        }
     1429
     1430        /**
     1431         * Delete a user's last_activity value.
     1432         *
     1433         * @since 2.0
     1434         *
     1435         * @param int $user_id
     1436         * @return bool True on success, false on failure or if no last_activity
     1437         *         is found for the user.
     1438         */
     1439        public static function delete_last_activity( $user_id ) {
     1440                global $wpdb;
     1441
     1442                $existing = self::get_last_activity( $user_id );
     1443
     1444                if ( empty( $existing ) ) {
     1445                        return false;
     1446                }
     1447
     1448                $deleted = $wpdb->delete(
     1449                        buddypress()->members->table_name_last_activity,
     1450
     1451                        // WHERE
     1452                        array(
     1453                                'id' => $existing[ $user_id ]['activity_id'],
     1454                        ),
     1455
     1456                        // WHERE sanitization format
     1457                        array(
     1458                                '%s',
     1459                        )
     1460                );
     1461
     1462                return $deleted;
    12991463        }
    13001464}
  • trunk/bp-core/bp-core-functions.php

    r7809 r7860  
    10541054 * Plugin authors should use BP's _user_meta() functions, which bakes in
    10551055 * bp_get_user_meta_key():
    1056  *    $last_active = bp_get_user_meta( $user_id, 'last_activity', true );
     1056 *    $friend_count = bp_get_user_meta( $user_id, 'total_friend_count', true );
    10571057 * If you must use WP's _user_meta() functions directly for some reason, you
    10581058 * should use this function to determine the $key parameter, eg
    1059  *    $last_active = get_user_meta( $user_id, bp_get_user_meta_key( 'last_activity' ), true );
     1059 *    $friend_count = get_user_meta( $user_id, bp_get_user_meta_key( 'total_friend_count' ), true );
    10601060 * If using the WP functions, do not not hardcode your meta keys.
    10611061 *
  • trunk/bp-core/bp-core-update.php

    r7798 r7860  
    230230                if ( $raw_db_version < 7731 ) {
    231231                        bp_update_to_1_9_2();
     232                }
     233
     234                // 2.0
     235                if ( $raw_db_version < 7859 ) {
     236                        bp_update_to_2_0();
    232237                }
    233238        }
     
    329334
    330335/**
     336 * 2.0 update routine.
     337 *
     338 * - Ensure that the activity tables are installed, for last_activity storage.
     339 * - Migrate last_activity data from usermeta to activity table
     340 */
     341function bp_update_to_2_0() {
     342        global $wpdb;
     343
     344        // Install activity tables
     345        bp_core_install_activity_streams();
     346
     347        $bp = buddypress();
     348
     349        // Migrate data
     350        // The "NOT IN" clause prevents duplicates
     351        $sql = "INSERT INTO {$bp->members->table_name_last_activity} (`user_id`, `component`, `type`, `date_recorded` ) (
     352                  SELECT user_id, '{$bp->members->id}' as component, 'last_activity' as type, meta_value AS date_recorded
     353                  FROM {$wpdb->usermeta}
     354                  WHERE
     355                    meta_key = 'last_activity'
     356                    AND
     357                    user_id NOT IN (
     358                      SELECT user_id
     359                      FROM {$bp->members->table_name_last_activity}
     360                      WHERE component = '{$bp->members->id}' AND type = 'last_activity'
     361                    )
     362        );";
     363
     364        $wpdb->query( $sql );
     365}
     366
     367/**
    331368 * Redirect user to BP's What's New page on first page load after activation.
    332369 *
  • trunk/bp-friends/bp-friends-classes.php

    r7556 r7860  
    365365                global $wpdb;
    366366
    367                 $user_ids = implode( ',', wp_parse_id_list( $user_ids ) );
    368 
    369                 return $wpdb->get_results( $wpdb->prepare( "SELECT meta_value as last_activity, user_id FROM {$wpdb->usermeta} WHERE meta_key = %s AND user_id IN ( {$user_ids} ) ORDER BY meta_value DESC", bp_get_user_meta_key( 'last_activity' ) ) );
     367                $last_activities = BP_Core_User::get_last_activity( $user_ids );
     368
     369                // Sort and structure as expected in legacy function
     370                usort( $last_activities, create_function( '$a, $b', '
     371                        if ( $a["date_recorded"] == $b["date_recorded"] ) {
     372                                return 0;
     373                        }
     374
     375                        return ( strtotime( $a["date_recorded"] ) < strtotime( $b["date_recorded"] ) ) ? 1 : -1;
     376                ' ) );
     377
     378                $retval = array();
     379                foreach ( $last_activities as $last_activity ) {
     380                        $u = new stdClass;
     381                        $u->last_activity = $last_activity['date_recorded'];
     382                        $u->user_id       = $last_activity['user_id'];
     383
     384                        $retval[] = $u;
     385                }
     386
     387                return $retval;
    370388        }
    371389
  • trunk/bp-loader.php

    r7854 r7860  
    305305
    306306                $this->version    = '2.0-alpha-7752';
    307                 $this->db_version = 7731;
     307                $this->db_version = 7859;
    308308
    309309                /** Loading ***************************************************/
  • trunk/bp-members/bp-members-functions.php

    r7764 r7860  
    511511
    512512        if ( !$count = get_transient( 'bp_active_member_count' ) ) {
     513                $bp = buddypress();
     514
    513515                // Avoid a costly join by splitting the lookup
    514516                if ( is_multisite() ) {
     
    520522                $exclude_users     = $wpdb->get_col( $sql );
    521523                $exclude_users_sql = !empty( $exclude_users ) ? "AND user_id NOT IN (" . implode( ',', wp_parse_id_list( $exclude_users ) ) . ")" : '';
    522                 $count             = (int) $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(user_id) FROM {$wpdb->usermeta} WHERE meta_key = %s {$exclude_users_sql}", bp_get_user_meta_key( 'last_activity' ) ) );
     524                $count             = (int) $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(user_id) FROM {$bp->members->table_name_last_activity} WHERE component = %s AND type = 'last_activity' {$exclude_users_sql}", $bp->members->id ) );
    523525
    524526                set_transient( 'bp_active_member_count', $count );
     
    818820
    819821/**
    820  * Update a user's last activity
    821  *
    822  * @since BuddyPress (1.9)
    823  * @param int $user_id ID of the user being updated
    824  * @param string $time Time of last activity, in 'Y-m-d H:i:s' format
    825  * @return bool True on success
     822 * Update a user's last activity.
     823 *
     824 * @since BuddyPress (1.9.0)
     825 *
     826 * @param int $user_id ID of the user being updated.
     827 * @param string $time Time of last activity, in 'Y-m-d H:i:s' format.
     828 * @return bool True on success, false on failure.
    826829 */
    827830function bp_update_user_last_activity( $user_id = 0, $time = '' ) {
     
    841844        }
    842845
    843         return bp_update_user_meta( $user_id, 'last_activity', $time );
    844 }
    845 
    846 /**
    847  * Get the last activity for a given user
    848  *
    849  * @param int $user_id The ID of the user
     846        // As of BuddyPress 2.0, last_activity is no longer stored in usermeta.
     847        // However, we mirror it there for backward compatibility. Do not use!
     848        // Remove our warning and re-add.
     849        remove_filter( 'update_user_metadata', '_bp_update_user_meta_last_activity_warning', 10, 4 );
     850        update_user_meta( $user_id, 'last_activity', $time );
     851        add_filter( 'update_user_metadata', '_bp_update_user_meta_last_activity_warning', 10, 4 );
     852
     853        return BP_Core_User::update_last_activity( $user_id, $time );
     854}
     855
     856/**
     857 * Backward compatibility for 'last_activity' usermeta fetching.
     858 *
     859 * In BuddyPress 2.0, user last_activity data was moved out of usermeta. For
     860 * backward compatibility, we continue to mirror the data there. This function
     861 * serves two purposes: it warns plugin authors of the change, and it returns
     862 * the data from the proper location.
     863 *
     864 * @since BuddyPress (2.0.0)
     865 *
     866 * @access private For internal use only.
     867 *
     868 * @param null $retval
     869 * @param int $object_id ID of the user.
     870 * @param string $meta_key Meta key being fetched.
     871 */
     872function _bp_get_user_meta_last_activity_warning( $retval, $object_id, $meta_key ) {
     873        static $warned;
     874
     875        if ( 'last_activity' === $meta_key ) {
     876                // Don't send the warning more than once per pageload
     877                if ( empty( $warned ) ) {
     878                        _doing_it_wrong( 'get_user_meta( $user_id, \'last_activity\' )', __( 'User last_activity data is no longer stored in usermeta. Use bp_get_user_last_activity() instead.', 'buddypress' ), '2.0.0' );
     879                        $warned = 1;
     880                }
     881
     882                return bp_get_user_last_activity( $object_id );
     883        }
     884
     885        return $retval;
     886}
     887add_filter( 'get_user_metadata', '_bp_get_user_meta_last_activity_warning', 10, 3 );
     888
     889/**
     890 * Backward compatibility for 'last_activity' usermeta setting.
     891 *
     892 * In BuddyPress 2.0, user last_activity data was moved out of usermeta. For
     893 * backward compatibility, we continue to mirror the data there. This function
     894 * serves two purposes: it warns plugin authors of the change, and it updates
     895 * the data in the proper location.
     896 *
     897 * @since BuddyPress (2.0.0)
     898 *
     899 * @access private For internal use only.
     900 *
     901 * @param int $meta_id ID of the just-set usermeta row.
     902 * @param int $object_id ID of the user.
     903 * @param string $meta_key Meta key being fetched.
     904 * @param string $meta_value Active time.
     905 */
     906function _bp_update_user_meta_last_activity_warning( $meta_id, $object_id, $meta_key, $meta_value ) {
     907        if ( 'last_activity' === $meta_key ) {
     908                _doing_it_wrong( 'update_user_meta( $user_id, \'last_activity\' )', __( 'User last_activity data is no longer stored in usermeta. Use bp_update_user_last_activity() instead.', 'buddypress' ), '2.0.0' );
     909                bp_update_user_last_activity( $object_id, $meta_value );
     910        }
     911}
     912add_filter( 'update_user_metadata', '_bp_update_user_meta_last_activity_warning', 10, 4 );
     913
     914/**
     915 * Get the last activity for a given user.
     916 *
     917 * @param int $user_id The ID of the user.
    850918 * @return string Time of last activity, in 'Y-m-d H:i:s' format, or an empty
    851  *   string if none is found
     919 *         string if none is found.
    852920 */
    853921function bp_get_user_last_activity( $user_id = 0 ) {
    854         // Fall back on current user
    855         if ( empty( $user_id ) ) {
    856                 $user_id = bp_loggedin_user_id();
    857         }
    858 
    859         $activity = bp_get_user_meta( $user_id, 'last_activity', true );
     922        $activity = '';
     923
     924        $last_activity = BP_Core_User::get_last_activity( $user_id );
     925        if ( ! empty( $last_activity[ $user_id ] ) ) {
     926                $activity = $last_activity[ $user_id ]['date_recorded'];
     927        }
    860928
    861929        return apply_filters( 'bp_get_user_last_activity', $activity, $user_id );
     
    9971065function bp_core_remove_data( $user_id ) {
    9981066
    999         // Remove usermeta
    1000         bp_delete_user_meta( $user_id, 'last_activity' );
     1067        // Remove last_activity data
     1068        BP_Core_User::delete_last_activity( $user_id );
    10011069
    10021070        // Flush the cache to remove the user from all cached objects
  • trunk/bp-members/bp-members-loader.php

    r7764 r7860  
    7373                        'root_slug'     => isset( $bp->pages->members->slug ) ? $bp->pages->members->slug : BP_MEMBERS_SLUG,
    7474                        'has_directory' => true,
     75                        'global_tables' => array(
     76                                'table_name_last_activity' => bp_core_get_table_prefix() . 'bp_activity',
     77                        ),
    7578                        'search_string' => __( 'Search Members...', 'buddypress' ),
    7679                ) );
  • trunk/tests/includes/testcase.php

    r7818 r7860  
    219219                $r = wp_parse_args( $args, array(
    220220                        'role' => 'subscriber',
    221                         'last_activity' => bp_core_current_time() - 60*60*24*365,
     221                        'last_activity' => date( 'Y-m-d h:i:s', strtotime( bp_core_current_time() ) - 60*60*24*365 ),
    222222                ) );
    223223
  • trunk/tests/testcases/core/class-bp-core-user.php

    r7425 r7860  
    33/**
    44 * @group core
     5 * @group BP_Core_User
    56 */
    67class BP_Tests_BP_Core_User_TestCases extends BP_UnitTestCase {
     
    120121        }
    121122
     123        /**
     124         * @group last_activity
     125         */
     126        public function test_get_last_activity() {
     127                $u = $this->create_user();
     128                $time = bp_core_current_time();
    122129
     130                BP_Core_User::update_last_activity( $u, $time );
    123131
     132                $a = BP_Core_User::get_last_activity( $u );
     133                $found = isset( $a[ $u ]['date_recorded'] ) ? $a[ $u ]['date_recorded'] : '';
     134
     135                $this->assertEquals( $time, $found );
     136        }
     137
     138        /**
     139         * @group last_activity
     140         */
     141        public function test_update_last_activity() {
     142                $u = $this->create_user();
     143                $time = bp_core_current_time();
     144                $time2 = '1968-12-25 01:23:45';
     145
     146                BP_Core_User::update_last_activity( $u, $time );
     147                $a = BP_Core_User::get_last_activity( $u );
     148                $found = isset( $a[ $u ]['date_recorded'] ) ? $a[ $u ]['date_recorded'] : '';
     149                $this->assertEquals( $time, $found );
     150
     151                BP_Core_User::update_last_activity( $u, $time2 );
     152                $a = BP_Core_User::get_last_activity( $u );
     153                $found = isset( $a[ $u ]['date_recorded'] ) ? $a[ $u ]['date_recorded'] : '';
     154                $this->assertEquals( $time2, $found );
     155        }
     156
     157        /**
     158         * @group last_activity
     159         */
     160        public function test_delete_last_activity() {
     161                $u = $this->create_user();
     162                $time = bp_core_current_time();
     163
     164                BP_Core_User::update_last_activity( $u, $time );
     165                $a = BP_Core_User::get_last_activity( $u );
     166                $found = isset( $a[ $u ]['date_recorded'] ) ? $a[ $u ]['date_recorded'] : '';
     167                $this->assertEquals( $time, $found );
     168
     169                BP_Core_User::delete_last_activity( $u );
     170                $a = BP_Core_User::get_last_activity( $u );
     171                $found = isset( $a[ $u ]['date_recorded'] ) ? $a[ $u ]['date_recorded'] : '';
     172                $this->assertEquals( '', $found );
     173        }
    124174}
Note: See TracChangeset for help on using the changeset viewer.