Skip to:
Content

Ticket #7609: 7609.01.diff

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