Skip to:
Content

BuddyPress.org


Ignore:
Timestamp:
10/06/2022 10:31:49 PM (4 years ago)
Author:
imath
Message:

Activity introduce 2 new parameters to BP_Activity_Activity::get()`

  • The user_id__in parameter makes it possible to retrieve activities for

a list of user IDs.

  • The user_id__not_in parameter makes it possible to exclude activity

posted by a list of user IDs from retrieved activities.

Props username_, slaFFik, boonebgorges

Fixes #4184

File:
1 edited

Legend:

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

    r13312 r13337  
    343343         * @since 2.9.0 Introduced the `$order_by` parameter.
    344344         * @since 10.0.0 Introduced the `$count_total_only` parameter.
     345         * @since 11.0.0 Introduced the `$user_id__in` and `$user_id__not_in` parameters.
    345346         *
    346347         * @see BP_Activity_Activity::get_filter_sql() for a description of the
     
    367368         *     @type string|array $scope             Pre-determined set of activity arguments.
    368369         *     @type array        $filter            See BP_Activity_Activity::get_filter_sql().
     370         *     @type array        $user_id__in       An array of user ids to include. Activity posted by users matching one of these
     371         *                                           user ids will be included in results. Default empty array.
     372         *     @type array        $user_id__not_in   An array of user ids to exclude. Activity posted by users matching one of these
     373         *                                           user ids will not be included in results. Default empty array.
    369374         *     @type string       $search_terms      Limit results by a search term. Default: false.
    370375         *     @type bool         $display_comments  Whether to include activity comments. Default: false.
     
    431436                                'date_query'        => false,           // Filter by date.
    432437                                'filter_query'      => false,           // Advanced filtering - see BP_Activity_Query.
     438                                'user_id__in'       => array(),         // Array of user ids to include.
     439                                'user_id__not_in'   => array(),         // Array of user ids to excluce.
    433440                                'filter'            => false,           // See self::get_filter_sql().
    434441                                'scope'             => false,           // Preset activity arguments.
     
    482489                if ( $r['filter'] && $filter_sql = BP_Activity_Activity::get_filter_sql( $r['filter'] ) ) {
    483490                        $where_conditions['filter_sql'] = $filter_sql;
     491                }
     492
     493                // User IDs filtering.
     494                $user_ids_clause  = array();
     495                $user_ids_filters = array_filter(
     496                        array_intersect_key(
     497                                $r,
     498                                array(
     499                                        'user_id__in'     => true,
     500                                        'user_id__not_in' => true,
     501                                )
     502                        )
     503                );
     504
     505                foreach ( $user_ids_filters as $user_ids_filter_key => $user_ids_filter ) {
     506                        $user_ids_operator = 'IN';
     507                        if ( 'user_id__not_in' === $user_ids_filter_key ) {
     508                                $user_ids_operator = 'NOT IN';
     509                        }
     510
     511                        if ( $user_ids_clause ) {
     512                                $user_ids_clause[] = array(
     513                                        'column'  => 'user_id',
     514                                        'compare' => $user_ids_operator,
     515                                        'value'   => (array) $user_ids_filter,
     516                                );
     517                        } else {
     518                                $user_ids_clause = array(
     519                                        'relation' => 'AND',
     520                                        array(
     521                                                'column'  => 'user_id',
     522                                                'compare' => $user_ids_operator,
     523                                                'value'   => (array) $user_ids_filter,
     524                                        ),
     525                                );
     526                        }
     527                }
     528
     529                if ( $user_ids_clause ) {
     530                        $user_ids_query = new BP_Activity_Query( $user_ids_clause );
     531                        $user_ids_sql   = $user_ids_query->get_sql();
     532                        if ( ! empty( $user_ids_sql ) ) {
     533                                $where_conditions['user_ids_query_sql'] = $user_ids_sql;
     534                        }
    484535                }
    485536
Note: See TracChangeset for help on using the changeset viewer.