Skip to:
Content

Ticket #7609: 7609.02.diff

File 7609.02.diff, 6.6 KB (added by dcavins, 3 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/**