/sites/%d/stats/referrers/spam/delete?%s', Jetpack_Options::get_option( 'id' ), $this->filter_and_build_query_string( $req->get_query_params() ) ), 'v1.1', array( 'timeout' => 5, 'method' => 'POST', ) ); } /** * Toggle modules on dashboard. * * @param WP_REST_Request $req The request object. * @return array */ public function update_dashboard_modules( $req ) { // Clear dashboard modules cache. delete_transient( static::JETPACK_STATS_DASHBOARD_MODULES_CACHE_KEY ); return WPCOM_Client::request_as_blog( sprintf( '/sites/%d/jetpack-stats-dashboard/modules?%s', Jetpack_Options::get_option( 'id' ), $this->filter_and_build_query_string( $req->get_query_params() ) ), 'v2', array( 'timeout' => 5, 'method' => 'POST', 'headers' => array( 'Content-Type' => 'application/json' ), ), $req->get_body(), 'wpcom' ); } /** * Get modules on dashboard. * * @param WP_REST_Request $req The request object. * @return array */ public function get_dashboard_modules( $req ) { return WPCOM_Client::request_as_blog_cached( sprintf( '/sites/%d/jetpack-stats-dashboard/modules?%s', Jetpack_Options::get_option( 'id' ), $this->filter_and_build_query_string( $req->get_query_params() ) ), 'v2', array( 'timeout' => 5, ), null, 'wpcom', true, static::JETPACK_STATS_DASHBOARD_MODULES_CACHE_KEY ); } /** * Update module settings on dashboard. * * @param WP_REST_Request $req The request object. * @return array */ public function update_dashboard_module_settings( $req ) { // Clear dashboard modules cache. delete_transient( static::JETPACK_STATS_DASHBOARD_MODULE_SETTINGS_CACHE_KEY ); return WPCOM_Client::request_as_blog( sprintf( '/sites/%d/jetpack-stats-dashboard/module-settings?%s', Jetpack_Options::get_option( 'id' ), $this->filter_and_build_query_string( $req->get_query_params() ) ), 'v2', array( 'timeout' => 5, 'method' => 'POST', 'headers' => array( 'Content-Type' => 'application/json' ), ), $req->get_body(), 'wpcom' ); } /** * Get module settings on dashboard. * * @param WP_REST_Request $req The request object. * @return array */ public function get_dashboard_module_settings( $req ) { return WPCOM_Client::request_as_blog_cached( sprintf( '/sites/%d/jetpack-stats-dashboard/module-settings?%s', Jetpack_Options::get_option( 'id' ), $this->filter_and_build_query_string( $req->get_query_params() ) ), 'v2', array( 'timeout' => 5, ), null, 'wpcom', true, static::JETPACK_STATS_DASHBOARD_MODULE_SETTINGS_CACHE_KEY ); } /** * Return a WP_Error object with a forbidden error. */ protected function get_forbidden_error() { $error_msg = esc_html__( 'You are not allowed to perform this action.', 'jetpack-stats-admin' ); return new WP_Error( 'rest_forbidden', $error_msg, array( 'status' => rest_authorization_required_code() ) ); } /** * Filter and build query string from all the requested params. * * @param array $params The params to filter. * @param array $keys_to_unset The keys to unset from the params array. * @return string The filtered and built query string. */ protected function filter_and_build_query_string( $params, $keys_to_unset = array() ) { if ( isset( $params['rest_route'] ) ) { unset( $params['rest_route'] ); } if ( ! empty( $keys_to_unset ) && is_array( $keys_to_unset ) ) { foreach ( $keys_to_unset as $key ) { if ( isset( $params[ $key ] ) ) { unset( $params[ $key ] ); } } } return http_build_query( $params ); } }