Skip to:
Content

BuddyPress.org

Changeset 12927


Ignore:
Timestamp:
04/28/2021 11:52:15 PM (5 years ago)
Author:
dcavins
Message:

Member Invites: Add WP Admin management screen.

Add WP Admin Screen to manage member invites
as tab on the BuddyPress > Tools screen.

See #8139.

Location:
trunk/src
Files:
1 added
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bp-core/admin/bp-core-admin-functions.php

    r12899 r12927  
    8686        }
    8787
    88         // Keep the BuddyPress tools menu highlighted.
    89         if ( 'bp-optouts' === $plugin_page ) {
     88        // Keep the BuddyPress tools menu highlighted when using a tools tab.
     89        if ( 'bp-optouts' === $plugin_page || 'bp-members-invitations' === $plugin_page ) {
    9090                $submenu_file = 'bp-tools';
    9191        }
     
    285285        // Activate and Register are special cases. They are not components but they need WP pages.
    286286        // If user registration is disabled, we can skip this step.
    287         if ( bp_get_signup_allowed() ) {
     287        if ( bp_get_signup_allowed() || bp_get_members_invitations_allowed() ) {
    288288                $wp_page_components[] = array(
    289289                        'id'   => 'activate',
     
    480480                        ),
    481481                        '1' => array(
     482                                'href' => bp_get_admin_url( add_query_arg( array( 'page' => 'bp-members-invitations' ), $tools_page ) ),
     483                                'name' => __( 'Manage Invitations', 'buddypress' ),
     484                        ),
     485                        '2' => array(
    482486                                'href' => bp_get_admin_url( add_query_arg( array( 'page' => 'bp-optouts' ), $tools_page ) ),
    483487                                'name' => __( 'Manage Opt-outs', 'buddypress' ),
  • trunk/src/bp-core/admin/bp-core-admin-slugs.php

    r12725 r12927  
    188188                <h3><?php _e( 'Registration', 'buddypress' ); ?></h3>
    189189
    190                 <?php if ( bp_get_signup_allowed() ) : ?>
     190                <?php if ( bp_get_signup_allowed() || bp_get_members_invitations_allowed() ) : ?>
    191191                        <p><?php _e( 'Associate WordPress Pages with the following BuddyPress Registration pages.', 'buddypress' ); ?></p>
    192192                <?php else : ?>
     
    211211                        <tbody>
    212212
    213                                 <?php if ( bp_get_signup_allowed() ) : foreach ( $static_pages as $name => $label ) : ?>
     213                                <?php if ( bp_get_signup_allowed() || bp_get_members_invitations_allowed() ) : foreach ( $static_pages as $name => $label ) : ?>
    214214
    215215                                        <tr valign="top">
  • trunk/src/bp-core/admin/bp-core-admin-tools.php

    r12911 r12927  
    558558                                ?>
    559559                        </dd>
     560
     561                        <dt><?php esc_html_e( 'Manage Invitations', 'buddypress' ) ?></dt>
     562                        <dd>
     563                                <?php esc_html_e( 'When enabled, BuddyPress allows your users to invite nonmembers to join your site.', 'buddypress' ); ?>
     564                                <?php
     565                                $url = add_query_arg( 'page', 'bp-members-invitations', bp_get_admin_url( $page ) );
     566                                printf(
     567                                        /* translators: %s: the link to the BuddyPress Invitations management tool screen */
     568                                        esc_html_x( 'Visit %s to manage your site&rsquo;s invitations.', 'buddypress invitations tool intro', 'buddypress' ),
     569                                        '<a href="' . esc_url( $url ) . '">' . esc_html__( 'Invitations', 'buddypress' ) . '</a>'
     570                                );
     571                                ?>
     572                        </dd>
     573
    560574                        <dt><?php esc_html_e( 'Manage Opt-outs', 'buddypress' ) ?></dt>
    561575                        <dd>
  • trunk/src/bp-core/admin/css/common-rtl.css

    r12900 r12927  
    316316body.tools-php .bp-tools dd {
    317317        margin: 0;
     318}
     319
     320body.tools_page_bp-members-invitations .nav-tab-wrapper,
     321body.tools_page_bp-optouts .nav-tab-wrapper {
     322        margin-bottom: 1em;
    318323}
    319324
  • trunk/src/bp-core/admin/css/common.css

    r12900 r12927  
    316316body.tools-php .bp-tools dd {
    317317        margin: 0;
     318}
     319
     320body.tools_page_bp-members-invitations .nav-tab-wrapper,
     321body.tools_page_bp-optouts .nav-tab-wrapper {
     322        margin-bottom: 1em;
    318323}
    319324
  • trunk/src/bp-members/admin/bp-members-admin-classes.php

    r10521 r12927  
    1313if ( class_exists( 'WP_Users_List_Table' ) ) {
    1414        require dirname( dirname( __FILE__ ) ) . '/classes/class-bp-members-list-table.php';
     15        require dirname( dirname( __FILE__ ) ) . '/classes/class-bp-members-invitations-list-table.php';
    1516}
    1617
  • trunk/src/bp-members/classes/class-bp-members-admin.php

    r12899 r12927  
    141141                $this->users_screen = bp_core_do_network_admin() ? 'users-network' : 'users';
    142142
     143                $this->members_invites_page = '';
     144
    143145                // Specific config: BuddyPress is not network activated.
    144146                $this->subsite_activated = (bool) is_multisite() && ! bp_is_network_activated();
     
    220222                        add_action( 'update_site_option_registration',  array( $this, 'multisite_registration_on' ),   10, 2 );
    221223                        add_action( 'update_option_users_can_register', array( $this, 'single_site_registration_on' ), 10, 2 );
     224
     225                        // Member invitations are enabled.
     226                        if ( bp_is_network_activated() ) {
     227                                add_action( 'update_site_option_bp-enable-members-invitations', array( $this, 'multisite_registration_on' ), 10, 2 );
     228                        } else {
     229                                add_action( 'update_option_bp-enable-members-invitations', array( $this, 'single_site_registration_on' ), 10, 2 );
     230                        }
    222231                }
    223232
     
    249258         */
    250259        public function multisite_registration_on( $option_name, $value ) {
    251                 if ( 'user' === $value || 'all' === $value ) {
     260                // Is registration enabled or are network invitations enabled?
     261                if ( ( 'user' === $value || 'all' === $value )
     262                        || bp_get_members_invitations_allowed() ) {
    252263                        bp_core_add_page_mappings( array(
    253264                                'register' => 1,
     
    267278        public function single_site_registration_on( $old_value, $value ) {
    268279                // Single site.
    269                 if ( ! is_multisite() && ! empty( $value ) ) {
     280                if ( ! is_multisite() && ( ! empty( $value ) || bp_get_members_invitations_allowed() ) ) {
    270281                        bp_core_add_page_mappings( array(
    271282                                'register' => 1,
     
    491502                }
    492503
     504                // For consistency with non-Multisite, we add a Tools menu in
     505                // the Network Admin as a home for our Tools panel.
     506                if ( is_multisite() && bp_core_do_network_admin() ) {
     507                        $tools_parent = 'network-tools';
     508                } else {
     509                        $tools_parent = 'tools.php';
     510                }
     511
     512                $hooks['members_invitations'] = $this->members_invites_page = add_submenu_page(
     513                        $tools_parent,
     514                        __( 'Manage Invitations',  'buddypress' ),
     515                        __( 'Manage Invitations',  'buddypress' ),
     516                        $this->capability,
     517                        'bp-members-invitations',
     518                        array( $this, 'invitations_admin' )
     519                );
     520
    493521                $edit_page         = 'user-edit';
    494522                $profile_page      = 'profile';
     
    511539                        $this->signups_page .= '-network';
    512540
    513                         $this->members_optouts_page .= '-network';
     541                        $this->members_invites_page .= '-network';
    514542                }
    515543
     
    530558                        add_action( "admin_head-{$head}", array( $this, 'profile_admin_head' ) );
    531559                }
     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' );
    532563        }
    533564
     
    599630                remove_submenu_page( 'users.php',   'bp-profile-edit' );
    600631                remove_submenu_page( 'profile.php', 'bp-profile-edit' );
     632
     633                // Manage Invitations Tool screen is a tab of BP Tools.
     634                if ( is_network_admin() ) {
     635                        remove_submenu_page( 'network-tools', 'bp-members-invitations' );
     636                } else {
     637                        remove_submenu_page( 'tools.php', 'bp-members-invitations' );
     638                }
    601639        }
    602640
     
    19061944
    19071945                                        if ( ! empty( $_REQUEST['notdeleted'] ) ) {
     1946                                                $notdeleted         = absint( $_REQUEST['notdeleted'] );
    19081947                                                $notice['message'] .= sprintf(
    1909                                                         /* translators: %s: number of deleted signups not deleted */
    1910                                                         _nx( '%s sign-up was not deleted.', '%s sign-ups were not deleted.',
    1911                                                          absint( $_REQUEST['notdeleted'] ),
    1912                                                          'signup notdeleted',
    1913                                                          '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'
    19141954                                                        ),
    1915                                                         number_format_i18n( absint( $_REQUEST['notdeleted'] ) )
     1955                                                        number_format_i18n( $notdeleted )
    19161956                                                );
    19171957
     
    25672607                return $value;
    25682608        }
     2609
     2610        /**
     2611         * Set up the signups admin page.
     2612         *
     2613         * Loaded before the page is rendered, this function does all initial
     2614         * setup, including: processing form requests, registering contextual
     2615         * help, and setting up screen options.
     2616         *
     2617         * @since 8.0.0
     2618         *
     2619         * @global $bp_members_invitations_list_table
     2620         */
     2621        public function members_invitations_admin_load() {
     2622                global $bp_members_invitations_list_table;
     2623
     2624                // Build redirection URL.
     2625                $redirect_to = remove_query_arg( array( 'action', 'error', 'updated', 'activated', 'notactivated', 'deleted', 'notdeleted', 'resent', 'notresent', 'do_delete', 'do_resend', 'do_activate', '_wpnonce', 'signup_ids' ), $_SERVER['REQUEST_URI'] );
     2626                $doaction    = bp_admin_list_table_current_bulk_action();
     2627
     2628                /**
     2629                 * Fires at the start of the member invitations admin load.
     2630                 *
     2631                 * @since 8.0.0
     2632                 *
     2633                 * @param string $doaction Current bulk action being processed.
     2634                 * @param array  $_REQUEST Current $_REQUEST global.
     2635                 */
     2636                do_action( 'bp_members_invitations_admin_load', $doaction, $_REQUEST );
     2637
     2638                /**
     2639                 * Filters the allowed actions for use in the user signups admin page.
     2640                 *
     2641                 * @since 8.0.0
     2642                 *
     2643                 * @param array $value Array of allowed actions to use.
     2644                 */
     2645                $allowed_actions = apply_filters( 'bp_members_invitations_admin_allowed_actions', array( 'do_delete',  'do_resend' ) );
     2646
     2647                // Prepare the display of the bulk invitation action screen.
     2648                if ( ! in_array( $doaction, $allowed_actions ) ) {
     2649
     2650                        $bp_members_invitations_list_table = self::get_list_table_class( 'BP_Members_Invitations_List_Table', 'users' );
     2651
     2652                        // The per_page screen option.
     2653                        add_screen_option( 'per_page', array( 'label' => _x( 'Members Invitations', 'Members Invitations per page (screen options)', 'buddypress' ) ) );
     2654
     2655                        get_current_screen()->add_help_tab( array(
     2656                                'id'      => 'bp-members-invitations-overview',
     2657                                'title'   => __( 'Overview', 'buddypress' ),
     2658                                'content' =>
     2659                                '<p>' . __( 'This is the administration screen for member invitations on your site.', 'buddypress' ) . '</p>' .
     2660                                '<p>' . __( 'From the screen options, you can customize the displayed columns and the pagination of this screen.', 'buddypress' ) . '</p>' .
     2661                                '<p>' . __( 'You can reorder the list of invitations by clicking on the Invitee, Inviter, Date Modified, Email Sent, or Accepted column headers.', 'buddypress' ) . '</p>' .
     2662                                '<p>' . __( 'Using the search form, you can find specific invitations more easily. The Invitee Email field will be included in the search.', 'buddypress' ) . '</p>'
     2663                        ) );
     2664
     2665                        get_current_screen()->add_help_tab( array(
     2666                                'id'      => 'bp-members-invitations-actions',
     2667                                'title'   => __( 'Actions', 'buddypress' ),
     2668                                'content' =>
     2669                                '<p>' . __( 'Hovering over a row in the pending accounts list will display action links that allow you to manage pending accounts. You can perform the following actions:', 'buddypress' ) . '</p>' .
     2670                                '<ul><li>' . __( '"Send" or "Resend" takes you to the confirmation screen before being able to send or resend the invitation email to the desired pending invitee.', 'buddypress' ) . '</li>' .
     2671                                '<li>' . __( '"Delete" allows you to delete an unsent or accepted invitation from your site; "Cancel" allows you to cancel a sent, but not yet accepted, invitation. You will be asked to confirm this deletion.', 'buddypress' ) . '</li></ul>' .
     2672                                '<p>' . __( 'Bulk actions allow you to perform these actions for the selected rows.', 'buddypress' ) . '</p>'
     2673                        ) );
     2674
     2675                        // Help panel - sidebar links.
     2676                        get_current_screen()->set_help_sidebar(
     2677                                '<p><strong>' . __( 'For more information:', 'buddypress' ) . '</strong></p>' .
     2678                                '<p>' . __( '<a href="https://buddypress.org/support/">Support Forums</a>', 'buddypress' ) . '</p>'
     2679                        );
     2680
     2681                        // Add accessible hidden headings and text for the Pending Users screen.
     2682                        get_current_screen()->set_screen_reader_content( array(
     2683                                /* translators: accessibility text */
     2684                                'heading_views'      => __( 'Filter invitations list', 'buddypress' ),
     2685                                /* translators: accessibility text */
     2686                                'heading_pagination' => __( 'Invitation list navigation', 'buddypress' ),
     2687                                /* translators: accessibility text */
     2688                                'heading_list'       => __( 'Invitations list', 'buddypress' ),
     2689                        ) );
     2690
     2691                } else {
     2692                        if ( empty( $_REQUEST['invite_ids' ] ) ) {
     2693                                return;
     2694                        }
     2695                        $invite_ids = wp_parse_id_list( $_REQUEST['invite_ids' ] );
     2696
     2697                        // Handle resent invitations.
     2698                        if ( 'do_resend' == $doaction ) {
     2699
     2700                                // Nonce check.
     2701                                check_admin_referer( 'invitations_resend' );
     2702
     2703                                $success = 0;
     2704                                foreach ( $invite_ids as $invite_id ) {
     2705                                        if ( bp_members_invitation_resend_by_id( $invite_id ) ) {
     2706                                                $success++;
     2707                                        }
     2708                                }
     2709
     2710                                $query_arg = array( 'updated' => 'resent' );
     2711
     2712                                if ( ! empty( $success ) ) {
     2713                                        $query_arg['resent'] = $success;
     2714                                }
     2715
     2716                                $not_sent = count( $invite_ids ) - $success;
     2717                                if ( $not_sent > 0 ) {
     2718                                        $query_arg['notsent'] = $not_sent;
     2719                                }
     2720
     2721                                $redirect_to = add_query_arg( $query_arg, $redirect_to );
     2722
     2723                                bp_core_redirect( $redirect_to );
     2724
     2725                        // Handle invitation deletion.
     2726                        } elseif ( 'do_delete' == $doaction ) {
     2727
     2728                                // Nonce check.
     2729                                check_admin_referer( 'invitations_delete' );
     2730
     2731                                $success = 0;
     2732                                foreach ( $invite_ids as $invite_id ) {
     2733                                        if ( bp_members_invitations_delete_by_id( $invite_id ) ) {
     2734                                                $success++;
     2735                                        }
     2736                                }
     2737
     2738                                $query_arg = array( 'updated' => 'deleted' );
     2739
     2740                                if ( ! empty( $success ) ) {
     2741                                        $query_arg['deleted'] = $success;
     2742                                }
     2743
     2744                                $notdeleted = count( $invite_ids ) - $success;
     2745                                if ( $notdeleted > 0 ) {
     2746                                        $query_arg['notdeleted'] = $notdeleted;
     2747                                }
     2748
     2749                                $redirect_to = add_query_arg( $query_arg, $redirect_to );
     2750
     2751                                bp_core_redirect( $redirect_to );
     2752
     2753                        // Plugins can update other stuff from here.
     2754                        } else {
     2755                                $this->redirect = $redirect_to;
     2756
     2757                                /**
     2758                                 * Fires at end of member invitations admin load
     2759                                 * if doaction does not match any actions.
     2760                                 *
     2761                                 * @since 8.0.0
     2762                                 *
     2763                                 * @param string $doaction Current bulk action being processed.
     2764                                 * @param array  $_REQUEST Current $_REQUEST global.
     2765                                 * @param string $redirect Determined redirect url to send user to.
     2766                                 */
     2767                                do_action( 'bp_members_admin_update_invitations', $doaction, $_REQUEST, $this->redirect );
     2768
     2769                                bp_core_redirect( $this->redirect );
     2770                        }
     2771                }
     2772        }
     2773
     2774        /**
     2775         * Get admin notice when viewing the invitations management page.
     2776         *
     2777         * @since 8.0.0
     2778         *
     2779         * @return array
     2780         */
     2781        private function get_members_invitations_notice() {
     2782
     2783                // Setup empty notice for return value.
     2784                $notice = array();
     2785
     2786                // Updates.
     2787                if ( ! empty( $_REQUEST['updated'] ) ) {
     2788                        switch ( $_REQUEST['updated'] ) {
     2789                                case 'resent':
     2790                                        $notice = array(
     2791                                                'class'   => 'updated',
     2792                                                'message' => ''
     2793                                        );
     2794
     2795                                        if ( ! empty( $_REQUEST['resent'] ) ) {
     2796                                                $resent             = absint( $_REQUEST['resent'] );
     2797                                                $notice['message'] .= sprintf(
     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'
     2804                                                        ),
     2805                                                        number_format_i18n( $resent )
     2806                                                );
     2807                                        }
     2808
     2809                                        if ( ! empty( $_REQUEST['notsent'] ) ) {
     2810                                                $notsent            = absint( $_REQUEST['notsent'] );
     2811                                                $notice['message'] .= sprintf(
     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'
     2818                                                        ),
     2819                                                        number_format_i18n( $notsent )
     2820                                                );
     2821
     2822                                                if ( empty( $_REQUEST['resent'] ) ) {
     2823                                                        $notice['class'] = 'error';
     2824                                                }
     2825                                        }
     2826
     2827                                        break;
     2828
     2829                                case 'deleted':
     2830                                        $notice = array(
     2831                                                'class'   => 'updated',
     2832                                                'message' => ''
     2833                                        );
     2834
     2835                                        if ( ! empty( $_REQUEST['deleted'] ) ) {
     2836                                                $deleted            = absint( $_REQUEST['deleted'] );
     2837                                                $notice['message'] .= sprintf(
     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'
     2844                                                        ),
     2845                                                        number_format_i18n( $deleted )
     2846                                                );
     2847                                        }
     2848
     2849                                        if ( ! empty( $_REQUEST['notdeleted'] ) ) {
     2850                                                $notdeleted         = absint( $_REQUEST['notdeleted'] );
     2851                                                $notice['message'] .= sprintf(
     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'
     2858                                                        ),
     2859                                                        number_format_i18n( $notdeleted )
     2860                                                );
     2861
     2862                                                if ( empty( $_REQUEST['deleted'] ) ) {
     2863                                                        $notice['class'] = 'error';
     2864                                                }
     2865                                        }
     2866
     2867                                        break;
     2868                        }
     2869                }
     2870
     2871                // Errors.
     2872                if ( ! empty( $_REQUEST['error'] ) ) {
     2873                        switch ( $_REQUEST['error'] ) {
     2874                                case 'do_resend':
     2875                                        $notice = array(
     2876                                                'class'   => 'error',
     2877                                                'message' => esc_html__( 'There was a problem sending the invitation emails. Please try again.', 'buddypress' ),
     2878                                        );
     2879                                        break;
     2880
     2881                                case 'do_delete':
     2882                                        $notice = array(
     2883                                                'class'   => 'error',
     2884                                                'message' => esc_html__( 'There was a problem deleting invitations. Please try again.', 'buddypress' ),
     2885                                        );
     2886                                        break;
     2887                        }
     2888                }
     2889
     2890                return $notice;
     2891        }
     2892
     2893        /**
     2894         * Member invitations admin page router.
     2895         *
     2896         * Depending on the context, display
     2897         * - the list of invitations,
     2898         * - or the delete confirmation screen,
     2899         * - or the "resend" email confirmation screen.
     2900         *
     2901         * Also prepare the admin notices.
     2902         *
     2903         * @since 8.0.0
     2904         */
     2905        public function invitations_admin() {
     2906                $doaction = bp_admin_list_table_current_bulk_action();
     2907
     2908                // Prepare notices for admin.
     2909                $notice = $this->get_members_invitations_notice();
     2910
     2911                // Display notices.
     2912                if ( ! empty( $notice ) ) :
     2913                        if ( 'updated' === $notice['class'] ) : ?>
     2914
     2915                                <div id="message" class="<?php echo esc_attr( $notice['class'] ); ?> notice is-dismissible">
     2916
     2917                        <?php else: ?>
     2918
     2919                                <div class="<?php echo esc_attr( $notice['class'] ); ?> notice is-dismissible">
     2920
     2921                        <?php endif; ?>
     2922
     2923                                <p><?php echo $notice['message']; ?></p>
     2924                        </div>
     2925
     2926                <?php endif;
     2927
     2928                // Show the proper screen.
     2929                switch ( $doaction ) {
     2930                        case 'delete' :
     2931                        case 'resend' :
     2932                                $this->invitations_admin_manage( $doaction );
     2933                                break;
     2934
     2935                        default:
     2936                                $this->invitations_admin_index();
     2937                                break;
     2938                }
     2939        }
     2940
     2941        /**
     2942         * This is the list of invitations.
     2943         *
     2944         * @since 8.0.0
     2945         *
     2946         * @global $plugin_page
     2947         * @global $bp_members_invitations_list_table
     2948         */
     2949        public function invitations_admin_index() {
     2950                global $plugin_page, $bp_members_invitations_list_table;
     2951
     2952                $usersearch = ! empty( $_REQUEST['s'] ) ? stripslashes( $_REQUEST['s'] ) : '';
     2953
     2954                // Prepare the group items for display.
     2955                $bp_members_invitations_list_table->prepare_items();
     2956
     2957                if ( is_network_admin() ) {
     2958                        $form_url = network_admin_url( 'admin.php' );
     2959                } else {
     2960                        $form_url = bp_get_admin_url( 'tools.php' );
     2961                }
     2962
     2963                $form_url = add_query_arg(
     2964                        array(
     2965                                'page' => 'bp-members-invitations',
     2966                        ),
     2967                        $form_url
     2968                );
     2969
     2970                $search_form_url = remove_query_arg(
     2971                        array(
     2972                                'action',
     2973                                'deleted',
     2974                                'notdeleted',
     2975                                'error',
     2976                                'updated',
     2977                                'delete',
     2978                                'activate',
     2979                                'activated',
     2980                                'notactivated',
     2981                                'resend',
     2982                                'resent',
     2983                                'notresent',
     2984                                'do_delete',
     2985                                'do_activate',
     2986                                'do_resend',
     2987                                'action2',
     2988                                '_wpnonce',
     2989                                'invite_ids'
     2990                        ), $_SERVER['REQUEST_URI']
     2991                );
     2992
     2993                ?>
     2994
     2995                <div class="wrap">
     2996                        <h1 class="wp-heading-inline"><?php esc_html_e( 'BuddyPress tools', 'buddypress' ); ?></h1>
     2997                        <hr class="wp-header-end">
     2998
     2999                        <h2 class="nav-tab-wrapper"><?php bp_core_admin_tabs( __( 'Manage Invitations', 'buddypress' ), 'tools' ); ?></h2>
     3000
     3001                        <?php
     3002                        if ( $usersearch ) {
     3003                                printf( '<span class="subtitle">' . __( 'Search results for &#8220;%s&#8221;', 'buddypress' ) . '</span>', esc_html( $usersearch ) );
     3004                        }
     3005                        ?>
     3006
     3007                        <hr class="wp-header-end">
     3008
     3009                        <?php // Display each invitation on its own row. ?>
     3010                        <?php $bp_members_invitations_list_table->views(); ?>
     3011
     3012                        <form id="bp-members-invitations-search-form" action="<?php echo esc_url( $search_form_url ) ;?>">
     3013                                <input type="hidden" name="page" value="<?php echo esc_attr( $plugin_page ); ?>" />
     3014                                <?php $bp_members_invitations_list_table->search_box( __( 'Search Invitations', 'buddypress' ), 'bp-members-invitations' ); ?>
     3015                        </form>
     3016
     3017                        <form id="bp-members-invitations-form" action="<?php echo esc_url( $form_url );?>" method="post">
     3018                                <?php $bp_members_invitations_list_table->display(); ?>
     3019                        </form>
     3020                </div>
     3021        <?php
     3022        }
     3023
     3024        /**
     3025         * This is the confirmation screen for actions.
     3026         *
     3027         * @since 8.0.0
     3028         *
     3029         * @param string $action Delete or resend invitation.
     3030         * @return null|false
     3031         */
     3032        public function invitations_admin_manage( $action = '' ) {
     3033                if ( ! current_user_can( $this->capability ) || empty( $action ) ) {
     3034                        die( '-1' );
     3035                }
     3036
     3037                // Get the IDs from the URL.
     3038                $ids = false;
     3039                if ( ! empty( $_POST['invite_ids'] ) ) {
     3040                        $ids = wp_parse_id_list( $_POST['invite_ids'] );
     3041                } elseif ( ! empty( $_GET['invite_id'] ) ) {
     3042                        $ids = absint( $_GET['invite_id'] );
     3043                }
     3044
     3045
     3046                if ( empty( $ids ) ) {
     3047                        return false;
     3048                }
     3049
     3050                // Check invite IDs and set up strings.
     3051                switch ( $action ) {
     3052                        case 'delete' :
     3053                                // Query for matching invites, and filter out bad IDs.
     3054                                $args = array(
     3055                                        'id'          => $ids,
     3056                                        'invite_sent' => 'all',
     3057                                        'accepted'    => 'all',
     3058                                );
     3059                                $invites    = bp_members_invitations_get_invites( $args );
     3060                                $invite_ids = wp_list_pluck( $invites, 'id' );
     3061
     3062                                $header_text = __( 'Delete Invitations', 'buddypress' );
     3063                                if ( 0 === count( $invite_ids ) ) {
     3064                                        $helper_text = __( 'No invites were found, nothing to delete!', 'buddypress' );
     3065                                } else {
     3066                                        $helper_text = _n( 'You are about to delete the following invitation:', 'You are about to delete the following invitations:', count( $invite_ids ), 'buddypress' );
     3067                                }
     3068                                break;
     3069
     3070                        case 'resend' :
     3071                                /**
     3072                                 * Query for matching invites, and filter out bad IDs
     3073                                 * or those that have already been accepted.
     3074                                 */
     3075                                $args = array(
     3076                                        'id'          => $ids,
     3077                                        'invite_sent' => 'all',
     3078                                        'accepted'    => 'pending',
     3079                                );
     3080                                $invites    = bp_members_invitations_get_invites( $args );
     3081                                $invite_ids = wp_list_pluck( $invites, 'id' );
     3082
     3083                                $header_text = __( 'Resend Invitation Emails', 'buddypress' );
     3084                                if ( 0 === count( $invite_ids ) ) {
     3085                                        $helper_text = __( 'No pending invites were found, nothing to resend!', 'buddypress' );
     3086                                } else {
     3087                                        $helper_text = _n( 'You are about to resend an invitation email to the following address:', 'You are about to resend invitation emails to the following addresses:', count( $invite_ids ), 'buddypress' );
     3088                                }
     3089                                break;
     3090                }
     3091
     3092                // These arguments are added to all URLs.
     3093                $url_args = array( 'page' => 'bp-members-invitations' );
     3094
     3095                // These arguments are only added when performing an action.
     3096                $action_args = array(
     3097                        'action'     => 'do_' . $action,
     3098                        'invite_ids' => implode( ',', $invite_ids )
     3099                );
     3100
     3101                if ( is_network_admin() ) {
     3102                        $base_url = network_admin_url( 'admin.php' );
     3103                } else {
     3104                        $base_url = bp_get_admin_url( 'tools.php' );
     3105                }
     3106
     3107                $cancel_url = add_query_arg( $url_args, $base_url );
     3108                $action_url = wp_nonce_url(
     3109                        add_query_arg(
     3110                                array_merge( $url_args, $action_args ),
     3111                                $base_url
     3112                        ),
     3113                        'invitations_' . $action
     3114                );
     3115
     3116                ?>
     3117
     3118                <div class="wrap">
     3119                        <h1 class="wp-heading-inline"><?php echo esc_html( $header_text ); ?></h1>
     3120                        <hr class="wp-header-end">
     3121
     3122                        <p><?php echo esc_html( $helper_text ); ?></p>
     3123
     3124                        <?php if ( $invites ) : ?>
     3125
     3126                                <ol class="bp-invitations-list">
     3127                                        <?php foreach ( $invites as $invite ) :
     3128                                                if ( $invite->invite_sent ) {
     3129                                                        $last_notified = mysql2date( 'Y/m/d g:i:s a', $invite->date_modified );
     3130                                                } else {
     3131                                                        $last_notified = __( 'Not yet notified', 'buddypress');
     3132                                                }
     3133                                                ?>
     3134
     3135                                                <li>
     3136                                                        <strong><?php echo esc_html( $invite->invitee_email ) ?></strong>
     3137
     3138                                                        <?php if ( 'resend' === $action ) : ?>
     3139
     3140                                                                <p class="description">
     3141                                                                        <?php
     3142                                                                        /* translators: %s: notification date */
     3143                                                                        printf( esc_html__( 'Last notified: %s', 'buddypress'), $last_notified );
     3144                                                                        ?>
     3145                                                                </p>
     3146
     3147                                                        <?php endif; ?>
     3148
     3149                                                </li>
     3150
     3151                                        <?php endforeach; ?>
     3152                                </ol>
     3153
     3154                        <?php endif ; ?>
     3155
     3156                        <?php if ( 'delete' === $action ) : ?>
     3157
     3158                                <p><strong><?php esc_html_e( 'This action cannot be undone.', 'buddypress' ) ?></strong></p>
     3159
     3160                        <?php endif; ?>
     3161
     3162                        <?php if ( $invites ) : ?>
     3163
     3164                                <a class="button-primary" href="<?php echo esc_url( $action_url ); ?>" <?php disabled( ! $invites ); ?>><?php esc_html_e( 'Confirm', 'buddypress' ); ?></a>
     3165
     3166                        <?php endif; ?>
     3167
     3168                        <a class="button" href="<?php echo esc_url( $cancel_url ); ?>"><?php esc_html_e( 'Cancel', 'buddypress' ) ?></a>
     3169                </div>
     3170
     3171                <?php
     3172        }
     3173
    25693174}
    25703175endif; // End class_exists check.
Note: See TracChangeset for help on using the changeset viewer.