PluginProbe
WPGet API – Connect to any external REST API / 1.9.8
WPGet API – Connect to any external REST API v1.9.8
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 1.9.8, at includes/class-admin-options.php

752 lines 23.1 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 }
102
103
104 /**
105 * Setup our custom fields
106 * @since 0.1.0
107 */
108 public function init_custom_fields() {
109 require_once WPGETAPIDIR . 'includes/class-fields.php';
110 WpGetApi_Parameter_Field::init_parameter();
111 }
112
113 /**
114 * Register our setting to WP
115 * @since 0.1.0
116 */
117 public function init() {
118 $this->pro_plugin = is_plugin_active( 'wpgetapi-extras/wpgetapi-extras.php' ) ? true : false;
119 $option_tabs = self::option_fields();
120 foreach ($option_tabs as $index => $option_tab) {
121 register_setting( $option_tab['id'], $option_tab['id'] );
122 }
123 }
124
125
126 /**
127 * Get our saved API's from setup
128 * @since 0.1.0
129 */
130 public function get_apis() {
131 $setup = get_option( 'wpgetapi_setup' );
132 if( empty( $setup ) || ! isset( $setup['apis'] ) || empty( $setup['apis'] ) )
133 return;
134 return $setup['apis'];
135 }
136
137
138 /**
139 * Add the options metabox to the array of metaboxes
140 * @since 0.1.0
141 */
142 public function option_fields() {
143
144 //Only need to initiate the array once per page-load
145 if ( ! empty( $this->option_metabox ) ) {
146 return $this->option_metabox;
147 }
148
149 // setup tab
150 $option_metabox[] = array(
151 'title' => __( 'Setup', 'wpgetapi' ),
152 'menu_title' => __( 'Setup', 'wpgetapi' ),
153 'id' => 'wpgetapi_setup',
154 'desc' => __( 'Add the details of the API(s) you are using. Endpoints will be setup in the next step after hitting save.', 'wpgetapi' ),
155 'show_on' => array( 'key' => 'options-page', 'value' => array( 'wpgetapi_setup' ), ),
156 'show_names' => true,
157 'fields' => $this->setup_fields(),
158 );
159
160 // get our saved API's and create as tabs
161 if( $this->get_apis() ) {
162
163 foreach ( $this->get_apis() as $index => $api ) {
164
165 $name = isset( $api['name'] ) && $api['name'] != '' ? sanitize_text_field( $api['name'] ) : 'API ' . absint( $index );
166 $api_id = isset( $api['id'] ) && $api['id'] != '' ? sanitize_text_field( $api['id'] ) : $name;
167 $metabox_id = strtolower( str_replace( '-', '_', sanitize_file_name( 'wpgetapi-' . $api_id ) ) );
168 $base_url = isset( $api['base_url'] ) && $api['base_url'] != '' ? esc_url_raw( $api['base_url'], array( 'http', 'https' ) ) : '';
169 $type = isset( $api['auth_type'] ) && $api['auth_type'] != '' ? sanitize_text_field( $api['auth_type'] ) : '';
170
171 // tab
172 $option_metabox[] = array(
173 'title' => $name,
174 'menu_title' => $name,
175 'id' => $metabox_id,
176 'desc' => '',
177 'show_on' => array( 'key' => 'options-page', 'value' => array( $metabox_id ), ),
178 'show_names' => true,
179 'fields' => $this->endpoint_fields( $type, $api_id, $base_url ),
180 );
181
182 }
183
184 }
185
186 $option_metabox = apply_filters( 'wpgetapi_admin_pages', $option_metabox );
187
188 return $option_metabox;
189
190 }
191
192 public function setup_fields() {
193
194 $fields[] = array(
195 'id' => 'apis',
196 'type' => 'group',
197 'name' => '',
198 'description' => '',
199 'options' => array(
200 'group_title' => __( 'API {#}', 'wpgetapi' ),
201 'add_button' => __( 'Add New API', 'wpgetapi' ),
202 'remove_button' => __( 'Remove API', 'wpgetapi' ),
203 'sortable' => true, // beta
204 ),
205 'fields' => array(
206 array(
207 'name' => __( 'API Name', 'wpgetapi' ) . '<span class="dashicons dashicons-editor-help" data-tip="' . __( 'The name of this API. Call it whatever you like.', 'wpgetapi' ) . '"></span>',
208 'id' => 'name',
209 'type' => 'text',
210 'attributes' => array(
211 'required' => true,
212 'placeholder' => 'Google Maps',
213 ),
214 'desc' => '',
215 ),
216 array(
217 '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>',
218 'id' => 'id',
219 'type' => 'text',
220 'attributes' => array(
221 'required' => true,
222 'placeholder' => 'google_maps',
223 ),
224 'desc' => '',
225 ),
226 array(
227 'name' => __( 'Base URL', 'wpgetapi' ) . '<span class="dashicons dashicons-editor-help" data-tip="' . __( 'The base URL of the API you are connecting to.', 'wpgetapi' ) . '"></span>',
228 'id' => 'base_url',
229 'type' => 'text',
230 'attributes' => array(
231 'required' => true,
232 'placeholder' => 'https://maps.googleapis.com/maps/api',
233 ),
234 'desc' => '',
235 ),
236
237 )
238 );
239
240 return $fields;
241
242 }
243
244
245 /**
246 * Endpoint settings.
247 * @return sale info array
248 *
249 */
250 public function endpoint_fields( $type = '', $api_id = '', $base_url = '' ) {
251
252 $fields = array();
253
254 $cache_disabled = $this->pro_plugin ? '' : 'disabled';
255 $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=Cache Pro Plugin&utm_medium=Admin&utm_source=User">PRO Feature<span class="dashicons dashicons-external"></span></a>';
256
257 $endpoint_fields = apply_filters( 'wpgetapi_fields_endpoints', array(
258 array(
259 '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>',
260 'id' => 'id',
261 'type' => 'text',
262 'classes' => 'field-id',
263 'attributes' => array(
264 'required' => true,
265 'placeholder' => 'new_endpoint',
266 ),
267 'desc' => '',
268 'before_row' => "wpgetapi_output_top_of_endpoint",
269 'api_id' => $api_id,
270
271 ),
272 array(
273 '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>',
274 'id' => 'endpoint',
275 'type' => 'text',
276 'classes' => 'field-endpoint',
277 'attributes' => array(
278 'required' => true,
279 'placeholder' => '/newendpoint',
280 ),
281 'desc' => '',
282 ),
283 array(
284 '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>',
285 'id' => 'method',
286 'type' => 'select',
287 'classes' => 'field-method',
288 'attributes' => array(
289 'required' => true,
290 ),
291 'options' => array(
292 'GET' => 'GET',
293 'POST' => 'POST',
294 'PUT' => 'PUT',
295 'PATCH' => 'PATCH',
296 'DELETE' => 'DELETE',
297 ),
298 'desc' => '',
299 ),
300
301 array(
302 'name' => __( 'Results Format', 'wpgetapi' ) .
303 '<span class="dashicons dashicons-editor-help" data-tip="' .
304 sprintf(
305 __( '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' ),
306 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>' )
307 ) .
308 '"></span>',
309 'id' => 'results_format',
310 'type' => 'select',
311 'classes' => 'field-results-format',
312 'attributes' => array(
313 'required' => true,
314 ),
315 'options_cb' => 'wpgetapi_results_format_options',
316 'desc' => ''
317 ),
318
319 array(
320 'name' => __( 'Cache Time', 'wpgetapi' ) .
321 '<span class="dashicons dashicons-editor-help" data-tip="' .
322 sprintf(
323 __( 'The time in seconds to cache this request for. %1s', 'wpgetapi' ),
324 htmlentities( '<br>' . $cache_url )
325 ) .
326 '"></span>',
327 'id' => 'cache_time',
328 'type' => 'text',
329 'classes' => 'field-cache-time',
330 'attributes' => array(
331 'placeholder' => '3600',
332 $cache_disabled => $cache_disabled,
333 ),
334 'desc' => ''
335 ),
336
337 array(
338 'name' => __( 'Query String', 'wpgetapi' ) .
339 '<span class="dashicons dashicons-editor-help" data-tip="' .
340 sprintf(
341 __( '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' ),
342 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>' )
343 ) .
344 '"></span>',
345 'id' => 'query_parameters',
346 'type' => 'parameter',
347 'classes' => 'field-query-parameters',
348 'repeatable' => true,
349 'desc' => ''
350 ),
351 array(
352 'name' => __( 'Headers', 'wpgetapi' ) .
353 '<span class="dashicons dashicons-editor-help" data-tip="' .
354 sprintf(
355 __( 'Parameters as name/value pairs, sent in the Headers. %1s', 'wpgetapi' ),
356 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>' )
357 ) .
358 '"></span>',
359 'id' => 'header_parameters',
360 'type' => 'parameter',
361 'classes' => 'field-header-parameters',
362 'repeatable' => true,
363 'desc' => ''
364 ),
365 array(
366 'name' => __( 'Body POST Fields', 'wpgetapi' ) .
367 '<span class="dashicons dashicons-editor-help" data-tip="' .
368 sprintf(
369 __( 'Parameters as name/value pairs, sent in the Body as POST fields. %1s', 'wpgetapi' ),
370 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>' )
371 ) .
372 '"></span>',
373 'id' => 'body_parameters',
374 'type' => 'parameter',
375 'classes' => 'field-body-parameters',
376 'repeatable' => true,
377 'desc' => ''
378 ),
379 array(
380 'name' => __( 'Encode Body', 'wpgetapi' ) . '<span class="dashicons dashicons-editor-help" data-tip="' . __( 'Encoding of the above Body parameters.', 'wpgetapi' ) . '"></span>',
381 'id' => 'body_json_encode',
382 'type' => 'select',
383 'classes' => 'field-body-json-encode',
384 'options' => array(
385 'false' => __( 'No encoding (raw)', 'wpgetapi' ),
386 'true' => __( 'JSON encode', 'wpgetapi' ),
387 'url' => __( 'URL encode (x-www-form-urlencoded)', 'wpgetapi' ),
388 'base64' => __( 'Base64 encode', 'wpgetapi' ),
389 'xml' => __( 'XML format (available in PRO)', 'wpgetapi' ),
390
391 ),
392 'desc' => '',
393 ),
394 ) );
395
396
397 $fields[] = array(
398 'id' => 'endpoints',
399 'type' => 'group',
400 'name' => '',
401 'description' => '',
402 'options' => array(
403 'group_title' => __( 'Endpoint {#}', 'wpgetapi' ),
404 'add_button' => __( 'Add Endpoint', 'wpgetapi' ),
405 'remove_button' => __( 'Remove Endpoint', 'wpgetapi' ),
406 'sortable' => true, // beta
407 ),
408 'before_group' => '<pre class="url">Base URL: <span>' . $base_url . '</span></pre>',
409 'fields' => $endpoint_fields,
410 );
411
412 return apply_filters( 'wpgetapi_fields', $fields );
413
414 }
415
416
417 public function add_options_pages() {
418
419 $option_tabs = self::option_fields();
420
421 foreach ($option_tabs as $index => $option_tab) {
422 if ( $index == 0) {
423
424 $this->options_pages[] = add_menu_page( $this->title, $this->menu_title, 'manage_options', $option_tab['id'], array( $this, 'admin_page_display' ), 'none'
425 ); //Link admin menu to first tab
426
427 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
428 } else {
429 $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' ) );
430 }
431 }
432
433 foreach ( $this->options_pages as $page ) {
434 // Include CMB CSS in the head to avoid FOUC
435 add_action( "admin_print_styles-{$page}", array( 'CMB2_Hookup', 'enqueue_cmb_css' ) );
436 }
437
438 }
439
440 /**
441 * Admin page markup. Mmply handled by CMB2
442 * @since 0.1.0
443 */
444 public function admin_page_display() {
445
446 $option_tabs = self::option_fields(); //get all option tabs
447 $tab_forms = array();
448 ?>
449
450 <div class="wrap wpgetapi">
451
452 <div class="main_content_cell">
453
454 <h1 class="wp-heading-inline">
455 <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>
456 </h1>
457 <!-- Options Page Nav Tabs -->
458 <h2 class="nav-tab-wrapper">
459 <?php foreach ($option_tabs as $option_tab) :
460
461 $tab_slug = $option_tab['id'];
462 $nav_class = 'nav-tab';
463 if ( $tab_slug == $_GET['page'] ) {
464 $nav_class .= ' nav-tab-active'; //add active class to current tab
465 $tab_forms[] = $option_tab; //add current tab to forms to be rendered
466 }
467
468 ?>
469
470 <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>
471
472 <?php endforeach; ?>
473 </h2>
474 <!-- End of Nav Tabs -->
475
476 <?php
477 //render all tab forms (normaly just 1 form)
478 foreach ($tab_forms as $tab_form) : ?>
479
480 <div id="<?php esc_attr_e($tab_form['id']); ?>" class="cmb-form group">
481 <div class="metabox-holder">
482 <div class="pmpbox pad">
483 <h3 class="title"><?php esc_html_e($tab_form['title'], 'wpgetapi'); ?></h3>
484 <div class="desc"><?php echo wp_kses_post( $tab_form['desc'] ); ?></div>
485 <?php cmb2_metabox_form( $tab_form, $tab_form['id'], $tab_form ); ?>
486 </div>
487 </div>
488 </div>
489
490 <?php endforeach; ?>
491
492 </div>
493
494 <div class="sidebar_cell">
495
496 <?php
497 $sidebar = self::sidebar_display();
498 echo apply_filters( 'wpgetapi_admin_sidebar_display', $sidebar );
499 ?>
500
501 </div>
502
503 </div>
504
505 <?php
506
507 }
508
509
510 public function test_the_endpoint() {
511
512 $api_id = sanitize_text_field( $_POST['api_id'] );
513 $endpoint_id = sanitize_text_field( $_POST['endpoint_id'] );
514 $data = wpgetapi_endpoint( $api_id, $endpoint_id, array( 'test_endpoint' => true ) );
515
516 $output = array(
517 'data' => $data,
518 'endpoint_id' => $endpoint_id
519 );
520 echo json_encode( $output );
521
522 wp_die(); // this is required to terminate immediately and return a proper response
523
524 }
525
526
527 public function load_testing_javascript() { ?>
528
529 <script type="text/javascript" >
530
531 jQuery(document).ready(function($) {
532
533 $('body').on( 'click', '.wpgetapi-test-area .test-button', function(){//delegated
534
535 var $this = $(this);
536 var area = $this.parents( '.wpgetapi-test-area' );
537 var api_id = $( area ).data( 'api' );
538 var endpoint_id = $( area ).data( 'endpoint' );
539
540 // disable button
541 $this.attr( 'disabled', true );
542
543 var data = {
544 'action': 'wpgetapi_test_endpoint',
545 'api_id': api_id,
546 'endpoint_id': endpoint_id
547 };
548
549 // send and get response
550 jQuery.post(ajaxurl, data, function( response ) {
551
552 var output = JSON.parse( response );
553
554 jQuery( '.wpgetapi-test-area[data-endpoint="' + output.endpoint_id + '"] .handle' ).show();
555
556 jQuery( '.wpgetapi-test-area[data-endpoint="' + output.endpoint_id + '"] .wpgetapi-result' ).html( output.data);
557
558 // enable button
559 $( '.wpgetapi-test-area[data-endpoint="' + output.endpoint_id + '"] .test-button' ).attr( 'disabled', false );
560
561 });
562
563 });
564
565 $( '.wpgetapi-test-area .handle' ).on('click', function() {
566 $('.wpgetapi-result').toggle();
567 });
568
569 });
570
571 </script> <?php
572
573 }
574
575
576 /**
577 * Sidebar markup.
578 * @since 1.4.1
579 */
580 public function sidebar_display() {
581
582 ob_start();
583
584 // do our setup page
585 if( isset( $_GET['page'] ) && $_GET['page'] === 'wpgetapi_setup' )
586 return $this->sidebar_setup_page();
587
588 ?>
589
590 <div class="box">
591 <strong><?php esc_html_e( 'Endpoint Instructions', 'wpgetapi' ); ?></strong>
592 <ol>
593 <li><?php _e( 'Give your endpoint a <b>Unique ID</b>', 'wpgetapi' ); ?></li>
594 <li><?php _e( 'Add the <b>Endpoint</b> which can be found in your API docs', 'wpgetapi' ); ?></li>
595 <li><?php _e( 'Set the <b>Method</b> - GET for getting data & POST for sending data to the API', 'wpgetapi' ); ?></li>
596 <li><?php _e( 'Set the desired <b>Results Format</b>', 'wpgetapi' ); ?></li>
597 <li><?php _e( 'Other fields are optional & will depend on your API', 'wpgetapi' ); ?></li>
598 <li><?php _e( 'Hit the Save button', 'wpgetapi' ); ?></li>
599 <li><?php _e( 'Copy the Template Tag or Shortcode & paste into page, post or theme file', 'wpgetapi' ); ?></li>
600 </ol>
601 </div>
602
603 <hr>
604
605 <div class="box">
606 <strong><?php esc_html_e( 'Getting Help', 'wpgetapi' ); ?></strong>
607 <ul>
608 <li><?php
609 printf(
610 esc_html__( 'View the %1$s', 'cmb2' ),
611 '<a target="_blank" href="https://wpgetapi.com/docs/quick-start-guide/?utm_campaign=Docs&utm_medium=Admin&utm_source=User">Quick Start Guide</a>'
612 );
613 ?></li>
614 <li><?php
615 printf(
616 esc_html__( 'View the %1$s', 'cmb2' ),
617 '<a target="_blank" href="https://wpgetapi.com/docs/frequently-asked-questions/?utm_campaign=Docs&utm_medium=Admin&utm_source=User">FAQs</a>'
618 );
619 ?></li>
620 <li><?php
621 printf(
622 esc_html__( 'Do more with the %1$s', 'cmb2' ),
623 '<a target="_blank" href="https://wpgetapi.com/downloads/pro-plugin/?utm_campaign=Pro&utm_medium=Admin&utm_source=User">PRO Plugin</a>'
624 );
625 ?></li>
626 </ul>
627 </div>
628
629 <?php
630 $content = ob_get_contents();
631 ob_end_clean();
632 return $content;
633
634 }
635
636
637 /**
638 * Sidebar for our setup page.
639 * @since 1.4.4
640 */
641 public function sidebar_setup_page() {
642
643 ob_start();
644 ?>
645
646 <div class="box">
647 <strong><?php esc_html_e( 'Setup Instructions', 'wpgetapi' ); ?></strong>
648 <ol>
649 <li><?php _e( 'Name your API in the <b>API Name</b> field', 'wpgetapi' ); ?></li>
650 <li><?php _e( 'Give your API a <b>Unique ID</b>', 'wpgetapi' ); ?></li>
651 <li><?php _e( 'Add the <b>Base URL</b> of your API. This can be found in the docs of your API', 'wpgetapi' ); ?></li>
652 <li><?php _e( 'Hit the Save button', 'wpgetapi' ); ?></li>
653 <li><?php _e( 'Visit the new tab that will be created', 'wpgetapi' ); ?></li>
654 </ol>
655 </div>
656
657 <hr>
658
659 <div class="box">
660 <strong><?php esc_html_e( 'Getting Help', 'wpgetapi' ); ?></strong>
661 <ul>
662 <li><?php
663 printf(
664 esc_html__( 'View the %1$s', 'cmb2' ),
665 '<a target="_blank" href="https://wpgetapi.com/docs/quick-start-guide/?utm_campaign=Docs&utm_medium=Admin&utm_source=User">Quick Start Guide</a>'
666 );
667 ?></li>
668 <li><?php
669 printf(
670 esc_html__( 'View the %1$s', 'cmb2' ),
671 '<a target="_blank" href="https://wpgetapi.com/docs/frequently-asked-questions/?utm_campaign=Docs&utm_medium=Admin&utm_source=User">FAQs</a>'
672 );
673 ?></li>
674 <li><?php
675 printf(
676 esc_html__( 'Do more with the %1$s', 'cmb2' ),
677 '<a target="_blank" href="https://wpgetapi.com/downloads/pro-plugin/?utm_campaign=Pro&utm_medium=Admin&utm_source=User">PRO Plugin</a>'
678 );
679 ?></li>
680 </ul>
681 </div>
682
683 <?php
684 $content = ob_get_contents();
685 ob_end_clean();
686 return $content;
687
688 }
689
690
691 /**
692 * Tabs don't immmediately appear on save, so this hack!
693 * @since 0.1.0
694 */
695 public function redirect( $object_id, $updated ) {
696
697 if( $object_id == 'wpgetapi_setup' ) {
698
699 add_settings_error( 'wpgetapi-notices', '', 'Saved, reloading page...', 'updated' );
700 settings_errors( 'wpgetapi-notices' );
701 ?>
702
703 <script>
704 setTimeout(function() {
705 location.reload();
706 }, 1000);
707 </script>
708 <?php
709
710 } else if ( strpos( $object_id, 'wpgetapi_' ) !== false ) {
711
712 $text = apply_filters( 'wpgetapi_admin_notice_text', __( 'Saved.', 'wpgetapi' ), $object_id );
713 add_settings_error( 'wpgetapi-notices', '', $text, 'updated' );
714 settings_errors( 'wpgetapi-notices' );
715
716 }
717
718 }
719
720
721 /**
722 * Public getter method for retrieving protected/private variables
723 * @since 0.1.0
724 * @param string $field Field to retrieve
725 * @return mixed Field value or exception is thrown
726 */
727 public function __get( $field ) {
728 // Allowed fields to retrieve
729 if ( in_array( $field, array( 'key', 'fields', 'title', 'options_pages' ), true ) ) {
730 return $this->{$field};
731 }
732 if ( 'option_metabox' === $field ) {
733 return $this->option_fields();
734 }
735 throw new Exception( 'Invalid property: ' . $field );
736 }
737
738 }
739
740 /**
741 * Helper function to get/return the WpGetApi_Admin_Options object
742 * @since 0.1.0
743 * @return WpGetApi_Admin_Options object
744 */
745 function wpgetapi_admin_options() {
746 return WpGetApi_Admin_Options::get_instance();
747 }
748
749 // Get it started
750 wpgetapi_admin_options();
751
752 endif;