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

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