From 1825c30b26f36b27b509928e8eeb7b2709231d09 Mon Sep 17 00:00:00 2001 From: Jeff Stieler Date: Tue, 11 Jun 2019 14:10:38 -0600 Subject: [PATCH] Performance indicators - bail whenever an internal API request fails. --- ...orts-performance-indicators-controller.php | 25 +++++++++++++++---- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/plugins/woocommerce-admin/includes/api/class-wc-admin-rest-reports-performance-indicators-controller.php b/plugins/woocommerce-admin/includes/api/class-wc-admin-rest-reports-performance-indicators-controller.php index 1e4cf18a06b..82eba1841aa 100644 --- a/plugins/woocommerce-admin/includes/api/class-wc-admin-rest-reports-performance-indicators-controller.php +++ b/plugins/woocommerce-admin/includes/api/class-wc-admin-rest-reports-performance-indicators-controller.php @@ -117,19 +117,30 @@ class WC_Admin_REST_Reports_Performance_Indicators_Controller extends WC_REST_Re return true; } - $request = new WP_REST_Request( 'GET', '/wc/v4/reports' ); - $response = rest_do_request( $request ); - $endpoints = $response->get_data(); - $allowed_stats = array(); + $request = new WP_REST_Request( 'GET', '/wc/v4/reports' ); + $response = rest_do_request( $request ); + + if ( is_wp_error( $response ) ) { + return $response; + } + if ( 200 !== $response->get_status() ) { return new WP_Error( 'woocommerce_reports_performance_indicators_result_failed', __( 'Sorry, fetching performance indicators failed.', 'woocommerce-admin' ) ); } + $endpoints = $response->get_data(); + $allowed_stats = array(); + foreach ( $endpoints as $endpoint ) { if ( '/stats' === substr( $endpoint['slug'], -6 ) ) { $request = new WP_REST_Request( 'OPTIONS', $endpoint['path'] ); $response = rest_do_request( $request ); - $data = $response->get_data(); + + if ( is_wp_error( $response ) ) { + return $response; + } + + $data = $response->get_data(); $prefix = substr( $endpoint['slug'], 0, -6 ); @@ -283,6 +294,10 @@ class WC_Admin_REST_Reports_Performance_Indicators_Controller extends WC_REST_Re $response = rest_do_request( $request ); + if ( is_wp_error( $response ) ) { + return $response; + } + $data = $response->get_data(); $format = $this->formats[ $stat ]; $label = $this->labels[ $stat ];