Skip to:
Content

BuddyPress.org

Ticket #9013: 9013.01.patch

File 9013.01.patch, 11.9 KB (added by dcavins, 9 months ago)

First pass at a slim component that just handles the nav items.

  • src/bp-members/bp-members-adminbar.php

    diff --git src/bp-members/bp-members-adminbar.php src/bp-members/bp-members-adminbar.php
    index 5d438c78b..b48cbe090 100644
    function bp_members_remove_edit_page_menu() { 
    280280        }
    281281}
    282282add_action( 'add_admin_bar_menus', 'bp_members_remove_edit_page_menu' );
    283 
    284 /**
    285  * Add the "Invitations" menu and submenus.
    286  *
    287  * @since 8.0.0
    288  *
    289  * @global WP_Admin_Bar $wp_admin_bar WordPress object implementing a Toolbar API.
    290  */
    291 function bp_members_admin_bar_add_invitations_menu() {
    292         global $wp_admin_bar;
    293 
    294         // Bail if this is an ajax request.
    295         if ( wp_doing_ajax() ) {
    296                 return;
    297         }
    298 
    299         if ( bp_current_user_can( 'bp_members_invitations_view_screens' ) ) {
    300                 $bp          = buddypress();
    301                 $invite_slug = bp_get_members_invitations_slug();
    302 
    303                 $wp_admin_bar->add_node(
    304                         array(
    305                                 'id'     => $bp->my_account_menu_id . '-invitations',
    306                                 'parent' => $bp->my_account_menu_id,
    307                                 'title'  => __( 'Invitations', 'buddypress' ),
    308                                 'href'   => bp_loggedin_user_url( bp_members_get_path_chunks( array( $invite_slug ) ) ),
    309                                 'meta'   => array(
    310                                         'class'  => 'ab-sub-secondary'
    311                                 )
    312                         )
    313                 );
    314 
    315                 if ( bp_current_user_can( 'bp_members_invitations_view_send_screen' ) ) {
    316                         $wp_admin_bar->add_node(
    317                                 array(
    318                                         'id'     => $bp->my_account_menu_id . '-invitations-send',
    319                                         'parent' => $bp->my_account_menu_id . '-invitations',
    320                                         'title'  => __( 'Send Invites', 'buddypress' ),
    321                                         'href'   => bp_loggedin_user_url( bp_members_get_path_chunks( array( $invite_slug, 'send-invites' ) ) ),
    322                                         'meta'   => array(
    323                                                 'class'  => 'ab-sub-secondary'
    324                                         )
    325                                 )
    326                         );
    327                 }
    328 
    329                 $wp_admin_bar->add_node(
    330                         array(
    331                                 'id'     => $bp->my_account_menu_id . '-invitations-list',
    332                                 'parent' => $bp->my_account_menu_id . '-invitations',
    333                                 'title'  => __( 'Pending Invites', 'buddypress' ),
    334                                 'href'   => bp_loggedin_user_url( bp_members_get_path_chunks( array( $invite_slug, 'list-invites' ) ) ),
    335                                 'meta'   => array(
    336                                         'class'  => 'ab-sub-secondary'
    337                                 )
    338                         )
    339                 );
    340         }
    341 }
    342 add_action( 'bp_setup_admin_bar', 'bp_members_admin_bar_add_invitations_menu', 90 );
  • src/bp-members/bp-members-invitations.php

    diff --git src/bp-members/bp-members-invitations.php src/bp-members/bp-members-invitations.php
    index 3072f7fa8..2559f541e 100644
     
    1010// Exit if accessed directly.
    1111defined( 'ABSPATH' ) || exit;
    1212
    13 /**
    14  * Set up the displayed user's Members Invitations nav.
    15  *
    16  * @since 8.0.0
    17  */
    18 function bp_members_invitations_setup_nav() {
    19         if ( ! bp_get_members_invitations_allowed() ) {
    20                 return;
    21         }
    22 
    23         $user_has_access     = bp_user_has_access();
    24         $default_subnav_slug = ( bp_is_my_profile() && bp_user_can( bp_displayed_user_id(), 'bp_members_invitations_view_send_screen' ) ) ? 'send-invites' : 'list-invites';
    25 
    26         /* Add 'Invitations' to the main user profile navigation */
    27         bp_core_new_nav_item(
    28                 array(
    29                         'name'                    => __( 'Invitations', 'buddypress' ),
    30                         'slug'                    => bp_get_members_invitations_slug(),
    31                         'position'                => 80,
    32                         'screen_function'         => 'members_screen_send_invites',
    33                         'default_subnav_slug'     => $default_subnav_slug,
    34                         'show_for_displayed_user' => $user_has_access && bp_user_can( bp_displayed_user_id(), 'bp_members_invitations_view_screens' )
    35                 )
    36         );
    37 
    38         /* Create two subnav items for community invitations */
    39         bp_core_new_subnav_item(
    40                 array(
    41                         'name'            => __( 'Send Invites', 'buddypress' ),
    42                         'slug'            => 'send-invites',
    43                         'parent_slug'     => bp_get_members_invitations_slug(),
    44                         'screen_function' => 'members_screen_send_invites',
    45                         'position'        => 10,
    46                         'user_has_access' => $user_has_access && bp_is_my_profile() && bp_user_can( bp_displayed_user_id(), 'bp_members_invitations_view_send_screen' )
    47                 )
    48         );
    49 
    50         bp_core_new_subnav_item(
    51                 array(
    52                         'name'            => __( 'Pending Invites', 'buddypress' ),
    53                         'slug'            => 'list-invites',
    54                         'parent_slug'     => bp_get_members_invitations_slug(),
    55                         'screen_function' => 'members_screen_list_sent_invites',
    56                         'position'        => 20,
    57                         'user_has_access' => $user_has_access && bp_user_can( bp_displayed_user_id(), 'bp_members_invitations_view_screens' )
    58                 )
    59         );
    60 }
    61 add_action( 'bp_setup_nav', 'bp_members_invitations_setup_nav' );
    62 
    6313/**
    6414 * When a user joins the network via an invitation, skip sending the activation email.
    6515 *
    function bp_members_invitations_maybe_bypass_request_approval( $send, $details ) 
    216166}
    217167add_filter( 'bp_members_membership_requests_bypass_manual_approval', 'bp_members_invitations_maybe_bypass_request_approval', 10, 2 );
    218168add_filter( 'bp_members_membership_requests_bypass_manual_approval_multisite', 'bp_members_invitations_maybe_bypass_request_approval', 10, 2 );
     169
     170/**
     171 * Whether a user can access invitations screens.
     172 * Referred to by BP_Members_Invitations_Component::register_nav().
     173 *
     174 * @since 12.0.0
     175 *
     176 * @param bool $access Whether the user can view member invitations screens.
     177 */
     178function bp_members_invitations_user_can_view_screens() {
     179        return bp_user_has_access() && bp_user_can( bp_displayed_user_id(), 'bp_members_invitations_view_screens' );
     180}
     181
     182/**
     183 * Whether a user can access the send invitations member screen.
     184 * Referred to by BP_Members_Invitations_Component::register_nav().
     185 *
     186 * @since 12.0.0
     187 *
     188 * @param bool $access Whether the user can view member invitations send screen.
     189 */
     190function bp_members_invitations_user_can_view_send_screen() {
     191        return bp_is_my_profile() && bp_user_can( bp_displayed_user_id(), 'bp_members_invitations_view_send_screen' );
     192}
  • src/bp-members/bp-members-loader.php

    diff --git src/bp-members/bp-members-loader.php src/bp-members/bp-members-loader.php
    index 8e4f9baf6..44decfe59 100644
    function bp_setup_members() { 
    1919        buddypress()->members = new BP_Members_Component();
    2020}
    2121add_action( 'bp_setup_components', 'bp_setup_members', 1 );
     22
     23/**
     24 * Set up the bp-members-invitations component.
     25 *
     26 * @since 12.0.0
     27 */
     28function bp_setup_members_invitations() {
     29        buddypress()->members_invitations = new BP_Members_Invitations_Component();
     30}
     31add_action( 'bp_setup_components', 'bp_setup_members_invitations', 1 );
     32 No newline at end of file
  • new file src/bp-members/classes/class-bp-members-invitations-component.php

    diff --git src/bp-members/classes/class-bp-members-invitations-component.php src/bp-members/classes/class-bp-members-invitations-component.php
    new file mode 100644
    index 000000000..a5808622b
    - +  
     1<?php
     2/**
     3 * BP Members Invitations Component.
     4 *
     5 * @package BuddyPress
     6 *
     7 * @since 12.0.0
     8 */
     9
     10// Exit if accessed directly.
     11if ( ! defined( 'ABSPATH' ) ) {
     12        exit;
     13}
     14class BP_Members_Invitations_Component extends BP_Component {
     15
     16        function __construct() {
     17                parent::start(
     18                        'members_invitations',
     19                        __( 'Members Invitations', 'buddypress' ),
     20                        '',
     21                        array()
     22                );
     23        }
     24
     25        /**
     26         * Register component navigation.
     27         *
     28         * @since 12.0.0
     29         *
     30         * @see `BP_Component::register_nav()` for a description of arguments.
     31         *
     32         * @param array $main_nav Optional. See `BP_Component::register_nav()` for
     33         *                        description.
     34         * @param array $sub_nav  Optional. See `BP_Component::register_nav()` for
     35         *                        description.
     36         */
     37        public function register_nav( $main_nav = array(), $sub_nav = array() ) {
     38                if ( ! bp_get_members_invitations_allowed() ) {
     39                        return;
     40                }
     41
     42                /* Add 'Invitations' to the main user profile navigation */
     43                $main_nav = array(
     44                        'name'                     => __( 'Invitations', 'buddypress' ),
     45                        'slug'                     => bp_get_members_invitations_slug(),
     46                        'position'                 => 80,
     47                        'screen_function'          => 'members_screen_send_invites',
     48                        'default_subnav_slug'      => 'list-invites',
     49                        'show_for_displayed_user'  => false, // Non-admin users should only see their own invites.
     50                        'user_has_access_callback' => 'bp_members_invitations_user_can_view_screens',
     51                );
     52
     53                /* Create two subnav items for community invitations. */
     54                $sub_nav[] = array(
     55                        'name'                     => __( 'Send Invites', 'buddypress' ),
     56                        'slug'                     => 'send-invites',
     57                        'parent_slug'              => bp_get_members_invitations_slug(),
     58                        'screen_function'          => 'members_screen_send_invites',
     59                        'position'                 => 10,
     60                        'user_has_access'          => false,
     61                        'user_has_access_callback' => 'bp_members_invitations_user_can_view_send_screen',
     62                );
     63
     64                $sub_nav[] = array(
     65                        'name'                     => __( 'Pending Invites', 'buddypress' ),
     66                        'slug'                     => 'list-invites',
     67                        'parent_slug'              => bp_get_members_invitations_slug(),
     68                        'screen_function'          => 'members_screen_list_sent_invites',
     69                        'position'                 => 20,
     70                        'user_has_access'          => false,
     71                        'user_has_access_callback' => 'bp_members_invitations_user_can_view_screens',
     72                );
     73
     74                parent::register_nav( $main_nav, $sub_nav );
     75        }
     76
     77        /**
     78         * Set up component navigation.
     79         *
     80         * @since 12.0.0 Used to customize the default subnavigation slug.
     81         *
     82         * @see `BP_Component::setup_nav()` for a description of arguments.
     83         *
     84         * @param array $main_nav Optional. See `BP_Component::setup_nav()` for
     85         *                        description.
     86         * @param array $sub_nav  Optional. See `BP_Component::setup_nav()` for
     87         *                        description.
     88         */
     89        public function setup_nav( $main_nav = array(), $sub_nav = array() ) {
     90                if ( bp_is_my_profile() && bp_user_can( bp_displayed_user_id(), 'bp_members_invitations_view_send_screen' ) ) {
     91                        $this->main_nav['default_subnav_slug'] = 'send-invites';
     92                }
     93
     94                parent::setup_nav( $main_nav, $sub_nav );
     95        }
     96
     97        /**
     98         * Set up the component entries in the WordPress Admin Bar.
     99         *
     100         * @since 1.0.0
     101         *
     102         * @see BP_Component::setup_admin_bar() for a description of arguments.
     103         *
     104         * @param array $wp_admin_nav See BP_Component::setup_admin_bar()
     105         *                            for description.
     106         */
     107        public function setup_admin_bar( $wp_admin_nav = array() ) {
     108                if ( bp_current_user_can( 'bp_members_invitations_view_screens' ) ) {
     109                        $bp             = buddypress();
     110                        $invite_slug    = bp_get_members_invitations_slug();
     111                        $invite_menu_id = $bp->my_account_menu_id . '-invitations';
     112
     113                        $wp_admin_nav[] = array(
     114                                'id'     => $invite_menu_id,
     115                                'parent' => $bp->my_account_menu_id,
     116                                'title'  => __( 'Invitations', 'buddypress' ),
     117                                'href'   => bp_loggedin_user_url( bp_members_get_path_chunks( array( $invite_slug ) ) ),
     118                        );
     119
     120                        if ( bp_current_user_can( 'bp_members_invitations_view_send_screen' ) ) {
     121                                $wp_admin_nav[] = array(
     122                                        'id'     => $bp->my_account_menu_id . '-invitations-send',
     123                                        'parent' => $invite_menu_id,
     124                                        'title'  => __( 'Send Invites', 'buddypress' ),
     125                                        'href'   => bp_loggedin_user_url( bp_members_get_path_chunks( array( $invite_slug, 'send-invites' ) ) ),
     126                                );
     127                        }
     128
     129                        $wp_admin_nav[] = array(
     130                                'id'     => $bp->my_account_menu_id . '-invitations-list',
     131                                'parent' => $invite_menu_id,
     132                                'title'  => __( 'Pending Invites', 'buddypress' ),
     133                                'href'   => bp_loggedin_user_url( bp_members_get_path_chunks( array( $invite_slug, 'list-invites' ) ) ),
     134                        );
     135                }
     136
     137                parent::setup_admin_bar( $wp_admin_nav );
     138        }
     139}
     140 No newline at end of file
  • src/class-buddypress.php

    diff --git src/class-buddypress.php src/class-buddypress.php
    index 574f09b27..99bde2507 100644
    class BuddyPress { 
    766766                        'BP_REST_Signup_Endpoint'                    => 'members',
    767767                        'BP_Members_Invitation_Manager'              => 'members',
    768768                        'BP_Members_Invitations_Template'            => 'members',
     769                        'BP_Members_Invitations_Component'           => 'members',
    769770
    770771                        'BP_REST_Messages_Endpoint'                  => 'messages',
    771772                        'BP_REST_Sitewide_Notices_Endpoint'          => 'messages',