bp_nouveau_ajax_querystring( string $query_string, string $object )

This function looks scarier than it actually is. 🙂 Each object loop (activity/members/groups/blogs/forums) contains default parameters to show specific information based on the page we are currently looking at.

Description

The following function will take into account any cookies set in the JS and allow us to override the parameters sent. That way we can change the results returned without reloading the page.

By using cookies we can also make sure that user settings are retained across page loads.

Parameters

$query_string

(Required) Query string for the current request.

$object

(Required) Object for cookie.

Return

(string) Query string for the component loops

Source

File: bp-templates/bp-nouveau/includes/functions.php

32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
function bp_nouveau_ajax_querystring( $query_string, $object ) {
    if ( empty( $object ) ) {
        return '';
    }
 
    // Default query
    $post_query = array(
        'filter'       => '',
        'scope'        => 'all',
        'page'         => 1,
        'search_terms' => '',
        'extras'       => '',
    );
 
    if ( ! empty( $_POST ) ) {
 
        $post_query = wp_parse_args( $_POST, $post_query );
 
        // Make sure to transport the scope, filter etc.. in HeartBeat Requests
        if ( ! empty( $post_query['data']['bp_heartbeat'] ) ) {
            $bp_heartbeat = $post_query['data']['bp_heartbeat'];
 
            // Remove heartbeat specific vars
            $post_query = array_diff_key(
                wp_parse_args( $bp_heartbeat, $post_query ),
                array(
                    'data'      => false,
                    'interval'  => false,
                    '_nonce'    => false,
                    'action'    => false,
                    'screen_id' => false,
                    'has_focus' => false,
                )
            );
        }
    }
 
    // Init the query string
    $qs = array();
 
    // Activity feed filtering on action.
    if ( ! empty( $post_query['filter'] ) && '-1' !== $post_query['filter'] ) {
        if ( 'notifications' === $object ) {
            $qs[] = 'component_action=' . $post_query['filter'];
        } else {
            $qs[] = 'type=' . $post_query['filter'];
            $qs[] = 'action=' . $post_query['filter'];
        }
    }
 
    // Sort the notifications if needed
    if ( ! empty( $post_query['extras'] ) && 'notifications' === $object ) {
        $qs[] = 'sort_order=' . $post_query['extras'];
    }
 
    if ( 'personal' === $post_query['scope'] ) {
        $user_id = ( bp_displayed_user_id() ) ? bp_displayed_user_id() : bp_loggedin_user_id();
        $qs[]    = 'user_id=' . $user_id;
    }
 
    // Activity feed scope only on activity directory.
    if ( 'all' !== $post_query['scope'] && ! bp_displayed_user_id() && ! bp_is_single_item() ) {
        $qs[] = 'scope=' . $post_query['scope'];
    }
 
    // If page have been passed via the AJAX post request, use those.
    if ( '-1' != $post_query['page'] ) {
        $qs[] = 'page=' . absint( $post_query['page'] );
    }
 
    // Excludes activity just posted and avoids duplicate ids.
    if ( ! empty( $post_query['exclude_just_posted'] ) ) {
        $just_posted = wp_parse_id_list( $post_query['exclude_just_posted'] );
        $qs[]        = 'exclude=' . implode( ',', $just_posted );
    }
 
    // To get newest activities.
    if ( ! empty( $post_query['offset'] ) ) {
        $qs[] = 'offset=' . intval( $post_query['offset'] );
    }
 
    if ( isset( $_POST['member_type_id'] ) && '' !== $_POST['member_type_id'] && 'all' !== $_POST['member_type_id'] && 'undefined' !== $_POST['member_type_id'] ) {
        $member_type_id = $_POST['member_type_id'];
        $member_type_key= get_post_meta( $member_type_id, '_bp_member_type_key', true);
        $qs[] = 'member_type=' . $member_type_key;
    }
 
    if ( isset( $_POST['group_type'] ) && '' !== $_POST['group_type'] && 'all' !== $_POST['group_type'] && 'undefined' !== $_POST['group_type'] ) {
        $group_type = $_POST['group_type'];
        $qs[] = 'group_type=' . $group_type;
    }
 
    $object_search_text = bp_get_search_default_text( $object );
    if ( ! empty( $post_query['search_terms'] ) && $object_search_text != $post_query['search_terms'] && 'false' != $post_query['search_terms'] && 'undefined' != $post_query['search_terms'] ) {
        $qs[] = 'search_terms=' . urlencode( $_POST['search_terms'] );
    }
 
    // Specific to messages
    if ( 'messages' === $object ) {
        if ( ! empty( $post_query['box'] ) ) {
            $qs[] = 'box=' . $post_query['box'];
        }
    }
 
    // Single activity.
    if ( bp_is_single_activity() ) {
        $qs = array(
            'display_comments=threaded',
            'show_hidden=true',
            'include=' . bp_current_action(),
        );
    }
 
    // Now pass the querystring to override default values.
    $query_string = empty( $qs ) ? '' : join( '&', (array) $qs );
 
 
    // List the variables for the filter
    list( $filter, $scope, $page, $search_terms, $extras ) = array_values( $post_query );
 
    /**
     * Filters the AJAX query string for the component loops.
     *
     * @since BuddyPress 3.0.0
     *
     * @param string $query_string The query string we are working with.
     * @param string $object       The type of page we are on.
     * @param string $filter       The current object filter.
     * @param string $scope        The current object scope.
     * @param string $page         The current object page.
     * @param string $search_terms The current object search terms.
     * @param string $extras       The current object extras.
     */
    return apply_filters( 'bp_nouveau_ajax_querystring', $query_string, $object, $filter, $scope, $page, $search_terms, $extras );
}

Changelog

Changelog
Version Description
BuddyPress 3.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.