PluginProbe
WPGet API – Connect to any external REST API / 1.9.7
WPGet API – Connect to any external REST API v1.9.7
1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.1.0 2.1.1 2.1.3 2.1.4 2.1.5 2.2.0 2.2.1 2.2.10 2.2.2 2.2.3 All 97 releases
wpgetapi / includes / class-api.php

class-api.php in WPGet API – Connect to any external REST API 1.9.7, at includes/class-api.php

802 lines 30.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 // Exit if accessed directly
4 if ( ! defined( 'ABSPATH' ) ) exit;
5
6 /**
7 * The main class
8 *
9 * @since 1.0.0
10 */
11 class WpGetApi_Api {
12
13 public $encryption = ''; // the encryption class
14
15 public $setup = ''; // store the setup data from the admin page
16 public $api = ''; // store the api's from the admin page
17
18 public $api_id = ''; // the api_id that we are wanting to get
19 public $endpoint_id = ''; // the endpoint_id that we are wanting to get
20 public $args = ''; // the args
21 public $keys = ''; // the keys we want to retrieve
22
23 public $base_url = ''; // base url of the API
24 public $method = 'GET'; // the endpoint method GET POST etc
25 public $cache_time = ''; // the time to cache
26 public $endpoint = ''; // the endpoint that we will get
27 public $query_parameters = ''; // the query paramaters appended to url
28 public $header_parameters = ''; // the header paramaters
29 public $body_parameters = ''; // the body paramaters
30 public $body_json_encode = ''; // body_json_encode body
31 public $body_url_encode = ''; // urlencode body
32 public $body_xml_format = ''; // xml format body
33 public $xml_root_node = 'root'; // root node for xml
34
35 public $response = ''; // the returned response
36
37 public $final_url = ''; // final URL
38 public $final_request_args = array(); // final request_args
39
40 public $results_format = 'json_string'; // results format
41
42 public $response_code = ''; // the response code from the call
43
44 public $timeout = 10; // the timeout
45 public $sslverify = 1; // the paramaters
46 public $debug = false;
47
48
49 /**
50 * Main constructor
51 *
52 * @since 1.0.0
53 *
54 */
55 public function __construct( $api_id = '', $endpoint_id = '', $args = array(), $keys = array() ) {
56
57 $this->setup = get_option( 'wpgetapi_setup' );
58 $this->api = get_option( 'wpgetapi_' . $api_id );
59
60 $this->encryption = new WpGetApi_Encryption();
61 $this->api_id = sanitize_text_field( $api_id );
62 $this->endpoint_id = sanitize_text_field( $endpoint_id );
63 $this->keys = $keys;
64 $this->args = $args;
65
66 add_filter( 'wpgetapi_raw_data', array( $this, 'maybe_add_debug_info' ), 99, 2 );
67
68 }
69
70
71 /**
72 * Init our api data
73 */
74 public function init() {
75
76 // if we are doing importer plugin,
77 // we need to intercept and modify most of our methods values
78 if( $this->api_id == 'wpgetapi_importer' ) {
79
80 $data = apply_filters( 'wpgetapi_api_importer_init', $this );
81
82 if( $data ) {
83
84 foreach ($data as $key => $value) {
85 $this->{$key} = $value;
86 }
87
88 $this->query_parameters = ! empty( $this->query_parameters ) ? $this->do_parameters( $this->query_parameters ) : array();
89 $this->header_parameters = ! empty( $this->header_parameters ) ? $this->do_parameters( $this->header_parameters ) : array();
90 $this->body_parameters = ! empty( $this->body_parameters ) ? $this->do_parameters( $this->body_parameters ) : array();
91 return;
92
93 }
94
95 }
96
97 // do some checks
98 if( empty( $this->setup ) || ! isset( $this->setup['apis'] ) || empty( $this->setup['apis'] ) )
99 return 'No API found.';
100
101 // do some checks
102 if( ! $this->api || ! isset( $this->api['endpoints'] ) || empty( $this->api['endpoints'] ))
103 return 'API not found.';
104
105 // loop through api's
106 // set base_url
107 foreach ( $this->setup['apis'] as $index => $api_item ) {
108 if( $this->api_id == $api_item['id'] ) {
109 $this->base_url = isset( $api_item['base_url'] ) && ! empty( $api_item['base_url'] ) ? esc_url_raw( $api_item['base_url'] ) : '';
110 }
111 }
112
113 // loop through endpoints
114 foreach ( $this->api['endpoints'] as $index => $endpoint ) {
115
116 if( $this->endpoint_id == $endpoint['id'] ) {
117
118 $this->method = isset( $endpoint['method'] ) && $endpoint['method'] != '' ? sanitize_text_field( $endpoint['method'] ) : 'GET';
119 $this->cache_time = isset( $endpoint['cache_time'] ) && ! empty( $endpoint['cache_time'] ) ? absint( $endpoint['cache_time'] ) : '';
120 $this->endpoint = isset( $endpoint['endpoint'] ) && ! empty( $endpoint['endpoint'] ) ? sanitize_text_field( $endpoint['endpoint'] ) : '';
121
122 $this->query_parameters = isset( $endpoint['query_parameters'] ) && ! empty( $endpoint['query_parameters'] ) ? $this->do_parameters( $endpoint['query_parameters'] ) : array();
123
124 $this->header_parameters = isset( $endpoint['header_parameters'] ) && ! empty( $endpoint['header_parameters'] ) ? $this->do_parameters( $endpoint['header_parameters'] ) : array();
125
126 $this->body_parameters = isset( $endpoint['body_parameters'] ) && ! empty( $endpoint['body_parameters'] ) ? $this->do_parameters( $endpoint['body_parameters'] ) : array();
127
128 // how to encode the body
129 $this->body_json_encode = isset( $endpoint['body_json_encode'] ) && $endpoint['body_json_encode'] == 'true' ? true : false;
130 $this->body_url_encode = isset( $endpoint['body_json_encode'] ) && $endpoint['body_json_encode'] == 'url' ? true : false;
131 $this->body_xml_format = isset( $endpoint['body_json_encode'] ) && $endpoint['body_json_encode'] == 'xml' ? true : false;
132
133 $this->xml_root_node = isset( $endpoint['xml_root'] ) && ! empty( $endpoint['xml_root'] ) ? $endpoint['xml_root'] : $this->xml_root_node;
134
135 $this->results_format = isset( $endpoint['results_format'] ) ? sanitize_text_field( $endpoint['results_format'] ) : $this->results_format;
136
137
138 if(
139 // set the format to php array data if html format is set
140 ( isset( $this->args['format'] ) && $this->args['format'] == 'html' && $this->results_format != 'xml_array' ) ||
141 // set the format to php array data if it is set in the args (coming from the importer)
142 ( isset( $this->args['results_format'] ) && $this->args['results_format'] == 'json_decoded' )
143 ) {
144 $this->results_format = 'json_decoded';
145 }
146
147 }
148
149 }
150
151 $this->timeout = isset( $this->api['timeout'] ) && ! empty( $this->api['timeout'] ) ? $this->api['timeout'] : $this->timeout;
152 $this->sslverify = isset( $this->api['sslverify'] ) ? absint( $this->api['sslverify'] ) : $this->sslverify;
153
154 }
155
156
157 /**
158 * The main function to output the data
159 *
160 * @param string $field Field to retrieve
161 */
162 public function endpoint_output() {
163
164 do_action( 'wpgetapi_before_do_the_call', $this );
165
166 return $this->do_the_call();
167
168 }
169
170
171 /**
172 * Send the request and return our data
173 */
174 public function do_the_call() {
175
176 $this->init();
177
178 // build the URL
179 $this->final_url = apply_filters( 'wpgetapi_final_url', $this->build_url(), $this );
180
181 // build the request args
182 $this->final_request_args = apply_filters( 'wpgetapi_final_request_args', $this->build_request_args(), $this );
183
184 /**
185 * Check if we should stop or not. Setting $on to true, will stop us calling the api.
186 * @param bool $on Whether on is set or not.
187 */
188
189 if ( apply_filters( 'wpgetapi_should_we_stop', false, $this ) ) {
190 return;
191 }
192
193 // POST request
194 if( $this->method == 'POST' )
195 $this->response = $this->POST_request();
196
197 // PUT request
198 if( $this->method == 'PUT' )
199 $this->response = $this->PUT_request();
200
201 // PATCH request
202 if( $this->method == 'PATCH' )
203 $this->response = $this->PATCH_request();
204
205 // GET request
206 if( $this->method == 'GET' )
207 $this->response = $this->GET_request();
208
209 // DELETE request
210 if( $this->method == 'DELETE' )
211 $this->response = $this->DELETE_request();
212
213 // wp error
214 if( is_wp_error( $this->response ) ) {
215 return apply_filters( 'wpgetapi_raw_error_data', json_encode( $this->response ), $this );
216 }
217
218 // get response_code
219 $this->response_code = wp_remote_retrieve_response_code( $this->response );
220
221 // action to intercept call depending on response_code
222 $this->response = apply_filters( 'wpgetapi_before_retrieve_body', $this->response, $this->response_code, $this );
223
224 // get body
225 // modified in version 1.6.1 to allow for OAuth 2.0 plugin returning body already
226 $data = isset( $this->response['body'] ) ? $this->response['body'] : $this->response;
227
228 // returning in JSON format
229 if( $this->results_format == 'json_string' || $this->results_format == 'json_decoded' )
230 $data = $this->return_data( $data );
231
232 if( $data === 'null' )
233 $data = 'Result is null. Check that all endpoint settings are correct.';
234
235 return apply_filters( 'wpgetapi_raw_data', $data, $this );
236
237 }
238
239
240 /**
241 * Build the request url with the ability to add args
242 */
243 public function build_url() {
244
245 // first make sure our endpoint starts with a slash
246 if ( substr( $this->endpoint, 0, 1 ) != '/' )
247 $this->endpoint = '/' . $this->endpoint;
248
249 $this->endpoint = apply_filters( 'wpgetapi_endpoint', $this->endpoint, $this );
250
251 $url = untrailingslashit( $this->base_url ) . $this->endpoint;
252
253 // if we have a URL pagination event from the import plugin
254 // we need to modify the URL here
255 if( isset( $this->args['paginate_url'] ) )
256 $url = $this->args['paginate_url'];
257
258 // filter our params - added for use in Oauth 2.0 plugin
259 $params = apply_filters( 'wpgetapi_query_parameters', $this->query_parameters, $this );
260
261 // add empty array - was getting errors if it was just null or false
262 $params = empty( $params ) ? array(''=>'') : $params;
263
264 $result = add_query_arg( $params, $url );
265
266 return $result;
267
268 }
269
270
271 /**
272 * build the header with the ability to add args
273 */
274 public function build_request_args() {
275
276 // add our header parameters to the headers
277 $headers = apply_filters( 'wpgetapi_header_parameters', array(
278 'headers' => $this->header_parameters,
279 ), $this );
280
281
282 // if doing POST request, include body paramters
283 //if( $this->method == 'POST' || $this->method == 'PUT' || $this->method == 'DELETE' ) {
284
285 // tokens are sent through here
286 $this->body_parameters = apply_filters( 'wpgetapi_body_parameters', $this->body_parameters, $this );
287
288 // do we json_encode the entire body
289 if( $this->body_json_encode == true ) {
290 $this->body_parameters = json_encode( $this->body_parameters );
291 }
292
293 // do we urlencode the entire body
294 if( $this->body_parameters && $this->body_url_encode == true ) {
295
296 // checking if the parameters have a json string (raw)
297 if (
298 ( ! is_array( $this->body_parameters ) ) &&
299 ( substr( $this->body_parameters, 0, 1 ) === '{' || substr( $this->body_parameters, 0, 1 ) === '[' )
300 ) {
301 $this->body_parameters = json_decode( $this->body_parameters, true );
302 }
303
304 $this->body_parameters = http_build_query( $this->body_parameters, '', '&' );
305
306 }
307
308 // do we xml the entire body
309 if( $this->body_parameters && $this->body_xml_format == true ) {
310
311 $xml = new SimpleXmlElement( '<' . $this->xml_root_node . '/>' );
312
313 foreach( $this->body_parameters as $key => $value) {
314 $xml->addChild( $key, $value );
315 }
316
317 $this->body_parameters = $xml->asXML();
318
319 }
320
321 // add our body parameters
322 if( $this->body_parameters && ! empty( $this->body_parameters ) )
323 $headers['body'] = $this->body_parameters;
324
325 //}
326
327 // add headers to our final request args
328 $this->final_request_args = wp_parse_args( $headers, $this->final_request_args );
329
330 // build the args taht are sent to the request
331 $default_args = apply_filters( 'wpgetapi_default_request_args_parameters', array(
332 'timeout' => $this->timeout,
333 'sslverify' => $this->sslverify,
334 'redirection' => 5,
335 'blocking' => true,
336 'cookies' => array(),
337 ) );
338
339 return wp_parse_args( $this->final_request_args, $default_args );
340
341 }
342
343
344
345
346 /**
347 * Do a GET request
348 */
349 public function GET_request() {
350 $response = '';
351 // so we can so something before the remote_get (caching)
352 $response = apply_filters( 'wpgetapi_before_get_request', $response, $this );
353
354 if( empty( $response ) )
355 $response = wp_remote_get( $this->final_url, $this->final_request_args );
356 return $response;
357 }
358
359 /**
360 * Do a POST request
361 */
362 public function POST_request() {
363 $this->final_request_args['method'] = 'POST';
364 $response = wp_remote_post( $this->final_url, $this->final_request_args );
365 return $response;
366 }
367
368 /**
369 * Do a PUT request
370 */
371 public function PUT_request() {
372 $this->final_request_args['method'] = 'PUT';
373 $response = wp_remote_request( $this->final_url, $this->final_request_args );
374 return $response;
375 }
376
377 /**
378 * Do a PATCH request
379 */
380 public function PATCH_request() {
381 $this->final_request_args['method'] = 'PATCH';
382 $response = wp_remote_request( $this->final_url, $this->final_request_args );
383 return $response;
384 }
385
386 /**
387 * Do a DELETE request
388 */
389 public function DELETE_request() {
390 $this->final_request_args['method'] = 'DELETE';
391 $response = wp_remote_request( $this->final_url, $this->final_request_args );
392 return $response;
393 }
394
395
396 /**
397 * return data
398 */
399 public function return_data( $data ) {
400
401 $data = apply_filters( 'wpgetapi_json_response_body_before_decode', $data, $this->keys );
402
403 // converts all data to arrays, removing objects
404 if( is_string( $data ) ) {
405 $decode = json_decode( $data, true );
406 if( json_last_error() ) {
407 return esc_html( $data );
408 } else {
409 $data = $decode;
410 }
411 }
412
413 $data = apply_filters( 'wpgetapi_json_response_body', $data, $this->keys );
414
415 if( $this->results_format == 'json_string' )
416 return trim( json_encode( $data ),'"');
417
418 if( $this->results_format == 'json_decoded' )
419 return $data;
420
421 }
422
423 /**
424 * Sort out the parameters if they exist
425 */
426 public function do_parameters( $parameters ) {
427
428 $new_array = array();
429 $raw = '';
430 $parameters = $this->decrypt( $parameters );
431
432 if( is_array( $parameters ) ) {
433 foreach ( $parameters as $key => $parameter ) {
434
435 if( ! empty( $parameter['name'] ) && ! empty( $parameter['value'] ) ) {
436
437 $parameter['value'] = stripslashes( $parameter['value'] );
438
439 // if we have wpgetapi_on, delete it so we don't send to api
440 if( $parameter['name'] == 'wpgetapi_on' ) {
441 unset( $parameters[ $key ] );
442 continue;
443 }
444
445 $new_array[ sanitize_text_field( $parameter['name'] ) ] = $parameter['value'];
446
447 // if we are sending raw body
448 } else if( empty( $parameter['name'] ) && ! empty( $parameter['value'] ) ) {
449
450 $raw = stripslashes( $parameter['value'] );
451
452 }
453
454 }
455 }
456
457 // look for array or json string and sort these out - for using such things in shortcode
458 if( ! empty( $new_array ) ) {
459
460 foreach ( $new_array as $key => $value ) {
461
462 // checking if the parameters have a json string
463 if ( strpos( $value, '{' ) !== false && strpos( $value, '}' ) !== false ) {
464 //if ( substr( $value, 0, 1 ) === '{' && substr( $value, -1 ) === '}' ) {
465 $new_array[ $key ] = json_decode( $value, true );
466 } else
467
468 // checking if the parameters have an array within the string
469 // if they do, create them as an actual array
470 if ( substr( $value, 0, 1 ) === '[' && substr( $value, -1 ) === ']' ) {
471 $value = trim( $value,"[]" );
472 $new_array[ $key ] = array( $value );
473 }
474
475 // set value as integer
476 if ( strpos( $value, 'integer(' ) !== false && substr( $value, -1 ) === ')' ) {
477 preg_match("/\(([^\)]*)\)/", $value, $match );
478 $result = $match[1];
479 $new_array[ $key ] = absint( $result );
480 }
481
482 // set value as float
483 if ( strpos( $value, 'float(' ) !== false && substr( $value, -1 ) === ')' ) {
484 preg_match("/\(([^\)]*)\)/", $value, $match );
485 $result = $match[1];
486 $new_array[ $key ] = (float) $result;
487
488 }
489
490 // set value as boolean
491 if ( strpos( $value, 'boolean(' ) !== false && substr( $value, -1 ) === ')' ) {
492 preg_match("/\(([^\)]*)\)/", $value, $match );
493 $result = $match[1];
494 $result = filter_var( $result, FILTER_VALIDATE_BOOLEAN );
495 $new_array[ $key ] = $result;
496
497 }
498
499 }
500
501 }
502
503 return $raw ? $raw : $new_array;
504
505 }
506
507
508 /**
509 * decrypt our parameters from the DB
510 */
511 public function decrypt( $array_or_string ) {
512
513 if( is_string($array_or_string) ){
514 $array_or_string = $this->encryption->decrypt($array_or_string);
515 }elseif( is_array($array_or_string) ){
516 foreach ( $array_or_string as $key => &$value ) {
517 if( $key === 'name' )
518 continue;
519 if ( is_array( $value ) ) {
520 $value = $this->decrypt($value);
521 }
522 else {
523 $value = $this->encryption->decrypt($value);
524
525 }
526 }
527 }
528 return $array_or_string;
529 }
530
531
532 /**
533 * debug
534 */
535 public function maybe_add_debug_info( $data, $wpgetapi ) {
536
537 if(
538 ( isset( $this->args['debug'] ) && ( $this->args['debug'] === true || $this->args['debug'] === 'true' ) ) ||
539 ( isset( $this->args['test_endpoint'] ) && ( $this->args['test_endpoint'] === true ) )
540 ) {
541
542 $this->debug = true;
543
544 // admin test endpoint button
545 $testing = isset( $this->args['test_endpoint'] ) && ( $this->args['test_endpoint'] === true ) ? true : false;
546
547 // get api status from response code
548 $status = array(
549 'title' => 'Error in API response.',
550 'desc' => 'Check all details within your endpoint. Something is misconfigured.',
551 'type' => '<span class="dashicons dashicons-dismiss"></span>'
552 );
553
554 if( $this->response_code == 200 ) {
555 $status = array(
556 'title' => 'Success!',
557 'desc' => 'Your API is returning a success message and is returning the data as shown in the Data Output section below. You can modify this by changing the Results Format option or see <a href="https://wpgetapi.com/docs/format-api-data-as-html/">here</a> for info on formatting this data.',
558 'type' => '<span class="dashicons dashicons-yes-alt"></span>'
559 );
560 }
561 if( $this->response_code == 400 || $this->response_code == 404 ) {
562 $status = array(
563 'title' => 'Bad Request',
564 'desc' => 'This could indicate that the URL you are calling is incorrect or that some other data is missing or incorrect. Please check your Base URL and Endpoint are correct as well as the Request Method.',
565 'type' => '<span class="dashicons dashicons-dismiss"></span>'
566 );
567 }
568 if( $this->response_code == 401 ) {
569 $status = array(
570 'title' => 'Unauthorised',
571 'desc' => 'You are successfully connecting to your API. But your API key, login or API credentials are incorrect. See <a href="https://wpgetapi.com/docs/authentication-authorization/">here</a> for info on correctly authorizing your API requests.',
572 'type' => '<span class="dashicons dashicons-warning"></span>'
573 );
574 }
575 if( $this->response_code == 403 ) {
576 $status = array(
577 'title' => 'Forbidden',
578 'desc' => 'This could indicate that you may need to get your IP address whitelisted with your API provider or that you do not have access to this API.',
579 'type' => '<span class="dashicons dashicons-dismiss"></span>'
580 );
581 }
582 if( $this->response_code == 405 ) {
583 $status = array(
584 'title' => 'Method Not Allowed',
585 'desc' => 'Try changing the Request Method within the endpoint settings.',
586 'type' => '<span class="dashicons dashicons-dismiss"></span>'
587 );
588 }
589 if( $this->response_code == 415 ) {
590 $status = array(
591 'title' => 'Unsupported Media Type',
592 'desc' => 'Try adding "Content-type" to the Headers with the Value of "json/application" as shown <a href="https://wpgetapi.com/docs/troubleshooting/">here</a>.',
593 'type' => '<span class="dashicons dashicons-dismiss"></span>'
594 );
595 }
596 if( $this->response_code == 500 ) {
597 $status = array(
598 'title' => 'Internal Server Error',
599 'desc' => 'This indicates an issue with the server. Contact your API provider.',
600 'type' => '<span class="dashicons dashicons-dismiss"></span>'
601 );
602 }
603
604
605 ob_start(); ?>
606
607 <style>
608
609 .wpgetapi-debug {
610 background: #fff;
611 padding: 20px;
612 box-shadow: 0 0 1px #aaa;
613 margin: 20px;
614 font-size: 15px;
615 }
616 .wpgetapi-debug
617 .wpgetapi-debug p
618 .wpgetapi-debug h5
619 .wpgetapi-debug h6 {
620 color: #000;
621 line-height: 1 !important;
622 text-transform: none !important;
623 font-family: sans-serif !important;
624 letter-spacing: 0px !important;
625 }
626 .wpgetapi-debug p.small {
627 font-size: 85%;
628 color: #999;
629 margin: 0 0 12px !important;
630 }
631 .wpgetapi-debug h5 {
632 font-weight: bold;
633 font-size: 18px;
634 margin: 0 0 3px;
635 text-transform: none !important;
636 }
637 .wpgetapi-debug .debug-item {
638 margin: 10px 0;
639 background: #fff;
640 padding: 15px 20px;
641 display: inline-block !important;
642 width: 100% !important;
643 box-shadow: 0 3px 8px rgb(0 0 0 / 6%);
644 border: 1px solid #eee;
645 }
646 .wpgetapi-debug .debug-item h6 {
647 font-weight: bold;
648 font-size: 14px;
649 margin: 0;
650 text-transform: none !important;
651 }
652 .wpgetapi-debug .debug-item .debug-result,
653 .wpgetapi-debug .debug-item .debug-result pre {
654 font-family: monospace !important;
655 font-size: 13px !important;
656 margin: 0 !important;
657 padding: 8px 12px;
658 background: #f4f7f9;
659 }
660 .wpgetapi-debug .debug-item .debug-result pre {
661 border: none;
662 padding: 5px
663 }
664 .wpgetapi-debug.testing {
665 background: transparent;
666 padding: 0;
667 box-shadow: none;
668 }
669 .wpgetapi-debug.testing .debug-item {
670 margin: 5px 0;
671 }
672 .wpgetapi-debug.testing .debug-item.status {
673 border: none;
674 box-shadow: none;
675 margin-bottom: 15px;
676 }
677 .wpgetapi-debug .debug-item.status h5 {
678 font-size: 15px;
679 }
680 .wpgetapi-debug .status .dashicons {
681 margin: 0 5px 3px 0;
682 }
683 .wpgetapi-debug .status .dashicons-yes-alt {
684 color: #5e9929;
685 }
686 .wpgetapi-debug .status .dashicons-dismiss {
687 color: #cc4646;
688 }
689 .wpgetapi-debug .status .dashicons-warning {
690 color: #dfa12e;
691 }
692 .wpgetapi-debug .status .desc {
693 font-size: 14px;
694 font-weight: 400 !important;
695 }
696 </style>
697
698 <div class="wpgetapi-debug <?php echo $testing ? 'testing' : ''; ?>">
699
700 <?php if( $testing ) { ?>
701
702 <div class="debug-item status">
703 <div class="">
704 <h5><?php _e( $status['type'] ); ?> <?php esc_html_e( $status['title'] ); ?></h5>
705 <span class="desc"><?php _e( $status['desc'] ); ?></span>
706 </div>
707 </div>
708 <div class="debug-item">
709 <h6><?php esc_html_e( 'Full URL', 'wpgetapi' ); ?></h6>
710 <p class="small"><?php esc_html_e( 'The full URL that is being called.', 'wpgetapi' ); ?></p>
711 <div class="debug-result"><?php esc_html_e( $this->final_url ); ?></div>
712 </div>
713
714 <div class="debug-item">
715 <h6><?php esc_html_e( 'Data Output', 'wpgetapi' ); ?></h6>
716 <p class="small"><?php esc_html_e( 'The output that has been returned from the API. This is what the shortcode or template tag will display and can be formatted however you like.', 'wpgetapi' ); ?></p>
717 <div class="debug-result"><?php wpgetapi_pp( $data ); ?></div>
718 </div>
719
720 <div class="debug-item">
721 <h6><?php esc_html_e( 'Final Request Arguments', 'wpgetapi' ); ?></h6>
722 <p class="small"><?php esc_html_e( 'The final request arguments sent in the API request. Includes headers and body arguments.', 'wpgetapi' ); ?></p>
723 <div class="debug-result"><?php wpgetapi_pp( $this->final_request_args ); ?></div>
724 </div>
725
726 <div class="debug-item">
727 <h6><?php esc_html_e( 'Response', 'wpgetapi' ); ?></h6>
728 <p class="small"><?php esc_html_e( 'The full response from the API request.', 'wpgetapi' ); ?></p>
729 <div class="debug-result"><?php wpgetapi_pp( $this->response); ?></div>
730 </div>
731
732 <?php } else { ?>
733
734 <h5><strong><?php esc_html_e( 'WPGetAPI, Debug Mode - Plugin Version', 'wpgetapi' ); ?> <?php esc_html_e( WpGetApi()->version ); ?></strong></h5>
735 <p class="small"><?php esc_html_e( 'Below you will find debug info for the current API call. To turn this off, set debug to false in your shortcode or template tag.', 'wpgetapi' ); ?><br><?php esc_html_e( 'Connecting to API\'s can be tricky - if you require help, please see the', 'wpgetapi' ); ?> <a target="_blank" href="https://wpgetapi.com/docs/"><?php esc_html_e( 'Documentation', 'wpgetapi' ); ?></a>.</p>
736
737 <div class="debug-item">
738 <h6><?php esc_html_e( 'Full URL', 'wpgetapi' ); ?></h6>
739 <p class="small"><?php esc_html_e( 'The full URL that is being called.', 'wpgetapi' ); ?></p>
740 <div class="debug-result"><?php esc_html_e( $this->final_url ); ?></div>
741 </div>
742
743 <div class="debug-item">
744 <h6><?php esc_html_e( 'Data Output', 'wpgetapi' ); ?></h6>
745 <p class="small"><?php esc_html_e( 'The resulting output that has been returned from the API.', 'wpgetapi' ); ?></p>
746 <div class="debug-result"><?php wpgetapi_pp( $data ); ?></div>
747 </div>
748
749 <div class="debug-item">
750 <h6><?php esc_html_e( 'Query String', 'wpgetapi' ); ?></h6>
751 <p class="small"><?php esc_html_e( 'The query string parameters (if any) that you have set within the endpoint settings.', 'wpgetapi' ); ?></p>
752 <div class="debug-result"><?php wpgetapi_pp( $this->query_parameters ); ?></div>
753 </div>
754
755 <div class="debug-item">
756 <h6><?php esc_html_e( 'Headers', 'wpgetapi' ); ?></h6>
757 <p class="small"><?php esc_html_e( 'The header parameters (if any) that you have set within the endpoint settings.', 'wpgetapi' ); ?></p>
758 <div class="debug-result"><?php wpgetapi_pp( $this->header_parameters ); ?></div>
759 </div>
760
761 <div class="debug-item">
762 <h6><?php esc_html_e( 'Body', 'wpgetapi' ); ?></h6>
763 <p class="small"><?php esc_html_e( 'The body parameters (if any) that you have set within the endpoint settings.', 'wpgetapi' ); ?></p>
764 <div class="debug-result"><?php wpgetapi_pp( $this->body_parameters ); ?></div>
765 </div>
766
767 <div class="debug-item">
768 <h6><?php esc_html_e( 'Final Request Arguments', 'wpgetapi' ); ?></h6>
769 <p class="small"><?php esc_html_e( 'The final request arguments sent in the API request. Includes headers and body arguments.', 'wpgetapi' ); ?></p>
770 <div class="debug-result"><?php wpgetapi_pp( $this->final_request_args ); ?></div>
771 </div>
772
773 <div class="debug-item">
774 <h6><?php esc_html_e( 'Arguments', 'wpgetapi' ); ?></h6>
775 <p class="small"><?php esc_html_e( 'The arguments set within your shortcode or template tag.', 'wpgetapi' ); ?></p>
776 <div class="debug-result"><?php wpgetapi_pp( $this->args ); ?></div>
777 </div>
778
779 <div class="debug-item">
780 <h6><?php esc_html_e( 'Response', 'wpgetapi' ); ?></h6>
781 <p class="small"><?php esc_html_e( 'The full response from the API request.', 'wpgetapi' ); ?></p>
782 <div class="debug-result"><?php wpgetapi_pp( $this->response); ?></div>
783 </div>
784
785 <?php } ?>
786
787 </div>
788
789 <?php
790
791 return ob_get_clean();
792
793 } else {
794
795 return $data;
796
797 }
798
799 }
800
801
802 }