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

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