Skip to:
Content

bbPress.org

Ticket #2782: 2782.4.diff

File 2782.4.diff, 3.3 KB (added by boonebgorges, 9 years ago)
  • src/includes/extend/buddypress/groups.php

    diff --git src/includes/extend/buddypress/groups.php src/includes/extend/buddypress/groups.php
    index c07202e..d6fa24d 100644
    class BBP_Forums_Group_Extension extends BP_Group_Extension { 
    143143                        add_filter( 'bbp_current_user_can_access_create_topic_form', array( $this, 'form_permissions' ) );
    144144                        add_filter( 'bbp_current_user_can_access_create_reply_form', array( $this, 'form_permissions' ) );
    145145                }
     146
     147                // Enforce forum privacy.
     148                add_filter( 'bbp_is_forum_public', array( $this, 'enforce_forum_privacy' ), 10, 3 );
    146149        }
    147150
    148151        /**
    class BBP_Forums_Group_Extension extends BP_Group_Extension { 
    14621465
    14631466                return $args;
    14641467        }
     1468
     1469        public function enforce_forum_privacy( $is_public, $forum_id, $check_ancestors ) {
     1470                $group_ids = bbp_get_forum_group_ids( $forum_id );
     1471
     1472                if ( ! empty( $group_ids ) ) {
     1473                        foreach ( $group_ids as $group_id ) {
     1474                                $group = groups_get_group( array( 'group_id' => $group_id ) );
     1475
     1476                                // A single non-public group will force the forum to private.
     1477                                if ( 'public' !== $group->status ) {
     1478                                        $is_public = false;
     1479                                        break;
     1480                                }
     1481                        }
     1482                }
     1483
     1484                return $is_public;
     1485        }
    14651486}
    14661487endif;
  • new file tests/phpunit/testcases/extend/buddypress/groups.php

    diff --git tests/phpunit/testcases/extend/buddypress/groups.php tests/phpunit/testcases/extend/buddypress/groups.php
    new file mode 100644
    index 0000000..6d99dca
    - +  
     1<?php
     2
     3/**
     4 * @group extend
     5 * @group buddypress
     6 * @group groups
     7 */
     8class BBP_Tests_Extend_BuddyPress_Groups extends BBP_UnitTestCase {
     9        public function setUp() {
     10                parent::setUp();
     11
     12                if ( ! function_exists( 'buddypress' ) ) {
     13                        return;
     14                }
     15        }
     16
     17        /**
     18         * Copied from `BBP_Forums_Group_Extension::new_forum()`.
     19         */
     20        private function attach_forum_to_group( $forum_id, $group_id ) {
     21                bbp_add_forum_id_to_group( $group_id, $forum_id );
     22                bbp_add_group_id_to_forum( $forum_id, $group_id );
     23        }
     24
     25        /**
     26         * @ticket BBP2327
     27         */
     28        public function test_bbp_is_forum_public_should_be_true_for_public_group_forums() {
     29                $g = $this->bp_factory->group->create( array(
     30                        'status' => 'public',
     31                ) );
     32
     33                $group = groups_get_group( array( 'group_id' => $g ) );
     34                $this->assertSame( 'public', $group->status );
     35
     36                $f = $this->factory->forum->create();
     37
     38                $this->attach_forum_to_group( $f, $g );
     39
     40                $this->assertTrue( bbp_is_forum_public( $f ) );
     41        }
     42
     43        /**
     44         * @ticket BBP2327
     45         */
     46        public function test_bbp_is_forum_public_should_be_false_for_private_group_forums() {
     47                $g = $this->bp_factory->group->create( array(
     48                        'status' => 'private',
     49                ) );
     50
     51                $group = groups_get_group( array( 'group_id' => $g ) );
     52                $this->assertSame( 'private', $group->status );
     53
     54                $f = $this->factory->forum->create();
     55
     56                $this->attach_forum_to_group( $f, $g );
     57
     58                $this->assertFalse( bbp_is_forum_public( $f ) );
     59        }
     60
     61        /**
     62         * @ticket BBP2327
     63         */
     64        public function test_bbp_is_forum_public_should_be_false_for_hidden_group_forums() {
     65                $g = $this->bp_factory->group->create( array(
     66                        'status' => 'hidden',
     67                ) );
     68
     69                $group = groups_get_group( array( 'group_id' => $g ) );
     70                $this->assertSame( 'hidden', $group->status );
     71
     72                $f = $this->factory->forum->create();
     73
     74                $this->attach_forum_to_group( $f, $g );
     75
     76                $this->assertFalse( bbp_is_forum_public( $f ) );
     77        }
     78}