Skip to:
Content

BuddyPress.org

Ticket #6784: 6784.metabox.01.patch

File 6784.metabox.01.patch, 3.4 KB (added by dcavins, 9 years ago)

Add meta box to wp-admin group edit screen for changing group type.

  • src/bp-groups/bp-groups-admin.php

    diff --git src/bp-groups/bp-groups-admin.php src/bp-groups/bp-groups-admin.php
    index 1fc21d7..8e32f8b 100644
    function bp_groups_admin_load() { 
    134134                add_meta_box( 'bp_group_add_members', _x( 'Add New Members', 'group admin edit screen', 'buddypress' ), 'bp_groups_admin_edit_metabox_add_new_members', get_current_screen()->id, 'normal', 'core' );
    135135                add_meta_box( 'bp_group_members', _x( 'Manage Members', 'group admin edit screen', 'buddypress' ), 'bp_groups_admin_edit_metabox_members', get_current_screen()->id, 'normal', 'core' );
    136136
     137                // Group Type metabox. Only added if group types have been registered.
     138                $group_types = bp_groups_get_group_types();
     139                if ( ! empty( $group_types ) ) {
     140                        add_meta_box(
     141                                'bp_groups_admin_group_type',
     142                                _x( 'Group Type', 'groups admin edit screen', 'buddypress' ),
     143                                'bp_groups_admin_edit_metabox_group_type',
     144                                get_current_screen()->id,
     145                                'side',
     146                                'core'
     147                        );
     148                }
     149
    137150                /**
    138151                 * Fires after the registration of all of the default group meta boxes.
    139152                 *
    function bp_groups_admin_edit_metabox_status( $item ) { 
    10131026}
    10141027
    10151028/**
     1029 * Render the Group Type metabox.
     1030 *
     1031 * @since 2.6.0
     1032 *
     1033 * @param WP_User|null $user The WP_User object to be edited.
     1034 */
     1035function bp_groups_admin_edit_metabox_group_type( $group = null ) {
     1036
     1037        // Bail if no group ID.
     1038        if ( empty( $group->id ) ) {
     1039                return;
     1040        }
     1041
     1042        $types = bp_groups_get_group_types( array(), 'objects' );
     1043        $current_type = bp_groups_get_group_type( $group->id );
     1044        ?>
     1045
     1046        <label for="bp-groups-group-type" class="screen-reader-text"><?php esc_html_e( 'Select group type', 'buddypress' ); ?></label>
     1047        <select name="bp-groups-group-type" id="bp-groups-group-type">
     1048                <option value="" <?php selected( '', $current_type ); ?>><?php /* translators: no option picked in select box */ esc_attr_e( '----', 'buddypress' ) ?></option>
     1049                <?php foreach ( $types as $type ) : ?>
     1050                        <option value="<?php echo esc_attr( $type->name ) ?>" <?php selected( $type->name, $current_type ) ?>><?php echo esc_html( $type->labels['singular_name'] ) ?></option>
     1051                <?php endforeach; ?>
     1052        </select>
     1053
     1054        <?php
     1055
     1056        wp_nonce_field( 'bp-group-type-change-' . $group->id, 'bp-group-type-nonce' );
     1057}
     1058
     1059/**
     1060 * Process changes from the Group Type metabox.
     1061 *
     1062 * @since 2.6.0
     1063 */
     1064function bp_groups_process_group_type_update( $group_id ) {
     1065        if ( ! isset( $_POST['bp-group-type-nonce'] ) || ! isset( $_POST['bp-groups-group-type'] ) ) {
     1066                return;
     1067        }
     1068
     1069        check_admin_referer( 'bp-group-type-change-' . $group_id, 'bp-group-type-nonce' );
     1070
     1071        // Permission check.
     1072        if ( ! current_user_can( 'bp_moderate' ) ) {
     1073                return;
     1074        }
     1075
     1076        // Group type string must either reference a valid group type, or be empty.
     1077        $group_type = stripslashes( $_POST['bp-groups-group-type'] );
     1078        if ( ! empty( $group_type ) && ! bp_groups_get_group_type_object( $group_type ) ) {
     1079                return;
     1080        }
     1081
     1082        /*
     1083         * If an invalid group type is passed, someone's doing something
     1084         * fishy with the POST request, so we can fail silently.
     1085         */
     1086        if ( bp_groups_set_group_type( $group_id, $group_type ) ) {
     1087                // @todo Success messages can't be posted because other stuff happens on the page load.
     1088        }
     1089}
     1090add_action( 'bp_group_admin_edit_after', 'bp_groups_process_group_type_update' );
     1091
     1092/**
    10161093 * Create pagination links out of a BP_Group_Member_Query.
    10171094 *
    10181095 * This function is intended to create pagination links for use under the