bp_save_member_type_post_metabox_data( $post_id )

Save profile type post data.

Description

Parameters

$post_id

(Required)

Source

File: bp-core/admin/bp-core-admin-functions.php

function bp_save_member_type_post_metabox_data( $post_id ) {
	global $wpdb, $error;

	if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
		return;

	$post = get_post( $post_id );

	if ( $post->post_type !== bp_get_member_type_post_type() )
		return;

	if ( ! isset( $_POST[ '_bp-member-type-nonce' ] ) )
		return;

	//verify nonce
	if ( ! wp_verify_nonce( $_POST[ '_bp-member-type-nonce' ], 'bp-member-type-edit-member-type' ) )
		return;

	//Save data
	$data = isset( $_POST[ 'bp-member-type' ] ) ? $_POST[ 'bp-member-type' ] : array();

	if ( empty( $data ) )
		return;

	$error = false;

	$post_title = wp_kses( $_POST[ 'post_title' ], wp_kses_allowed_html( 'strip' ) );

	// key
	$key = get_post_field( 'post_name', $post_id );

	//for label
	$label_name = isset( $data[ 'label_name' ] ) ? wp_kses( $data[ 'label_name' ], wp_kses_allowed_html( 'strip' ) ) : $post_title;
	$singular_name = isset( $data[ 'label_singular_name' ] ) ? wp_kses( $data[ 'label_singular_name' ], wp_kses_allowed_html( 'strip' ) ) : $post_title;

	//Remove space
	$label_name     = trim( $label_name );
	$singular_name  = trim( $singular_name );

	$enable_filter = isset( $data[ 'enable_filter' ] ) ? absint( $data[ 'enable_filter' ] ) : 0; //default inactive
	$enable_remove = isset( $data[ 'enable_remove' ] ) ? absint( $data[ 'enable_remove' ] ) : 0; //default inactive

	$data[ 'wp_roles' ] = array_filter( $data[ 'wp_roles' ] ); // Remove empty value from wp_roles array
	$wp_roles = isset( $data[ 'wp_roles' ] ) ? $data[ 'wp_roles' ] : '';

	$term = term_exists( sanitize_key( $key ), bp_get_member_type_tax_name() );
	if ( 0 !== $term && null !== $term ) {
		$digits = 3;
		$unique = rand(pow(10, $digits-1), pow(10, $digits)-1);
		$key = $key.$unique;
	}

	$get_existing = get_post_meta( $post_id, '_bp_member_type_key', true );
	( '' === $get_existing ) ? update_post_meta( $post_id, '_bp_member_type_key', sanitize_key( $key ) ) : '';
	update_post_meta( $post_id, '_bp_member_type_label_name', $label_name );
	update_post_meta( $post_id, '_bp_member_type_label_singular_name', $singular_name );
	update_post_meta( $post_id, '_bp_member_type_enable_filter', $enable_filter );
	update_post_meta( $post_id, '_bp_member_type_enable_remove', $enable_remove );
	update_post_meta( $post_id, '_bp_member_type_enabled_group_type_create', $_POST['bp-group-type'] );
	update_post_meta( $post_id, '_bp_member_type_enabled_group_type_auto_join', $_POST['bp-group-type-auto-join'] );
	update_post_meta( $post_id, '_bp_member_type_allowed_member_type_invite', $_POST['bp-member-type-invite'] );
	update_post_meta( $post_id, '_bp_member_type_enable_invite', $_POST['bp-member-type-enabled-invite'] );

	// Get user previous role.
	$old_wp_roles = get_post_meta( $post_id, '_bp_member_type_wp_roles', true );

	$check_both_old_new_role_same = ( $wp_roles === $old_wp_roles );

	if ( false === $check_both_old_new_role_same ) {
		$member_type_name = bp_get_member_type_key( $post_id );
		$type_term        = get_term_by( 'name',
			$member_type_name,
			'bp_member_type' ); // Get profile type term data from database by name field.

		// Check logged user role.
		$user = new WP_User( get_current_user_id() );
		$current_user_role = $user->roles[0];

		// flag to check condition.
		$bp_prevent_data_update = false;

		// Fetch all the users which associated this profile type.
		$get_user_ids = $wpdb->get_col( "SELECT u.ID FROM {$wpdb->users} u INNER JOIN {$wpdb->prefix}term_relationships r ON u.ID = r.object_id WHERE u.user_status = 0 AND r.term_taxonomy_id = " . $type_term->term_id );
		if ( isset( $get_user_ids ) && ! empty( $get_user_ids ) ) {
			if ( in_array( get_current_user_id(), $get_user_ids ) ) {
				$bp_prevent_data_update = true;
			}
		}

		if ( true === $bp_prevent_data_update ) {
			if ( 'administrator' === $old_wp_roles[0] ) {
				if ( ! in_array( $current_user_role, $wp_roles ) ) {
					$bp_error_message_string = __( 'As your profile is currently assigned to this profile type, you cannot change its associated WordPress role. Changing this setting would remove your Administrator role and lock you out of the WordPress admin. You first need to remove yourself from this profile type (at Users > Your Profile > Extended) and then you can come back to this page to update the associated WordPress role.', 'buddyboss' );
					$error_message           = apply_filters( 'bp_member_type_admin_error_message', $bp_error_message_string);
					// Define the settings error to display
					add_settings_error( 'bp-invalid-role-selection',
						'bp-invalid-role-selection',
						$error_message,
						'error' );
					set_transient( 'bp_invalid_role_selection', get_settings_errors(), 30 );
					return;
				}
			}
		}

		update_post_meta( $post_id, '_bp_member_type_wp_roles', $wp_roles );

		//term exist
		if ( $type_term ) {

			if ( isset( $get_user_ids ) && ! empty( $get_user_ids ) ) {
				foreach ( $get_user_ids as $single_user ) {
					$bp_user = new WP_User( $single_user );
					foreach ( $bp_user->roles as $role ) {
						// Remove role
						$bp_user->remove_role( $role );
					}
					// Add role
					$bp_user->add_role( $wp_roles[0] );
				}
			}
		}
	}

}

Changelog

Changelog
Version Description
BuddyBoss 1.0.0 Introduced.

Questions?

We're always happy to help with code or other questions you might have! Search our developer docs, contact support, or connect with our sales team.