Skip to:
Content

Ticket #7609: 7609.02.diff

File 7609.02.diff, 6.6 KB (added by dcavins, 8 months ago)

Name the new parameter 'fields' in keeping with WP convention.

  • 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..638cbac 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                'fields'             => 'all',          // Return BP_Groups_Group objects or a list of ids.
    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                'fields'             => $r['fields'],
    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..ec64342 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 string       $fields             Which fields to return. Specify 'ids' to fetch a list of IDs.
     1029         *                                            Default: 'all' (return BP_Groups_Group objects).
     1030         *                                            If set, meta and admin caches will not be prefetched.
    10281031         * }
    10291032         * @return array {
    10301033         *     @type array $groups Array of group objects returned by the
    1031          *                         paginated query.
     1034         *                         paginated query. (IDs only if `fields` is set to `ids`.)
    10321035         *     @type int   $total  Total count of all groups matching non-
    10331036         *                         paginated query params.
    10341037         * }
    class BP_Groups_Group { 
    10751078                        'update_admin_cache' => false,
    10761079                        'exclude'            => false,
    10771080                        'show_hidden'        => false,
    1078                         'status'             => array()
     1081                        'status'             => array(),
     1082                        'fields'             => 'all',
    10791083                );
    10801084
    10811085                $r = wp_parse_args( $args, $defaults );
    class BP_Groups_Group { 
    12991303                        $paged_group_ids = $cached;
    13001304                }
    13011305
    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' );
     1306                if ( 'ids' === $r['fields'] ) {
     1307                        // We only want the IDs.
     1308                        $paged_groups = array_map( 'intval', $paged_group_ids );
     1309                } else {
     1310                        $uncached_group_ids = bp_get_non_cached_ids( $paged_group_ids, 'bp_groups' );
     1311                        if ( $uncached_group_ids ) {
     1312                                $group_ids_sql = implode( ',', array_map( 'intval', $uncached_group_ids ) );
     1313                                $group_data_objects = $wpdb->get_results( "SELECT g.* FROM {$bp->groups->table_name} g WHERE g.id IN ({$group_ids_sql})" );
     1314                                foreach ( $group_data_objects as $group_data_object ) {
     1315                                        wp_cache_set( $group_data_object->id, $group_data_object, 'bp_groups' );
     1316                                }
     1317                        }
     1318
     1319                        $paged_groups = array();
     1320                        foreach ( $paged_group_ids as $paged_group_id ) {
     1321                                $paged_groups[] = new BP_Groups_Group( $paged_group_id );
     1322                        }
     1323
     1324                        $group_ids = array();
     1325                        foreach ( (array) $paged_groups as $group ) {
     1326                                $group_ids[] = $group->id;
     1327                        }
     1328
     1329                        // Grab all groupmeta.
     1330                        if ( ! empty( $r['update_meta_cache'] ) ) {
     1331                                bp_groups_update_meta_cache( $group_ids );
     1332                        }
     1333
     1334                        // Prefetch all administrator IDs, if requested.
     1335                        if ( $r['update_admin_cache'] ) {
     1336                                BP_Groups_Member::prime_group_admins_mods_cache( $group_ids );
     1337                        }
     1338
     1339                        // Set up integer properties needing casting.
     1340                        $int_props = array(
     1341                                'id', 'creator_id', 'enable_forum'
     1342                        );
     1343
     1344                        // Integer casting.
     1345                        foreach ( $paged_groups as $key => $g ) {
     1346                                foreach ( $int_props as $int_prop ) {
     1347                                        $paged_groups[ $key ]->{$int_prop} = (int) $paged_groups[ $key ]->{$int_prop};
     1348                                }
    13081349                        }
    1309                 }
    13101350
    1311                 $paged_groups = array();
    1312                 foreach ( $paged_group_ids as $paged_group_id ) {
    1313                         $paged_groups[] = new BP_Groups_Group( $paged_group_id );
    13141351                }
    13151352
     1353                // Find the total number of groups in the results set.
    13161354                $total_groups_sql = "SELECT COUNT(DISTINCT g.id) FROM {$sql['from']} $where";
    13171355
    13181356                /**
    class BP_Groups_Group { 
    13341372                        $total_groups = (int) $cached;
    13351373                }
    13361374
    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 
    13661375                return array( 'groups' => $paged_groups, 'total' => $total_groups );
    13671376        }
    13681377
  • 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..1695bcc 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                        'fields' => 'ids',
     2254                ) );
     2255
     2256                $this->assertSame( array( $g1, $g2, $g3 ), $groups['groups'] );
     2257        }
     2258
    22372259}
    22382260
    22392261/**