BP_REST_Group_Settings_Endpoint::update_forum_fields( WP_REST_Request $request )

Update Group Forum settings.

Description

Parameters

$request

(WP_REST_Request) (Required) Request used to generate the response.

Return

(array)

Source

File: bp-groups/classes/class-bp-rest-group-settings-endpoint.php

	protected function update_forum_fields( $request ) {
		$post_fields                        = $request->get_param( 'fields' );
		$group_id                           = $request->get_param( 'id' );
		$group                              = groups_get_group( $group_id );
		buddypress()->groups->current_group = $group;

		if ( ! bp_is_active( 'forums' ) || ! function_exists( 'bbp_is_group_forums_active' ) || ! bbp_is_group_forums_active() || ! class_exists( 'BBP_Forums_Group_Extension' ) ) {
			return new WP_Error(
				'bp_rest_invalid_group_setting_nav',
				__( 'Sorry, you are not allowed to update the forum group settings options.', 'buddyboss' ),
				array(
					'status' => 400,
				)
			);
		}

		if ( empty( $post_fields ) ) {
			return array(
				'error'  => '',
				'notice' => '',
			);
		}

		$edit_forum = ( array_key_exists( 'bbp-edit-group-forum', (array) $post_fields ) && ! empty( $post_fields['bbp-edit-group-forum'] ) ) ? true : false;
		$forum_id   = 0;

		$group_forum_extention = new BBP_Forums_Group_Extension();

		// Keymasters have the ability to reconfigure forums.
		if ( bbp_is_user_keymaster() ) {
			$forum_ids = ( array_key_exists( 'bbp_group_forum_id', (array) $post_fields ) && ! empty( $post_fields['bbp_group_forum_id'] ) ) ? (array) (int) $post_fields['bbp_group_forum_id'] : array();

			// Use the existing forum IDs.
		} else {
			$forum_ids = array_values( bbp_get_group_forum_ids( $group_id ) );
		}

		// Normalize group forum relationships now.
		if ( ! empty( $forum_ids ) ) {

			// Loop through forums, and make sure they exist.
			foreach ( $forum_ids as $forum_id ) {

				// Look for forum.
				$forum = bbp_get_forum( $forum_id );

				// No forum exists, so break the relationship.
				if ( empty( $forum ) ) {
					$group_forum_extention->remove_forum(
						array(
							'forum_id' => $forum_id,
							'group_id' => $group_id,
						)
					);
					unset( $forum_ids[ $forum_id ] );
				}
			}

			// No support for multiple forums yet.
			$forum_id = (int) ( is_array( $forum_ids ) ? $forum_ids[0] : $forum_ids );
		}

		// Update the group ID and forum ID relationships.
		bbp_update_group_forum_ids( $group_id, (array) $forum_ids );
		bbp_update_forum_group_ids( $forum_id, (array) $group_id );

		// Update the group forum setting.
		$group = $group_forum_extention->toggle_group_forum( $group_id, $edit_forum, $forum_id );

		// Create a new forum.
		if ( empty( $forum_id ) && ( true === $edit_forum ) ) {

			// Set the default forum status.
			switch ( $group->status ) {
				case 'hidden':
					$status = bbp_get_hidden_status_id();
					break;
				case 'private':
					$status = bbp_get_private_status_id();
					break;
				case 'public':
				default:
					$status = bbp_get_public_status_id();
					break;
			}

			// Create the initial forum.
			$forum_id = bbp_insert_forum(
				array(
					'post_parent'  => bbp_get_group_forums_root_id(),
					'post_title'   => $group->name,
					'post_content' => $group->description,
					'post_status'  => $status,
				)
			);

			// Setup forum args with forum ID.
			$new_forum_args = array( 'forum_id' => $forum_id );

			// If in admin, also include the group ID.
			if ( is_admin() && ! empty( $group_id ) ) {
				$new_forum_args['group_id'] = $group_id;
			}

			// Run the BP-specific functions for new groups.
			$group_forum_extention->new_forum( $new_forum_args );
		}

		$notice = __( 'Group settings were successfully updated.', 'buddyboss' );

		return array(
			'error'  => '',
			'notice' => $notice,
		);
	}

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.