Skip to:
Content

bbPress.org

Ticket #2782: 2782.3.diff

File 2782.3.diff, 2.9 KB (added by netweb, 9 years ago)
  • src/includes/extend/buddypress/groups.php

     
    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        /**
     
    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;
  • tests/phpunit/testcases/extend/buddypress/groups.php

     
     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                $f = $this->factory->forum->create();
     34
     35                $this->attach_forum_to_group( $f, $g );
     36
     37                $this->assertTrue( bbp_is_forum_public( $f ) );
     38        }
     39
     40        /**
     41         * @ticket BBP2327
     42         */
     43        public function test_bbp_is_forum_public_should_be_false_for_private_group_forums() {
     44                $g = $this->bp_factory->group->create( array(
     45                        'status' => 'private',
     46                ) );
     47
     48                $f = $this->factory->forum->create();
     49
     50                $this->attach_forum_to_group( $f, $g );
     51
     52                $this->assertFalse( bbp_is_forum_public( $f ) );
     53        }
     54
     55        /**
     56         * @ticket BBP2327
     57         */
     58        public function test_bbp_is_forum_public_should_be_false_for_hidden_group_forums() {
     59                $g = $this->bp_factory->group->create( array(
     60                        'status' => 'hidden',
     61                ) );
     62
     63                $f = $this->factory->forum->create();
     64
     65                $this->attach_forum_to_group( $f, $g );
     66
     67                $this->assertFalse( bbp_is_forum_public( $f ) );
     68        }
     69}