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

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