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

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