Skip to:
Content

BuddyPress.org


Ignore:
Timestamp:
12/04/2014 01:47:49 AM (11 years ago)
Author:
boonebgorges
Message:

Introduce Member Types API.

BuddyPress member types are akin to WordPress's custom post types. Developers
can use bp_register_member_type() to register their types with BuddyPress,
and BP will automatically provide a number of pieces of functionality:

  • Mechanisms for storing and fetching member types (as a WP taxonomy term), with full cache support.
  • A 'member_type' argument for the bp_has_members()/BP_User_Query stack, which allows filtering member loops by member type.
  • Admin UI for changing member types on Dashboard > Users > Community Profile (appears when member types have been registered).

We'll continue to build out more core member type functionality in future
versions of BuddyPress. In the meantime, this is a good starting point for BP
site implementations to have a shared infrastructure for storing and retrieving
this data.

See #6006.

File:
1 edited

Legend:

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

    r9190 r9210  
    186186        // Add user row actions for single site
    187187        add_filter( 'user_row_actions', array( $this, 'row_actions' ), 10, 2 );
     188
     189        // Process changes to member type.
     190        add_action( 'bp_members_admin_load', array( $this, 'process_member_type_update' ) );
    188191
    189192        /** Signups ***********************************************************/
     
    720723            );
    721724
     725            // Member Type metabox. Only added if member types have been registered.
     726            $member_types = bp_get_member_types();
     727            if ( ! empty( $member_types ) ) {
     728                add_meta_box(
     729                    'bp_members_admin_member_type',
     730                    _x( 'Member Type', 'members user-admin edit screen', 'buddypress' ),
     731                    array( $this, 'user_admin_member_type_metabox' ),
     732                    get_current_screen()->id,
     733                    'side',
     734                    'core'
     735                );
     736            }
     737
    722738            /**
    723739             * Custom metabox ?
     
    9961012
    9971013        <?php
     1014    }
     1015
     1016    /**
     1017     * Render the Member Type metabox.
     1018     *
     1019     * @since BuddyPress (2.2.0)
     1020     * @access public
     1021     *
     1022     * @param WP_User $user The WP_User object to be edited.
     1023     */
     1024    public function user_admin_member_type_metabox( $user = null ) {
     1025
     1026        // Bail if no user ID.
     1027        if ( empty( $user->ID ) ) {
     1028            return;
     1029        }
     1030
     1031        $types = bp_get_member_types( array(), 'objects' );
     1032        $current_type = bp_get_member_type( $user->ID );
     1033
     1034        /* translators: no option picked in select box */
     1035        $null_option = __( '----', 'buddypress' );
     1036
     1037        ?>
     1038        <select name="bp-members-profile-member-type">
     1039            <option value="" <?php selected( '', $current_type ); ?>><?php esc_attr_e( $null_option ) ?></option>
     1040            <?php foreach ( $types as $type ) : ?>
     1041                <option value="<?php echo esc_attr( $type->name ) ?>" <?php selected( $type->name, $current_type ) ?>><?php echo esc_html( $type->labels['singular_name'] ) ?></option>
     1042            <?php endforeach; ?>
     1043        </select>
     1044
     1045        <?php
     1046
     1047        wp_nonce_field( 'bp-member-type-change-' . $user->ID, 'bp-member-type-nonce' );
     1048    }
     1049
     1050    /**
     1051     * Process changes from the Member Type metabox.
     1052     *
     1053     * @since BuddyPress (2.2.0)
     1054     * @access public
     1055     */
     1056    public function process_member_type_update() {
     1057        if ( ! isset( $_POST['bp-member-type-nonce'] ) || ! isset( $_POST['bp-members-profile-member-type'] ) ) {
     1058            return;
     1059        }
     1060
     1061        $user_id = $this->get_user_id();
     1062
     1063        check_admin_referer( 'bp-member-type-change-' . $user_id, 'bp-member-type-nonce' );
     1064
     1065        // Permission check.
     1066        if ( ! current_user_can( 'bp_moderate' ) && $user_id != bp_loggedin_user_id() ) {
     1067            return;
     1068        }
     1069
     1070        // Member type string must either reference a valid member type, or be empty.
     1071        $member_type = stripslashes( $_POST['bp-members-profile-member-type'] );
     1072        if ( ! empty( $member_type ) && ! bp_get_member_type_object( $member_type ) ) {
     1073            return;
     1074        }
     1075
     1076        /*
     1077         * If an invalid member type is passed, someone's doing something
     1078         * fishy with the POST request, so we can fail silently.
     1079         */
     1080        if ( bp_set_member_type( $user_id, $member_type ) ) {
     1081            // @todo Success messages can't be posted because other stuff happens on the pageload.
     1082        }
    9981083    }
    9991084
Note: See TracChangeset for help on using the changeset viewer.