Skip to:
Content

BuddyPress.org

Ticket #6060: 6060.3.patch

File 6060.3.patch, 12.0 KB (added by dcavins, 4 years ago)

Another round of updates.

  • src/bp-core/bp-core-taxonomy.php

    diff --git src/bp-core/bp-core-taxonomy.php src/bp-core/bp-core-taxonomy.php
    index 673259d..8f93e44 100644
    defined( 'ABSPATH' ) || exit; 
    2121 */
    2222function bp_register_default_taxonomies() {
    2323        // Member Type.
    24         register_taxonomy( 'bp_member_type', 'user', array(
     24        register_taxonomy( bp_get_member_type_tax_name(), 'user', array(
    2525                'public' => false,
    2626        ) );
    2727
  • src/bp-core/classes/class-bp-user-query.php

    diff --git src/bp-core/classes/class-bp-user-query.php src/bp-core/classes/class-bp-user-query.php
    index 95aab0c..6e99b76 100644
    class BP_User_Query { 
    780780
    781781                $tax_query = new WP_Tax_Query( array(
    782782                        array(
    783                                 'taxonomy' => 'bp_member_type',
     783                                'taxonomy' => bp_get_member_type_tax_name(),
    784784                                'field'    => 'name',
    785785                                'operator' => $operator,
    786786                                'terms'    => $types,
    class BP_User_Query { 
    788788                ) );
    789789
    790790                // Switch to the root blog, where member type taxonomies live.
    791                 $site_id  = bp_get_taxonomy_term_site_id( 'bp_member_type' );
     791                $site_id  = bp_get_taxonomy_term_site_id( bp_get_member_type_tax_name() );
    792792                $switched = false;
    793793                if ( $site_id !== get_current_blog_id() ) {
    794794                        switch_to_blog( $site_id );
  • src/bp-members/bp-members-cache.php

    diff --git src/bp-members/bp-members-cache.php src/bp-members/bp-members-cache.php
    index 49b4b50..4dea407 100644
    defined( 'ABSPATH' ) || exit; 
    2020function bp_members_prefetch_member_type( BP_User_Query $bp_user_query ) {
    2121        $uncached_member_ids = bp_get_non_cached_ids( $bp_user_query->user_ids, 'bp_member_member_type' );
    2222
    23         $member_types = bp_get_object_terms( $uncached_member_ids, 'bp_member_type', array(
     23        $member_types = bp_get_object_terms( $uncached_member_ids, bp_get_member_type_tax_name(), array(
    2424                'fields' => 'all_with_object_id',
    2525        ) );
    2626
  • src/bp-members/bp-members-functions.php

    diff --git src/bp-members/bp-members-functions.php src/bp-members/bp-members-functions.php
    index 8ee5a6d..28ea7bf 100644
    function bp_get_displayed_user() { 
    25062506/** Member Types *************************************************************/
    25072507
    25082508/**
     2509 * Output the slug of the member type taxonomy.
     2510 *
     2511 * @since 2.7.0
     2512 */
     2513function bp_member_type_tax_name() {
     2514        echo bp_get_member_type_tax_name();
     2515}
     2516
     2517        /**
     2518         * Return the slug of the member type taxonomy.
     2519         *
     2520         * @since 2.7.0
     2521         *
     2522         * @return string The unique member taxonomy slug.
     2523         */
     2524        function bp_get_member_type_tax_name() {
     2525                /**
     2526                 * Filters the slug of the member type taxonomy.
     2527                 *
     2528                 * @since 2.7.0
     2529                 *
     2530                 * @param string $value Member type taxonomy slug.
     2531                 */
     2532                return apply_filters( 'bp_get_member_type_tax_name', 'bp_member_type' );
     2533        }
     2534
     2535/**
    25092536 * Register a member type.
    25102537 *
    25112538 * @since 2.2.0
    function bp_set_member_type( $user_id, $member_type, $append = false ) { 
    26762703                return false;
    26772704        }
    26782705
    2679         $retval = bp_set_object_terms( $user_id, $member_type, 'bp_member_type', $append );
     2706        $retval = bp_set_object_terms( $user_id, $member_type, bp_get_member_type_tax_name(), $append );
    26802707
    26812708        // Bust the cache if the type has been updated.
    26822709        if ( ! is_wp_error( $retval ) ) {
    function bp_remove_member_type( $user_id, $member_type ) { 
    27122739                return false;
    27132740        }
    27142741
    2715         $deleted = bp_remove_object_terms( $user_id, $member_type, 'bp_member_type' );
     2742        $deleted = bp_remove_object_terms( $user_id, $member_type, bp_get_member_type_tax_name() );
    27162743
    27172744        // Bust the cache if the type has been removed.
    27182745        if ( ! is_wp_error( $deleted ) ) {
    function bp_get_member_type( $user_id, $single = true ) { 
    27472774        $types = wp_cache_get( $user_id, 'bp_member_member_type' );
    27482775
    27492776        if ( false === $types ) {
    2750                 $types = bp_get_object_terms( $user_id, 'bp_member_type' );
     2777                $types = bp_get_object_terms( $user_id, bp_get_member_type_tax_name() );
    27512778
    27522779                if ( ! is_wp_error( $types ) ) {
    27532780                        $types = wp_list_pluck( $types, 'name' );
  • 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 1493087..446eef6 100644
    class BP_Members_Admin { 
    215215                                add_filter( 'set-screen-option',    array( $this, 'signup_screen_options' ), 10, 3 );
    216216                        }
    217217                }
     218
     219                /** Users List - Members Types ***************************************
     220                 */
     221
     222                if ( is_admin() && ! empty( bp_get_member_types() ) ) {
     223
     224                        // Add "Change type" select WP admin users list table and process bulk members type changes.
     225                        add_action( 'restrict_manage_users', array( $this, 'users_table_output_type_change_select' ) );
     226                        add_action( 'load-users.php',        array( $this, 'users_table_process_bulk_type_change'  ) );
     227
     228                        // Add the member type column to the WP admin users list table.
     229                        add_filter( 'manage_users_columns',       array( $this, 'users_table_add_type_column'    )        );
     230                        add_filter( 'manage_users_custom_column', array( $this, 'users_table_populate_type_cell' ), 10, 3 );
     231
     232                        // Filter WP admin users list table to include users of the specified type.
     233                        add_filter( 'pre_get_users', array( $this, 'users_table_filter_by_type' ) );
     234                }
    218235        }
    219236
    220237        /**
    class BP_Members_Admin { 
    19051922         * @since 2.0.0
    19061923         *
    19071924         * @param string $action Delete, activate, or resend activation link.
     1925         *
    19081926         * @return string
    19091927         */
    19101928        public function signups_admin_manage( $action = '' ) {
    class BP_Members_Admin { 
    20322050
    20332051                <?php
    20342052        }
     2053
     2054        /** Users List Management ****************************************************/
     2055
     2056        /**
     2057         * Display a dropdown to bulk change the member type of selected user(s).
     2058         *
     2059         * @since 2.7.0
     2060         *
     2061         * @param string $which Where this dropdown is displayed - top or bottom.
     2062         */
     2063        public function users_table_output_type_change_select( $which ) {
     2064                $id_name = 'bottom' === $which ? 'bp_change_type2' : 'bp_change_type';
     2065
     2066                // Bail if current user cannot promote users.
     2067                if ( ! current_user_can( 'promote_users' ) ) {
     2068                        return;
     2069                }
     2070
     2071                $types = bp_get_member_types( array(), 'objects' ); ?>
     2072
     2073                <label class="screen-reader-text" for="<?php echo $id_name; ?>"><?php _e( 'Change member type to&hellip;', 'buddypress' ) ?></label>
     2074                <select name="<?php echo $id_name; ?>" id="<?php echo $id_name; ?>" style="display:inline-block;float:none;">
     2075                        <option value=""><?php _e( 'Change member type to&hellip;', 'buddypress' ) ?></option>
     2076
     2077                        <?php foreach( $types as $type ) : ?>
     2078
     2079                                <option value="<?php echo esc_attr( $type->name ); ?>"><?php echo $type->labels['name']; ?></option>
     2080
     2081                        <?php endforeach; ?>
     2082
     2083                </select>
     2084                <?php
     2085                wp_nonce_field( 'bp-bulk-users-change-type-' . bp_loggedin_user_id(), 'bp-bulk-users-change-type-nonce' );
     2086                submit_button( __( 'Change', 'buddypress' ), 'button', 'bp_change_member_type', false );
     2087        }
     2088
     2089        /**
     2090         * Process bulk member type change submission from the WP admin users list table.
     2091         *
     2092         * @since 2.7.0
     2093         */
     2094        public function users_table_process_bulk_type_change() {
     2095                $this->users_type_change_notice();
     2096
     2097                // Bail if no users specified.
     2098                if ( empty( $_REQUEST['users'] ) ) {
     2099                        return;
     2100                }
     2101
     2102                // Bail if this isn't a BuddyPress action.
     2103                if ( ( empty( $_REQUEST['bp_change_type'] ) && empty( $_REQUEST['bp_change_type2'] ) )
     2104                        || empty( $_REQUEST['bp_change_member_type'] )
     2105                ) {
     2106                        return;
     2107                }
     2108
     2109                // Bail if nonce check fails.
     2110                check_admin_referer( 'bp-bulk-users-change-type-' . bp_loggedin_user_id(), 'bp-bulk-users-change-type-nonce' );
     2111
     2112                // Bail if current user cannot promote users.
     2113                if ( ! current_user_can( 'promote_users' ) ) {
     2114                        return;
     2115                }
     2116
     2117                // Bail if the new type is empty.
     2118                $new_type = '';
     2119                if ( ! empty( $_REQUEST['bp_change_type2'] ) ) {
     2120                        $new_type = sanitize_text_field( $_REQUEST['bp_change_type2'] );
     2121                } elseif ( ! empty( $_REQUEST['bp_change_type'] ) ) {
     2122                        $new_type = sanitize_text_field( $_REQUEST['bp_change_type'] );
     2123                }
     2124                if ( empty( $new_type ) ) {
     2125                        return;
     2126                }
     2127
     2128                // Check that the selected type actually exists.
     2129                if ( is_null( bp_get_member_type_object( $new_type ) ) ) {
     2130                        return;
     2131                }
     2132
     2133                // Run through user ids.
     2134                $error = false;
     2135                foreach ( (array) $_REQUEST['users'] as $user_id ) {
     2136                        $user_id = (int) $user_id;
     2137
     2138                        // Get the old member type to check against.
     2139                        $user_type = bp_get_member_type( $user_id );
     2140
     2141                        // Set the new member type.
     2142                        if ( $new_type !== $user_type ) {
     2143                                $set = bp_set_member_type( $user_id, $new_type );
     2144                                if ( empty( $set ) || is_wp_error( $set ) ) {
     2145                                        $error = true;
     2146                                }
     2147                        }
     2148                }
     2149
     2150                // If there were any errors, show the error message.
     2151                if ( $error ) {
     2152                        $redirect = add_query_arg( array( 'updated' => 'member-type-change-error' ), wp_get_referer() );
     2153                } else {
     2154                        $redirect = add_query_arg( array( 'updated' => 'member-type-change-success' ), wp_get_referer() );
     2155                }
     2156
     2157                wp_redirect( $redirect );
     2158                exit();
     2159        }
     2160
     2161        /**
     2162         * Display an admin notice upon member type bulk update.
     2163         *
     2164         * @since 2.7.0
     2165         */
     2166        public function users_type_change_notice() {
     2167                $updated = isset( $_REQUEST['updated'] ) ? $_REQUEST['updated'] : false;
     2168
     2169                // Display feedback.
     2170                if ( ! empty( $updated ) && in_array( $updated, array( 'member-type-change-error', 'member-type-change-success' ) ) ) {
     2171
     2172                        if ( 'member-type-change-error' === $updated ) {
     2173                                $notice = __( 'There was an error while changing member type. Please try again.', 'buddypress' );
     2174                        } else {
     2175                                $notice = __( 'Member type was successfully changed.', 'buddypress' );
     2176                        }
     2177
     2178                        bp_core_add_admin_notice( $notice );
     2179                }
     2180        }
     2181
     2182        /**
     2183         * Add member type column to the WordPress admin users list table.
     2184         *
     2185         * @since 2.7.0
     2186         *
     2187         * @param array $columns Users table columns.
     2188         *
     2189         * @return array $columns
     2190         */
     2191        public function users_table_add_type_column( $columns = array() ) {
     2192                $columns[ bp_get_member_type_tax_name() ] = _x( 'Member Type', 'Label for the WP users table member type column' , 'buddypress' );
     2193
     2194                return $columns;
     2195        }
     2196
     2197        /**
     2198         * Return member's type for display in the WP admin users list table.
     2199         *
     2200         * @since 2.7.0
     2201         *
     2202         * @param string $retval
     2203         * @param string $column_name
     2204         * @param int $user_id
     2205         *
     2206         * @return string Member type as a link to filter all users.
     2207         */
     2208        public function users_table_populate_type_cell( $retval = '', $column_name = '', $user_id = 0 ) {
     2209                // Only looking for member type column
     2210                if ( bp_get_member_type_tax_name() !== $column_name ) {
     2211                        return $retval;
     2212                }
     2213
     2214                // Get the member type.
     2215                $type = bp_get_member_type( $user_id );
     2216
     2217                // Translate user role for display.
     2218                if ( $type_obj = bp_get_member_type_object( $type ) ) {
     2219
     2220                        $url = add_query_arg( array( 'bp-member-type' => urlencode( $type ) ) );
     2221                        // @TODO: Will `translate_user_role()` do anything here? Or can we assume that the singular name is translated?
     2222                        $retval = '<a href="' . esc_url( $url ) . '">' . translate_user_role( $type_obj->labels['singular_name'] ) . '</a>';
     2223                }
     2224
     2225                return $retval;
     2226        }
     2227
     2228        /**
     2229         * Filter WP Admin users list table to include users of the specified type.
     2230         *
     2231         * @param WP_Query $query
     2232         *
     2233         * @since 2.7.0
     2234         */
     2235        public function users_table_filter_by_type( $query ) {
     2236                global $pagenow;
     2237
     2238                if ( is_admin() && 'users.php' === $pagenow && ! empty( $_REQUEST['bp-member-type'] ) ) {
     2239                        $type_slug = sanitize_text_field( $_REQUEST['bp-member-type'] );
     2240
     2241                        // Check that the type is registered.
     2242                        if ( is_null( bp_get_member_type_object( $type_slug ) ) ) {
     2243                                return;
     2244                        }
     2245
     2246                        // @TODO: Would it be better to use BP_User_Query with the member_type param here?
     2247                        // Get the list of users that are assigned to this member type.
     2248                        $type = get_term_by( 'slug', $type_slug, bp_get_member_type_tax_name() );
     2249
     2250                        if ( ! $type->term_id ) {
     2251                                return;
     2252                        }
     2253
     2254                        $user_ids = get_objects_in_term( $type->term_id, bp_get_member_type_tax_name() );
     2255
     2256                        if ( $user_ids && ! is_wp_error( $user_ids ) ) {
     2257                                $query->set( 'include', (array) $user_ids );
     2258                        }
     2259                }
     2260        }
    20352261}
    20362262endif; // End class_exists check.