Skip to:
Content

BuddyPress.org


Ignore:
Timestamp:
12/12/2021 02:09:02 PM (4 years ago)
Author:
imath
Message:

Support date queries for Members, Groups and Sites

According to components, date queries can be restricted to a limited list of loop types:

  • For Members, the $type parameter in bp_has_members() needs to be either active, newest, random or online.
  • For Groups, the $type parameter in bp_has_groups() needs to be either active or newest.
  • For sites, the $type parameter in bp_has_blogs() needs to be either active or newest.

Props r-a-y

Fixes #8488

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tests/phpunit/testcases/blogs/class-bp-blogs-blog.php

    r12606 r13184  
    2424        update_blog_option( $b, 'blog_public', '1' );
    2525
    26         $blogs = BP_Blogs_Blog::get( 'active', false, false, 0, 'Foo' );
     26        $blogs = BP_Blogs_Blog::get( [
     27            'type'         => 'active',
     28            'search_terms' => 'Foo'
     29        ] );
    2730        $blog_ids = wp_list_pluck( $blogs['blogs'], 'blog_id' );
    2831
     
    5356        update_blog_option( $b, 'blog_public', '1' );
    5457
    55         $blogs = BP_Blogs_Blog::get( 'active', false, false, 0, 'Full' );
     58        $blogs = BP_Blogs_Blog::get( [
     59            'type'         => 'active',
     60            'search_terms' => 'Full'
     61        ] );
    5662        $blog_ids = wp_list_pluck( $blogs['blogs'], 'blog_id' );
    5763
     
    150156
    151157        /* Alphabetical */
    152         $blogs = BP_Blogs_Blog::get( 'alphabetical', false, false, $u );
     158        $blogs = BP_Blogs_Blog::get( [ 'type' => 'alphabetical', 'user_id' => $u ] );
    153159        $blog_ids = wp_list_pluck( $blogs['blogs'], 'blog_id' );
    154160        $this->assertEquals( array( $bs['barfoo'], $bs['foobar'] ), $blog_ids );
     
    156162        /* Newest */
    157163        update_blog_details( $bs['barfoo'], array( 'registered' => $b_time ) );
    158         $blogs = BP_Blogs_Blog::get( 'newest', false, false, $u );
     164        $blogs = BP_Blogs_Blog::get( [ 'type' => 'newest', 'user_id' => $u ] );
    159165        $blog_ids = wp_list_pluck( $blogs['blogs'], 'blog_id' );
    160166        $this->assertEquals( array( $bs['foobar'], $bs['barfoo'] ), $blog_ids );
     
    162168        /* Active */
    163169        bp_blogs_update_blogmeta( $bs['barfoo'], 'last_activity', $b_time );
    164         $blogs = BP_Blogs_Blog::get( 'active', false, false, $u );
     170        $blogs = BP_Blogs_Blog::get( [ 'type' => 'active', 'user_id' => $u ] );
    165171        $blog_ids = wp_list_pluck( $blogs['blogs'], 'blog_id' );
    166172        $this->assertEquals( array( $bs['foobar'],$bs['barfoo'] ), $blog_ids );
    167173
    168174        /* Random */
    169         $blogs = BP_Blogs_Blog::get( 'random', false, false, $u );
     175        $blogs = BP_Blogs_Blog::get( [ 'type' => 'random', 'user_id' => $u ] );
    170176        $this->assertTrue( 2 == count( $blogs['blogs'] ) );
    171177
    172178        $this->set_current_user( $old_user );
    173179    }
     180
     181    /**
     182     * @group date_query
     183     */
     184    public function test_get_with_date_query_before() {
     185        if ( ! is_multisite() ) {
     186            $this->markTestSkipped();
     187        }
     188
     189        $old_user = get_current_user_id();
     190        $u = self::factory()->user->create();
     191        $this->set_current_user( $u );
     192
     193        $r = [
     194            'user_id' => $u
     195        ];
     196
     197        $b1 = self::factory()->blog->create( $r );
     198        $b2 = self::factory()->blog->create( $r );
     199        $b3 = self::factory()->blog->create( $r );
     200
     201        bp_blogs_record_existing_blogs();
     202
     203        // Set last activity for each site.
     204        bp_blogs_update_blogmeta( $b1, 'last_activity', date( 'Y-m-d H:i:s', time() ) );
     205        bp_blogs_update_blogmeta( $b2, 'last_activity', '2008-03-25 17:13:55' );
     206        bp_blogs_update_blogmeta( $b3, 'last_activity', '2010-01-01 12:00' );
     207
     208        // 'date_query' before test
     209        $sites = BP_Blogs_Blog::get( array(
     210            'date_query' => array( array(
     211                'before' => array(
     212                    'year'  => 2010,
     213                    'month' => 1,
     214                    'day'   => 1,
     215                ),
     216            ) )
     217        ) );
     218
     219        $this->assertEquals( [ $b2 ], wp_list_pluck( $sites['blogs'], 'blog_id' ) );
     220    }
     221
     222    /**
     223     * @group date_query
     224     */
     225    public function test_get_with_date_query_range() {
     226        if ( ! is_multisite() ) {
     227            $this->markTestSkipped();
     228        }
     229
     230        $old_user = get_current_user_id();
     231        $u = self::factory()->user->create();
     232        $this->set_current_user( $u );
     233
     234        $r = [
     235            'user_id' => $u
     236        ];
     237
     238        $b1 = self::factory()->blog->create( $r );
     239        $b2 = self::factory()->blog->create( $r );
     240        $b3 = self::factory()->blog->create( $r );
     241
     242        bp_blogs_record_existing_blogs();
     243
     244        // Set last activity for each site.
     245        bp_blogs_update_blogmeta( $b1, 'last_activity', date( 'Y-m-d H:i:s', time() ) );
     246        bp_blogs_update_blogmeta( $b2, 'last_activity', '2008-03-25 17:13:55' );
     247        bp_blogs_update_blogmeta( $b3, 'last_activity', '2001-01-01 12:00' );
     248
     249        // 'date_query' range test
     250        $sites = BP_Blogs_Blog::get( array(
     251            'date_query' => array( array(
     252                'after'  => 'January 2nd, 2001',
     253                'before' => array(
     254                    'year'  => 2010,
     255                    'month' => 1,
     256                    'day'   => 1,
     257                ),
     258                'inclusive' => true,
     259            ) )
     260        ) );
     261
     262        $this->assertEquals( [ $b2 ], wp_list_pluck( $sites['blogs'], 'blog_id' ) );
     263    }
     264
     265    /**
     266     * @group date_query
     267     */
     268    public function test_get_with_date_query_after() {
     269        if ( ! is_multisite() ) {
     270            $this->markTestSkipped();
     271        }
     272
     273        $old_user = get_current_user_id();
     274        $u = self::factory()->user->create();
     275        $this->set_current_user( $u );
     276
     277        $r = [
     278            'user_id' => $u
     279        ];
     280
     281        $b1 = self::factory()->blog->create( $r );
     282        $b2 = self::factory()->blog->create( $r );
     283        $b3 = self::factory()->blog->create( $r );
     284
     285        bp_blogs_record_existing_blogs();
     286
     287        // Set last activity for each site.
     288        bp_blogs_update_blogmeta( $b1, 'last_activity', date( 'Y-m-d H:i:s', time() ) );
     289        bp_blogs_update_blogmeta( $b2, 'last_activity', '2008-03-25 17:13:55' );
     290        bp_blogs_update_blogmeta( $b3, 'last_activity', '2001-01-01 12:00' );
     291
     292        /*
     293         * Set initial site's last activity to two days ago so our expected site
     294         * is the only match.
     295         */
     296        bp_blogs_update_blogmeta( 1, 'last_activity', date( 'Y-m-d H:i:s', strtotime( '-2 days' ) ) );
     297
     298        // 'date_query' after and relative test
     299        $sites = BP_Blogs_Blog::get( array(
     300            'date_query' => array( array(
     301                'after' => '1 day ago'
     302            ) )
     303        ) );
     304
     305        $this->assertEquals( [ $b1 ], wp_list_pluck( $sites['blogs'], 'blog_id' ) );
     306    }
    174307}
Note: See TracChangeset for help on using the changeset viewer.