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

734 lines 21.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Settings Required
4 *
5 */
6
7 // Exit if accessed directly.
8 if ( ! defined( 'ABSPATH' ) ) exit;
9
10 if ( ! class_exists( 'WpGetApi_Admin_Options' ) ) :
11
12 /**
13 * CMB2 Theme Options
14 * @version 0.1.0
15 */
16 class WpGetApi_Admin_Options {
17
18 /**
19 * Array of metaboxes/fields
20 * @var array
21 */
22 public $option_metabox = array();
23
24 /**
25 * Array of metaboxes/fields
26 * @var array
27 */
28 public $metabox_id = '';
29
30 /**
31 * Options Page title
32 * @var string
33 */
34 protected $title = '';
35
36 /**
37 * Options Page title
38 * @var string
39 */
40 protected $menu_title = '';
41
42 /**
43 * Options Tab Pages
44 * @var array
45 */
46 public $options_pages = array();
47
48 /**
49 * Is pro plugin installed
50 * @var array
51 */
52 public $pro_plugin = false;
53
54 /**
55 * Holds an instance of the object
56 *
57 * @var Myprefix_Admin
58 **/
59 private static $instance = null;
60
61 /**
62 * Constructor
63 * @since 0.1.0
64 */
65 private function __construct() {
66 // Set our title
67 $this->menu_title = __( 'WPGetAPI', 'wpgetapi' );
68 $this->title = __( 'WPGetAPI', 'wpgetapi' );
69
70 }
71
72 /**
73 * Returns the running object
74 *
75 * @return Myprefix_Admin
76 **/
77 public static function get_instance() {
78 if( is_null( self::$instance ) ) {
79 self::$instance = new self();
80 self::$instance->hooks();
81 }
82 return self::$instance;
83 }
84
85 /**
86 * Initiate our hooks
87 * @since 0.1.0
88 */
89 public function hooks() {
90 add_action( 'admin_init', array( $this, 'init' ) );
91 add_action( 'admin_menu', array( $this, 'add_options_pages' ) );
92
93 add_action( 'cmb2_admin_init', array( $this, 'init_custom_fields' ) );
94
95 add_action( "cmb2_save_options-page_fields", array( $this, 'redirect' ), 1, 2 );
96
97 add_action( 'admin_footer', array( $this, 'load_testing_javascript' ) );
98
99 add_action( 'wp_ajax_wpgetapi_test_endpoint', array( $this, 'test_the_endpoint' ) );
100
101 }
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( output.data);
539
540 // enable button
541 $( '.wpgetapi-test-area[data-endpoint="' + output.endpoint_id + '"] .test-button' ).attr( 'disabled', false );
542
543 });
544
545 });
546
547 $( '.wpgetapi-test-area .handle' ).on('click', function() {
548 $('.wpgetapi-result').toggle();
549 });
550
551 });
552
553 </script> <?php
554
555 }
556
557
558 /**
559 * Sidebar markup.
560 * @since 1.4.1
561 */
562 public function sidebar_display() {
563
564 ob_start();
565
566 // do our setup page
567 if( isset( $_GET['page'] ) && $_GET['page'] === 'wpgetapi_setup' )
568 return $this->sidebar_setup_page();
569
570 ?>
571
572 <div class="box">
573 <strong><?php esc_html_e( 'Endpoint Instructions', 'wpgetapi' ); ?></strong>
574 <ol>
575 <li><?php _e( 'Give your endpoint a <b>Unique ID</b>', 'wpgetapi' ); ?></li>
576 <li><?php _e( 'Add the <b>Endpoint</b> which can be found in your API docs', 'wpgetapi' ); ?></li>
577 <li><?php _e( 'Set the <b>Method</b> - GET for getting data & POST for sending data to the API', 'wpgetapi' ); ?></li>
578 <li><?php _e( 'Set the desired <b>Results Format</b>', 'wpgetapi' ); ?></li>
579 <li><?php _e( 'Other fields are optional & will depend on your API', 'wpgetapi' ); ?></li>
580 <li><?php _e( 'Hit the Save button', 'wpgetapi' ); ?></li>
581 <li><?php _e( 'Copy the Template Tag or Shortcode & paste into page, post or theme file', 'wpgetapi' ); ?></li>
582 </ol>
583 </div>
584
585 <hr>
586
587 <div class="box">
588 <strong><?php esc_html_e( 'Getting Help', 'wpgetapi' ); ?></strong>
589 <ul>
590 <li><?php
591 printf(
592 esc_html__( 'View the %1$s', 'cmb2' ),
593 '<a target="_blank" href="https://wpgetapi.com/docs/quick-start-guide/?utm_campaign=Docs&utm_medium=Admin&utm_source=User">Quick Start Guide</a>'
594 );
595 ?></li>
596 <li><?php
597 printf(
598 esc_html__( 'View the %1$s', 'cmb2' ),
599 '<a target="_blank" href="https://wpgetapi.com/docs/frequently-asked-questions/?utm_campaign=Docs&utm_medium=Admin&utm_source=User">FAQs</a>'
600 );
601 ?></li>
602 <li><?php
603 printf(
604 esc_html__( 'Do more with the %1$s', 'cmb2' ),
605 '<a target="_blank" href="https://wpgetapi.com/downloads/pro-plugin/?utm_campaign=Pro&utm_medium=Admin&utm_source=User">PRO Plugin</a>'
606 );
607 ?></li>
608 </ul>
609 </div>
610
611 <?php
612 $content = ob_get_contents();
613 ob_end_clean();
614 return $content;
615
616 }
617
618
619 /**
620 * Sidebar for our setup page.
621 * @since 1.4.4
622 */
623 public function sidebar_setup_page() {
624
625 ob_start();
626 ?>
627
628 <div class="box">
629 <strong><?php esc_html_e( 'Setup Instructions', 'wpgetapi' ); ?></strong>
630 <ol>
631 <li><?php _e( 'Name your API in the <b>API Name</b> field', 'wpgetapi' ); ?></li>
632 <li><?php _e( 'Give your API a <b>Unique ID</b>', 'wpgetapi' ); ?></li>
633 <li><?php _e( 'Add the <b>Base URL</b> of your API. This can be found in the docs of your API', 'wpgetapi' ); ?></li>
634 <li><?php _e( 'Hit the Save button', 'wpgetapi' ); ?></li>
635 <li><?php _e( 'Visit the new tab that will be created', 'wpgetapi' ); ?></li>
636 </ol>
637 </div>
638
639 <hr>
640
641 <div class="box">
642 <strong><?php esc_html_e( 'Getting Help', 'wpgetapi' ); ?></strong>
643 <ul>
644 <li><?php
645 printf(
646 esc_html__( 'View the %1$s', 'cmb2' ),
647 '<a target="_blank" href="https://wpgetapi.com/docs/quick-start-guide/?utm_campaign=Docs&utm_medium=Admin&utm_source=User">Quick Start Guide</a>'
648 );
649 ?></li>
650 <li><?php
651 printf(
652 esc_html__( 'View the %1$s', 'cmb2' ),
653 '<a target="_blank" href="https://wpgetapi.com/docs/frequently-asked-questions/?utm_campaign=Docs&utm_medium=Admin&utm_source=User">FAQs</a>'
654 );
655 ?></li>
656 <li><?php
657 printf(
658 esc_html__( 'Do more with the %1$s', 'cmb2' ),
659 '<a target="_blank" href="https://wpgetapi.com/downloads/pro-plugin/?utm_campaign=Pro&utm_medium=Admin&utm_source=User">PRO Plugin</a>'
660 );
661 ?></li>
662 </ul>
663 </div>
664
665 <?php
666 $content = ob_get_contents();
667 ob_end_clean();
668 return $content;
669
670 }
671
672
673 /**
674 * Tabs don't immmediately appear on save, so this hack!
675 * @since 0.1.0
676 */
677 public function redirect( $object_id, $updated ) {
678
679 if( $object_id == 'wpgetapi_setup' ) {
680
681 add_settings_error( 'wpgetapi-notices', '', 'Saved, reloading page...', 'updated' );
682 settings_errors( 'wpgetapi-notices' );
683 ?>
684
685 <script>
686 setTimeout(function() {
687 location.reload();
688 }, 1000);
689 </script>
690 <?php
691
692 } else if ( strpos( $object_id, 'wpgetapi_' ) !== false ) {
693
694 $text = apply_filters( 'wpgetapi_admin_notice_text', __( 'Saved.', 'wpgetapi' ), $object_id );
695 add_settings_error( 'wpgetapi-notices', '', $text, 'updated' );
696 settings_errors( 'wpgetapi-notices' );
697
698 }
699
700 }
701
702
703 /**
704 * Public getter method for retrieving protected/private variables
705 * @since 0.1.0
706 * @param string $field Field to retrieve
707 * @return mixed Field value or exception is thrown
708 */
709 public function __get( $field ) {
710 // Allowed fields to retrieve
711 if ( in_array( $field, array( 'key', 'fields', 'title', 'options_pages' ), true ) ) {
712 return $this->{$field};
713 }
714 if ( 'option_metabox' === $field ) {
715 return $this->option_fields();
716 }
717 throw new Exception( 'Invalid property: ' . $field );
718 }
719
720 }
721
722 /**
723 * Helper function to get/return the WpGetApi_Admin_Options object
724 * @since 0.1.0
725 * @return WpGetApi_Admin_Options object
726 */
727 function wpgetapi_admin_options() {
728 return WpGetApi_Admin_Options::get_instance();
729 }
730
731 // Get it started
732 wpgetapi_admin_options();
733
734 endif;