Ticket #9013: 9013.01.patch
File 9013.01.patch, 11.9 KB (added by , 16 months ago) |
---|
-
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() { 280 280 } 281 281 } 282 282 add_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.0288 *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
10 10 // Exit if accessed directly. 11 11 defined( 'ABSPATH' ) || exit; 12 12 13 /**14 * Set up the displayed user's Members Invitations nav.15 *16 * @since 8.0.017 */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 63 13 /** 64 14 * When a user joins the network via an invitation, skip sending the activation email. 65 15 * … … function bp_members_invitations_maybe_bypass_request_approval( $send, $details ) 216 166 } 217 167 add_filter( 'bp_members_membership_requests_bypass_manual_approval', 'bp_members_invitations_maybe_bypass_request_approval', 10, 2 ); 218 168 add_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 */ 178 function 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 */ 190 function 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() { 19 19 buddypress()->members = new BP_Members_Component(); 20 20 } 21 21 add_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 */ 28 function bp_setup_members_invitations() { 29 buddypress()->members_invitations = new BP_Members_Invitations_Component(); 30 } 31 add_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. 11 if ( ! defined( 'ABSPATH' ) ) { 12 exit; 13 } 14 class 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 { 766 766 'BP_REST_Signup_Endpoint' => 'members', 767 767 'BP_Members_Invitation_Manager' => 'members', 768 768 'BP_Members_Invitations_Template' => 'members', 769 'BP_Members_Invitations_Component' => 'members', 769 770 770 771 'BP_REST_Messages_Endpoint' => 'messages', 771 772 'BP_REST_Sitewide_Notices_Endpoint' => 'messages',