Skip to:
Content

Ticket #7609: 7609.01.diff

File 7609.01.diff, 6.5 KB (added by dcavins, 8 months ago)

Add IDs only return format option.

  • src/bp-groups/bp-groups-functions.php

    diff --git src/bp-groups/bp-groups-functions.php src/bp-groups/bp-groups-functions.php
    index 70dbdf1..b856f2f 100644
    function groups_get_groups( $args = '' ) { 
    785785                'page'               => 1,              // The page to return if limiting per page.
    786786                'update_meta_cache'  => true,           // Pre-fetch groupmeta for queried groups.
    787787                'update_admin_cache' => false,
     788                'ids_only'           => false,          // Return group IDs only instead of BP_Groups_Group objects.
    788789        );
    789790
    790791        $r = bp_parse_args( $args, $defaults, 'groups_get_groups' );
    function groups_get_groups( $args = '' ) { 
    810811                'update_admin_cache' => $r['update_admin_cache'],
    811812                'order'              => $r['order'],
    812813                'orderby'            => $r['orderby'],
     814                'ids_only'           => $r['ids_only'],
    813815        ) );
    814816
    815817        /**
  • src/bp-groups/classes/class-bp-groups-group.php

    diff --git src/bp-groups/classes/class-bp-groups-group.php src/bp-groups/classes/class-bp-groups-group.php
    index 1c243bd..e78f099 100644
    class BP_Groups_Group { 
    10251025         *     @type array|string $status             Optional. Array or comma-separated list of group statuses to limit
    10261026         *                                            results to. If specified, $show_hidden is ignored.
    10271027         *                                            Default: empty array.
     1028         *     @type bool         $ids_only           Return only group IDs in results, not group objects. Default: false.
     1029         *                                            If true, meta and admin caches will not be prefetched.
    10281030         * }
    10291031         * @return array {
    10301032         *     @type array $groups Array of group objects returned by the
    1031          *                         paginated query.
     1033         *                         paginated query. (IDs only is `ids_only` is true.)
    10321034         *     @type int   $total  Total count of all groups matching non-
    10331035         *                         paginated query params.
    10341036         * }
    class BP_Groups_Group { 
    10751077                        'update_admin_cache' => false,
    10761078                        'exclude'            => false,
    10771079                        'show_hidden'        => false,
    1078                         'status'             => array()
     1080                        'status'             => array(),
     1081                        'ids_only'           => false,
    10791082                );
    10801083
    10811084                $r = wp_parse_args( $args, $defaults );
    class BP_Groups_Group { 
    12991302                        $paged_group_ids = $cached;
    13001303                }
    13011304
    1302                 $uncached_group_ids = bp_get_non_cached_ids( $paged_group_ids, 'bp_groups' );
    1303                 if ( $uncached_group_ids ) {
    1304                         $group_ids_sql = implode( ',', array_map( 'intval', $uncached_group_ids ) );
    1305                         $group_data_objects = $wpdb->get_results( "SELECT g.* FROM {$bp->groups->table_name} g WHERE g.id IN ({$group_ids_sql})" );
    1306                         foreach ( $group_data_objects as $group_data_object ) {
    1307                                 wp_cache_set( $group_data_object->id, $group_data_object, 'bp_groups' );
     1305                if ( $r['ids_only'] ) {
     1306                        // We only want the IDs.
     1307                        $paged_groups = array_map( 'absint', $paged_group_ids );
     1308                } else {
     1309                        $uncached_group_ids = bp_get_non_cached_ids( $paged_group_ids, 'bp_groups' );
     1310                        if ( $uncached_group_ids ) {
     1311                                $group_ids_sql = implode( ',', array_map( 'intval', $uncached_group_ids ) );
     1312                                $group_data_objects = $wpdb->get_results( "SELECT g.* FROM {$bp->groups->table_name} g WHERE g.id IN ({$group_ids_sql})" );
     1313                                foreach ( $group_data_objects as $group_data_object ) {
     1314                                        wp_cache_set( $group_data_object->id, $group_data_object, 'bp_groups' );
     1315                                }
     1316                        }
     1317
     1318                        $paged_groups = array();
     1319                        foreach ( $paged_group_ids as $paged_group_id ) {
     1320                                $paged_groups[] = new BP_Groups_Group( $paged_group_id );
     1321                        }
     1322
     1323                        $group_ids = array();
     1324                        foreach ( (array) $paged_groups as $group ) {
     1325                                $group_ids[] = $group->id;
     1326                        }
     1327
     1328                        // Grab all groupmeta.
     1329                        if ( ! empty( $r['update_meta_cache'] ) ) {
     1330                                bp_groups_update_meta_cache( $group_ids );
     1331                        }
     1332
     1333                        // Prefetch all administrator IDs, if requested.
     1334                        if ( $r['update_admin_cache'] ) {
     1335                                BP_Groups_Member::prime_group_admins_mods_cache( $group_ids );
     1336                        }
     1337
     1338                        // Set up integer properties needing casting.
     1339                        $int_props = array(
     1340                                'id', 'creator_id', 'enable_forum'
     1341                        );
     1342
     1343                        // Integer casting.
     1344                        foreach ( $paged_groups as $key => $g ) {
     1345                                foreach ( $int_props as $int_prop ) {
     1346                                        $paged_groups[ $key ]->{$int_prop} = (int) $paged_groups[ $key ]->{$int_prop};
     1347                                }
    13081348                        }
    1309                 }
    13101349
    1311                 $paged_groups = array();
    1312                 foreach ( $paged_group_ids as $paged_group_id ) {
    1313                         $paged_groups[] = new BP_Groups_Group( $paged_group_id );
    13141350                }
    13151351
     1352                // Find the total number of groups in the results set.
    13161353                $total_groups_sql = "SELECT COUNT(DISTINCT g.id) FROM {$sql['from']} $where";
    13171354
    13181355                /**
    class BP_Groups_Group { 
    13341371                        $total_groups = (int) $cached;
    13351372                }
    13361373
    1337                 $group_ids = array();
    1338                 foreach ( (array) $paged_groups as $group ) {
    1339                         $group_ids[] = $group->id;
    1340                 }
    1341 
    1342                 // Grab all groupmeta.
    1343                 if ( ! empty( $r['update_meta_cache'] ) ) {
    1344                         bp_groups_update_meta_cache( $group_ids );
    1345                 }
    1346 
    1347                 // Prefetch all administrator IDs, if requested.
    1348                 if ( $r['update_admin_cache'] ) {
    1349                         BP_Groups_Member::prime_group_admins_mods_cache( $group_ids );
    1350                 }
    1351 
    1352                 // Set up integer properties needing casting.
    1353                 $int_props = array(
    1354                         'id', 'creator_id', 'enable_forum'
    1355                 );
    1356 
    1357                 // Integer casting.
    1358                 foreach ( $paged_groups as $key => $g ) {
    1359                         foreach ( $int_props as $int_prop ) {
    1360                                 $paged_groups[ $key ]->{$int_prop} = (int) $paged_groups[ $key ]->{$int_prop};
    1361                         }
    1362                 }
    1363 
    1364                 unset( $sql, $total_sql );
    1365 
    13661374                return array( 'groups' => $paged_groups, 'total' => $total_groups );
    13671375        }
    13681376
  • tests/phpunit/testcases/groups/class-bp-groups-group.php

    diff --git tests/phpunit/testcases/groups/class-bp-groups-group.php tests/phpunit/testcases/groups/class-bp-groups-group.php
    index b1d3244..e59ed27 100644
    class BP_Tests_BP_Groups_Group_TestCases extends BP_UnitTestCase { 
    22342234                $this->assertEqualSets( array( $g1, $g3 ), $found );
    22352235        }
    22362236
     2237        /**
     2238         * @group get_ids_only
     2239         */
     2240        public function test_get_return_ids_only() {
     2241                $now = time();
     2242                $g1 = $this->factory->group->create( array(
     2243                        'last_activity' => date( 'Y-m-d H:i:s', $now - 60*60 ),
     2244                ) );
     2245                $g2 = $this->factory->group->create( array(
     2246                        'last_activity' => date( 'Y-m-d H:i:s', $now - 60*60*2 ),
     2247                ) );
     2248                $g3 = $this->factory->group->create( array(
     2249                        'last_activity' => date( 'Y-m-d H:i:s', $now - 60*60*3 ),
     2250                )  );
     2251
     2252                $groups = BP_Groups_Group::get( array(
     2253                        'ids_only' => true,
     2254                ) );
     2255
     2256                $this->assertSame( array( $g1, $g2, $g3 ), $groups['groups'] );
     2257        }
     2258
    22372259}
    22382260
    22392261/**