Skip to:
Content

BuddyPress.org

Ticket #8139: 8139.05.review.patch

File 8139.05.review.patch, 44.2 KB (added by imath, 3 months ago)
  • src/bp-core/admin/bp-core-admin-optouts.php

    diff --git src/bp-core/admin/bp-core-admin-optouts.php src/bp-core/admin/bp-core-admin-optouts.php
    index d47cf79de..95d789a08 100644
    function bp_core_get_optouts_notice() { 
    174174                );
    175175
    176176                if ( ! empty( $_REQUEST['deleted'] ) ) {
     177                        $deleted            = absint( $_REQUEST['deleted'] );
    177178                        $notice['message'] .= sprintf(
    178                                 /* translators: %s: number of deleted optouts */
    179                                 _nx( '%s opt-out successfully deleted!', '%s opt-outs successfully deleted!',
    180                                  absint( $_REQUEST['deleted'] ),
    181                                  'nonmembers opt-out deleted',
    182                                  'buddypress'
     179                                _nx(
     180                                        /* translators: %s: number of deleted optouts */
     181                                        '%s opt-out successfully deleted!', '%s opt-outs successfully deleted!',
     182                                        $deleted,
     183                                        'nonmembers opt-out deleted',
     184                                        'buddypress'
    183185                                ),
    184186                                number_format_i18n( absint( $_REQUEST['deleted'] ) )
    185187                        );
    186188                }
    187189
    188190                if ( ! empty( $_REQUEST['notdeleted'] ) ) {
     191                        $notdeleted         = absint( $_REQUEST['notdeleted'] );
    189192                        $notice['message'] .= sprintf(
    190                                 /* translators: %s: number of optouts that failed to be deleted */
    191                                 _nx( '%s opt-out was not deleted.', '%s opt-outs were not deleted.',
    192                                  absint( $_REQUEST['notdeleted'] ),
    193                                  'nonmembers opt-out not deleted',
    194                                  'buddypress'
     193                                _nx(
     194                                        /* translators: %s: number of optouts that failed to be deleted */
     195                                        '%s opt-out was not deleted.', '%s opt-outs were not deleted.',
     196                                        $notdeleted,
     197                                        'nonmembers opt-out not deleted',
     198                                        'buddypress'
    195199                                ),
    196                                 number_format_i18n( absint( $_REQUEST['notdeleted'] ) )
     200                                number_format_i18n( $notdeleted )
    197201                        );
    198202
    199203                        if ( empty( $_REQUEST['deleted'] ) ) {
  • src/bp-core/admin/css/common-rtl.css

    diff --git src/bp-core/admin/css/common-rtl.css src/bp-core/admin/css/common-rtl.css
    index d460dc8d2..1bbd8508a 100644
    body.tools-php .bp-tools dd { 
    317317        margin: 0;
    318318}
    319319
     320body.tools_page_bp-members-invitations .nav-tab-wrapper,
     321body.tools_page_bp-optouts .nav-tab-wrapper {
     322        margin-bottom: 1em;
     323}
     324
    320325/*
    321326 * 2.4 Tooltips
    322327 */
  • src/bp-core/admin/css/common.css

    diff --git src/bp-core/admin/css/common.css src/bp-core/admin/css/common.css
    index 0272626bb..d2730f9a9 100644
    body.tools-php .bp-tools dd { 
    317317        margin: 0;
    318318}
    319319
     320body.tools_page_bp-members-invitations .nav-tab-wrapper,
     321body.tools_page_bp-optouts .nav-tab-wrapper {
     322        margin-bottom: 1em;
     323}
     324
    320325/*
    321326 * 2.4 Tooltips
    322327 */
  • src/bp-core/bp-core-functions.php

    diff --git src/bp-core/bp-core-functions.php src/bp-core/bp-core-functions.php
    index 854a1982d..9cdb33493 100644
    function bp_email_unsubscribe_handler() { 
    41134113                $redirect_to = home_url();
    41144114
    41154115                $result_msg = $emails[ $raw_email_type ]['unsubscribe']['message'];
    4116                 $unsub_msg  = __( 'You have been unsubscribed.' );
     4116                $unsub_msg  = __( 'You have been unsubscribed.', 'buddypress' );
    41174117        // This is an unsubscribe request from a current member.
    41184118        } else {
    41194119                if ( bp_is_active( 'settings' ) ) {
  • src/bp-members/bp-members-activity.php

    diff --git src/bp-members/bp-members-activity.php src/bp-members/bp-members-activity.php
    index c905ff79c..a110cd6e7 100644
    add_action( 'bp_register_activity_actions', 'bp_members_register_activity_action 
    5858function bp_members_format_activity_action_new_member( $action, $activity ) {
    5959        $userlink         = bp_core_get_userlink( $activity->user_id );
    6060        $inviter_userlink = false;
    61         if ( $invite_id = bp_get_user_meta( $activity->user_id, 'accepted_members_invitation', true ) ) {
    62                 $invite           = new BP_Invitation( (int) $invite_id );
     61        $invite_id        = bp_get_user_meta( $activity->user_id, 'accepted_members_invitation', true );
     62
     63        if ( $invite_id ) {
     64                $invite = new BP_Invitation( (int) $invite_id );
     65
    6366                if ( $invite->inviter_id ) {
    6467                        $inviter_userlink = bp_core_get_userlink( $invite->inviter_id );
    6568                }
    6669        }
    6770
    6871        if ( $inviter_userlink ) {
    69                 $action           = sprintf(
     72                $action = sprintf(
    7073                        /* translators: 1: new user link. 2: inviter user link. */
    7174                        esc_html__( '%1$s accepted an invitation from %2$s and became a registered member', 'buddypress' ),
    7275                        $userlink,
    function bp_members_format_activity_action_new_member( $action, $activity ) { 
    8588        /**
    8689         * Filters the formatted 'new member' activity actions.
    8790         *
    88          * @since 2.2.0
     91         * @since 8.0.0
    8992         *
    90          * @param string $action   Static activity action.
    91          * @param object $activity Activity object.
     93         * @param string $action    Static activity action.
     94         * @param object $activity  Activity object.
     95         * @param int    $invite_id The ID of the invite.
    9296         */
    93         return apply_filters( 'bp_members_format_activity_action_new_member', $action, $activity );
     97        return apply_filters( 'bp_members_format_activity_action_new_member', $action, $activity, $invite_id );
    9498}
    9599
    96100/**
  • src/bp-members/bp-members-adminbar.php

    diff --git src/bp-members/bp-members-adminbar.php src/bp-members/bp-members-adminbar.php
    index f9b45ad38..282be654c 100644
    function bp_members_admin_bar_my_account_menu() { 
    2323        global $wp_admin_bar;
    2424
    2525        // Bail if this is an ajax request.
    26         if ( defined( 'DOING_AJAX' ) )
     26        if ( wp_doing_ajax() ) {
    2727                return;
     28        }
    2829
    2930        // Logged in user.
    3031        if ( is_user_logged_in() ) {
    function bp_members_admin_bar_add_invitations_menu() { 
    188189        global $wp_admin_bar;
    189190
    190191        // Bail if this is an ajax request.
    191         if ( defined( 'DOING_AJAX' ) ) {
     192        if ( wp_doing_ajax() ) {
    192193                return;
    193194        }
    194195
  • src/bp-members/bp-members-filters.php

    diff --git src/bp-members/bp-members-filters.php src/bp-members/bp-members-filters.php
    index 38f3433e6..e6a234b58 100644
    add_filter( 'edit_profile_url', 'bp_members_edit_profile_url', 10, 3 ); 
    141141 *
    142142 * @return bool
    143143 */
    144 function bp_members_user_can_filter( $retval, $user_id, $capability, $site_id, $args ) {
     144function bp_members_user_can_filter( $retval, $user_id, $capability, $site_id, $args = array() ) {
    145145
    146146        switch ( $capability ) {
    147147                case 'bp_members_manage_membership_requests':
    148148                        $retval = bp_user_can( $user_id, 'bp_moderate' );
    149149                        break;
     150
    150151                case 'bp_members_send_invitation':
    151152                        // @todo Add restrictions?
    152153                        if ( bp_get_members_invitations_allowed() ) {
    153154                                $retval = true;
    154155                        }
    155156                        break;
     157
    156158                case 'bp_members_receive_invitation':
    157159                        if ( bp_get_members_invitations_allowed() ) {
    158160                                $retval = true;
    function bp_members_user_can_filter( $retval, $user_id, $capability, $site_id, $ 
    160162                                if ( empty( $args['invitee_email'] ) || false !== get_user_by( 'email', $args['invitee_email'] ) ) {
    161163                                        $retval = false;
    162164                                }
    163                         // @TODO: The invited user must not have opted out from receiving invitations.
     165                                // @TODO: The invited user must not have opted out from receiving invitations.
    164166                        }
    165 
    166167                        break;
    167168        }
    168169
    169170        return $retval;
    170 
    171171}
    172172add_filter( 'bp_user_can', 'bp_members_user_can_filter', 10, 5 );
    173173
  • src/bp-members/bp-members-template.php

    diff --git src/bp-members/bp-members-template.php src/bp-members/bp-members-template.php
    index 117f6fcb6..b7f9c9afb 100644
    function bp_members_invitations_pagination_count() { 
    30563056                /**
    30573057                 * Filters the pagination count for the current network invitation loop.
    30583058                 *
    3059                  * @since 1.9.0
     3059                 * @since 8.0.0
    30603060                 *
    30613061                 * @param string $pag HTML for the pagination count.
    30623062                 */
    function bp_the_members_invitation_action_links( $args = '' ) { 
    32033203                $retval = $r['before'] . implode( $r['sep'], $r['links'] ) . $r['after'];
    32043204
    32053205                /**
    3206                  * Filters the action links for the current notification.
     3206                 * Filters the action links for the current invitation.
    32073207                 *
    3208                  * @since 1.9.0
    3209                  * @since 2.6.0 Added the `$r` parameter.
     3208                 * @since 8.0.0
    32103209                 *
    3211                  * @param string $retval HTML links for actions to take on single notifications.
     3210                 * @param string $retval HTML links for actions to take on single invitation.
    32123211                 * @param array  $r      Array of parsed arguments.
    32133212                 */
    32143213                return apply_filters( 'bp_get_the_members_invitation_action_links', $retval, $r );
    function bp_the_members_invitations_resend_link( $user_id = 0 ) { 
    32273226        /**
    32283227         * Return the resend link for the current notification.
    32293228         *
    3230          * @since 78.0.0
     3229         * @since 8.0.0
    32313230         *
    32323231         * @param int $user_id The user ID.
    32333232         * @return string
    function bp_the_members_invitations_delete_link( $user_id = 0 ) { 
    33343333                        $message = __( 'Cancel', 'buddypress' );
    33353334                }
    33363335
    3337                 $retval = sprintf( '<a href="%1$s" class="delete secondary confirm bp-tooltip">%2$s</a>', esc_url( bp_get_the_members_invitations_delete_url( $user_id ) ), $message );
     3336                $retval = sprintf(
     3337                        '<a href="%1$s" class="delete secondary confirm bp-tooltip">%2$s</a>',
     3338                        esc_url( bp_get_the_members_invitations_delete_url( $user_id ) ),
     3339                        esc_html( $message )
     3340                );
    33383341
    33393342                /**
    33403343                 * Filters the delete link for the current invitation.
    function bp_members_invitations_send_invites_permalink( $user_id = 0 ) { 
    34513454         *
    34523455         * @since 8.0.0
    34533456         *
    3454          * @return string Read notifications permalink.
     3457         * @param int $user_id The user ID.
     3458         * @return string      The send invitations permalink.
    34553459         */
    34563460        function bp_get_members_invitations_send_invites_permalink( $user_id = 0 ) {
    34573461                if ( 0 === $user_id ) {
    function bp_members_invitations_send_invites_permalink( $user_id = 0 ) { 
    34643468                $retval = trailingslashit( $domain . bp_get_members_invitations_slug() . '/send-invites' );
    34653469
    34663470                /**
    3467                  * Filters the read notifications permalink.
     3471                 * Filters the send invitations permalink.
    34683472                 *
    34693473                 * @since 8.0.0
    34703474                 *
  • src/bp-members/classes/class-bp-members-admin.php

    diff --git src/bp-members/classes/class-bp-members-admin.php src/bp-members/classes/class-bp-members-admin.php
    index 3294a7765..8c1d68b46 100644
    class BP_Members_Admin { 
    224224
    225225                        // Member invitations are enabled.
    226226                        if ( bp_is_network_activated() ) {
    227                                 add_action( 'update_site_option_bp-enable-members-invitations',  array( $this, 'multisite_registration_on' ),  10, 2 );
     227                                add_action( 'update_site_option_bp-enable-members-invitations', array( $this, 'multisite_registration_on' ), 10, 2 );
    228228                        } else {
    229229                                add_action( 'update_option_bp-enable-members-invitations', array( $this, 'single_site_registration_on' ), 10, 2 );
    230230                        }
    class BP_Members_Admin { 
    557557                foreach ( $page_head as $head ) {
    558558                        add_action( "admin_head-{$head}", array( $this, 'profile_admin_head' ) );
    559559                }
     560
     561                // Highlight the BuddyPress tools submenu when managing invitations.
     562                add_action( "admin_head-{$this->members_invites_page}", 'bp_core_modify_admin_menu_highlight' );
    560563        }
    561564
    562565        /**
    class BP_Members_Admin { 
    19401943                                        }
    19411944
    19421945                                        if ( ! empty( $_REQUEST['notdeleted'] ) ) {
     1946                                                $notdeleted         = absint( $_REQUEST['notdeleted'] );
    19431947                                                $notice['message'] .= sprintf(
    1944                                                         /* translators: %s: number of deleted signups not deleted */
    1945                                                         _nx( '%s sign-up was not deleted.', '%s sign-ups were not deleted.',
    1946                                                          absint( $_REQUEST['notdeleted'] ),
    1947                                                          'signup notdeleted',
    1948                                                          'buddypress'
     1948                                                        _nx(
     1949                                                                /* translators: %s: number of deleted signups not deleted */
     1950                                                                '%s sign-up was not deleted.', '%s sign-ups were not deleted.',
     1951                                                                $notdeleted,
     1952                                                                'signup notdeleted',
     1953                                                                'buddypress'
    19491954                                                        ),
    1950                                                         number_format_i18n( absint( $_REQUEST['notdeleted'] ) )
     1955                                                        number_format_i18n( $notdeleted )
    19511956                                                );
    19521957
    19531958                                                if ( empty( $_REQUEST['deleted'] ) ) {
    class BP_Members_Admin { 
    27882793                                        );
    27892794
    27902795                                        if ( ! empty( $_REQUEST['resent'] ) ) {
     2796                                                $resent             = absint( $_REQUEST['resent'] );
    27912797                                                $notice['message'] .= sprintf(
    2792                                                         /* translators: %s: number of invitation emails sent */
    2793                                                         _nx( '%s invtitation email successfully sent! ', '%s invitation emails successfully sent! ',
    2794                                                          absint( $_REQUEST['resent'] ),
    2795                                                          'members invitation resent',
    2796                                                          'buddypress'
     2798                                                        _nx(
     2799                                                                /* translators: %s: number of invitation emails sent */
     2800                                                                '%s invtitation email successfully sent! ', '%s invitation emails successfully sent! ',
     2801                                                                $resent,
     2802                                                                'members invitation resent',
     2803                                                                'buddypress'
    27972804                                                        ),
    2798                                                         number_format_i18n( absint( $_REQUEST['resent'] ) )
     2805                                                        number_format_i18n( $resent )
    27992806                                                );
    28002807                                        }
    28012808
    28022809                                        if ( ! empty( $_REQUEST['notsent'] ) ) {
     2810                                                $notsent            = absint( $_REQUEST['notsent'] );
    28032811                                                $notice['message'] .= sprintf(
    2804                                                         /* translators: %s: number of unsent invitation emails */
    2805                                                         _nx( '%s invitation email was not sent.', '%s invitation emails were not sent.',
    2806                                                          absint( $_REQUEST['notsent'] ),
    2807                                                          'members invitation notsent',
    2808                                                          'buddypress'
     2812                                                        _nx(
     2813                                                                /* translators: %s: number of unsent invitation emails */
     2814                                                                '%s invitation email was not sent.', '%s invitation emails were not sent.',
     2815                                                                $notsent,
     2816                                                                'members invitation notsent',
     2817                                                                'buddypress'
    28092818                                                        ),
    2810                                                         number_format_i18n( absint( $_REQUEST['notsent'] ) )
     2819                                                        number_format_i18n( $notsent )
    28112820                                                );
    28122821
    28132822                                                if ( empty( $_REQUEST['resent'] ) ) {
    class BP_Members_Admin { 
    28242833                                        );
    28252834
    28262835                                        if ( ! empty( $_REQUEST['deleted'] ) ) {
     2836                                                $deleted            = absint( $_REQUEST['deleted'] );
    28272837                                                $notice['message'] .= sprintf(
    2828                                                         /* translators: %s: number of deleted invitations */
    2829                                                         _nx( '%s invitation successfully deleted!', '%s invitations successfully deleted!',
    2830                                                          absint( $_REQUEST['deleted'] ),
    2831                                                          'members invitation deleted',
    2832                                                          'buddypress'
     2838                                                        _nx(
     2839                                                                /* translators: %s: number of deleted invitations */
     2840                                                                '%s invitation successfully deleted!', '%s invitations successfully deleted!',
     2841                                                                $deleted,
     2842                                                                'members invitation deleted',
     2843                                                                'buddypress'
    28332844                                                        ),
    2834                                                         number_format_i18n( absint( $_REQUEST['deleted'] ) )
     2845                                                        number_format_i18n( $deleted )
    28352846                                                );
    28362847                                        }
    28372848
    28382849                                        if ( ! empty( $_REQUEST['notdeleted'] ) ) {
     2850                                                $notdeleted         = absint( $_REQUEST['notdeleted'] );
    28392851                                                $notice['message'] .= sprintf(
    2840                                                         /* translators: %s: number of invitations that failed to be deleted */
    2841                                                         _nx( '%s invitation was not deleted.', '%s invitations were not deleted.',
    2842                                                          absint( $_REQUEST['notdeleted'] ),
    2843                                                          'members invitation notdeleted',
    2844                                                          'buddypress'
     2852                                                        _nx(
     2853                                                                /* translators: %s: number of invitations that failed to be deleted */
     2854                                                                '%s invitation was not deleted.', '%s invitations were not deleted.',
     2855                                                                $notdeleted,
     2856                                                                'members invitation notdeleted',
     2857                                                                'buddypress'
    28452858                                                        ),
    2846                                                         number_format_i18n( absint( $_REQUEST['notdeleted'] ) )
     2859                                                        number_format_i18n( $notdeleted )
    28472860                                                );
    28482861
    28492862                                                if ( empty( $_REQUEST['deleted'] ) ) {
    class BP_Members_Admin { 
    30113024        /**
    30123025         * This is the confirmation screen for actions.
    30133026         *
    3014          * @since 2.0.0
     3027         * @since 8.0.0
    30153028         *
    30163029         * @param string $action Delete or resend invitation.
    3017          *
    30183030         * @return null|false
    30193031         */
    30203032        public function invitations_admin_manage( $action = '' ) {
    class BP_Members_Admin { 
    30873099                );
    30883100
    30893101                if ( is_network_admin() ) {
    3090                         $form_url = network_admin_url( 'admin.php' );
     3102                        $base_url = network_admin_url( 'admin.php' );
    30913103                } else {
    3092                         $form_url = bp_get_admin_url( 'tools.php' );
     3104                        $base_url = bp_get_admin_url( 'tools.php' );
    30933105                }
    30943106
    30953107                $cancel_url = add_query_arg( $url_args, $base_url );
  • 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 ec10398ae..2037224f3 100644
    class BP_Members_Component extends BP_Component { 
    624624                        } else {
    625625                                add_filter( 'bp_xprofile_admin_nav', array( $this, 'setup_xprofile_admin_nav' ), 2 );
    626626                        }
    627 
    628                         // $wp_admin_nav = array_merge( $wp_admin_nav, $this->get_members_invitations_admin_navs() );
    629627                }
    630628
    631629                parent::setup_admin_bar( $wp_admin_nav );
  • src/bp-members/classes/class-bp-members-invitation-manager.php

    diff --git src/bp-members/classes/class-bp-members-invitation-manager.php src/bp-members/classes/class-bp-members-invitation-manager.php
    index 139caf279..1ba89d286 100644
    class BP_Members_Invitation_Manager extends BP_Invitation_Manager { 
    5858                                        array(
    5959                                                'inv' => $invitation->id,
    6060                                                'ih'  => bp_members_invitations_get_hash( $invitation ),
    61                                         ), bp_get_signup_page()
     61                                        ),
     62                                        bp_get_signup_page()
    6263                                )
    6364                        );
    6465                        $unsubscribe_args = array(
    class BP_Members_Invitation_Manager extends BP_Invitation_Manager { 
    6970
    7071                        $args = array(
    7172                                'tokens' => array(
    72                                         'inviter.name'        => bp_core_get_userlink( $invitation->inviter_id, true, false, true ),
    73                                         'inviter.url'         => bp_core_get_user_domain( $invitation->inviter_id ),
    74                                         'inviter.id'          => $invitation->inviter_id,
    75                                         'invite.accept_url'   => esc_url( $invite_url ),
    76                                         'usermessage'         => $invitation->content,
    77                                         'unsubscribe'         => esc_url( bp_email_get_unsubscribe_link( $unsubscribe_args ) ),
     73                                        'inviter.name'      => bp_core_get_userlink( $invitation->inviter_id, true, false, true ),
     74                                        'inviter.url'       => bp_core_get_user_domain( $invitation->inviter_id ),
     75                                        'inviter.id'        => $invitation->inviter_id,
     76                                        'invite.accept_url' => esc_url( $invite_url ),
     77                                        'usermessage'       => wp_kses( $invitation->content, array() ),
     78                                        'unsubscribe'       => esc_url( bp_email_get_unsubscribe_link( $unsubscribe_args ) ),
    7879                                ),
    7980                        );
    8081
    class BP_Members_Invitation_Manager extends BP_Invitation_Manager { 
    9293         * @param array  $r    Parameters that describe the invitation being accepted.
    9394         * @return bool True on success, false on failure.
    9495         */
    95         public function run_acceptance_action( $type = 'invite', $r ) {
     96        public function run_acceptance_action( $type = 'invite', $r = array() ) {
    9697                // If the user is already a member (because BP at one point allowed two invitations to
    9798                // slip through), return early.
    9899
  • src/bp-members/classes/class-bp-members-invitations-list-table.php

    diff --git src/bp-members/classes/class-bp-members-invitations-list-table.php src/bp-members/classes/class-bp-members-invitations-list-table.php
    index 90f35d921..db5468ee4 100644
     
    1111defined( 'ABSPATH' ) || exit;
    1212
    1313/**
    14  * List table class for signups admin page.
     14 * List table class for Invitations admin page.
    1515 *
    1616 * @since 8.0.0
    1717 */
    class BP_Members_Invitations_List_Table extends WP_Users_List_Table { 
    2828        public $active_filters = array();
    2929
    3030        /**
    31          * Signup counts.
     31         * Invitation counts.
    3232         *
    3333         * @since 8.0.0
    34          *
    3534         * @var int
    3635         */
    3736        public $total_items = 0;
    class BP_Members_Invitations_List_Table extends WP_Users_List_Table { 
    109108         * @since 8.0.0
    110109         */
    111110        public function views() {
     111                $tools_url = bp_get_admin_url( 'tools.php' );
     112
     113                if ( is_network_admin() ) {
     114                        $tools_url = network_admin_url( 'admin.php' );
     115                }
     116
    112117                $url_base = add_query_arg(
    113118                        array(
    114119                                'page' => 'bp-members-invitations',
    115120                        ),
    116                         bp_get_admin_url( 'users.php' )
     121                        $tools_url
    117122                );
    118 
    119123                ?>
    120124
    121125                <h2 class="screen-reader-text"><?php
    122126                        /* translators: accessibility text */
    123                         _e( 'Filter invitations list', 'buddypress' );
     127                        esc_html_e( 'Filter invitations list', 'buddypress' );
    124128                ?></h2>
    125129                <ul class="subsubsub">
    126130                        <li class="all">
    class BP_Members_Invitations_List_Table extends WP_Users_List_Table { 
    146150                        <li class="sent">
    147151                                <a href="<?php echo esc_url( add_query_arg( 'sent', 'sent', $url_base ) ); ?>" class="<?php if ( in_array( 'sent', $this->active_filters, true ) ) echo 'current'; ?>">
    148152                                        <?php esc_html_e( 'Sent', 'buddypress' ); ?>
    149                                 </a> |
     153                                </a>
    150154                        </li>
    151155
    152156                        <?php
    class BP_Members_Invitations_List_Table extends WP_Users_List_Table { 
    196200                 */
    197201                return apply_filters( 'bp_members_invitations_list_columns', array(
    198202                        'cb'                       => '<input type="checkbox" />',
    199                         'invitee_email'            => __( 'Invitee',    'buddypress' ),
    200                         'username'                 => __( 'Inviter',        'buddypress' ),
    201                         'inviter_registered_date'  => __( 'Inviter Registered',  'buddypress' ),
    202                         'invitation_date_modified' => __( 'Date Modified',   'buddypress' ),
     203                        'invitee_email'            => __( 'Invitee', 'buddypress' ),
     204                        'username'                 => __( 'Inviter', 'buddypress' ),
     205                        'inviter_registered_date'  => __( 'Inviter Registered', 'buddypress' ),
     206                        'invitation_date_modified' => __( 'Date Modified', 'buddypress' ),
    203207                        'invitation_sent'          => __( 'Email Sent', 'buddypress' ),
    204208                        'invitation_accepted'      => __( 'Accepted', 'buddypress' )
    205209                ) );
    class BP_Members_Invitations_List_Table extends WP_Users_List_Table { 
    232236        public function no_items() {
    233237
    234238                if ( bp_get_members_invitations_allowed() ) {
    235                         esc_html_e( 'No pending invitations found.', 'buddypress' );
     239                        esc_html_e( 'No invitations found.', 'buddypress' );
    236240                } else {
    237241                        $link = sprintf( '<a href="%1$s">%2$s</a>', esc_url( bp_get_admin_url( add_query_arg( array( 'page' => 'bp-settings' ), 'admin.php' ) ) ), esc_html__( 'Edit settings', 'buddypress' ) );
    238242
    class BP_Members_Invitations_List_Table extends WP_Users_List_Table { 
    317321                echo esc_html( $invite->invitee_email );
    318322
    319323                $actions = array();
     324                $tools_url = bp_get_admin_url( 'tools.php' );
     325
     326                if ( is_network_admin() ) {
     327                        $tools_url = network_admin_url( 'admin.php' );
     328                }
    320329
    321330                // Resend action only if pending
    322331                if ( ! $invite->accepted ) {
    class BP_Members_Invitations_List_Table extends WP_Users_List_Table { 
    327336                                        'invite_id' => $invite->id,
    328337                                        'action'    => 'resend',
    329338                                ),
    330                                 bp_get_admin_url( 'users.php' )
     339                                $tools_url
    331340                        );
     341
    332342                        if ( ! $invite->invite_sent ) {
    333343                                $resend_label = __( 'Send', 'buddypress' );
    334344                        } else {
    335345                                $resend_label = __( 'Resend', 'buddypress' );
    336346                        }
    337                         $actions['resend'] = sprintf( '<a href="%1$s">%2$s</a>', esc_url( $email_link ), $resend_label );
     347
     348                        $actions['resend'] = sprintf( '<a href="%1$s">%2$s</a>', esc_url( $email_link ), esc_html( $resend_label ) );
    338349                }
    339350
    340351                // Delete link. Could be cleanup or revoking the invitation.
    class BP_Members_Invitations_List_Table extends WP_Users_List_Table { 
    344355                                'invite_id' => $invite->id,
    345356                                'action'    => 'delete',
    346357                        ),
    347                         bp_get_admin_url( 'users.php' )
     358                        $tools_url
    348359                );
     360
    349361                // Two cases: unsent and accepted (cleanup), and pending (cancels invite).
    350362                if ( ! $invite->invite_sent || $invite->accepted ) {
    351                         $actions['delete'] = sprintf( '<a href="%1$s" class="delete">%2$s</a>', esc_url( $delete_link ), __( 'Delete', 'buddypress' ) );
     363                        $actions['delete'] = sprintf( '<a href="%1$s" class="delete">%2$s</a>', esc_url( $delete_link ), esc_html__( 'Delete', 'buddypress' ) );
    352364                } else {
    353                         $actions['delete'] = sprintf( '<a href="%1$s" class="delete">%2$s</a>', esc_url( $delete_link ), __( 'Cancel', 'buddypress' ) );
     365                        $actions['delete'] = sprintf( '<a href="%1$s" class="delete">%2$s</a>', esc_url( $delete_link ), esc_html__( 'Cancel', 'buddypress' ) );
    354366                }
    355367
    356368                /**
    class BP_Members_Invitations_List_Table extends WP_Users_List_Table { 
    385397         * @param BP_Invitation $invite BP_Invitation object.
    386398         */
    387399        public function column_username( $invite = null ) {
    388                 $avatar = get_avatar( $invite->inviter_id, 32 );
     400                $avatar  = get_avatar( $invite->inviter_id, 32 );
    389401                $inviter = get_user_by( 'id', $invite->inviter_id );
    390402                if ( ! $inviter ) {
    391403                        return;
    392404                }
     405
    393406                $user_link = bp_core_get_user_domain( $invite->inviter_id );
    394                 echo $avatar . sprintf( '<strong><a href="%1$s" class="edit">%2$s</a></strong><br/>', esc_url( $user_link ), $inviter->user_login );
     407
     408                printf( '%1$s <strong><a href="%2$s" class="edit">%3$s</a></strong><br/>', $avatar, esc_url( $user_link ), esc_html( $inviter->user_login ) );
    395409        }
    396410
    397411        /**
  • src/bp-members/classes/class-bp-members-invitations-template.php

    diff --git src/bp-members/classes/class-bp-members-invitations-template.php src/bp-members/classes/class-bp-members-invitations-template.php
    index 1c5da5c42..7f1bd91af 100644
    class BP_Members_Invitations_Template { 
    142142        /**
    143143         * Array of variables used in this invitation query.
    144144         *
    145          * @since 2.2.2
     145         * @since 8.0.0
    146146         * @var array
    147147         */
    148148        public $query_vars;
    class BP_Members_Invitations_Template { 
    310310                         *
    311311                         * @since 8.0.0
    312312                         */
    313                         do_action( 'members_invitations_loop_end');
     313                        do_action( 'members_invitations_loop_end' );
    314314
    315315                        $this->rewind_invitations();
    316316                }
    class BP_Members_Invitations_Template { 
    331331         * @see bp_the_invitation()
    332332         */
    333333        public function the_invitation() {
    334                 $this->in_the_loop  = true;
    335                 $this->invitation = $this->next_invitation();
     334                $this->in_the_loop = true;
     335                $this->invitation  = $this->next_invitation();
    336336
    337337                // Loop has just started.
    338338                if ( 0 === $this->current_invitation ) {
  • src/bp-members/screens/list-invites.php

    diff --git src/bp-members/screens/list-invites.php src/bp-members/screens/list-invites.php
    index 8242dd279..600cee733 100644
    function bp_members_invitations_action_handling() { 
    4646        }
    4747
    4848        // Get the action.
    49         $action = ! empty( $_GET['action']          ) ? $_GET['action']          : '';
    50         $nonce  = ! empty( $_GET['_wpnonce']        ) ? $_GET['_wpnonce']        : '';
    51         $id     = ! empty( $_GET['invitation_id']   ) ? $_GET['invitation_id']  : '';
     49        $action = ! empty( $_GET['action']        ) ? $_GET['action']        : '';
     50        $nonce  = ! empty( $_GET['_wpnonce']      ) ? $_GET['_wpnonce']      : '';
     51        $id     = ! empty( $_GET['invitation_id'] ) ? $_GET['invitation_id'] : '';
    5252
    5353        // Bail if no action or no ID.
    5454        if ( empty( $action ) || empty( $id ) ) {
    function bp_members_invitations_action_handling() { 
    5858        if ( 'cancel' === $action ) {
    5959                // Check the nonce and delete the invitation.
    6060                if ( bp_verify_nonce_request( 'bp_members_invitations_cancel_' . $id ) && bp_members_invitations_delete_by_id( $id ) ) {
    61                         bp_core_add_message( __( 'Invitation successfully canceled.', 'buddypress' )          );
     61                        bp_core_add_message( __( 'Invitation successfully canceled.', 'buddypress' ) );
    6262                } else {
    6363                        bp_core_add_message( __( 'There was a problem canceling that invitation.', 'buddypress' ), 'error' );
    6464                }
    6565        } else if ( 'resend' === $action ) {
    6666                // Check the nonce and resend the invitation.
    6767                if ( bp_verify_nonce_request( 'bp_network_invitation_resend_' . $id ) && bp_members_invitation_resend_by_id( $id ) ) {
    68                         bp_core_add_message( __( 'Invitation successfully resent.', 'buddypress' )          );
     68                        bp_core_add_message( __( 'Invitation successfully resent.', 'buddypress' ) );
    6969                } else {
    7070                        bp_core_add_message( __( 'There was a problem resending that invitation.', 'buddypress' ), 'error' );
    7171                }
  • src/bp-templates/bp-nouveau/buddypress/members/single/invitations/invitations-loop.php

    diff --git src/bp-templates/bp-nouveau/buddypress/members/single/invitations/invitations-loop.php src/bp-templates/bp-nouveau/buddypress/members/single/invitations/invitations-loop.php
    index 48576e8cf..f4aa643ee 100644
     
    66 * @version 8.0.0
    77 */
    88?>
    9 <form action="" method="post" id="invitations-bulk-management">
     9<form action="" method="post" id="invitations-bulk-management" class="standard-form">
    1010        <table class="invitations">
    1111                <thead>
    1212                        <tr>
    13                                 <th class="icon"></th>
    14                                 <th class="bulk-select-all"><input id="select-all-invitations" type="checkbox"><label class="bp-screen-reader-text" for="select-all-invitations"><?php
    15                                         /* translators: accessibility text */
    16                                         esc_html_e( 'Select all', 'buddypress' );
    17                                 ?></label></th>
     13                                <th class="bulk-select-all"><input id="select-all-invitations" type="checkbox">
     14                                        <label class="bp-screen-reader-text" for="select-all-invitations">
     15                                                <?php
     16                                                /* translators: accessibility text */
     17                                                esc_html_e( 'Select all', 'buddypress' );
     18                                                ?>
     19                                        </label>
     20                                </th>
    1821                                <th class="title"><?php esc_html_e( 'Invitee', 'buddypress' ); ?></th>
    1922                                <th class="content"><?php esc_html_e( 'Message', 'buddypress' ); ?></th>
    2023                                <th class="sent"><?php esc_html_e( 'Sent', 'buddypress' ); ?></th>
     
    2932                        <?php while ( bp_the_members_invitations() ) : bp_the_members_invitation(); ?>
    3033
    3134                                <tr>
    32                                         <td></td>
    3335                                        <td class="bulk-select-check">
    3436                                                <label for="<?php bp_the_members_invitation_property( 'id', 'attribute' ); ?>">
    3537                                                        <input id="<?php bp_the_members_invitation_property( 'id', 'attribute' ); ?>" type="checkbox" name="network_invitations[]" value="<?php bp_the_members_invitation_property( 'id', 'attribute' ); ?>" class="invitation-check">
     
    5557        </table>
    5658
    5759        <div class="invitations-options-nav">
    58                 <?php // @TODO //bp_invitations_bulk_management_dropdown(); ?>
     60                <?php bp_nouveau_invitations_bulk_management_dropdown(); ?>
    5961        </div><!-- .invitations-options-nav -->
    6062
    6163        <?php wp_nonce_field( 'invitations_bulk_nonce', 'invitations_bulk_nonce' ); ?>
  • src/bp-templates/bp-nouveau/buddypress/members/single/invitations/list-invites.php

    diff --git src/bp-templates/bp-nouveau/buddypress/members/single/invitations/list-invites.php src/bp-templates/bp-nouveau/buddypress/members/single/invitations/list-invites.php
    index 92d92879f..a83054098 100644
     
    1616                ?>
    1717        </h2>
    1818
    19         <div id="pag-top" class="pagination no-ajax">
     19        <div id="pag-top" class="bp-pagination no-ajax">
    2020                <div class="pag-count" id="invitations-count-top">
    2121                        <?php bp_members_invitations_pagination_count(); ?>
    2222                </div>
     
    2828
    2929        <?php bp_get_template_part( 'members/single/invitations/invitations-loop' ); ?>
    3030
    31         <div id="pag-bottom" class="pagination no-ajax">
     31        <div id="pag-bottom" class="bp-pagination no-ajax">
    3232                <div class="pag-count" id="invitations-count-bottom">
    3333                        <?php bp_members_invitations_pagination_count(); ?>
    3434                </div>
  • src/bp-templates/bp-nouveau/common-styles/_bp_filters.scss

    diff --git src/bp-templates/bp-nouveau/common-styles/_bp_filters.scss src/bp-templates/bp-nouveau/common-styles/_bp_filters.scss
    index 8ff5970f1..1317aee14 100644
     
    181181
    182182        } // close .subnav-filters
    183183
    184         .notifications-options-nav {
    185 
    186                 input#notification-bulk-manage {
    187                         border: 0;
    188                         border-radius: 0;
    189                         line-height: 1.6;
    190                 }
     184        .notifications-options-nav input#notification-bulk-manage,
     185        .invitations-options-nav input#invitation-bulk-manage {
     186                border: 0;
     187                border-radius: 0;
     188                line-height: 1.6;
    191189        }
    192190
    193191        .group-subnav-filters {
  • src/bp-templates/bp-nouveau/common-styles/_bp_forms.scss

    diff --git src/bp-templates/bp-nouveau/common-styles/_bp_forms.scss src/bp-templates/bp-nouveau/common-styles/_bp_forms.scss
    index b39d8a03c..9453a4452 100644
     
    2424                opacity: 0.4;
    2525        }
    2626
    27         #notification-bulk-manage[disabled] {
     27        #notification-bulk-manage[disabled],
     28        #invitation-bulk-manage[disabled] {
    2829                display: none;
    2930        }
    3031
    body.no-js { 
    399400
    400401        @include medium-small-up() {
    401402
    402                 .notifications-options-nav {
    403 
    404                         .select-wrap {
    405                                 float: left;
    406                         }
     403                .notifications-options-nav .select-wrap,
     404                .invitations-options-nav .select-wrap {
     405                        float: left;
    407406                }
    408407        }
    409408}
  • src/bp-templates/bp-nouveau/common-styles/_bp_generic_and_typography.scss

    diff --git src/bp-templates/bp-nouveau/common-styles/_bp_generic_and_typography.scss src/bp-templates/bp-nouveau/common-styles/_bp_generic_and_typography.scss
    index 65cabf5e7..2d2799368 100644
    body.buddypress { 
    255255                }
    256256        }
    257257
    258         #notification-select {
     258        #notification-select,
     259        #invitation-select {
    259260
    260261                @include responsive-font(14);
    261262        }
  • src/bp-templates/bp-nouveau/css/buddypress-rtl.css

    diff --git src/bp-templates/bp-nouveau/css/buddypress-rtl.css src/bp-templates/bp-nouveau/css/buddypress-rtl.css
    index 38c0e2217..353fdb9c0 100644
    body.buddypress article.page > .entry-header:not(.alignwide):not(.alignfull) .en 
    255255        }
    256256}
    257257
    258 .buddypress-wrap #notification-select {
     258.buddypress-wrap #notification-select,
     259.buddypress-wrap #invitation-select {
    259260        font-size: 12px;
    260261}
    261262
    262263@media screen and (min-width: 46.8em) {
    263         .buddypress-wrap #notification-select {
     264        .buddypress-wrap #notification-select,
     265        .buddypress-wrap #invitation-select {
    264266                font-size: 14px;
    265267        }
    266268}
    body.buddypress article.page > .entry-header:not(.alignwide):not(.alignfull) .en 
    794796        }
    795797}
    796798
    797 .buddypress-wrap .notifications-options-nav input#notification-bulk-manage {
     799.buddypress-wrap .notifications-options-nav input#notification-bulk-manage,
     800.buddypress-wrap .invitations-options-nav input#invitation-bulk-manage {
    798801        border: 0;
    799802        border-radius: 0;
    800803        line-height: 1.6;
    body.buddypress.settings.data #buddypress.buddypress-wrap .item-body p a { 
    34303433        opacity: 0.4;
    34313434}
    34323435
    3433 .buddypress-wrap #notification-bulk-manage[disabled] {
     3436.buddypress-wrap #notification-bulk-manage[disabled],
     3437.buddypress-wrap #invitation-bulk-manage[disabled] {
    34343438        display: none;
    34353439}
    34363440
    body.no-js .buddypress #messages-bulk-management #select-all-messages { 
    37273731}
    37283732
    37293733@media screen and (min-width: 32em) {
    3730         .buddypress-wrap .notifications-options-nav .select-wrap {
     3734        .buddypress-wrap .notifications-options-nav .select-wrap,
     3735        .buddypress-wrap .invitations-options-nav .select-wrap {
    37313736                float: right;
    37323737        }
    37333738}
  • src/bp-templates/bp-nouveau/css/buddypress.css

    diff --git src/bp-templates/bp-nouveau/css/buddypress.css src/bp-templates/bp-nouveau/css/buddypress.css
    index 15406b96e..b6c5f981f 100644
    body.buddypress article.page > .entry-header:not(.alignwide):not(.alignfull) .en 
    255255        }
    256256}
    257257
    258 .buddypress-wrap #notification-select {
     258.buddypress-wrap #notification-select,
     259.buddypress-wrap #invitation-select {
    259260        font-size: 12px;
    260261}
    261262
    262263@media screen and (min-width: 46.8em) {
    263         .buddypress-wrap #notification-select {
     264        .buddypress-wrap #notification-select,
     265        .buddypress-wrap #invitation-select {
    264266                font-size: 14px;
    265267        }
    266268}
    body.buddypress article.page > .entry-header:not(.alignwide):not(.alignfull) .en 
    794796        }
    795797}
    796798
    797 .buddypress-wrap .notifications-options-nav input#notification-bulk-manage {
     799.buddypress-wrap .notifications-options-nav input#notification-bulk-manage,
     800.buddypress-wrap .invitations-options-nav input#invitation-bulk-manage {
    798801        border: 0;
    799802        border-radius: 0;
    800803        line-height: 1.6;
    body.buddypress.settings.data #buddypress.buddypress-wrap .item-body p a { 
    34303433        opacity: 0.4;
    34313434}
    34323435
    3433 .buddypress-wrap #notification-bulk-manage[disabled] {
     3436.buddypress-wrap #notification-bulk-manage[disabled],
     3437.buddypress-wrap #invitation-bulk-manage[disabled] {
    34343438        display: none;
    34353439}
    34363440
    body.no-js .buddypress #messages-bulk-management #select-all-messages { 
    37273731}
    37283732
    37293733@media screen and (min-width: 32em) {
    3730         .buddypress-wrap .notifications-options-nav .select-wrap {
     3734        .buddypress-wrap .notifications-options-nav .select-wrap,
     3735        .buddypress-wrap .invitations-options-nav .select-wrap {
    37313736                float: left;
    37323737        }
    37333738}
  • src/bp-templates/bp-nouveau/css/twentytwentyone-rtl.css

    diff --git src/bp-templates/bp-nouveau/css/twentytwentyone-rtl.css src/bp-templates/bp-nouveau/css/twentytwentyone-rtl.css
    index 453826cd5..d3d05a346 100644
    Hello, this is the BP Nouveau's Twenty Twenty-One companion stylesheet. 
    154154        padding-right: 0;
    155155}
    156156
    157 #buddypress.twentytwentyone .notifications-options-nav {
     157#buddypress.twentytwentyone .notifications-options-nav,
     158#buddypress.twentytwentyone .invitations-options-nav {
    158159        margin-top: 1em;
    159160}
    160161
    161 #buddypress.twentytwentyone .notifications-options-nav input#notification-bulk-manage {
     162#buddypress.twentytwentyone .notifications-options-nav input#notification-bulk-manage,
     163#buddypress.twentytwentyone .invitations-options-nav input#invitation-bulk-manage {
    162164        line-height: 1.2;
    163165}
    164166
  • src/bp-templates/bp-nouveau/css/twentytwentyone.css

    diff --git src/bp-templates/bp-nouveau/css/twentytwentyone.css src/bp-templates/bp-nouveau/css/twentytwentyone.css
    index ecfaf8d9e..a8837db02 100644
    Hello, this is the BP Nouveau's Twenty Twenty-One companion stylesheet. 
    154154        padding-left: 0;
    155155}
    156156
    157 #buddypress.twentytwentyone .notifications-options-nav {
     157#buddypress.twentytwentyone .notifications-options-nav,
     158#buddypress.twentytwentyone .invitations-options-nav {
    158159        margin-top: 1em;
    159160}
    160161
    161 #buddypress.twentytwentyone .notifications-options-nav input#notification-bulk-manage {
     162#buddypress.twentytwentyone .notifications-options-nav input#notification-bulk-manage,
     163#buddypress.twentytwentyone .invitations-options-nav input#invitation-bulk-manage {
    162164        line-height: 1.2;
    163165}
    164166
  • src/bp-templates/bp-nouveau/includes/members/functions.php

    diff --git src/bp-templates/bp-nouveau/includes/members/functions.php src/bp-templates/bp-nouveau/includes/members/functions.php
    index de6bbea3b..82c38ee17 100644
     
    33 * Members functions
    44 *
    55 * @since 3.0.0
    6  * @version 6.0.0
     6 * @version 8.0.0
    77 */
    88
    99// Exit if accessed directly.
    1010defined( 'ABSPATH' ) || exit;
    1111
     12/**
     13 * Register Scripts for the Members component
     14 *
     15 * @since 8.0.0
     16 *
     17 * @param array $scripts Optional. The array of scripts to register.
     18 * @return array The same array with the specific members scripts.
     19 */
     20function bp_nouveau_members_register_scripts( $scripts = array() ) {
     21        if ( ! isset( $scripts['bp-nouveau'] ) || ! bp_get_members_invitations_allowed() ) {
     22                return $scripts;
     23        }
     24
     25        return array_merge( $scripts, array(
     26                'bp-nouveau-member-invites' => array(
     27                        'file'         => 'js/buddypress-member-invites%s.js',
     28                        'dependencies' => array(),
     29                        'footer'       => true,
     30                ),
     31        ) );
     32}
     33
    1234/**
    1335 * Enqueue the members scripts
    1436 *
    defined( 'ABSPATH' ) || exit; 
    1638 */
    1739function bp_nouveau_members_enqueue_scripts() {
    1840        // Neutralize Ajax when using BuddyPress Groups & member widgets on default front page
    19         if ( ! bp_is_user_front() || ! bp_nouveau_get_appearance_settings( 'user_front_page' ) ) {
    20                 return;
     41        if ( bp_is_user_front() && bp_nouveau_get_appearance_settings( 'user_front_page' ) ) {
     42                wp_add_inline_style(
     43                        'bp-nouveau',
     44                        '#member-front-widgets #groups-list-options,
     45                        #member-front-widgets #members-list-options,
     46                        #member-front-widgets #friends-list-options {
     47                                display: none;
     48                        }'
     49                );
    2150        }
    2251
    23         wp_add_inline_style(
    24                 'bp-nouveau', '
    25                 #member-front-widgets #groups-list-options,
    26                 #member-front-widgets #members-list-options,
    27                 #member-front-widgets #friends-list-options {
    28                         display: none;
    29                 }
    30         '
    31         );
     52        if ( bp_is_user_members_invitations_list() ) {
     53                wp_enqueue_script( 'bp-nouveau-member-invites' );
     54        }
    3255}
    3356
    3457/**
  • src/bp-templates/bp-nouveau/includes/members/loader.php

    diff --git src/bp-templates/bp-nouveau/includes/members/loader.php src/bp-templates/bp-nouveau/includes/members/loader.php
    index 0aca1fb52..6a13d1f30 100644
    class BP_Nouveau_Members { 
    8888        protected function setup_filters() {
    8989                // Add the default-front to User's front hierarchy if user enabled it (Enabled by default).
    9090                add_filter( 'bp_displayed_user_get_front_template', 'bp_nouveau_member_reset_front_template', 10, 1 );
     91                add_filter( 'bp_nouveau_register_scripts', 'bp_nouveau_members_register_scripts', 10, 1 );
    9192
    9293                // The number formatting is done into the `bp_nouveau_nav_count()` template tag.
    9394                remove_filter( 'bp_get_total_member_count', 'bp_core_number_format' );
  • src/bp-templates/bp-nouveau/includes/members/template-tags.php

    diff --git src/bp-templates/bp-nouveau/includes/members/template-tags.php src/bp-templates/bp-nouveau/includes/members/template-tags.php
    index 1c9385047..2d079f3ab 100644
     
    33 * Members template tags
    44 *
    55 * @since 3.0.0
    6  * @version 6.0.0
     6 * @version 8.0.0
    77 */
    88
    99// Exit if accessed directly.
    function bp_nouveau_wp_profile_field_data() { 
    10391039                $field = bp_nouveau()->members->wp_profile_current;
    10401040                return $field->data;
    10411041        }
     1042
     1043/**
     1044 * Outputs the Invitations bulk actions dropdown list.
     1045 *
     1046 * @since 8.0.0
     1047 */
     1048function bp_nouveau_invitations_bulk_management_dropdown() {
     1049        ?>
     1050        <div class="select-wrap">
     1051
     1052                <label class="bp-screen-reader-text" for="invitation-select">
     1053                        <?php
     1054                        esc_html_e( 'Select Bulk Action', 'buddypress' );
     1055                        ?>
     1056                </label>
     1057
     1058                <select name="invitation_bulk_action" id="invitation-select">
     1059                        <option value="" selected="selected"><?php esc_html_e( 'Bulk Actions', 'buddypress' ); ?></option>
     1060                        <option value="resend"><?php echo esc_html_x( 'Resend', 'button', 'buddypress' ); ?></option>
     1061                        <option value="cancel"><?php echo esc_html_x( 'Cancel', 'button', 'buddypress' ); ?></option>
     1062                </select>
     1063
     1064                <span class="select-arrow"></span>
     1065
     1066        </div><!-- // .select-wrap -->
     1067
     1068        <input type="submit" id="invitation-bulk-manage" class="button action" value="<?php echo esc_attr_x( 'Apply', 'button', 'buddypress' ); ?>">
     1069        <?php
     1070}
  • new file src/bp-templates/bp-nouveau/js/buddypress-member-invites.js

    diff --git src/bp-templates/bp-nouveau/js/buddypress-member-invites.js src/bp-templates/bp-nouveau/js/buddypress-member-invites.js
    new file mode 100644
    index 000000000..38c066b5e
    - +  
     1/**
     2 * Handles the dynamic parts of the Member's Pending Invitations screen.
     3 *
     4 * @since  8.0.0
     5 * @version 8.0.0
     6 */
     7( function() {
     8        /**
     9         * Organizes the dynamic parts of the Member's Pending Invitations screen.
     10         *
     11         * @namespace bp.Nouveau.Invitations
     12         * @memberof  bp.Nouveau
     13         *
     14         * @since  8.0.0
     15         * @type {Object}
     16         */
     17        var Invitations = {
     18                /**
     19                 * Selects/Unselects all invitations.
     20                 *
     21                 * @since 8.0.0
     22                 *
     23                 * @param {Object} event The click event.
     24                 */
     25                toggleSelection: function( event ) {
     26                        document.querySelectorAll( '.invitation-check' ).forEach( function( cb ) {
     27                                cb.checked = event.target.checked;
     28                        } );
     29                },
     30                /**
     31                 * Selects/Unselects all invitations.
     32                 *
     33                 * @since 8.0.0
     34                 *
     35                 * @param {Object} event The click event.
     36                 */
     37                toggleSubmit: function( event ) {
     38                        if ( ! event.target.value ) {
     39                                document.querySelector( '#invitation-bulk-manage' ).setAttribute( 'disabled', 'disabled' );
     40                        } else {
     41                                document.querySelector( '#invitation-bulk-manage' ).removeAttribute( 'disabled' );
     42                        }
     43                },
     44                /**
     45                 * Adds listeners.
     46                 *
     47                 * @since 8.0.0
     48                 */
     49                start: function() {
     50                        // Disable the submit button.
     51                        document.querySelector( '#invitation-bulk-manage' ).setAttribute( 'disabled', 'disabled' );
     52
     53                        // Select/UnSelect all invitations.
     54                        document.querySelector( '#select-all-invitations' ).addEventListener( 'click', this.toggleSelection );
     55
     56                        // Enable/Disable the submit button.
     57                        document.querySelector( '#invitation-select' ).addEventListener( 'change', this.toggleSubmit );
     58                }
     59        };
     60
     61        window.bp = window.bp || {};
     62        if ( window.bp.Nouveau ) {
     63                window.bp.Nouveau.Invitations = Invitations;
     64
     65                Invitations.start();
     66        }
     67} )();
  • src/bp-templates/bp-nouveau/sass/twentytwentyone.scss

    diff --git src/bp-templates/bp-nouveau/sass/twentytwentyone.scss src/bp-templates/bp-nouveau/sass/twentytwentyone.scss
    index af56e9a79..2bc6a8de3 100644
    Hello, this is the BP Nouveau's Twenty Twenty-One companion stylesheet. 
    221221                }
    222222        }
    223223
    224         .notifications-options-nav {
     224        .notifications-options-nav,
     225        .invitations-options-nav {
    225226                margin-top: 1em;
     227        }
    226228
    227                 input#notification-bulk-manage {
    228                         line-height: 1.2;
    229                 }
     229        .notifications-options-nav input#notification-bulk-manage,
     230        .invitations-options-nav input#invitation-bulk-manage {
     231                line-height: 1.2;
    230232        }
    231233}
    232234