BP_REST_Activity_Details_Endpoint
Activity endpoints.
Description
Source
File: bp-activity/classes/class-bp-rest-activity-details-endpoint.php
class BP_REST_Activity_Details_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()->activity->id; } /** * Register the component routes. * * @since 0.1.0 */ public function register_routes() { register_rest_route( $this->namespace, '/' . $this->rest_base . '/details', array( array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_items' ), 'permission_callback' => array( $this, 'get_items_permissions_check' ), ), 'schema' => array( $this, 'get_item_schema' ), ) ); } /** * Retrieve activity details. * * @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/activity/details Activity details * @apiName GetBBActivitiesDetails * @apiGroup Activity * @apiDescription Retrieve activity details (includes nav, filters and post_in) * @apiVersion 1.0.0 */ public function get_items( $request ) { $retval = array(); $retval['nav'] = $this->get_activities_tabs(); $retval['filters'] = $this->get_activities_filters(); $retval['post_in'] = $this->get_activities_post_in(); if ( function_exists( 'bp_activity_get_visibility_levels' ) ) { $retval['privacy'] = bp_activity_get_visibility_levels(); } $response = rest_ensure_response( $retval ); /** * Fires after a list of activity details is fetched via the REST API. * * @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_activity_details_get_items', $response, $request ); return $response; } /** * Check if a given request has access to activity items. * * @param WP_REST_Request $request Full data about the request. * * @return bool|WP_Error * @since 0.1.0 */ public function get_items_permissions_check( $request ) { $retval = true; if ( ! bp_is_active( 'activity' ) ) { $retval = new WP_Error( 'bp_rest_component_required', __( 'Sorry, Activity component was not enabled.', 'buddyboss' ), array( 'status' => '404', ) ); } /** * Filter the activity details 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_activity_details_get_items_permissions_check', $retval, $request ); } /** * Get the plugin 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_activity_details', 'type' => 'object', 'properties' => array( 'nav' => array( 'context' => array( 'embed', 'view' ), 'description' => __( 'Activity directory tabs.', 'buddyboss' ), 'type' => 'object', 'readonly' => true, 'items' => array( 'type' => 'array', ), ), 'filters' => array( 'context' => array( 'embed', 'view' ), 'description' => __( 'Activity Filter options', 'buddyboss' ), 'type' => 'array', 'readonly' => true, ), 'post_in' => array( 'context' => array( 'embed', 'view' ), 'description' => __( 'Activity contains from.', 'buddyboss' ), 'type' => 'array', 'readonly' => true, ), ), ); if ( function_exists( 'bp_activity_get_visibility_levels' ) ) { $schema['properties']['privacy'] = array( 'context' => array( 'embed', 'view' ), 'description' => __( 'Activity Privacy.', 'buddyboss' ), 'type' => 'array', 'readonly' => true, ); } /** * Filters the activity details schema. * * @param string $schema The endpoint schema. */ return apply_filters( 'bp_rest_activity_details_schema', $this->add_additional_fields_schema( $schema ) ); } /** * Get list of activity tabs. * * @return array */ public function get_activities_tabs() { $nav_items = function_exists( 'bp_nouveau_get_activity_directory_nav_items' ) ? bp_nouveau_get_activity_directory_nav_items() : $this->bp_rest_legacy_get_activity_directory_nav_items(); $nav = array(); if ( ! empty( $nav_items ) ) { foreach ( $nav_items as $key => $item ) { $nav[ $key ]['title'] = $item['text']; $nav[ $key ]['position'] = $item['position']; } } return $nav; } /** * Get list of filters supported for activity component. * * @return array */ public function get_activities_filters() { // BuddyPress Docs @https://wordpress.org/plugins/buddypress-docs/ . if ( function_exists( 'bp_docs_load_activity_filter_options' ) ) { bp_docs_load_activity_filter_options(); } // BuddyPress legacy template support added. if ( function_exists( 'bp_nouveau_get_activity_filters' ) ) { $activity_filters = bp_nouveau_get_activity_filters(); } else { $activity_filters = $this->bp_rest_legacy_get_activity_filters(); } $filters = array( '-1' => __( '-- Everything --', 'buddyboss' ) ) + $activity_filters; return $filters; } /** * Get Activity Post in details. * * @return array */ public function get_activities_post_in() { $post_in = array(); $post_in[0] = __( 'My Profile', 'buddyboss' ); if ( bp_is_active( 'groups' ) ) { $args = array( 'user_id' => get_current_user_id(), 'type' => 'alphabetical', ); $groups = groups_get_groups( $args ); if ( ! empty( $groups ) && ! empty( $groups['groups'] ) ) { foreach ( $groups['groups'] as $group ) { $post_in[ $group->id ] = $group->name; } } } return $post_in; } /** * Legacy template activity directory navigation support added. * * @return mixed|void */ public function bp_rest_legacy_get_activity_directory_nav_items() { $nav_items = array(); $nav_items['all'] = array( 'text' => __( 'All Members', 'buddyboss' ), 'position' => 5, ); if ( is_user_logged_in() ) { if ( bp_is_active( 'friends' ) && bp_get_total_friend_count( bp_loggedin_user_id() ) ) { $nav_items['friends'] = array( 'text' => __( 'My Friends', 'buddyboss' ), 'position' => 15, ); } if ( bp_is_active( 'groups' ) && bp_get_total_group_count_for_user( bp_loggedin_user_id() ) ) { $nav_items['groups'] = array( 'text' => __( 'My Groups', 'buddyboss' ), 'position' => 25, ); } if ( bp_get_total_favorite_count_for_user( bp_loggedin_user_id() ) ) { $nav_items['favorites'] = array( 'text' => __( 'My Favorites', 'buddyboss' ), 'position' => 35, ); } if ( bp_activity_do_mentions() ) { if ( bp_get_total_mention_count_for_user( bp_loggedin_user_id() ) ) { $nav_items['mentions'] = array( 'text' => __( 'Mentions', 'buddyboss' ), 'position' => 45, ); } } } return apply_filters( 'bp_rest_legacy_get_activity_directory_nav_items', $nav_items ); } /** * Legacy template activity directory filter support added. * * @return mixed */ public function bp_rest_legacy_get_activity_filters() { $filters_data = bp_get_activity_show_filters(); $filters = array(); preg_match_all( '/<option value="(.*?)"\s*>(.*?)<\/option>/', $filters_data, $matches ); if ( ! empty( $matches[1] ) && ! empty( $matches[2] ) ) { foreach ( $matches[1] as $ik => $key_action ) { if ( ! empty( $matches[2][ $ik ] ) && ! isset( $filters[ $key_action ] ) ) { $filters[ $key_action ] = $matches[2][ $ik ]; } } } return apply_filters( 'bp_rest_legacy_get_activity_filters', $filters ); } }
Changelog
Version | Description |
---|---|
0.1.0 | Introduced. |
Methods
- __construct — Constructor.
- bp_rest_legacy_get_activity_directory_nav_items — Legacy template activity directory navigation support added.
- bp_rest_legacy_get_activity_filters — Legacy template activity directory filter support added.
- get_activities_filters — Get list of filters supported for activity component.
- get_activities_post_in — Get Activity Post in details.
- get_activities_tabs — Get list of activity tabs.
- get_item_schema — Get the plugin schema, conforming to JSON Schema.
- get_items — Retrieve activity details.
- get_items_permissions_check — Check if a given request has access to activity items.
- register_routes — Register the component routes.
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.