Skip to:
Content

BuddyPress.org

Ticket #7156: 7156.4.patch

File 7156.4.patch, 11.6 KB (added by imath, 5 years ago)
  • src/bp-activity/classes/class-bp-activity-component.php

    diff --git src/bp-activity/classes/class-bp-activity-component.php src/bp-activity/classes/class-bp-activity-component.php
    index a362a358c..74b81c7b6 100644
    class BP_Activity_Component extends BP_Component { 
    461461         * Init the BP REST API.
    462462         *
    463463         * @since 5.0.0
     464         *
     465         * @param array $controllers Optional. See BP_Component::rest_api_init() for
     466         *                           description.
    464467         */
    465         public function rest_api_init() {
    466                 $controller = new BP_REST_Activity_Endpoint();
    467                 $controller->register_routes();
    468 
    469                 parent::rest_api_init();
     468        public function rest_api_init( $controllers = array() ) {
     469                parent::rest_api_init( array( 'BP_REST_Activity_Endpoint' ) );
    470470        }
    471471}
  • src/bp-core/classes/class-bp-component.php

    diff --git src/bp-core/classes/class-bp-component.php src/bp-core/classes/class-bp-component.php
    index 7bed39f9e..9bcddd1cb 100644
    class BP_Component { 
    867867         * Init the BP REST API.
    868868         *
    869869         * @since 5.0.0
    870          */
    871         public function rest_api_init() {
     870         *
     871         * @param array $controllers The list of BP REST controllers to load.
     872         */
     873        public function rest_api_init( $controllers = array() ) {
     874                if ( is_array( $controllers ) && $controllers ) {
     875                        // Built-in controllers.
     876                        $_controllers = $controllers;
     877
     878                        /**
     879                         * Use this filter to disable all or some REST API controllers
     880                         * for the component.
     881                         *
     882                         * This is a dynamic hook that is based on the component string ID.
     883                         *
     884                         * @since 5.0.0
     885                         *
     886                         * @param array $controllers The list of BP REST API controllers to load.
     887                         */
     888                        $controllers = (array) apply_filters( 'bp_' . $this->id . '_rest_api_controllers', $controllers );
     889
     890                        foreach( $controllers as $controller ) {
     891                                if ( ! in_array( $controller, $_controllers, true ) ) {
     892                                        continue;
     893                                }
     894
     895                                $component_controller = new $controller;
     896                                $component_controller->register_routes();
     897                        }
     898                }
    872899
    873900                /**
    874901                 * Fires in the rest_api_init method inside BP_Component.
  • src/bp-groups/classes/class-bp-groups-component.php

    diff --git src/bp-groups/classes/class-bp-groups-component.php src/bp-groups/classes/class-bp-groups-component.php
    index 296c4833a..b53835ea0 100644
    class BP_Groups_Component extends BP_Component { 
    927927         * Init the BP REST API.
    928928         *
    929929         * @since 5.0.0
     930         *
     931         * @param array $controllers Optional. See BP_Component::rest_api_init() for
     932         *                           description.
    930933         */
    931         public function rest_api_init() {
    932                 $controller = new BP_REST_Groups_Endpoint();
    933                 $controller->register_routes();
    934 
    935                 $controller = new BP_REST_Group_Membership_Endpoint();
    936                 $controller->register_routes();
    937 
    938                 $controller = new BP_REST_Group_Invites_Endpoint();
    939                 $controller->register_routes();
    940 
    941                 $controller = new BP_REST_Group_Membership_Request_Endpoint();
    942                 $controller->register_routes();
    943 
    944                 $controller = new BP_REST_Attachments_Group_Avatar_Endpoint();
    945                 $controller->register_routes();
    946 
    947                 parent::rest_api_init();
     934        public function rest_api_init( $controllers = array() ) {
     935                parent::rest_api_init( array(
     936                        'BP_REST_Groups_Endpoint',
     937                        'BP_REST_Group_Membership_Endpoint',
     938                        'BP_REST_Group_Invites_Endpoint',
     939                        'BP_REST_Group_Membership_Request_Endpoint',
     940                        'BP_REST_Attachments_Group_Avatar_Endpoint',
     941                ) );
    948942        }
    949943}
  • src/bp-members/classes/class-bp-members-component.php

    diff --git src/bp-members/classes/class-bp-members-component.php src/bp-members/classes/class-bp-members-component.php
    index 4b1647976..a83344feb 100644
    class BP_Members_Component extends BP_Component { 
    461461         * Init the BP REST API.
    462462         *
    463463         * @since 5.0.0
     464         *
     465         * @param array $controllers Optional. See BP_Component::rest_api_init() for
     466         *                           description.
    464467         */
    465         public function rest_api_init() {
    466                 /**
    467                  * As the Members component is always loaded,
    468                  * let's register the Components endpoint here.
    469                  */
    470                 $controller = new BP_REST_Components_Endpoint();
    471                 $controller->register_routes();
    472 
    473                 $controller = new BP_REST_Members_Endpoint();
    474                 $controller->register_routes();
    475 
    476                 $controller = new BP_REST_Attachments_Member_Avatar_Endpoint();
    477                 $controller->register_routes();
    478 
    479                 parent::rest_api_init();
     468        public function rest_api_init( $controllers = array() ) {
     469                parent::rest_api_init( array(
     470                        /**
     471                         * As the Members component is always loaded,
     472                         * let's register the Components endpoint here.
     473                         */
     474                        'BP_REST_Components_Endpoint',
     475                        'BP_REST_Members_Endpoint',
     476                        'BP_REST_Attachments_Member_Avatar_Endpoint',
     477                ) );
    480478        }
    481479}
  • src/bp-messages/classes/class-bp-messages-component.php

    diff --git src/bp-messages/classes/class-bp-messages-component.php src/bp-messages/classes/class-bp-messages-component.php
    index 3062d5c5d..1904bd98c 100644
    class BP_Messages_Component extends BP_Component { 
    438438         * Init the BP REST API.
    439439         *
    440440         * @since 5.0.0
     441         *
     442         * @param array $controllers Optional. See BP_Component::rest_api_init() for
     443         *                           description.
    441444         */
    442         public function rest_api_init() {
    443                 $controller = new BP_REST_Messages_Endpoint();
    444                 $controller->register_routes();
    445 
    446                 parent::rest_api_init();
     445        public function rest_api_init( $controllers = array() ) {
     446                parent::rest_api_init( array( 'BP_REST_Messages_Endpoint' ) );
    447447        }
    448448}
  • src/bp-notifications/classes/class-bp-notifications-component.php

    diff --git src/bp-notifications/classes/class-bp-notifications-component.php src/bp-notifications/classes/class-bp-notifications-component.php
    index 2eaaba415..4333d8b30 100644
    class BP_Notifications_Component extends BP_Component { 
    320320         * Init the BP REST API.
    321321         *
    322322         * @since 5.0.0
     323         *
     324         * @param array $controllers Optional. See BP_Component::rest_api_init() for
     325         *                           description.
    323326         */
    324         public function rest_api_init() {
    325                 $controller = new BP_REST_Notifications_Endpoint();
    326                 $controller->register_routes();
    327 
    328                 parent::rest_api_init();
     327        public function rest_api_init( $controllers = array() ) {
     328                parent::rest_api_init( array( 'BP_REST_Notifications_Endpoint' ) );
    329329        }
    330330}
  • src/bp-xprofile/classes/class-bp-xprofile-component.php

    diff --git src/bp-xprofile/classes/class-bp-xprofile-component.php src/bp-xprofile/classes/class-bp-xprofile-component.php
    index 3ade404aa..b43879d34 100644
    class BP_XProfile_Component extends BP_Component { 
    494494         * Init the BP REST API.
    495495         *
    496496         * @since 5.0.0
     497         *
     498         * @param array $controllers Optional. See BP_Component::rest_api_init() for
     499         *                           description.
    497500         */
    498         public function rest_api_init() {
    499                 $controller = new BP_REST_XProfile_Fields_Endpoint();
    500                 $controller->register_routes();
    501 
    502                 $controller = new BP_REST_XProfile_Field_Groups_Endpoint();
    503                 $controller->register_routes();
    504 
    505                 $controller = new BP_REST_XProfile_Data_Endpoint();
    506                 $controller->register_routes();
    507 
    508                 parent::rest_api_init();
     501        public function rest_api_init( $controllers = array() ) {
     502                parent::rest_api_init( array(
     503                        'BP_REST_XProfile_Fields_Endpoint',
     504                        'BP_REST_XProfile_Field_Groups_Endpoint',
     505                        'BP_REST_XProfile_Data_Endpoint',
     506                ) );
    509507        }
    510508}
  • new file tests/phpunit/assets/bp-rest-api-controllers.php

    diff --git tests/phpunit/assets/bp-rest-api-controllers.php tests/phpunit/assets/bp-rest-api-controllers.php
    new file mode 100644
    index 000000000..63d77f923
    - +  
     1<?php
     2/**
     3 * BP REST Controllers' mocks
     4 */
     5
     6class BP_REST_Mock_Class {
     7        public function __construct() {}
     8
     9        public function register_routes( $controller = '' ) {
     10                array_push( buddypress()->unit_test_rest->controllers, $controller );
     11        }
     12}
     13
     14/**
     15 * BP Member Avatar REST Controller's mock.
     16 */
     17class BP_REST_Attachments_Member_Avatar_Endpoint extends BP_REST_Mock_Class {
     18        public function __construct() {
     19                $this->namespace = bp_rest_namespace() . '/' . bp_rest_version();
     20                $this->rest_base = 'members';
     21    }
     22
     23    public function register_routes( $controller = '' ) {
     24                parent::register_routes( 'BP_REST_Attachments_Member_Avatar_Endpoint' );
     25        }
     26}
     27
     28/**
     29 * BP Components REST Controller's mock.
     30 */
     31class BP_REST_Components_Endpoint extends BP_REST_Mock_Class {
     32        public function __construct() {
     33                $this->namespace = bp_rest_namespace() . '/' . bp_rest_version();
     34                $this->rest_base = 'components';
     35    }
     36
     37    public function register_routes( $controller = '' ) {
     38                parent::register_routes( 'BP_REST_Components_Endpoint' );
     39        }
     40}
     41
     42/**
     43 * BP Members REST Controller's mock.
     44 */
     45class BP_REST_Members_Endpoint extends BP_REST_Mock_Class {
     46        public function __construct() {
     47                $this->namespace = bp_rest_namespace() . '/' . bp_rest_version();
     48                $this->rest_base = 'members';
     49    }
     50
     51    public function register_routes( $controller = '' ) {
     52                parent::register_routes( 'BP_REST_Members_Endpoint' );
     53        }
     54}
  • new file tests/phpunit/testcases/core/class-bp-component.php

    diff --git tests/phpunit/testcases/core/class-bp-component.php tests/phpunit/testcases/core/class-bp-component.php
    new file mode 100644
    index 000000000..8730f8224
    - +  
     1<?php
     2
     3include_once BP_TESTS_DIR . '/assets/bp-rest-api-controllers.php';
     4
     5/**
     6 * @group core
     7 * @group BP_Component
     8 */
     9class BP_Tests_BP_Component_TestCases extends BP_UnitTestCase {
     10    public function setUp() {
     11                parent::setUp();
     12
     13                $bp = buddypress();
     14        $bp->unit_test_rest = new stdClass;
     15        $bp->unit_test_rest->controllers = array();
     16    }
     17
     18    public function remove_controller( $controllers ) {
     19        return array_diff( $controllers, array( 'BP_REST_Members_Endpoint' ) );
     20    }
     21
     22    public function add_controller( $controllers ) {
     23        return array_merge( $controllers, array( 'Foo_Bar' ) );
     24    }
     25
     26    public function test_rest_api_init_for_members_component() {
     27        $bp_members = new BP_Members_Component();
     28        $bp         = buddypress();
     29
     30        $bp_members->rest_api_init();
     31
     32        $this->assertSame( $bp->unit_test_rest->controllers, array(
     33                        'BP_REST_Components_Endpoint',
     34                        'BP_REST_Members_Endpoint',
     35                        'BP_REST_Attachments_Member_Avatar_Endpoint',
     36                ) );
     37    }
     38
     39    public function test_rest_api_init_for_members_component_can_remove_controller() {
     40        $bp_members = new BP_Members_Component();
     41        $bp         = buddypress();
     42
     43        add_filter( 'bp_members_rest_api_controllers', array( $this, 'remove_controller' ) );
     44
     45        $bp_members->rest_api_init();
     46
     47        remove_filter( 'bp_members_rest_api_controllers', array( $this, 'remove_controller' ) );
     48
     49        $this->assertSame( $bp->unit_test_rest->controllers, array(
     50                        'BP_REST_Components_Endpoint',
     51                        'BP_REST_Attachments_Member_Avatar_Endpoint',
     52                ) );
     53    }
     54
     55    public function test_rest_api_init_for_members_component_cannot_add_controller() {
     56        $bp_members = new BP_Members_Component();
     57        $bp         = buddypress();
     58
     59        add_filter( 'bp_members_rest_api_controllers', array( $this, 'add_controller' ) );
     60
     61        $bp_members->rest_api_init();
     62
     63        remove_filter( 'bp_members_rest_api_controllers', array( $this, 'add_controller' ) );
     64
     65        $this->assertSame( $bp->unit_test_rest->controllers, array(
     66                        'BP_REST_Components_Endpoint',
     67                        'BP_REST_Members_Endpoint',
     68                        'BP_REST_Attachments_Member_Avatar_Endpoint',
     69                ) );
     70    }
     71}