/** * Sends a response, but also makes sure to attach headers that * are handy for debugging. * Specifically, we assume folks will want to know what exactly was the DB query that got run, * what exactly was the Models query that got run, what capabilities came into play, what fields were omitted from * the response, others? * * @param array|\WP_Error|\Exception $response * @return \WP_REST_Response */ public function send_response($response) { if ($response instanceof Rest_Exception) { $response = new \WP_Error($response->get_string_code(), $response->getMessage(), $response->get_data()); } if ($response instanceof \Exception) { $code = $response->getCode() ? $response->getCode() : 'error_occurred'; $response = new \WP_Error($code, $response->getMessage()); } if ($response instanceof \WP_Error) { $response = $this->_add_ee_errors_to_response($response); $rest_response = $this->_create_rest_response_from_wp_error($response); } else { $rest_response = new \WP_REST_Response($response, 200); } $headers = array(); if ($this->_debug_mode && is_array($this->_debug_info)) { foreach ($this->_debug_info as $debug_key => $debug_info) { if (is_array($debug_info)) { $debug_info = json_encode($debug_info); } $headers['X-EE4-Debug-' . ucwords($debug_key)] = $debug_info; } } $headers = array_merge($headers, $this->_get_response_headers(), $this->_get_headers_from_ee_notices()); $rest_response->set_headers($headers); return $rest_response; }