PluginProbe
WPGet API – Connect to any external REST API / 2.1.4
WPGet API – Connect to any external REST API v2.1.4
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-admin-options.php

class-admin-options.php in WPGet API – Connect to any external REST API 2.1.4, at includes/class-admin-options.php

1,002 lines 31.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Settings Required
4 *
5 */
6
7 // Exit if accessed directly.
8 if ( ! defined( 'ABSPATH' ) ) exit;
9
10 if ( ! class_exists( 'WpGetApi_Admin_Options' ) ) :
11
12 /**
13 * CMB2 Theme Options
14 * @version 0.1.0
15 */
16 class WpGetApi_Admin_Options {
17
18 /**
19 * Array of metaboxes/fields
20 * @var array
21 */
22 public $option_metabox = array();
23
24 /**
25 * Array of metaboxes/fields
26 * @var array
27 */
28 public $metabox_id = '';
29
30 /**
31 * Options Page title
32 * @var string
33 */
34 protected $title = '';
35
36 /**
37 * Options Page title
38 * @var string
39 */
40 protected $menu_title = '';
41
42 /**
43 * Options Tab Pages
44 * @var array
45 */
46 public $options_pages = array();
47
48 /**
49 * Is pro plugin installed
50 * @var array
51 */
52 public $pro_plugin = false;
53
54 /**
55 * Holds an instance of the object
56 *
57 * @var Myprefix_Admin
58 **/
59 private static $instance = null;
60
61 /**
62 * Constructor
63 * @since 0.1.0
64 */
65 private function __construct() {
66 // Set our title
67 $this->menu_title = __( 'WPGetAPI', 'wpgetapi' );
68 $this->title = __( 'WPGetAPI', 'wpgetapi' );
69
70 }
71
72 /**
73 * Returns the running object
74 *
75 * @return Myprefix_Admin
76 **/
77 public static function get_instance() {
78 if( is_null( self::$instance ) ) {
79 self::$instance = new self();
80 self::$instance->hooks();
81 }
82 return self::$instance;
83 }
84
85 /**
86 * Initiate our hooks
87 * @since 0.1.0
88 */
89 public function hooks() {
90 add_action( 'admin_init', array( $this, 'init' ) );
91 add_action( 'admin_menu', array( $this, 'add_options_pages' ) );
92
93 add_action( 'cmb2_admin_init', array( $this, 'init_custom_fields' ) );
94
95 add_action( "cmb2_save_options-page_fields", array( $this, 'redirect' ), 1, 2 );
96
97 add_action( 'admin_footer', array( $this, 'load_testing_javascript' ) );
98
99 add_action( 'wp_ajax_wpgetapi_test_endpoint', array( $this, 'test_the_endpoint' ) );
100
101 add_action( 'wp_ajax_wpgetapi_export_endpoints', array( $this, 'export_endpoints' ) );
102 add_action( 'wp_ajax_wpgetapi_import_endpoints', array( $this, 'import_endpoints' ) );
103
104 }
105
106
107 /**
108 * Setup our custom fields
109 * @since 0.1.0
110 */
111 public function init_custom_fields() {
112 require_once WPGETAPIDIR . 'includes/class-fields.php';
113 WpGetApi_Parameter_Field::init_parameter();
114 }
115
116 /**
117 * Register our setting to WP
118 * @since 0.1.0
119 */
120 public function init() {
121 $this->pro_plugin = is_plugin_active( 'wpgetapi-extras/wpgetapi-extras.php' ) ? true : false;
122 $option_tabs = self::option_fields();
123 foreach ($option_tabs as $index => $option_tab) {
124 register_setting( $option_tab['id'], $option_tab['id'] );
125 }
126 }
127
128
129 /**
130 * Get our saved API's from setup
131 * @since 0.1.0
132 */
133 public function get_apis() {
134 $setup = get_option( 'wpgetapi_setup' );
135 if( empty( $setup ) || ! isset( $setup['apis'] ) || empty( $setup['apis'] ) )
136 return;
137 return $setup['apis'];
138 }
139
140
141 /**
142 * Add the options metabox to the array of metaboxes
143 * @since 0.1.0
144 */
145 public function option_fields() {
146
147 //Only need to initiate the array once per page-load
148 if ( ! empty( $this->option_metabox ) ) {
149 return $this->option_metabox;
150 }
151
152 // setup tab
153 $option_metabox[] = array(
154 'title' => __( 'Setup', 'wpgetapi' ),
155 'menu_title' => __( 'Setup', 'wpgetapi' ),
156 'id' => 'wpgetapi_setup',
157 'desc' => __( 'Add the details of the API(s) you are using. Endpoints will be setup in the next step after hitting save.', 'wpgetapi' ),
158 'show_on' => array( 'key' => 'options-page', 'value' => array( 'wpgetapi_setup' ), ),
159 'show_names' => true,
160 'fields' => $this->setup_fields(),
161 );
162
163 // get our saved API's and create as tabs
164 if( $this->get_apis() ) {
165
166 foreach ( $this->get_apis() as $index => $api ) {
167
168 $name = isset( $api['name'] ) && $api['name'] != '' ? sanitize_text_field( $api['name'] ) : 'API ' . absint( $index );
169 $api_id = isset( $api['id'] ) && $api['id'] != '' ? sanitize_text_field( $api['id'] ) : $name;
170 $metabox_id = strtolower( str_replace( '-', '_', sanitize_file_name( 'wpgetapi-' . $api_id ) ) );
171 $base_url = isset( $api['base_url'] ) && $api['base_url'] != '' ? esc_url_raw( $api['base_url'], array( 'http', 'https' ) ) : '';
172 $type = isset( $api['auth_type'] ) && $api['auth_type'] != '' ? sanitize_text_field( $api['auth_type'] ) : '';
173
174 // tab
175 $option_metabox[] = array(
176 'title' => $name,
177 'menu_title' => $name,
178 'id' => $metabox_id,
179 'desc' => '',
180 'show_on' => array( 'key' => 'options-page', 'value' => array( $metabox_id ), ),
181 'show_names' => true,
182 'fields' => $this->endpoint_fields( $type, $api_id, $base_url ),
183 );
184
185 }
186
187 }
188
189 $option_metabox = apply_filters( 'wpgetapi_admin_pages', $option_metabox );
190
191 return $option_metabox;
192
193 }
194
195 public function setup_fields() {
196
197 $fields[] = array(
198 'id' => 'apis',
199 'type' => 'group',
200 'name' => '',
201 'description' => '',
202 'options' => array(
203 'group_title' => __( 'API {#}', 'wpgetapi' ),
204 'add_button' => __( 'Add New API', 'wpgetapi' ),
205 'remove_button' => __( 'Remove API', 'wpgetapi' ),
206 'sortable' => true, // beta
207 ),
208 'fields' => array(
209 array(
210 'name' => __( 'API Name', 'wpgetapi' ) . '<span class="dashicons dashicons-editor-help" data-tip="' . __( 'The name of this API. Call it whatever you like.', 'wpgetapi' ) . '"></span>',
211 'id' => 'name',
212 'type' => 'text',
213 'attributes' => array(
214 'required' => true,
215 'placeholder' => 'Google Maps',
216 ),
217 'desc' => '',
218 ),
219 array(
220 'name' => __( 'Unique ID', 'wpgetapi' ) . '<span class="dashicons dashicons-editor-help" data-tip="' . __( 'Choose your own unique ID for this API. Use lowercase letters and underscores only!', 'wpgetapi' ) . '"></span>',
221 'id' => 'id',
222 'type' => 'text',
223 'attributes' => array(
224 'required' => true,
225 'placeholder' => 'google_maps',
226 ),
227 'desc' => '',
228 'sanitization_cb' => 'wpgetapi_sanitize_unique_id'
229 ),
230 array(
231 'name' => __( 'Base URL', 'wpgetapi' ) . '<span class="dashicons dashicons-editor-help" data-tip="' . __( 'The base URL of the API you are connecting to.', 'wpgetapi' ) . '"></span>',
232 'id' => 'base_url',
233 'type' => 'text',
234 'attributes' => array(
235 'required' => true,
236 'placeholder' => 'https://maps.googleapis.com/maps/api',
237 ),
238 'desc' => '',
239 ),
240
241 )
242 );
243
244 return $fields;
245
246 }
247
248
249 /**
250 * Endpoint settings.
251 * @return sale info array
252 *
253 */
254 public function endpoint_fields( $type = '', $api_id = '', $base_url = '' ) {
255
256 $fields = array();
257
258 $cache_disabled = $this->pro_plugin ? '' : 'disabled';
259 $cache_url = $this->pro_plugin ? '<a target="_blank" href="https://wpgetapi.com/docs/caching-api-calls/">Caching Help</a>' : '<a target="_blank" href="https://wpgetapi.com/downloads/pro-plugin/?utm_campaign=Pro&utm_medium=Admin&utm_source=Cache">View PRO Plugin</a>';
260 $cache_desc = $this->pro_plugin ? '' : 'Available in PRO plugin.';
261
262 $endpoint_fields = apply_filters( 'wpgetapi_fields_endpoints', array(
263 array(
264 'name' => __( 'Unique ID', 'wpgetapi' ) . '<span class="dashicons dashicons-editor-help" data-tip="' . __( 'Choose your own unique ID for this endpoint. Use lowercase letters and underscores only!', 'wpgetapi' ) . '"></span>',
265 'id' => 'id',
266 'type' => 'text',
267 'classes' => 'field-id',
268 'attributes' => array(
269 'required' => true,
270 'placeholder' => 'new_endpoint',
271 ),
272 'desc' => '',
273 'before_row' => "wpgetapi_output_top_of_endpoint",
274 'api_id' => $api_id,
275 'sanitization_cb' => 'wpgetapi_sanitize_unique_id'
276
277 ),
278 array(
279 'name' => __( 'Endpoint', 'wpgetapi' ) . '<span class="dashicons dashicons-editor-help" data-tip="' . __( 'This Endpoint will be appended to the Base URL to create the full URL that will be called.', 'wpgetapi' ) . '"></span>',
280 'id' => 'endpoint',
281 'type' => 'text',
282 'classes' => 'field-endpoint',
283 'attributes' => array(
284 'required' => true,
285 'placeholder' => '/newendpoint',
286 ),
287 'desc' => '',
288 ),
289 array(
290 'name' => __( 'Method', 'wpgetapi' ) . '<span class="dashicons dashicons-editor-help" data-tip="' . __( 'The Request Method for this endpoint. If you are displaying data from the API, it will usually be GET. If you are sending to the API, it will usually be POST.', 'wpgetapi' ) . '"></span>',
291 'id' => 'method',
292 'type' => 'select',
293 'classes' => 'field-method',
294 'attributes' => array(
295 'required' => true,
296 ),
297 'options' => array(
298 'GET' => 'GET',
299 'POST' => 'POST',
300 'PUT' => 'PUT',
301 'PATCH' => 'PATCH',
302 'DELETE' => 'DELETE',
303 ),
304 'desc' => '',
305 ),
306
307 array(
308 'name' => __( 'Results Format', 'wpgetapi' ) .
309 '<span class="dashicons dashicons-editor-help" data-tip="' .
310 sprintf(
311 __( 'The format that the API data will be returned in. To format the data as HTML, click the link below to learn how. %1s', 'wpgetapi' ),
312 htmlentities( '<br><a target="_blank" href="https://wpgetapi.com/docs/formatting-json-data/?utm_campaign=Shortcode JSON&utm_medium=Admin&utm_source=User">Format as HTML</a>' )
313 ) .
314 '"></span>',
315 'id' => 'results_format',
316 'type' => 'select',
317 'classes' => 'field-results-format',
318 'attributes' => array(
319 'required' => true,
320 ),
321 'options_cb' => 'wpgetapi_results_format_options',
322 'desc' => ''
323 ),
324
325 array(
326 'name' => __( 'Cache Time', 'wpgetapi' ) .
327 '<span class="dashicons dashicons-editor-help" data-tip="' .
328 sprintf(
329 __( 'The time in seconds to cache this request for. %1s', 'wpgetapi' ),
330 htmlentities( '<br>' . $cache_url )
331 ) .
332 '"></span>',
333 'id' => 'cache_time',
334 'type' => 'text',
335 'classes' => 'field-cache-time',
336 'attributes' => array(
337 'placeholder' => '3600',
338 $cache_disabled => $cache_disabled,
339 ),
340 'desc' => $cache_desc
341 ),
342
343 array(
344 'name' => __( 'Query String', 'wpgetapi' ) .
345 '<span class="dashicons dashicons-editor-help" data-tip="' .
346 sprintf(
347 __( 'Parameters as name/value pairs that will be appended to the URL. The query string is the part of the URL after the question mark, like so: https://yoururl.com<b>?key=value&key3=value3</b> %1s', 'wpgetapi' ),
348 htmlentities( '<br><a target="_blank" href="https://wpgetapi.com/docs/adding-query-string-parameters/?utm_campaign=Query String&utm_medium=Admin&utm_source=User">More Info</a>' )
349 ) .
350 '"></span>',
351 'id' => 'query_parameters',
352 'type' => 'parameter',
353 'classes' => 'field-query-parameters',
354 'repeatable' => true,
355 'desc' => ''
356 ),
357 array(
358 'name' => __( 'Headers', 'wpgetapi' ) .
359 '<span class="dashicons dashicons-editor-help" data-tip="' .
360 sprintf(
361 __( 'Parameters as name/value pairs, sent in the Headers. %1s', 'wpgetapi' ),
362 htmlentities( '<br><a target="_blank" href="https://wpgetapi.com/docs/sending-headers-in-request/?utm_campaign=Headers&utm_medium=Admin&utm_source=User">More Info</a>' )
363 ) .
364 '"></span>',
365 'id' => 'header_parameters',
366 'type' => 'parameter',
367 'classes' => 'field-header-parameters',
368 'repeatable' => true,
369 'desc' => ''
370 ),
371 array(
372 'name' => __( 'Body POST Fields', 'wpgetapi' ) .
373 '<span class="dashicons dashicons-editor-help" data-tip="' .
374 sprintf(
375 __( 'Parameters as name/value pairs, sent in the Body as POST fields. %1s', 'wpgetapi' ),
376 htmlentities( '<br><a target="_blank" href="https://wpgetapi.com/docs/sending-post-fields-in-request/?utm_campaign=Body&utm_medium=Admin&utm_source=User">More Info</a>' )
377 ) .
378 '"></span>',
379 'id' => 'body_parameters',
380 'type' => 'parameter',
381 'classes' => 'field-body-parameters',
382 'repeatable' => true,
383 'desc' => ''
384 ),
385 array(
386 'name' => __( 'Encode Body', 'wpgetapi' ) . '<span class="dashicons dashicons-editor-help" data-tip="' . __( 'Encoding of the above Body parameters.', 'wpgetapi' ) . '"></span>',
387 'id' => 'body_json_encode',
388 'type' => 'select',
389 'classes' => 'field-body-json-encode',
390 'options' => array(
391 'false' => __( 'No encoding (raw)', 'wpgetapi' ),
392 'true' => __( 'JSON encode', 'wpgetapi' ),
393 'url' => __( 'URL encode (x-www-form-urlencoded)', 'wpgetapi' ),
394 'base64' => __( 'Base64 encode', 'wpgetapi' ),
395 'xml' => __( 'XML format (available in PRO)', 'wpgetapi' ),
396
397 ),
398 'desc' => '',
399 ),
400 array(
401 'name' => __( 'Actions', 'wpgetapi' ) . '<span class="dashicons dashicons-editor-help" data-tip="' .
402 sprintf(
403 __( 'Call this endpoint when your chosen action runs. This feature is available in the PRO plugin. %1s', 'wpgetapi' ),
404 htmlentities( '<br><a target="_blank" href="https://wpgetapi.com/downloads/pro-plugin/?utm_campaign=Pro&utm_medium=Admin&utm_source=Actions">View PRO Plugin</a>' )
405 ) .
406 '"></span>',
407 'id' => 'actions',
408 'type' => 'select',
409 'classes' => 'field-actions',
410 'desc' => __( 'Available in PRO plugin.', 'wpgetapi' ),
411 'options' => array(
412 '' => __( '-- No Action --', 'wpgetapi-extras' ),
413 'new_post_published' => __( 'Post/Custom Post - New Post Published', 'wpgetapi-extras' ),
414 'transition_post_status' => __( 'Post/Custom Post - Status Changed', 'wpgetapi-extras' ),
415 'delete_post' => __( 'Post/Custom Post - Delete Post', 'wpgetapi-extras' ),
416
417 'user_register' => __( 'User - New User Registered', 'wpgetapi-extras' ),
418 'delete_user' => __( 'User - Delete User', 'wpgetapi-extras' ),
419 'user_login' => __( 'User - User Logs In', 'wpgetapi-extras' ),
420 'woocommerce_new_product' => __( 'WooCommerce - New Product Created', 'wpgetapi-extras' ),
421 'woocommerce_new_order' => __( 'WooCommerce - New Order Created', 'wpgetapi-extras' ),
422 'woocommerce_order_status_changed' => __( 'WooCommerce - Order Status Changed', 'wpgetapi-extras' ),
423 'contact_form_7' => __( 'Contact Form 7', 'wpgetapi-extras' ),
424 'gravity_forms' => __( 'Gravity Forms', 'wpgetapi-extras' ),
425 'wpforms' => __( 'WPForms', 'wpgetapi-extras' ),
426 'jetformbuilder' => __( 'JetFormBuilder', 'wpgetapi-extras' ),
427 'formidable_forms' => __( 'Formidable Forms', 'wpgetapi-extras' ),
428 'pmp' => __( 'Paid Memberships Pro - After Checkout', 'wpgetapi-extras' ),
429 'edd' => __( 'Easy Digital Downloads - Complete Purchase', 'wpgetapi-extras' ),
430 ),
431 'default' => '',
432 )
433
434 ) );
435
436 $fields[] = array(
437 'id' => 'endpoints',
438 'type' => 'group',
439 'name' => '',
440 'description' => '',
441 'options' => array(
442 'group_title' => __( 'Endpoint {#}', 'wpgetapi' ),
443 'add_button' => __( 'Add Endpoint', 'wpgetapi' ),
444 'remove_button' => __( 'Remove Endpoint', 'wpgetapi' ),
445 'sortable' => true, // beta
446 //'closed' => true,
447 ),
448 'before_group' => '<pre class="url"><div>Base URL:</div> <span>' . $base_url . '</span></pre>
449 <div class="import-export"><a href="#TB_inline?&width=600&height=550&inlineId=my-content-id" class="button thickbox">Import/Export</a></div>
450 <div class="collapse open"><a class="button" title="Collapse all endpoints"><span class="dashicons dashicons-arrow-down"></span></a></div>',
451 'fields' => $endpoint_fields,
452 );
453
454 return apply_filters( 'wpgetapi_fields', $fields );
455
456 }
457
458
459 public function add_options_pages() {
460 add_thickbox();
461
462 $option_tabs = self::option_fields();
463
464 foreach ($option_tabs as $index => $option_tab) {
465 if ( $index == 0) {
466
467 $this->options_pages[] = add_menu_page( $this->title, $this->menu_title, 'manage_options', $option_tab['id'], array( $this, 'admin_page_display' ), 'none'
468 ); //Link admin menu to first tab
469
470 add_submenu_page( $option_tabs[0]['id'], $this->menu_title, $option_tab['menu_title'], 'manage_options', $option_tab['id'], array( $this, 'admin_page_display' ) ); //Duplicate menu link for first submenu page
471 } else {
472 $this->options_pages[] = add_submenu_page( $option_tabs[0]['id'], $this->menu_title, $option_tab['menu_title'], 'manage_options', $option_tab['id'], array( $this, 'admin_page_display' ) );
473 }
474 }
475
476 foreach ( $this->options_pages as $page ) {
477 // Include CMB CSS in the head to avoid FOUC
478 add_action( "admin_print_styles-{$page}", array( 'CMB2_Hookup', 'enqueue_cmb_css' ) );
479 }
480
481 }
482
483 /**
484 * Admin page markup. Mmply handled by CMB2
485 * @since 0.1.0
486 */
487 public function admin_page_display() {
488
489 $option_tabs = self::option_fields(); //get all option tabs
490 $tab_forms = array();
491 ?>
492
493 <div class="wrap wpgetapi">
494
495 <div class="main_content_cell">
496
497 <h1 class="wp-heading-inline">
498 <img width="24" height="22" src="<?php echo esc_url( WPGETAPIURL . 'assets/img/wpgetapi-icon.png' ); ?>" /> <?php esc_html_e( $this->title, 'wpgetapi' ) ?> <span class="vnum"><?php echo WPGETAPIVERSION; ?></span>
499 </h1>
500 <!-- Options Page Nav Tabs -->
501 <h2 class="nav-tab-wrapper">
502 <?php foreach ($option_tabs as $option_tab) :
503
504 $tab_slug = $option_tab['id'];
505 $nav_class = 'nav-tab';
506 if ( $tab_slug == $_GET['page'] ) {
507 $nav_class .= ' nav-tab-active'; //add active class to current tab
508 $tab_forms[] = $option_tab; //add current tab to forms to be rendered
509 }
510
511 ?>
512
513 <a class="<?php esc_attr_e( $nav_class ); ?>" href="<?php esc_url( menu_page_url( $tab_slug ) ); ?>"><?php esc_attr_e( $option_tab['menu_title'], 'wpgetapi' ); ?></a>
514
515 <?php endforeach; ?>
516 </h2>
517 <!-- End of Nav Tabs -->
518
519 <?php
520 //render all tab forms (normaly just 1 form)
521 foreach ($tab_forms as $tab_form) : ?>
522
523 <div id="<?php esc_attr_e($tab_form['id']); ?>" class="cmb-form group">
524 <div class="metabox-holder">
525
526 <div id="my-content-id" style="display:none;">
527 <div>
528 <?php echo $this->get_import_export(); ?>
529 </div>
530 </div>
531
532 <div class="pmpbox pad">
533 <h3 class="title"><?php esc_html_e($tab_form['title'], 'wpgetapi'); ?></h3>
534 <div class="desc"><?php echo wp_kses_post( $tab_form['desc'] ); ?></div>
535 <?php cmb2_metabox_form( $tab_form, $tab_form['id'], $tab_form ); ?>
536 </div>
537 </div>
538 </div>
539
540 <?php endforeach; ?>
541
542 </div>
543
544 <div class="sidebar_cell">
545
546 <?php
547 $sidebar = self::sidebar_display();
548 echo apply_filters( 'wpgetapi_admin_sidebar_display', $sidebar );
549 ?>
550
551 </div>
552
553 </div>
554
555 <?php
556
557 }
558
559
560 public function test_the_endpoint() {
561
562 $api_id = sanitize_text_field( $_POST['api_id'] );
563 $endpoint_id = sanitize_text_field( $_POST['endpoint_id'] );
564 $data = wpgetapi_endpoint( $api_id, $endpoint_id, array( 'test_endpoint' => true ) );
565
566 $output = array(
567 'data' => $data,
568 'endpoint_id' => $endpoint_id
569 );
570 echo json_encode( $output );
571
572 wp_die(); // this is required to terminate immediately and return a proper response
573
574 }
575
576 public function get_import_export() {
577 ob_start(); ?>
578
579 <div class="wpgetapi-export">
580 <h3><span class="dashicons dashicons-download"></span> Export Endpoints</h3>
581 <p>Export the endpoints for this API.<br>After clicking the button below, copy the entire contents of the export.</p>
582 <button class="button button-primary">Export Endpoints</button>
583 <div class="message"></div>
584 </div>
585
586 <div class="wpgetapi-import">
587 <h3><span class="dashicons dashicons-upload"></span> Import Endpoints</h3>
588 <p>Paste your exported JSON data into the field below to import endpoints into this API.</p>
589 <textarea></textarea>
590 <button class="button button-primary">Import Endpoints</button>
591 <div class="message"></div>
592 </div>
593
594 <?php
595 $content = ob_get_contents();
596 ob_end_clean();
597 return $content;
598 }
599
600 /**
601 * AJAX function to get our endpoints for export.
602 *
603 */
604 public function export_endpoints() {
605 $api_id = sanitize_text_field( $_POST['api_id'] );
606 $data = get_option( $api_id );
607
608 if( ! isset( $data['endpoints'] ) )
609 wp_die();
610
611 $encryption = new WpGetApi_Encryption();
612
613 foreach ( $data['endpoints'] as $i => $endpoint ) {
614 if( isset( $endpoint['query_parameters'] ) ) {
615 foreach ( $endpoint['query_parameters'] as $i2 => $query_parameters ) {
616 if( isset( $query_parameters['value'] ) )
617 $data['endpoints'][ $i ]['query_parameters'][ $i2 ]['value'] = $encryption->decrypt( $query_parameters['value'] );
618 }
619 }
620 if( isset( $endpoint['header_parameters'] ) ) {
621 foreach ( $endpoint['header_parameters'] as $i2 => $header_parameters ) {
622 if( isset( $header_parameters['value'] ) )
623 $data['endpoints'][ $i ]['header_parameters'][ $i2 ]['value'] = $encryption->decrypt( $header_parameters['value'] );
624 }
625 }
626 if( isset( $endpoint['body_parameters'] ) ) {
627 foreach ( $endpoint['body_parameters'] as $i2 => $body_parameters ) {
628 if( isset( $body_parameters['value'] ) )
629 $data['endpoints'][ $i ]['body_parameters'][ $i2 ]['value'] = $encryption->decrypt( $body_parameters['value'] );
630 }
631 }
632 }
633
634 echo json_encode( $data );
635 wp_die(); // this is required to terminate immediately and return a proper response
636 }
637
638 /**
639 * AJAX function to import our endpoints.
640 *
641 */
642 public function import_endpoints() {
643
644 $api_id = sanitize_text_field( $_POST['api_id'] );
645 $textarea = sanitize_textarea_field( $_POST['textarea'] );
646 $existing_data = get_option( $api_id );
647
648 if( ! $textarea ) {
649 echo 'No data found.';
650 wp_die();
651 }
652
653 $new_data = json_decode( stripslashes( $textarea ), true );
654 if( ! isset( $new_data['endpoints'] ) ){
655 echo 'No endpoints found.';
656 wp_die();
657 }
658
659 $encryption = new WpGetApi_Encryption();
660
661 foreach ( $new_data['endpoints'] as $i => $endpoint ) {
662 if( isset( $endpoint['query_parameters'] ) ) {
663 foreach ( $endpoint['query_parameters'] as $i2 => $query_parameters ) {
664 if( isset( $query_parameters['value'] ) )
665 $new_data['endpoints'][ $i ]['query_parameters'][ $i2 ]['value'] = $encryption->encrypt( $query_parameters['value'] );
666 }
667 }
668 if( isset( $endpoint['header_parameters'] ) ) {
669 foreach ( $endpoint['header_parameters'] as $i2 => $header_parameters ) {
670 if( isset( $header_parameters['value'] ) )
671 $new_data['endpoints'][ $i ]['header_parameters'][ $i2 ]['value'] = $encryption->encrypt( $header_parameters['value'] );
672 }
673 }
674 if( isset( $endpoint['body_parameters'] ) ) {
675 foreach ( $endpoint['body_parameters'] as $i2 => $body_parameters ) {
676 if( isset( $body_parameters['value'] ) )
677 $new_data['endpoints'][ $i ]['body_parameters'][ $i2 ]['value'] = $encryption->encrypt( $body_parameters['value'] );
678 }
679 }
680 }
681
682 // if no existing endpoints, simply add it
683 if( ! $existing_data ) {
684 update_option( $api_id, $new_data );
685 } else {
686
687 $merged['endpoints'] = array_merge( $existing_data['endpoints'], $new_data['endpoints'] );
688 update_option( $api_id, $merged );
689 }
690
691 echo 'Successfully imported. Reloading...';
692 wp_die(); // this is required to terminate immediately and return a proper response
693 }
694
695
696 public function load_testing_javascript() { ?>
697
698 <script type="text/javascript" >
699
700 jQuery(document).ready(function($) {
701
702 /**
703 * Collapse the endpoints
704 *
705 */
706 $('body').on( 'click', '.wpgetapi .collapse .button', function(){
707
708 var $this = $(this);
709 var $collapse = $(this).parents('.collapse');
710 var status = 'open';
711
712 $collapse.toggleClass('open');
713
714 if( ! $collapse.hasClass( 'open' ) )
715 status = 'closed';
716
717 var $endpoints = $( '#endpoints_repeat .postbox.cmb-repeatable-grouping' );
718 $endpoints.each( function() {
719
720 if( status == 'closed' ) {
721 $( this ).addClass('closed');
722 } else {
723 $( this ).removeClass('closed');
724 }
725
726 });
727
728 });
729
730 /**
731 * Run the export
732 *
733 */
734 $('body').on( 'click', '.wpgetapi-export .button', function(){
735
736 var $this = $(this);
737 var api_id = $('.wpgetapi.wrap').find( '.cmb-form.group' ).attr( 'id' );
738
739 // disable button
740 $this.attr( 'disabled', true );
741
742 var data = {
743 'action': 'wpgetapi_export_endpoints',
744 'api_id': api_id,
745 };
746
747 // send and get response
748 jQuery.post(ajaxurl, data, function( response ) {
749 $( '.wpgetapi-export .message' ).show().html( response );
750 // enable button
751 $( '.wpgetapi-export .button' ).attr( 'disabled', false );
752
753 });
754
755 });
756
757 /**
758 * Run the import
759 *
760 */
761 $('body').on( 'click', '.wpgetapi-import .button', function(){
762
763 var $this = $(this);
764 var api_id = $('.wpgetapi.wrap').find( '.cmb-form.group' ).attr( 'id' );
765 var textarea = $('.wpgetapi-import textarea').val();
766
767 // disable button
768 $this.attr( 'disabled', true );
769
770 var data = {
771 'action': 'wpgetapi_import_endpoints',
772 'textarea': textarea,
773 'api_id': api_id,
774 };
775
776 // send and get response
777 jQuery.post(ajaxurl, data, function( response ) {
778
779 $( '.wpgetapi-import .message' ).html( response );
780
781 if( response == 'Successfully imported. Reloading...' ) {
782 setTimeout(function(){
783 location.reload();
784 }, 2000);
785 } else {
786 $( '.wpgetapi-import .button' ).attr( 'disabled', false );
787 }
788
789 });
790
791 });
792
793 /**
794 * Run the endpoint test
795 *
796 */
797 $('body').on( 'click', '.wpgetapi-test-area .test-button', function(){//delegated
798
799 var $this = $(this);
800 var area = $this.parents( '.wpgetapi-test-area' );
801 var api_id = $( area ).data( 'api' );
802 var endpoint_id = $( area ).data( 'endpoint' );
803
804 // disable button
805 $this.attr( 'disabled', true );
806
807 var data = {
808 'action': 'wpgetapi_test_endpoint',
809 'api_id': api_id,
810 'endpoint_id': endpoint_id
811 };
812
813 // send and get response
814 jQuery.post(ajaxurl, data, function( response ) {
815
816 var output = JSON.parse( response );
817
818 $( '.wpgetapi-test-area[data-endpoint="' + output.endpoint_id + '"] .handle' ).show();
819 $( '.wpgetapi-test-area[data-endpoint="' + output.endpoint_id + '"] .wpgetapi-result' ).html( output.data);
820
821 // enable button
822 $( '.wpgetapi-test-area[data-endpoint="' + output.endpoint_id + '"] .test-button' ).attr( 'disabled', false );
823
824 });
825
826 });
827
828 $( '.wpgetapi-test-area .handle' ).on('click', function() {
829 $('.wpgetapi-result').toggle();
830 });
831
832 });
833
834 </script> <?php
835
836 }
837
838
839 /**
840 * Sidebar markup.
841 * @since 1.4.1
842 */
843 public function sidebar_display() {
844
845 ob_start();
846
847 // do our setup page
848 if( isset( $_GET['page'] ) && $_GET['page'] === 'wpgetapi_setup' )
849 return $this->sidebar_setup_page();
850
851 ?>
852
853 <div class="box">
854 <h4><?php esc_html_e( 'Endpoint Instructions', 'wpgetapi' ); ?></h4>
855 <ol>
856 <li><?php _e( 'Give your endpoint a <b>Unique ID</b>', 'wpgetapi' ); ?></li>
857 <li><?php _e( 'Add the <b>Endpoint</b> which can be found in your API docs', 'wpgetapi' ); ?></li>
858 <li><?php _e( 'Set the <b>Method</b> - GET for getting data & POST for sending data to the API', 'wpgetapi' ); ?></li>
859 <li><?php _e( 'Set the desired <b>Results Format</b>', 'wpgetapi' ); ?></li>
860 <li><?php _e( 'Other fields are optional & will depend on your API', 'wpgetapi' ); ?></li>
861 <li><?php _e( 'Hit the Save button', 'wpgetapi' ); ?></li>
862 <li><?php _e( 'Copy the Template Tag or Shortcode & paste into page, post or theme file', 'wpgetapi' ); ?></li>
863 </ol>
864 </div>
865
866 <?php echo $this->help_box(); ?>
867
868 <?php
869 $content = ob_get_contents();
870 ob_end_clean();
871 return $content;
872
873 }
874
875
876 /**
877 * Sidebar for our setup page.
878 * @since 1.4.4
879 */
880 public function sidebar_setup_page() {
881
882 ob_start();
883 ?>
884
885 <div class="box">
886 <h4><?php esc_html_e( 'Setup Instructions', 'wpgetapi' ); ?></h4>
887 <ol>
888 <li><?php _e( 'Name your API in the <b>API Name</b> field', 'wpgetapi' ); ?></li>
889 <li><?php _e( 'Give your API a <b>Unique ID</b>', 'wpgetapi' ); ?></li>
890 <li><?php _e( 'Add the <b>Base URL</b> of your API. This can be found in the docs of your API', 'wpgetapi' ); ?></li>
891 <li><?php _e( 'Hit the Save button', 'wpgetapi' ); ?></li>
892 <li><?php _e( 'Visit the new tab that will be created', 'wpgetapi' ); ?></li>
893 </ol>
894 </div>
895
896 <?php echo $this->help_box(); ?>
897
898 <?php
899 $content = ob_get_contents();
900 ob_end_clean();
901 return $content;
902
903 }
904
905
906 /**
907 *
908 * @since 1.4.4
909 */
910 public function help_box() {
911
912 ob_start();
913 ?>
914
915 <hr>
916
917 <div class="box help-box">
918 <h4><?php esc_html_e( 'Getting Help', 'wpgetapi' ); ?></h4>
919 <ul>
920 <li><?php
921 printf(
922 esc_html__( 'View the %1$s', 'cmb2' ),
923 '<a target="_blank" href="https://wpgetapi.com/docs/quick-start-guide/?utm_campaign=Docs&utm_medium=Admin&utm_source=User">Quick Start Guide</a>'
924 );
925 ?></li>
926 <li><?php
927 printf(
928 esc_html__( 'View the %1$s', 'cmb2' ),
929 '<a target="_blank" href="https://wpgetapi.com/docs/frequently-asked-questions/?utm_campaign=Docs&utm_medium=Admin&utm_source=User">FAQs</a>'
930 );
931 ?></li>
932
933 <?php if( ! $this->pro_plugin ) { ?>
934 <a class="button" target="_blank" href="https://wpgetapi.com/downloads/pro-plugin/?utm_campaign=Pro&utm_medium=Admin&utm_source=User"><?php esc_html_e( 'Do more with the PRO Plugin', 'cmb2' ); ?></a>
935 <?php } ?>
936 </ul>
937 </div>
938
939 <?php
940 $content = ob_get_contents();
941 ob_end_clean();
942 return $content;
943
944 }
945
946
947 /**
948 * Tabs don't immmediately appear on save, so this hack!
949 * @since 0.1.0
950 */
951 public function redirect( $object_id, $updated ) {
952
953 if( strpos( $object_id, 'wpgetapi_' ) !== false && strpos( $object_id, 'wpgetapi_api_importer' ) == false ) {
954
955 add_settings_error( 'wpgetapi-notices', '', 'Saved, reloading page...', 'updated' );
956 settings_errors( 'wpgetapi-notices' );
957 ?>
958
959 <script>
960 setTimeout(function() {
961 location.reload();
962 }, 200);
963 </script>
964 <?php
965
966 }
967
968 }
969
970
971 /**
972 * Public getter method for retrieving protected/private variables
973 * @since 0.1.0
974 * @param string $field Field to retrieve
975 * @return mixed Field value or exception is thrown
976 */
977 public function __get( $field ) {
978 // Allowed fields to retrieve
979 if ( in_array( $field, array( 'key', 'fields', 'title', 'options_pages' ), true ) ) {
980 return $this->{$field};
981 }
982 if ( 'option_metabox' === $field ) {
983 return $this->option_fields();
984 }
985 throw new Exception( 'Invalid property: ' . $field );
986 }
987
988 }
989
990 /**
991 * Helper function to get/return the WpGetApi_Admin_Options object
992 * @since 0.1.0
993 * @return WpGetApi_Admin_Options object
994 */
995 function wpgetapi_admin_options() {
996 return WpGetApi_Admin_Options::get_instance();
997 }
998
999 // Get it started
1000 wpgetapi_admin_options();
1001
1002 endif;