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

749 lines 23.0 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 'DELETE' => 'DELETE',
296 ),
297 'desc' => '',
298 ),
299
300 array(
301 'name' => __( 'Results Format', 'wpgetapi' ) .
302 '<span class="dashicons dashicons-editor-help" data-tip="' .
303 sprintf(
304 __( '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' ),
305 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>' )
306 ) .
307 '"></span>',
308 'id' => 'results_format',
309 'type' => 'select',
310 'classes' => 'field-results-format',
311 'attributes' => array(
312 'required' => true,
313 ),
314 'options_cb' => 'wpgetapi_results_format_options',
315 'desc' => ''
316 ),
317
318 array(
319 'name' => __( 'Cache Time', 'wpgetapi' ) .
320 '<span class="dashicons dashicons-editor-help" data-tip="' .
321 sprintf(
322 __( 'The time in seconds to cache this request for. %1s', 'wpgetapi' ),
323 htmlentities( '<br>' . $cache_url )
324 ) .
325 '"></span>',
326 'id' => 'cache_time',
327 'type' => 'text',
328 'classes' => 'field-cache-time',
329 'attributes' => array(
330 'placeholder' => '3600',
331 $cache_disabled => $cache_disabled,
332 ),
333 'desc' => ''
334 ),
335
336 array(
337 'name' => __( 'Query String', 'wpgetapi' ) .
338 '<span class="dashicons dashicons-editor-help" data-tip="' .
339 sprintf(
340 __( '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' ),
341 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>' )
342 ) .
343 '"></span>',
344 'id' => 'query_parameters',
345 'type' => 'parameter',
346 'classes' => 'field-query-parameters',
347 'repeatable' => true,
348 'desc' => ''
349 ),
350 array(
351 'name' => __( 'Headers', 'wpgetapi' ) .
352 '<span class="dashicons dashicons-editor-help" data-tip="' .
353 sprintf(
354 __( 'Parameters as name/value pairs, sent in the Headers. %1s', 'wpgetapi' ),
355 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>' )
356 ) .
357 '"></span>',
358 'id' => 'header_parameters',
359 'type' => 'parameter',
360 'classes' => 'field-header-parameters',
361 'repeatable' => true,
362 'desc' => ''
363 ),
364 array(
365 'name' => __( 'Body POST Fields', 'wpgetapi' ) .
366 '<span class="dashicons dashicons-editor-help" data-tip="' .
367 sprintf(
368 __( 'Parameters as name/value pairs, sent in the Body as POST fields. %1s', 'wpgetapi' ),
369 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>' )
370 ) .
371 '"></span>',
372 'id' => 'body_parameters',
373 'type' => 'parameter',
374 'classes' => 'field-body-parameters',
375 'repeatable' => true,
376 'desc' => ''
377 ),
378 array(
379 'name' => __( 'Encode Body', 'wpgetapi' ) . '<span class="dashicons dashicons-editor-help" data-tip="' . __( 'Encoding of the above Body parameters.', 'wpgetapi' ) . '"></span>',
380 'id' => 'body_json_encode',
381 'type' => 'select',
382 'classes' => 'field-body-json-encode',
383 'options' => array(
384 'false' => __( 'No encoding (raw)', 'wpgetapi' ),
385 'true' => __( 'JSON encode', 'wpgetapi' ),
386 'url' => __( 'URL encode (x-www-form-urlencoded)', 'wpgetapi' ),
387 'xml' => __( 'XML format (available in PRO only)', 'wpgetapi' ),
388 ),
389 'desc' => '',
390 ),
391 ) );
392
393
394 $fields[] = array(
395 'id' => 'endpoints',
396 'type' => 'group',
397 'name' => '',
398 'description' => '',
399 'options' => array(
400 'group_title' => __( 'Endpoint {#}', 'wpgetapi' ),
401 'add_button' => __( 'Add Endpoint', 'wpgetapi' ),
402 'remove_button' => __( 'Remove Endpoint', 'wpgetapi' ),
403 'sortable' => true, // beta
404 ),
405 'before_group' => '<pre class="url">Base URL: <span>' . $base_url . '</span></pre>',
406 'fields' => $endpoint_fields,
407 );
408
409 return apply_filters( 'wpgetapi_fields', $fields );
410
411 }
412
413
414 public function add_options_pages() {
415
416 $option_tabs = self::option_fields();
417
418 foreach ($option_tabs as $index => $option_tab) {
419 if ( $index == 0) {
420
421 $this->options_pages[] = add_menu_page( $this->title, $this->menu_title, 'manage_options', $option_tab['id'], array( $this, 'admin_page_display' ), 'none'
422 ); //Link admin menu to first tab
423
424 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
425 } else {
426 $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' ) );
427 }
428 }
429
430 foreach ( $this->options_pages as $page ) {
431 // Include CMB CSS in the head to avoid FOUC
432 add_action( "admin_print_styles-{$page}", array( 'CMB2_Hookup', 'enqueue_cmb_css' ) );
433 }
434
435 }
436
437 /**
438 * Admin page markup. Mmply handled by CMB2
439 * @since 0.1.0
440 */
441 public function admin_page_display() {
442
443 $option_tabs = self::option_fields(); //get all option tabs
444 $tab_forms = array();
445 ?>
446
447 <div class="wrap wpgetapi">
448
449 <div class="main_content_cell">
450
451 <h1 class="wp-heading-inline">
452 <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>
453 </h1>
454 <!-- Options Page Nav Tabs -->
455 <h2 class="nav-tab-wrapper">
456 <?php foreach ($option_tabs as $option_tab) :
457
458 $tab_slug = $option_tab['id'];
459 $nav_class = 'nav-tab';
460 if ( $tab_slug == $_GET['page'] ) {
461 $nav_class .= ' nav-tab-active'; //add active class to current tab
462 $tab_forms[] = $option_tab; //add current tab to forms to be rendered
463 }
464
465 ?>
466
467 <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>
468
469 <?php endforeach; ?>
470 </h2>
471 <!-- End of Nav Tabs -->
472
473 <?php
474 //render all tab forms (normaly just 1 form)
475 foreach ($tab_forms as $tab_form) : ?>
476
477 <div id="<?php esc_attr_e($tab_form['id']); ?>" class="cmb-form group">
478 <div class="metabox-holder">
479 <div class="pmpbox pad">
480 <h3 class="title"><?php esc_html_e($tab_form['title'], 'wpgetapi'); ?></h3>
481 <div class="desc"><?php echo wp_kses_post( $tab_form['desc'] ); ?></div>
482 <?php cmb2_metabox_form( $tab_form, $tab_form['id'], $tab_form ); ?>
483 </div>
484 </div>
485 </div>
486
487 <?php endforeach; ?>
488
489 </div>
490
491 <div class="sidebar_cell">
492
493 <?php
494 $sidebar = self::sidebar_display();
495 echo apply_filters( 'wpgetapi_admin_sidebar_display', $sidebar );
496 ?>
497
498 </div>
499
500 </div>
501
502 <?php
503
504 }
505
506
507 public function test_the_endpoint() {
508
509 $api_id = sanitize_text_field( $_POST['api_id'] );
510 $endpoint_id = sanitize_text_field( $_POST['endpoint_id'] );
511 $data = wpgetapi_endpoint( $api_id, $endpoint_id, array( 'test_endpoint' => true ) );
512
513 $output = array(
514 'data' => $data,
515 'endpoint_id' => $endpoint_id
516 );
517 echo json_encode( $output );
518
519 wp_die(); // this is required to terminate immediately and return a proper response
520
521 }
522
523
524 public function load_testing_javascript() { ?>
525
526 <script type="text/javascript" >
527
528 jQuery(document).ready(function($) {
529
530 $('body').on( 'click', '.wpgetapi-test-area .test-button', function(){//delegated
531
532 var $this = $(this);
533 var area = $this.parents( '.wpgetapi-test-area' );
534 var api_id = $( area ).data( 'api' );
535 var endpoint_id = $( area ).data( 'endpoint' );
536
537 // disable button
538 $this.attr( 'disabled', true );
539
540 var data = {
541 'action': 'wpgetapi_test_endpoint',
542 'api_id': api_id,
543 'endpoint_id': endpoint_id
544 };
545
546 // send and get response
547 jQuery.post(ajaxurl, data, function( response ) {
548
549 var output = JSON.parse( response );
550
551 jQuery( '.wpgetapi-test-area[data-endpoint="' + output.endpoint_id + '"] .handle' ).show();
552
553 jQuery( '.wpgetapi-test-area[data-endpoint="' + output.endpoint_id + '"] .wpgetapi-result' ).html( output.data);
554
555 // enable button
556 $( '.wpgetapi-test-area[data-endpoint="' + output.endpoint_id + '"] .test-button' ).attr( 'disabled', false );
557
558 });
559
560 });
561
562 $( '.wpgetapi-test-area .handle' ).on('click', function() {
563 $('.wpgetapi-result').toggle();
564 });
565
566 });
567
568 </script> <?php
569
570 }
571
572
573 /**
574 * Sidebar markup.
575 * @since 1.4.1
576 */
577 public function sidebar_display() {
578
579 ob_start();
580
581 // do our setup page
582 if( isset( $_GET['page'] ) && $_GET['page'] === 'wpgetapi_setup' )
583 return $this->sidebar_setup_page();
584
585 ?>
586
587 <div class="box">
588 <strong><?php esc_html_e( 'Endpoint Instructions', 'wpgetapi' ); ?></strong>
589 <ol>
590 <li><?php _e( 'Give your endpoint a <b>Unique ID</b>', 'wpgetapi' ); ?></li>
591 <li><?php _e( 'Add the <b>Endpoint</b> which can be found in your API docs', 'wpgetapi' ); ?></li>
592 <li><?php _e( 'Set the <b>Method</b> - GET for getting data & POST for sending data to the API', 'wpgetapi' ); ?></li>
593 <li><?php _e( 'Set the desired <b>Results Format</b>', 'wpgetapi' ); ?></li>
594 <li><?php _e( 'Other fields are optional & will depend on your API', 'wpgetapi' ); ?></li>
595 <li><?php _e( 'Hit the Save button', 'wpgetapi' ); ?></li>
596 <li><?php _e( 'Copy the Template Tag or Shortcode & paste into page, post or theme file', 'wpgetapi' ); ?></li>
597 </ol>
598 </div>
599
600 <hr>
601
602 <div class="box">
603 <strong><?php esc_html_e( 'Getting Help', 'wpgetapi' ); ?></strong>
604 <ul>
605 <li><?php
606 printf(
607 esc_html__( 'View the %1$s', 'cmb2' ),
608 '<a target="_blank" href="https://wpgetapi.com/docs/quick-start-guide/?utm_campaign=Docs&utm_medium=Admin&utm_source=User">Quick Start Guide</a>'
609 );
610 ?></li>
611 <li><?php
612 printf(
613 esc_html__( 'View the %1$s', 'cmb2' ),
614 '<a target="_blank" href="https://wpgetapi.com/docs/frequently-asked-questions/?utm_campaign=Docs&utm_medium=Admin&utm_source=User">FAQs</a>'
615 );
616 ?></li>
617 <li><?php
618 printf(
619 esc_html__( 'Do more with the %1$s', 'cmb2' ),
620 '<a target="_blank" href="https://wpgetapi.com/downloads/pro-plugin/?utm_campaign=Pro&utm_medium=Admin&utm_source=User">PRO Plugin</a>'
621 );
622 ?></li>
623 </ul>
624 </div>
625
626 <?php
627 $content = ob_get_contents();
628 ob_end_clean();
629 return $content;
630
631 }
632
633
634 /**
635 * Sidebar for our setup page.
636 * @since 1.4.4
637 */
638 public function sidebar_setup_page() {
639
640 ob_start();
641 ?>
642
643 <div class="box">
644 <strong><?php esc_html_e( 'Setup Instructions', 'wpgetapi' ); ?></strong>
645 <ol>
646 <li><?php _e( 'Name your API in the <b>API Name</b> field', 'wpgetapi' ); ?></li>
647 <li><?php _e( 'Give your API a <b>Unique ID</b>', 'wpgetapi' ); ?></li>
648 <li><?php _e( 'Add the <b>Base URL</b> of your API. This can be found in the docs of your API', 'wpgetapi' ); ?></li>
649 <li><?php _e( 'Hit the Save button', 'wpgetapi' ); ?></li>
650 <li><?php _e( 'Visit the new tab that will be created', 'wpgetapi' ); ?></li>
651 </ol>
652 </div>
653
654 <hr>
655
656 <div class="box">
657 <strong><?php esc_html_e( 'Getting Help', 'wpgetapi' ); ?></strong>
658 <ul>
659 <li><?php
660 printf(
661 esc_html__( 'View the %1$s', 'cmb2' ),
662 '<a target="_blank" href="https://wpgetapi.com/docs/quick-start-guide/?utm_campaign=Docs&utm_medium=Admin&utm_source=User">Quick Start Guide</a>'
663 );
664 ?></li>
665 <li><?php
666 printf(
667 esc_html__( 'View the %1$s', 'cmb2' ),
668 '<a target="_blank" href="https://wpgetapi.com/docs/frequently-asked-questions/?utm_campaign=Docs&utm_medium=Admin&utm_source=User">FAQs</a>'
669 );
670 ?></li>
671 <li><?php
672 printf(
673 esc_html__( 'Do more with the %1$s', 'cmb2' ),
674 '<a target="_blank" href="https://wpgetapi.com/downloads/pro-plugin/?utm_campaign=Pro&utm_medium=Admin&utm_source=User">PRO Plugin</a>'
675 );
676 ?></li>
677 </ul>
678 </div>
679
680 <?php
681 $content = ob_get_contents();
682 ob_end_clean();
683 return $content;
684
685 }
686
687
688 /**
689 * Tabs don't immmediately appear on save, so this hack!
690 * @since 0.1.0
691 */
692 public function redirect( $object_id, $updated ) {
693
694 if( $object_id == 'wpgetapi_setup' ) {
695
696 add_settings_error( 'wpgetapi-notices', '', 'Saved, reloading page...', 'updated' );
697 settings_errors( 'wpgetapi-notices' );
698 ?>
699
700 <script>
701 setTimeout(function() {
702 location.reload();
703 }, 1000);
704 </script>
705 <?php
706
707 } else if ( strpos( $object_id, 'wpgetapi_' ) !== false ) {
708
709 $text = apply_filters( 'wpgetapi_admin_notice_text', __( 'Saved.', 'wpgetapi' ), $object_id );
710 add_settings_error( 'wpgetapi-notices', '', $text, 'updated' );
711 settings_errors( 'wpgetapi-notices' );
712
713 }
714
715 }
716
717
718 /**
719 * Public getter method for retrieving protected/private variables
720 * @since 0.1.0
721 * @param string $field Field to retrieve
722 * @return mixed Field value or exception is thrown
723 */
724 public function __get( $field ) {
725 // Allowed fields to retrieve
726 if ( in_array( $field, array( 'key', 'fields', 'title', 'options_pages' ), true ) ) {
727 return $this->{$field};
728 }
729 if ( 'option_metabox' === $field ) {
730 return $this->option_fields();
731 }
732 throw new Exception( 'Invalid property: ' . $field );
733 }
734
735 }
736
737 /**
738 * Helper function to get/return the WpGetApi_Admin_Options object
739 * @since 0.1.0
740 * @return WpGetApi_Admin_Options object
741 */
742 function wpgetapi_admin_options() {
743 return WpGetApi_Admin_Options::get_instance();
744 }
745
746 // Get it started
747 wpgetapi_admin_options();
748
749 endif;