BP_REST_Groups_Endpoint
Groups endpoints.
Description
Source
File: bp-groups/classes/class-bp-rest-groups-endpoint.php
class BP_REST_Groups_Endpoint extends WP_REST_Controller { /** * Constructor. * * @since 0.1.0 */ public function __construct() { $this->namespace = bp_rest_namespace() . '/' . bp_rest_version(); $this->rest_base = buddypress()->groups->id; } /** * Register the component routes. * * @since 0.1.0 */ public function register_routes() { register_rest_route( $this->namespace, '/' . $this->rest_base, array( array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_items' ), 'permission_callback' => array( $this, 'get_items_permissions_check' ), 'args' => $this->get_collection_params(), ), array( 'methods' => WP_REST_Server::CREATABLE, 'callback' => array( $this, 'create_item' ), 'permission_callback' => array( $this, 'create_item_permissions_check' ), 'args' => $this->get_endpoint_args_for_item_schema( WP_REST_Server::CREATABLE ), ), 'schema' => array( $this, 'get_item_schema' ), ) ); register_rest_route( $this->namespace, '/' . $this->rest_base . '/(?P<id>[\d]+)', array( 'args' => array( 'id' => array( 'description' => __( 'A unique numeric ID for the Group.', 'buddyboss' ), 'type' => 'integer', ), ), array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_item' ), 'permission_callback' => array( $this, 'get_item_permissions_check' ), 'args' => array( 'context' => $this->get_context_param( array( 'default' => 'view', ) ), ), ), array( 'methods' => WP_REST_Server::EDITABLE, 'callback' => array( $this, 'update_item' ), 'permission_callback' => array( $this, 'update_item_permissions_check' ), 'args' => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ), ), array( 'methods' => WP_REST_Server::DELETABLE, 'callback' => array( $this, 'delete_item' ), 'permission_callback' => array( $this, 'delete_item_permissions_check' ), 'args' => $this->get_endpoint_args_for_item_schema( WP_REST_Server::DELETABLE ), ), 'schema' => array( $this, 'get_item_schema' ), ) ); } /** * Retrieve groups. * * @param WP_REST_Request $request Full details about the request. * * @return WP_REST_Response | WP_Error List of groups object data. * @since 0.1.0 * * @api {GET} /wp-json/buddyboss/v1/groups Get Groups * @apiName GetBBGroups * @apiGroup Groups * @apiDescription Retrieve groups * @apiVersion 1.0.0 * @apiPermission LoggedInUser if the site is in Private Network. * @apiParam {Number} [page=1] Current page of the collection. * @apiParam {Number} [per_page=10] Maximum number of items to be returned in result set. * @apiParam {String} [search] Limit results to those matching a string. * @apiParam {String=active,newest,alphabetical,random,popular} [type=active] Shorthand for certain orderby/order combinations. * @apiParam {String=asc,desc} [order=desc] Order sort attribute ascending or descending. * @apiParam {String=date_created,last_activity,total_member_count,name,random} [orderby=date_created] Order Groups by which attribute. * @apiParam {Array=public,private,hidden } [status] Group statuses to limit results to. * @apiParam {Number} [user_id] Pass a user_id to limit to only Groups that this user is a member of. * @apiParam {Array} [parent_id] Get Groups that are children of the specified Group(s) IDs. * @apiParam {Array} [meta] Get Groups based on their meta data information. * @apiParam {Array} [include] Ensure result set includes Groups with specific IDs. * @apiParam {Array} [exclude] Ensure result set excludes Groups with specific IDs. * @apiParam {String} [group_type] Limit results set to a certain Group type. * @apiParam {Boolean} [enable_forum] Whether the Group has a forum enabled or not. * @apiParam {Boolean} [show_hidden] Whether results should include hidden Groups. * @apiParam {String=all,personal} [scope=all] Limit result set to items with a specific scope. */ public function get_items( $request ) { $args = array( 'type' => $request['type'], 'order' => $request['order'], 'fields' => $request['fields'], 'orderby' => $request['orderby'], 'user_id' => $request['user_id'], 'include' => $request['include'], 'parent_id' => $request['parent_id'], 'exclude' => $request['exclude'], 'search_terms' => $request['search'], 'meta_query' => $request['meta'], // phpcs:ignore 'group_type' => $request['group_type'], 'show_hidden' => $request['show_hidden'], 'per_page' => $request['per_page'], 'status' => $request['status'], 'page' => $request['page'], ); if ( empty( $request['parent_id'] ) ) { $args['parent_id'] = null; } // See if the user can see hidden groups. if ( isset( $request['show_hidden'] ) && true === (bool) $request['show_hidden'] && ! $this->can_see_hidden_groups( $request ) ) { $args['show_hidden'] = false; } if ( isset( $request['scope'] ) ) { if ( 'personal' === $request['scope'] ) { $args['user_id'] = ( ! empty( $request['user_id'] ) ? (int) $request['user_id'] : get_current_user_id() ); } } if ( ( empty( $request['scope'] ) || ( isset( $request['scope'] ) && 'all' === $request['scope'] ) ) && function_exists( 'bp_groups_get_excluded_group_ids_by_type' ) && ! empty( bp_groups_get_excluded_group_ids_by_type() ) ) { $args['exclude'] = array_unique( bp_groups_get_excluded_group_ids_by_type() ); } /** * Filter the query arguments for the request. * * @param array $args Key value array of query var to query value. * @param WP_REST_Request $request The request sent to the API. * * @since 0.1.0 */ $args = apply_filters( 'bp_rest_groups_get_items_query_args', $args, $request ); // Actually, query it. $groups = groups_get_groups( $args ); // Users need (at least, should we be more restrictive ?) to be logged in to use the edit context. if ( 'edit' === $request->get_param( 'context' ) && ! is_user_logged_in() ) { $request->set_param( 'context', 'view' ); } $retval = array(); foreach ( $groups['groups'] as $group ) { $retval[] = $this->prepare_response_for_collection( $this->prepare_item_for_response( $group, $request ) ); } $response = rest_ensure_response( $retval ); $response = bp_rest_response_add_total_headers( $response, $groups['total'], $args['per_page'] ); /** * Fires after a list of groups is fetched via the REST API. * * @param array $groups Fetched groups. * @param WP_REST_Response $response The response data. * @param WP_REST_Request $request The request sent to the API. * * @since 0.1.0 */ do_action( 'bp_rest_groups_get_items', $groups, $response, $request ); return $response; } /** * Check if a given request has access to group items. * * @param WP_REST_Request $request Full details about the request. * * @return bool|WP_Error * @since 0.1.0 */ public function get_items_permissions_check( $request ) { $retval = true; if ( function_exists( 'bp_enable_private_network' ) && true !== bp_enable_private_network() && ! is_user_logged_in() ) { $retval = new WP_Error( 'bp_rest_authorization_required', __( 'Sorry, Restrict access to only logged-in members.', 'buddyboss' ), array( 'status' => rest_authorization_required_code(), ) ); } /** * Filter the groups `get_items` permissions check. * * @param bool|WP_Error $retval Returned value. * @param WP_REST_Request $request The request sent to the API. * * @since 0.1.0 */ return apply_filters( 'bp_rest_groups_get_items_permissions_check', $retval, $request ); } /** * Retrieve a group. * * @param WP_REST_Request $request Full details about the request. * * @return WP_REST_Response | WP_Error * @since 0.1.0 * * @api {GET} /wp-json/buddyboss/v1/groups/:id Get Group * @apiName GetBBGroup * @apiGroup Groups * @apiDescription Retrieve single group * @apiVersion 1.0.0 * @apiPermission LoggedInUser if the site is in Private Network. * @apiParam {Number} id A unique numeric ID for the Group. */ public function get_item( $request ) { $group = $this->get_group_object( $request ); $retval = $this->prepare_response_for_collection( $this->prepare_item_for_response( $group, $request ) ); $response = rest_ensure_response( $retval ); /** * Fires after a group is fetched via the REST API. * * @param BP_Groups_Group $group Fetched group. * @param WP_REST_Response $response The response data. * @param WP_REST_Request $request The request sent to the API. * * @since 0.1.0 */ do_action( 'bp_rest_groups_get_item', $group, $response, $request ); return $response; } /** * Check if a given request has access to get information about a specific group. * * @param WP_REST_Request $request Full details about the request. * * @return WP_Error|bool * @since 0.1.0 */ public function get_item_permissions_check( $request ) { $retval = true; if ( function_exists( 'bp_enable_private_network' ) && true !== bp_enable_private_network() && ! is_user_logged_in() ) { $retval = new WP_Error( 'bp_rest_authorization_required', __( 'Sorry, Restrict access to only logged-in members.', 'buddyboss' ), array( 'status' => rest_authorization_required_code(), ) ); } $group = $this->get_group_object( $request ); if ( true === $retval && empty( $group->id ) ) { $retval = new WP_Error( 'bp_rest_group_invalid_id', __( 'Invalid group ID.', 'buddyboss' ), array( 'status' => 404, ) ); } if ( true === $retval && ! $this->can_see( $group ) ) { $retval = new WP_Error( 'bp_rest_authorization_required', __( 'Sorry, you cannot view the group.', 'buddyboss' ), array( 'status' => rest_authorization_required_code(), ) ); } /** * Filter the groups `get_item` permissions check. * * @param bool|WP_Error $retval Returned value. * @param WP_REST_Request $request The request sent to the API. * * @since 0.1.0 */ return apply_filters( 'bp_rest_groups_get_item_permissions_check', $retval, $request ); } /** * Create a group. * * @param WP_REST_Request $request Full data about the request. * * @return WP_REST_Response | WP_Error * @since 0.1.0 * * @api {POST} /wp-json/buddyboss/v1/groups Create Group * @apiName CreateBBGroups * @apiGroup Groups * @apiDescription Create groups * @apiVersion 1.0.0 * @apiPermission LoggedInUser * @apiParam {Number} [creator_id=1] The ID of the user who created the Group. * @apiParam {String} name The name of the Group. * @apiParam {String} [slug] The URL-friendly slug for the Group. * @apiParam {String} description The description of the Group. * @apiParam {String=public,private,hidden} [status=public] The status of the Group. * @apiParam {Boolean} [enable_forum] Whether the Group has a forum enabled or not. * @apiParam {Number} [parent_id] ID of the parent Group. * @apiParam {Array} [types] Set type(s) for a group. */ public function create_item( $request ) { // Setting context. $request->set_param( 'context', 'edit' ); // If no group name. if ( empty( $request['name'] ) ) { return new WP_Error( 'bp_rest_create_group_empty_name', __( 'Please, enter the name of group.', 'buddyboss' ), array( 'status' => 400, ) ); } $group_id = groups_create_group( $this->prepare_item_for_database( $request ) ); if ( ! is_numeric( $group_id ) ) { return new WP_Error( 'bp_rest_user_cannot_create_group', __( 'Cannot create new group.', 'buddyboss' ), array( 'status' => 500, ) ); } $group = $this->get_group_object( $group_id ); $fields_update = $this->update_additional_fields_for_object( $group, $request ); if ( is_wp_error( $fields_update ) ) { return $fields_update; } // Set group type(s). if ( ! empty( $request['types'] ) ) { bp_groups_set_group_type( $group_id, $request['types'] ); } $retval = $this->prepare_response_for_collection( $this->prepare_item_for_response( $group, $request ) ); $response = rest_ensure_response( $retval ); /** * Fires after a group is created via the REST API. * * @param BP_Groups_Group $group The created group. * @param WP_REST_Response $response The response data. * @param WP_REST_Request $request The request sent to the API. * * @since 0.1.0 */ do_action( 'bp_rest_groups_create_item', $group, $response, $request ); return $response; } /** * Checks if a given request has access to create a group. * * @param WP_REST_Request $request Full details about the request. * * @return bool|WP_Error * @since 0.1.0 */ public function create_item_permissions_check( $request ) { $retval = true; if ( ! ( is_user_logged_in() && bp_user_can_create_groups() ) ) { $retval = new WP_Error( 'bp_rest_authorization_required', __( 'Sorry, you are not allowed to create groups.', 'buddyboss' ), array( 'status' => rest_authorization_required_code(), ) ); } /** * Filter the groups `create_item` permissions check. * * @param bool|WP_Error $retval Returned value. * @param WP_REST_Request $request The request sent to the API. * * @since 0.1.0 */ return apply_filters( 'bp_rest_groups_create_item_permissions_check', $retval, $request ); } /** * Update a group. * * @since 0.1.0 * * @param WP_REST_Request $request Full details about the request. * * @return WP_REST_Response | WP_Error * @api {PATCH} /wp-json/buddyboss/v1/groups/:id Update Group * @apiName UpdateBBGroup * @apiGroup Groups * @apiDescription Update a group * @apiVersion 1.0.0 * @apiPermission LoggedInUser * @apiParam {Number} id A unique numeric ID for the Group. * @apiParam {Number} [creator_id] The ID of the user who created the Group. * @apiParam {String} [name] The name of the Group. * @apiParam {String} [description] The description of the Group. * @apiParam {String=public,private,hidden} [status] The status of the Group. * @apiParam {Boolean} [enable_forum] Whether the Group has a forum enabled or not. * @apiParam {Number} [parent_id] ID of the parent Group. * @apiParam {Array} [types] Set type(s) for a group. * @apiParam {Array} [append_types] Append type(s) for a group. * @apiParam {Array} [remove_types] Remove type(s) for a group. */ public function update_item( $request ) { // Setting context. $request->set_param( 'context', 'edit' ); $group_id = groups_create_group( $this->prepare_item_for_database( $request ) ); if ( ! is_numeric( $group_id ) ) { return new WP_Error( 'bp_rest_user_cannot_update_group', __( 'Cannot update existing group.', 'buddyboss' ), array( 'status' => 500, ) ); } $group = $this->get_group_object( $group_id ); $fields_update = $this->update_additional_fields_for_object( $group, $request ); if ( is_wp_error( $fields_update ) ) { return $fields_update; } $retval = $this->prepare_response_for_collection( $this->prepare_item_for_response( $group, $request ) ); $response = rest_ensure_response( $retval ); /** * Fires after a group is updated via the REST API. * * @param BP_Groups_Group $group The updated group. * @param WP_REST_Response $response The response data. * @param WP_REST_Request $request The request sent to the API. * * @since 0.1.0 */ do_action( 'bp_rest_groups_update_item', $group, $response, $request ); return $response; } /** * Check if a given request has access to update a group. * * @param WP_REST_Request $request Full details about the request. * * @return bool|WP_Error * @since 0.1.0 */ public function update_item_permissions_check( $request ) { $retval = true; if ( ! is_user_logged_in() ) { $retval = new WP_Error( 'bp_rest_authorization_required', __( 'Sorry, you need to be logged in to update this group.', 'buddyboss' ), array( 'status' => rest_authorization_required_code(), ) ); } $group = $this->get_group_object( $request ); if ( true === $retval && empty( $group->id ) ) { $retval = new WP_Error( 'bp_rest_group_invalid_id', __( 'Invalid group ID.', 'buddyboss' ), array( 'status' => 404, ) ); } // If group author does not match logged_in user, block update. if ( true === $retval && ! $this->can_user_delete_or_update( $group ) ) { $retval = new WP_Error( 'bp_rest_authorization_required', __( 'Sorry, you are not allowed to update this group.', 'buddyboss' ), array( 'status' => rest_authorization_required_code(), ) ); } /** * Filter the groups `update_item` permissions check. * * @param bool|WP_Error $retval Returned value. * @param WP_REST_Request $request The request sent to the API. * * @since 0.1.0 */ return apply_filters( 'bp_rest_groups_update_item_permissions_check', $retval, $request ); } /** * Delete a group. * * @param WP_REST_Request $request Full details about the request. * * @return WP_REST_Response | WP_Error * @since 0.1.0 * * @api {DELETE} /wp-json/buddyboss/v1/groups/:id Delete Group * @apiName DeleteBBGroup * @apiGroup Groups * @apiDescription Delete a group. * @apiVersion 1.0.0 * @apiPermission LoggedInUser * @apiParam {Number} id A unique numeric ID for the Group. * @apiParam {boolean} delete_group_forum Delete the Group forum if exist. */ public function delete_item( $request ) { // Setting context. $request->set_param( 'context', 'edit' ); // Get the group before it's deleted. $group = $this->get_group_object( $request ); $previous = $this->prepare_item_for_response( $group, $request ); // Delete group forum. if ( isset( $request['delete_group_forum'] ) && true === $request['delete_group_forum'] ) { $forum_ids = bbp_get_group_forum_ids( $group->id ); foreach ( $forum_ids as $forum_id ) { wp_delete_post( $forum_id, true ); } } if ( ! groups_delete_group( $group->id ) ) { return new WP_Error( 'bp_rest_group_cannot_delete', __( 'Could not delete the group.', 'buddyboss' ), array( 'status' => 500, ) ); } // Build the response. $response = new WP_REST_Response(); $response->set_data( array( 'deleted' => true, 'previous' => $previous->get_data(), ) ); /** * Fires after a group is deleted via the REST API. * * @param object $group The deleted group. * @param WP_REST_Response $response The response data. * @param WP_REST_Request $request The request sent to the API. * * @since 0.1.0 */ do_action( 'bp_rest_groups_delete_item', $group, $response, $request ); return $response; } /** * Check if a given request has access to delete a group. * * @param WP_REST_Request $request Full details about the request. * * @return bool|WP_Error * @since 0.1.0 */ public function delete_item_permissions_check( $request ) { $retval = true; if ( ! is_user_logged_in() ) { $retval = new WP_Error( 'bp_rest_authorization_required', __( 'Sorry, you need to be logged in to delete this group.', 'buddyboss' ), array( 'status' => rest_authorization_required_code(), ) ); } $group = $this->get_group_object( $request ); if ( true === $retval && empty( $group->id ) ) { $retval = new WP_Error( 'bp_rest_group_invalid_id', __( 'Invalid group ID.', 'buddyboss' ), array( 'status' => 404, ) ); } if ( true === $retval && ! $this->can_user_delete_or_update( $group ) ) { $retval = new WP_Error( 'bp_rest_authorization_required', __( 'Sorry, you are not allowed to delete this group.', 'buddyboss' ), array( 'status' => rest_authorization_required_code(), ) ); } /** * Filter the groups `delete_item` permissions check. * * @param bool|WP_Error $retval Returned value. * @param WP_REST_Request $request The request sent to the API. * * @since 0.1.0 */ return apply_filters( 'bp_rest_groups_delete_item_permissions_check', $retval, $request ); } /** * Prepares group data for return as an object. * * @param BP_Groups_Group $item Group object. * @param WP_REST_Request $request Full details about the request. * * @return WP_REST_Response * @since 0.1.0 */ public function prepare_item_for_response( $item, $request ) { $data = array( 'id' => $item->id, 'creator_id' => bp_get_group_creator_id( $item ), 'parent_id' => $item->parent_id, 'date_created' => bp_rest_prepare_date_response( $item->date_created ), 'description' => array( 'raw' => $item->description, 'rendered' => bp_get_group_description( $item ), ), 'enable_forum' => $this->bp_rest_group_is_forum_enabled( $item ), 'link' => bp_get_group_permalink( $item ), 'name' => bp_get_group_name( $item ), 'slug' => bp_get_group_slug( $item ), 'status' => bp_get_group_status( $item ), 'types' => bp_groups_get_group_type( $item->id, false ), 'subgroups_id' => $this->bp_rest_get_sub_groups( $item->id ), 'admins' => array(), 'mods' => array(), 'total_member_count' => null, 'last_activity' => null, 'is_member' => groups_is_user_member( get_current_user_id(), $item->id ) ? true : false, 'invite_id' => groups_is_user_invited( get_current_user_id(), $item->id ), 'request_id' => groups_is_user_pending( get_current_user_id(), $item->id ), 'is_admin' => ( ! empty( groups_is_user_admin( get_current_user_id(), $item->id ) ) ? true : false ), 'is_mod' => ( ! empty( groups_is_user_mod( get_current_user_id(), $item->id ) ) ? true : false ), 'members_count' => groups_get_total_member_count( $item->id ), 'role' => '', 'plural_role' => '', 'can_join' => $this->bp_rest_user_can_join( $item ), ); // BuddyBoss Platform support. if ( function_exists( 'bp_get_user_group_role_title' ) && bp_loggedin_user_id() ) { $data['role'] = bp_get_user_group_role_title( bp_loggedin_user_id(), $item->id ); // BuddyPress support. } elseif ( function_exists( 'bp_groups_get_group_roles' ) && bp_loggedin_user_id() ) { $group_role = bp_groups_get_group_roles(); if ( groups_is_user_admin( bp_loggedin_user_id(), $item->id ) ) { $data['role'] = $group_role['admin']->name; } elseif ( groups_is_user_mod( bp_loggedin_user_id(), $item->id ) ) { $data['role'] = $group_role['mod']->name; } elseif ( groups_is_user_member( bp_loggedin_user_id(), $item->id ) ) { $data['role'] = $group_role['member']->name; } } if ( function_exists( 'bp_get_group_member_section_title' ) && bp_loggedin_user_id() ) { $data['plural_role'] = $this->bp_get_group_member_section_title( $item->id, bp_loggedin_user_id() ); if ( empty( $data['plural_role'] ) ) { $data['plural_role'] = $data['role']; } } else { $data['plural_role'] = $data['role']; } // Get item schema. $schema = $this->get_item_schema(); // Avatars. if ( ! empty( $schema['properties']['avatar_urls'] ) ) { $data['avatar_urls'] = array( 'thumb' => bp_core_fetch_avatar( array( 'html' => false, 'object' => 'group', 'item_id' => $item->id, 'type' => 'thumb', ) ), 'full' => bp_core_fetch_avatar( array( 'html' => false, 'object' => 'group', 'item_id' => $item->id, 'type' => 'full', ) ), ); } // Cover Image. if ( ! empty( $schema['properties']['cover_url'] ) && function_exists( 'bp_get_group_cover_url' ) ) { $data['cover_url'] = bp_get_group_cover_url( $item ); } if ( $this->bp_rest_group_is_forum_enabled( $item ) && function_exists( 'bbpress' ) ) { $data['forum'] = groups_get_groupmeta( $item->id, 'forum_id' ); if ( is_array( $data['forum'] ) && ! empty( $data['forum'][0] ) ) { $data['forum'] = $data['forum'][0]; } else { $data['forum'] = 0; } } else { $data['forum'] = 0; } $context = ! empty( $request['context'] ) ? $request['context'] : 'view'; // Get group type(s). if ( false === $data['types'] ) { $data['types'] = array(); } $context = ! empty( $request['context'] ) ? $request['context'] : 'view'; // If this is the 'edit' context, fill in more details--similar to "populate_extras". if ( 'edit' === $context ) { $data['total_member_count'] = groups_get_groupmeta( $item->id, 'total_member_count' ); $data['last_activity'] = bp_rest_prepare_date_response( groups_get_groupmeta( $item->id, 'last_activity' ) ); // Add admins and moderators to their respective arrays. $admin_mods = groups_get_group_members( array( 'group_id' => $item->id, 'group_role' => array( 'admin', 'mod', ), ) ); foreach ( (array) $admin_mods['members'] as $user ) { // Make sure to unset private data. $private_keys = array_intersect( array_keys( get_object_vars( $user ) ), array( 'user_pass', 'user_email', 'user_activation_key', ) ); foreach ( $private_keys as $private_key ) { unset( $user->{$private_key} ); } if ( ! empty( $user->is_admin ) ) { $data['admins'][] = $user; } else { $data['mods'][] = $user; } } } $data = $this->add_additional_fields_to_object( $data, $request ); $data = $this->filter_response_by_context( $data, $context ); $response = rest_ensure_response( $data ); $response->add_links( $this->prepare_links( $item ) ); /** * Filter a group value returned from the API. * * @param WP_REST_Response $response The response data. * @param WP_REST_Request $request Request used to generate the response. * @param BP_Groups_Group $item Group object. * * @since 0.1.0 */ return apply_filters( 'bp_rest_groups_prepare_value', $response, $request, $item ); } /** * Prepare a group for create or update. * * @param WP_REST_Request $request Request object. * * @return stdClass|WP_Error Object or WP_Error. * @since 0.1.0 */ protected function prepare_item_for_database( $request ) { $prepared_group = new stdClass(); $schema = $this->get_item_schema(); $group = $this->get_group_object( $request ); // Group ID. if ( ! empty( $schema['properties']['id'] ) && ! empty( $group->id ) ) { $prepared_group->group_id = $group->id; } // Group Creator ID. if ( ! empty( $schema['properties']['creator_id'] ) && isset( $request['creator_id'] ) ) { $prepared_group->creator_id = (int) $request['creator_id']; // Fallback on the existing creator id in case of an update. } elseif ( isset( $group->creator_id ) && $group->creator_id ) { $prepared_group->creator_id = (int) $group->creator_id; // Fallback on the current user otherwise. } else { $prepared_group->creator_id = bp_loggedin_user_id(); } // Group Slug. if ( ! empty( $schema['properties']['slug'] ) && isset( $request['slug'] ) ) { $prepared_group->slug = $request['slug']; } // Group Name. if ( ! empty( $schema['properties']['name'] ) && isset( $request['name'] ) ) { $prepared_group->name = $request['name']; } // Do additional checks for the Group's slug. if ( WP_REST_Server::CREATABLE === $request->get_method() || ( isset( $group->slug ) && isset( $prepared_group->slug ) && $group->slug !== $prepared_group->slug ) ) { // Fallback on the group name if the slug is not defined. if ( ! isset( $prepared_group->slug ) && ! isset( $group->slug ) ) { $prepared_group->slug = $prepared_group->name; } // Make sure it is unique and sanitize it. $prepared_group->slug = groups_check_slug( sanitize_title( esc_attr( $prepared_group->slug ) ) ); } // Group description. if ( ! empty( $schema['properties']['description'] ) && isset( $request['description'] ) ) { if ( is_string( $request['description'] ) ) { $prepared_group->description = $request['description']; } elseif ( isset( $request['description']['raw'] ) ) { $prepared_group->description = $request['description']['raw']; } } // Group status. if ( ! empty( $schema['properties']['status'] ) && isset( $request['status'] ) ) { $prepared_group->status = $request['status']; } // Group Forum Enabled. if ( ! empty( $schema['properties']['enable_forum'] ) && isset( $request['enable_forum'] ) ) { $prepared_group->enable_forum = (bool) $request['enable_forum']; } // Group Parent ID. if ( ! empty( $schema['properties']['parent_id'] ) && isset( $request['parent_id'] ) ) { $prepared_group->parent_id = $request['parent_id']; } // Update group type(s). if ( isset( $prepared_group->group_id ) && isset( $request['types'] ) ) { bp_groups_set_group_type( $prepared_group->group_id, $request['types'], false ); } // Remove group type(s). if ( isset( $prepared_group->group_id ) && isset( $request['remove_types'] ) ) { array_map( function( $type ) use ( $prepared_group ) { bp_groups_remove_group_type( $prepared_group->group_id, $type ); }, $request['remove_types'] ); } // Append group type(s). if ( isset( $prepared_group->group_id ) && isset( $request['append_types'] ) ) { bp_groups_set_group_type( $prepared_group->group_id, $request['append_types'], true ); } /** * Filters a group before it is inserted or updated via the REST API. * * @param stdClass $prepared_group An object prepared for inserting or updating the database. * @param WP_REST_Request $request Request object. * * @since 0.1.0 */ return apply_filters( 'bp_rest_groups_pre_insert_value', $prepared_group, $request ); } /** * Prepare links for the request. * * @param BP_Groups_Group $group Group object. * * @return array * @since 0.1.0 */ protected function prepare_links( $group ) { $base = sprintf( '/%s/%s/', $this->namespace, $this->rest_base ); // Entity meta. $links = array( 'self' => array( 'href' => rest_url( $base . $group->id ), ), 'collection' => array( 'href' => rest_url( $base ), ), 'user' => array( 'href' => rest_url( bp_rest_get_user_url( $group->creator_id ) ), 'embeddable' => true, ), ); /** * Filter links prepared for the REST response. * * @param array $links The prepared links of the REST response. * @param BP_Groups_Group $group Group object. * * @since 0.1.0 */ return apply_filters( 'bp_rest_groups_prepare_links', $links, $group ); } /** * See if user can delete or update a group. * * @param BP_Groups_Group $group Group item. * * @return bool * @since 0.1.0 */ public function can_user_delete_or_update( $group ) { return ( bp_current_user_can( 'bp_moderate' ) || bp_loggedin_user_id() === $group->creator_id ); } /** * Can a user see a group? * * @since 0.1.0 * * @param BP_Groups_Group $group Group object. * @return bool */ protected function can_see( $group ) { // If it is not a hidden group, user can see it. if ( 'hidden' !== $group->status ) { return true; } // Check for moderators or if user is a member of the group. return ( bp_current_user_can( 'bp_moderate' ) || groups_is_user_member( bp_loggedin_user_id(), $group->id ) ); } /** * Can this user see hidden groups? * * @param WP_REST_Request $request Full details about the request. * * @return bool * @since 0.1.0 */ protected function can_see_hidden_groups( $request ) { if ( $request['show_hidden'] ) { if ( bp_current_user_can( 'bp_moderate' ) ) { return true; } if ( is_user_logged_in() && isset( $request['user_id'] ) && absint( $request['user_id'] ) === bp_loggedin_user_id() ) { return true; } return false; } return true; } /** * Get group object. * * @param WP_REST_Request $request Full details about the request. * * @return bool|BP_Groups_Group * @since 0.1.0 */ public function get_group_object( $request ) { if ( ! empty( $request['group_id'] ) ) { $group_id = (int) $request['group_id']; } elseif ( is_numeric( $request ) ) { $group_id = $request; } else { $group_id = (int) $request['id']; } $group = groups_get_group( $group_id ); if ( empty( $group ) || empty( $group->id ) ) { return false; } return $group; } /** * Edit some arguments for the endpoint's CREATABLE and EDITABLE methods. * * @param string $method Optional. HTTP method of the request. * * @return array Endpoint arguments. * @since 0.1.0 */ public function get_endpoint_args_for_item_schema( $method = WP_REST_Server::CREATABLE ) { $args = WP_REST_Controller::get_endpoint_args_for_item_schema( $method ); $key = 'get_item'; if ( WP_REST_Server::CREATABLE === $method || WP_REST_Server::EDITABLE === $method ) { $key = 'create_item'; $args['description']['type'] = 'string'; // Add group types. $args['types'] = array( 'description' => __( 'Set type(s) for a group.', 'buddyboss' ), 'type' => 'array', 'enum' => bp_groups_get_group_types(), 'sanitize_callback' => 'bp_rest_sanitize_group_types', 'validate_callback' => 'bp_rest_validate_group_types', 'items' => array( 'type' => 'string', ), ); if ( WP_REST_Server::EDITABLE === $method ) { $key = 'update_item'; unset( $args['slug'] ); // Append group types. $args['append_types'] = array( 'description' => __( 'Append type(s) for a group.', 'buddyboss' ), 'type' => 'array', 'enum' => bp_groups_get_group_types(), 'sanitize_callback' => 'bp_rest_sanitize_group_types', 'validate_callback' => 'bp_rest_validate_group_types', 'items' => array( 'type' => 'string', ), ); // Remove group types. $args['remove_types'] = array( 'description' => __( 'Remove type(s) for a group.', 'buddyboss' ), 'type' => 'array', 'enum' => bp_groups_get_group_types(), 'sanitize_callback' => 'bp_rest_sanitize_group_types', 'validate_callback' => 'bp_rest_validate_group_types', 'items' => array( 'type' => 'string', ), ); } } elseif ( WP_REST_Server::DELETABLE === $method ) { $key = 'delete_item'; $args = array( 'id' => array( 'description' => __( 'A unique numeric ID for the Group.', 'buddyboss' ), 'type' => 'integer', 'required' => true, ), ); if ( bp_is_active( 'forums' ) ) { $args['delete_group_forum'] = array( 'description' => __( 'Delete the Group forum if exist.', 'buddyboss' ), 'type' => 'boolean', 'default' => false, 'sanitize_callback' => 'rest_sanitize_boolean', 'validate_callback' => 'rest_validate_request_arg', ); } } /** * Filters the method query arguments. * * @param array $args Query arguments. * @param string $method HTTP method of the request. * * @since 0.1.0 */ return apply_filters( "bp_rest_groups_{$key}_query_arguments", $args, $method ); } /** * Get the group schema, conforming to JSON Schema. * * @return array * @since 0.1.0 */ public function get_item_schema() { $schema = array( '$schema' => 'http://json-schema.org/draft-04/schema#', 'title' => 'bp_groups', 'type' => 'object', 'properties' => array( 'id' => array( 'context' => array( 'embed', 'view', 'edit' ), 'description' => __( 'A unique numeric ID for the Group.', 'buddyboss' ), 'readonly' => true, 'type' => 'integer', ), 'creator_id' => array( 'context' => array( 'embed', 'view', 'edit' ), 'description' => __( 'The ID of the user who created the Group.', 'buddyboss' ), 'type' => 'integer', 'default' => bp_loggedin_user_id(), ), 'name' => array( 'context' => array( 'embed', 'view', 'edit' ), 'description' => __( 'The name of the Group.', 'buddyboss' ), 'type' => 'string', 'required' => true, 'arg_options' => array( 'sanitize_callback' => 'sanitize_text_field', ), ), 'slug' => array( 'context' => array( 'embed', 'view', 'edit' ), 'description' => __( 'The URL-friendly slug for the Group.', 'buddyboss' ), 'type' => 'string', 'arg_options' => array( 'sanitize_callback' => null, // Note: sanitization implemented in self::prepare_item_for_database(). ), ), 'link' => array( 'context' => array( 'embed', 'view', 'edit' ), 'description' => __( 'The permalink to the Group on the site.', 'buddyboss' ), 'type' => 'string', 'format' => 'uri', 'readonly' => true, ), 'description' => array( 'context' => array( 'embed', 'view', 'edit' ), 'description' => __( 'The description of the Group.', 'buddyboss' ), 'type' => 'object', 'required' => true, 'arg_options' => array( 'sanitize_callback' => null, // Note: sanitization implemented in self::prepare_item_for_database(). 'validate_callback' => null, // Note: validation implemented in self::prepare_item_for_database(). ), 'properties' => array( 'raw' => array( 'description' => __( 'Content for the description of the Group, as it exists in the database.', 'buddyboss' ), 'type' => 'string', 'context' => array( 'embed', 'view', 'edit' ), ), 'rendered' => array( 'description' => __( 'HTML content for the description of the Group, transformed for display.', 'buddyboss' ), 'type' => 'string', 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), ), ), 'status' => array( 'context' => array( 'embed', 'view', 'edit' ), 'description' => __( 'The status of the Group.', 'buddyboss' ), 'type' => 'string', 'enum' => buddypress()->groups->valid_status, 'default' => 'public', 'arg_options' => array( 'sanitize_callback' => 'sanitize_key', ), ), 'enable_forum' => array( 'context' => array( 'embed', 'view', 'edit' ), 'description' => __( 'Whether the Group has a forum enabled or not.', 'buddyboss' ), 'type' => 'boolean', ), 'parent_id' => array( 'context' => array( 'embed', 'view', 'edit' ), 'description' => __( 'ID of the parent Group.', 'buddyboss' ), 'type' => 'integer', ), 'date_created' => array( 'context' => array( 'embed', 'view', 'edit' ), 'description' => __( "The date the Group was created, in the site's timezone.", 'buddyboss' ), 'readonly' => true, 'type' => 'string', 'format' => 'date-time', ), 'types' => array( 'context' => array( 'embed', 'view', 'edit' ), 'description' => __( 'The type(s) of the Group.', 'buddyboss' ), 'readonly' => true, 'enum' => bp_groups_get_group_types(), 'type' => 'array', 'items' => array( 'type' => 'string', ), ), 'subgroups_id' => array( 'context' => array( 'embed', 'view', 'edit' ), 'description' => __( 'Sub Groups id if having a sub groups.', 'buddyboss' ), 'readonly' => true, 'type' => 'array', 'items' => array( 'type' => 'integer', ), ), 'admins' => array( 'context' => array( 'edit' ), 'description' => __( 'Group administrators.', 'buddyboss' ), 'readonly' => true, 'type' => 'array', 'items' => array( 'type' => 'object', ), ), 'mods' => array( 'context' => array( 'edit' ), 'description' => __( 'Group moderators.', 'buddyboss' ), 'readonly' => true, 'type' => 'array', 'items' => array( 'type' => 'object', ), ), 'total_member_count' => array( 'context' => array( 'edit' ), 'description' => __( 'Count of all Group members.', 'buddyboss' ), 'readonly' => true, 'type' => 'integer', ), 'last_activity' => array( 'context' => array( 'edit' ), 'description' => __( "The date the Group was last active, in the site's timezone.", 'buddyboss' ), 'type' => 'string', 'readonly' => true, 'format' => 'date-time', ), // Adding additional schema. 'is_member' => array( 'context' => array( 'embed', 'view', 'edit' ), 'description' => __( 'The current user is member of a group or not.', 'buddyboss' ), 'type' => 'boolean', 'readonly' => true, ), 'invite_id' => array( 'context' => array( 'embed', 'view', 'edit' ), 'description' => __( 'Return\'s invite ID if current user is invited for a group or not.', 'buddyboss' ), 'type' => 'integer', 'readonly' => true, ), 'request_id' => array( 'context' => array( 'embed', 'view', 'edit' ), 'description' => __( 'Return\'s request ID if invitation is pending for a group or not.', 'buddyboss' ), 'type' => 'integer', 'readonly' => true, ), 'is_admin' => array( 'context' => array( 'embed', 'view', 'edit' ), 'description' => __( 'The current user is admin of a group or not.', 'buddyboss' ), 'type' => 'boolean', 'readonly' => true, ), 'is_mod' => array( 'context' => array( 'embed', 'view', 'edit' ), 'description' => __( 'The current user is moderator of a group or not.', 'buddyboss' ), 'type' => 'boolean', 'readonly' => true, ), 'members_count' => array( 'context' => array( 'embed', 'view', 'edit' ), 'description' => __( 'Members count of the group.', 'buddyboss' ), 'type' => 'integer', 'readonly' => true, ), 'role' => array( 'context' => array( 'embed', 'view', 'edit' ), 'description' => __( 'Current member\'s role label in the group.', 'buddyboss' ), 'type' => 'string', 'readonly' => true, ), 'plural_role' => array( 'context' => array( 'embed', 'view', 'edit' ), 'description' => __( 'Current member\'s role label in the plural form in the group', 'buddyboss' ), 'type' => 'string', 'readonly' => true, ), 'can_join' => array( 'context' => array( 'view', 'edit' ), 'description' => __( 'Check current user can join or request access.', 'buddyboss' ), 'type' => 'boolean', 'readonly' => true, ), 'forum' => array( 'context' => array( 'embed', 'view', 'edit' ), 'description' => __( 'Forum id of the group.', 'buddyboss' ), 'type' => 'integer', 'readonly' => true, ), ), ); // Avatars. if ( ! bp_disable_group_avatar_uploads() ) { $avatar_properties = array(); $avatar_properties['full'] = array( /* translators: 1: Full avatar width in pixels. 2: Full avatar height in pixels */ 'description' => sprintf( __( 'Avatar URL with full image size (%1$d x %2$d pixels).', 'buddyboss' ), number_format_i18n( bp_core_avatar_full_width() ), number_format_i18n( bp_core_avatar_full_height() ) ), 'type' => 'string', 'format' => 'uri', 'context' => array( 'embed', 'view', 'edit' ), ); $avatar_properties['thumb'] = array( /* translators: 1: Thumb avatar width in pixels. 2: Thumb avatar height in pixels */ 'description' => sprintf( __( 'Avatar URL with thumb image size (%1$d x %2$d pixels).', 'buddyboss' ), number_format_i18n( bp_core_avatar_thumb_width() ), number_format_i18n( bp_core_avatar_thumb_height() ) ), 'type' => 'string', 'format' => 'uri', 'context' => array( 'embed', 'view', 'edit' ), ); $schema['properties']['avatar_urls'] = array( 'description' => __( 'Avatar URLs for the group.', 'buddyboss' ), 'type' => 'object', 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, 'properties' => $avatar_properties, ); } if ( ! bp_disable_group_cover_image_uploads() ) { $schema['properties']['cover_url'] = array( 'description' => __( 'Cover Image URLs for the group.', 'buddyboss' ), 'type' => 'string', 'format' => 'uri', 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ); } /** * Filters the group schema. * * @param array $schema The endpoint schema. */ return apply_filters( 'bp_rest_group_schema', $this->add_additional_fields_schema( $schema ) ); } /** * Get the query params for collections of groups. * * @return array * @since 0.1.0 */ public function get_collection_params() { $params = parent::get_collection_params(); $params['context']['default'] = 'view'; $params['type'] = array( 'description' => __( 'Shorthand for certain orderby/order combinations.', 'buddyboss' ), 'default' => 'active', 'type' => 'string', 'enum' => array( 'active', 'newest', 'alphabetical', 'random', 'popular' ), 'sanitize_callback' => 'sanitize_text_field', 'validate_callback' => 'rest_validate_request_arg', ); $params['order'] = array( 'description' => __( 'Order sort attribute ascending or descending.', 'buddyboss' ), 'default' => 'desc', 'type' => 'string', 'enum' => array( 'asc', 'desc' ), 'sanitize_callback' => 'sanitize_key', 'validate_callback' => 'rest_validate_request_arg', ); $params['orderby'] = array( 'description' => __( 'Order Groups by which attribute.', 'buddyboss' ), 'default' => 'date_created', 'type' => 'string', 'enum' => array( 'date_created', 'last_activity', 'total_member_count', 'name', 'random' ), 'sanitize_callback' => 'sanitize_key', 'validate_callback' => 'rest_validate_request_arg', ); $params['status'] = array( 'description' => __( 'Group statuses to limit results to.', 'buddyboss' ), 'default' => array(), 'type' => 'array', 'items' => array( 'enum' => buddypress()->groups->valid_status, 'type' => 'string', ), 'sanitize_callback' => 'bp_rest_sanitize_string_list', 'validate_callback' => 'rest_validate_request_arg', ); $params['user_id'] = array( 'description' => __( 'Pass a user_id to limit to only Groups that this user is a member of.', 'buddyboss' ), 'default' => 0, 'type' => 'integer', 'sanitize_callback' => 'absint', 'validate_callback' => 'rest_validate_request_arg', ); $params['parent_id'] = array( 'description' => __( 'Get Groups that are children of the specified Group(s) IDs.', 'buddyboss' ), 'default' => array(), 'type' => 'array', 'items' => array( 'type' => 'integer' ), 'sanitize_callback' => 'wp_parse_id_list', 'validate_callback' => 'rest_validate_request_arg', ); // @todo Confirm what's the proper sanitization here. $params['meta'] = array( 'description' => __( 'Get Groups based on their meta data information.', 'buddyboss' ), 'default' => array(), 'type' => 'array', 'items' => array( 'type' => 'string' ), 'validate_callback' => 'rest_validate_request_arg', ); $params['include'] = array( 'description' => __( 'Ensure result set includes Groups with specific IDs.', 'buddyboss' ), 'default' => array(), 'type' => 'array', 'items' => array( 'type' => 'integer' ), 'sanitize_callback' => 'wp_parse_id_list', 'validate_callback' => 'rest_validate_request_arg', ); $params['exclude'] = array( 'description' => __( 'Ensure result set excludes Groups with specific IDs', 'buddyboss' ), 'default' => array(), 'type' => 'array', 'items' => array( 'type' => 'integer' ), 'sanitize_callback' => 'wp_parse_id_list', 'validate_callback' => 'rest_validate_request_arg', ); $params['group_type'] = array( 'description' => __( 'Limit results set to a certain Group type.', 'buddyboss' ), 'default' => '', 'type' => 'string', 'enum' => bp_groups_get_group_types(), 'sanitize_callback' => 'bp_rest_sanitize_group_types', 'validate_callback' => 'bp_rest_validate_group_types', ); $params['enable_forum'] = array( 'description' => __( 'Whether the Group has a forum enabled or not.', 'buddyboss' ), 'default' => false, 'type' => 'boolean', 'sanitize_callback' => 'rest_sanitize_boolean', 'validate_callback' => 'rest_validate_request_arg', ); $params['show_hidden'] = array( 'description' => __( 'Whether results should include hidden Groups.', 'buddyboss' ), 'default' => false, 'type' => 'boolean', 'sanitize_callback' => 'rest_sanitize_boolean', 'validate_callback' => 'rest_validate_request_arg', ); $params['scope'] = array( 'description' => __( 'Limit result set to items with a specific scope.', 'buddyboss' ), 'type' => 'string', 'default' => 'all', 'enum' => array( 'all', 'personal' ), 'sanitize_callback' => 'sanitize_text_field', 'validate_callback' => 'rest_validate_request_arg', ); /** * Filters the collection query params. * * @param array $params Query params. */ return apply_filters( 'bp_rest_groups_collection_params', $params ); } /** * Check the forum is enable or not with platform. * * @param BP_Groups_Group $group Group object. * * @return bool */ public function bp_rest_group_is_forum_enabled( $group ) { if ( function_exists( 'bbp_is_group_forums_active' ) ) { return bbp_is_group_forums_active() && bp_group_is_forum_enabled( $group ); } else { return bp_group_is_forum_enabled( $group ); } return false; } /** * Check the group join with members type. * * @param BP_Groups_Group $item Group object. * * @return bool */ protected function bp_rest_user_can_join( $item ) { $user_id = get_current_user_id(); if ( empty( $user_id ) ) { return false; } if ( 'public' === bp_get_group_status( $item ) ) { return true; } // Check for the group type > profile type joining. if ( function_exists( 'bp_member_type_enable_disable' ) && true === bp_member_type_enable_disable() && function_exists( 'bp_disable_group_type_creation' ) && true === bp_disable_group_type_creation() ) { $group_type = bp_groups_get_group_type( $item->id ); $group_type_id = bp_group_get_group_type_id( $group_type ); $get_selected_member_type_join = get_post_meta( $group_type_id, '_bp_group_type_enabled_member_type_join', true ); $get_requesting_user_member_type = bp_get_member_type( $user_id ); if ( is_array( $get_selected_member_type_join ) && in_array( $get_requesting_user_member_type, $get_selected_member_type_join, true ) ) { return true; } } return false; } /** * Get sub groups id. * * @param integer $parent_group_id Group ID. * * @return array */ public function bp_rest_get_sub_groups( $parent_group_id ) { if ( empty( $parent_group_id ) ) { return array(); } $user_id = bp_loggedin_user_id(); $filter = ( false !== $user_id && ! bp_user_can( $user_id, 'bp_moderate' ) ); if ( function_exists( 'bp_include_group_by_context ' ) ) { $sub_groups = groups_get_groups( array( 'parent_id' => $parent_group_id, 'fields' => 'ids', 'show_hidden' => true, 'per_page' => false, 'page' => false, ) ); // Reset parents array to rebuild for next round. $groups = array(); foreach ( $sub_groups['groups'] as $group ) { if ( $filter ) { if ( bp_include_group_by_context( $group, $user_id, 'normal' ) ) { $groups[] = $group->id; } } else { $groups[] = $group->id; } } return $groups; // buddypress support. } else { $sub_groups = groups_get_groups( array( 'parent_id' => $parent_group_id, 'fields' => 'ids', 'show_hidden' => false, 'per_page' => false, 'page' => false, ) ); if ( ! empty( $sub_groups ) && isset( $sub_groups['groups'] ) && ! empty( $sub_groups['groups'] ) ) { return $sub_groups['groups']; } } return array(); } /** * Return the group member section header while in the groups members loop. * * @param integer $group_id Group ID. * @param integer $user_id User ID. * * @return string */ public function bp_get_group_member_section_title( $group_id, $user_id ) { if ( empty( $group_id ) || empty( $user_id ) ) { return; } $user_group_role_title = bp_get_user_group_role_title( $user_id, $group_id ); $group_admin = groups_get_group_admins( $group_id ); $group_mode = groups_get_group_mods( $group_id ); $group_member = groups_get_group_members( array( 'group_id' => $group_id ) ); if ( groups_is_user_admin( $user_id, $group_id ) ) { if ( isset( $group_admin ) && count( $group_admin ) > 1 ) { return get_group_role_label( $group_id, 'organizer_plural_label_name' ); } else { return get_group_role_label( $group_id, 'organizer_singular_label_name' ); } } elseif ( groups_is_user_mod( $user_id, $group_id ) ) { if ( isset( $group_mode ) && count( $group_mode ) > 1 ) { return get_group_role_label( $group_id, 'moderator_plural_label_name' ); } else { return get_group_role_label( $group_id, 'moderator_singular_label_name' ); } } elseif ( groups_is_user_member( $user_id, $group_id ) ) { $member_count = (int) ( isset( $group_member['count'] ) ? $group_member['count'] : 0 ); if ( $member_count > 1 ) { return get_group_role_label( $group_id, 'member_plural_label_name' ); } else { return get_group_role_label( $group_id, 'member_singular_label_name' ); } } return $user_group_role_title; } }
Changelog
Version | Description |
---|---|
0.1.0 | Introduced. |
Methods
- __construct — Constructor.
- bp_get_group_member_section_title — Return the group member section header while in the groups members loop.
- bp_rest_get_sub_groups — Get sub groups id.
- bp_rest_group_is_forum_enabled — Check the forum is enable or not with platform.
- bp_rest_user_can_join — Check the group join with members type.
- bp_rest_user_can_post — Check the user can post activity into group or not based on settings.
- can_see — Can a user see a group?
- can_see_hidden_groups — Can this user see hidden groups?
- can_user_delete_or_update — See if user can delete or update a group.
- create_item — Create a group.
- create_item_permissions_check — Checks if a given request has access to create a group.
- delete_item — Delete a group.
- delete_item_permissions_check — Check if a given request has access to delete a group.
- get_collection_params — Get the query params for collections of groups.
- get_endpoint_args_for_item_schema — Edit some arguments for the endpoint's CREATABLE and EDITABLE methods.
- get_group_object — Get group object.
- get_item — Retrieve a group.
- get_item_permissions_check — Check if a given request has access to get information about a specific group.
- get_item_schema — Get the group schema, conforming to JSON Schema.
- get_items — Retrieve groups.
- get_items_permissions_check — Check if a given request has access to group items.
- prepare_item_for_database — Prepare a group for create or update.
- prepare_item_for_response — Prepares group data for return as an object.
- prepare_links — Prepare links for the request.
- register_routes — Register the component routes.
- update_item — Update a group.
- update_item_permissions_check — Check if a given request has access to update a group.
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.