menu_title = __( 'WPGetAPI', 'wpgetapi' ); $this->title = __( 'WPGetAPI', 'wpgetapi' ); } /** * Returns the running object * * @return Myprefix_Admin **/ public static function get_instance() { if( is_null( self::$instance ) ) { self::$instance = new self(); self::$instance->hooks(); } return self::$instance; } /** * Initiate our hooks * @since 0.1.0 */ public function hooks() { add_action( 'admin_init', array( $this, 'init' ) ); add_action( 'admin_menu', array( $this, 'add_options_pages' ) ); add_action( 'cmb2_admin_init', array( $this, 'init_custom_fields' ) ); add_action( "cmb2_save_options-page_fields", array( $this, 'redirect' ), 1, 2 ); add_action( 'admin_footer', array( $this, 'load_testing_javascript' ) ); add_action( 'wp_ajax_wpgetapi_test_endpoint', array( $this, 'test_the_endpoint' ) ); } /** * Setup our custom fields * @since 0.1.0 */ public function init_custom_fields() { require_once WPGETAPIDIR . 'includes/class-fields.php'; WpGetApi_Parameter_Field::init_parameter(); } /** * Register our setting to WP * @since 0.1.0 */ public function init() { $this->pro_plugin = is_plugin_active( 'wpgetapi-extras/wpgetapi-extras.php' ) ? true : false; $option_tabs = self::option_fields(); foreach ($option_tabs as $index => $option_tab) { register_setting( $option_tab['id'], $option_tab['id'] ); } } /** * Get our saved API's from setup * @since 0.1.0 */ public function get_apis() { $setup = get_option( 'wpgetapi_setup' ); if( empty( $setup ) || ! isset( $setup['apis'] ) || empty( $setup['apis'] ) ) return; return $setup['apis']; } /** * Add the options metabox to the array of metaboxes * @since 0.1.0 */ public function option_fields() { //Only need to initiate the array once per page-load if ( ! empty( $this->option_metabox ) ) { return $this->option_metabox; } // setup tab $option_metabox[] = array( 'title' => __( 'Setup', 'wpgetapi' ), 'menu_title' => __( 'Setup', 'wpgetapi' ), 'id' => 'wpgetapi_setup', 'desc' => __( 'Add the details of the API(s) you are using. Endpoints will be setup in the next step after hitting save.', 'wpgetapi' ), 'show_on' => array( 'key' => 'options-page', 'value' => array( 'wpgetapi_setup' ), ), 'show_names' => true, 'fields' => $this->setup_fields(), ); // get our saved API's and create as tabs if( $this->get_apis() ) { foreach ( $this->get_apis() as $index => $api ) { $name = isset( $api['name'] ) && $api['name'] != '' ? sanitize_text_field( $api['name'] ) : 'API ' . absint( $index ); $api_id = isset( $api['id'] ) && $api['id'] != '' ? sanitize_text_field( $api['id'] ) : $name; $metabox_id = strtolower( str_replace( '-', '_', sanitize_file_name( 'wpgetapi-' . $api_id ) ) ); $base_url = isset( $api['base_url'] ) && $api['base_url'] != '' ? esc_url_raw( $api['base_url'], array( 'http', 'https' ) ) : ''; $type = isset( $api['auth_type'] ) && $api['auth_type'] != '' ? sanitize_text_field( $api['auth_type'] ) : ''; // tab $option_metabox[] = array( 'title' => $name, 'menu_title' => $name, 'id' => $metabox_id, 'desc' => '', 'show_on' => array( 'key' => 'options-page', 'value' => array( $metabox_id ), ), 'show_names' => true, 'fields' => $this->endpoint_fields( $type, $api_id, $base_url ), ); } } $option_metabox = apply_filters( 'wpgetapi_admin_pages', $option_metabox ); return $option_metabox; } public function setup_fields() { $fields[] = array( 'id' => 'apis', 'type' => 'group', 'name' => '', 'description' => '', 'options' => array( 'group_title' => __( 'API {#}', 'wpgetapi' ), 'add_button' => __( 'Add New API', 'wpgetapi' ), 'remove_button' => __( 'Remove API', 'wpgetapi' ), 'sortable' => true, // beta ), 'fields' => array( array( 'name' => __( 'API Name', 'wpgetapi' ), 'id' => 'name', 'type' => 'text', 'attributes' => array( 'required' => true, 'placeholder' => 'Google Maps', ), 'desc' => __( 'The name of the API you are connecting to.', 'wpgetapi' ), ), array( 'name' => __( 'Unique ID', 'wpgetapi' ), 'id' => 'id', 'type' => 'text', 'attributes' => array( 'required' => true, 'placeholder' => 'google_maps', ), 'desc' => __( 'A unique ID for your API. Lowercase letters and underscores only.', 'wpgetapi' ), ), array( 'name' => __( 'Base URL', 'wpgetapi' ), 'id' => 'base_url', 'type' => 'text', 'attributes' => array( 'required' => true, 'placeholder' => 'https://maps.googleapis.com/maps/api', ), 'desc' => __( 'The base URL of the API you are connecting to.', 'wpgetapi' ), ), ) ); return $fields; } /** * Endpoint settings. * @return sale info array * */ public function endpoint_fields( $type = '', $api_id = '', $base_url = '' ) { $fields = array(); $cache_disabled = $this->pro_plugin ? '' : 'disabled'; $cache_url = $this->pro_plugin ? 'Help ' : 'PRO Plugin'; $endpoint_fields = apply_filters( 'wpgetapi_fields_endpoints', array( array( 'name' => __( 'Unique ID', 'wpgetapi' ), 'id' => 'id', 'type' => 'text', 'classes' => 'field-id', 'attributes' => array( 'required' => true, 'placeholder' => 'new_endpoint', ), 'desc' => __( 'A unique ID for this endpoint. Lowercase letters and underscores only.', 'wpgetapi' ), 'before_row' => "wpgetapi_output_top_of_endpoint", 'api_id' => $api_id, ), array( 'name' => __( 'Endpoint', 'wpgetapi' ), 'id' => 'endpoint', 'type' => 'text', 'classes' => 'field-endpoint', 'attributes' => array( 'required' => true, 'placeholder' => '/newendpoint', ), 'desc' => __( 'The endpoint that will be appended to the base URL.', 'wpgetapi' ), ), array( 'name' => __( 'Method', 'wpgetapi' ), 'id' => 'method', 'type' => 'select', 'classes' => 'field-method', 'attributes' => array( 'required' => true, ), 'options' => array( 'GET' => 'GET', 'POST' => 'POST', 'PUT' => 'PUT', 'DELETE' => 'DELETE', ), 'desc' => __( 'The request method for this endpoint.', 'wpgetapi' ), ), array( 'name' => __( 'Results Format', 'wpgetapi' ), 'id' => 'results_format', 'type' => 'select', 'classes' => 'field-results-format', 'attributes' => array( 'required' => true, ), 'options_cb' => 'wpgetapi_results_format_options', 'desc' => sprintf( __( 'The format of the results. %1s', 'wpgetapi' ), 'More options ' ) ), array( 'name' => __( 'Cache Time', 'wpgetapi' ), 'id' => 'cache_time', 'type' => 'text', 'classes' => 'field-cache-time', 'attributes' => array( 'placeholder' => '', $cache_disabled => $cache_disabled, ), 'desc' => sprintf( __( 'The time in seconds to cache this request for. %1s', 'wpgetapi' ), $cache_url ) ), array( 'name' => __( 'Query String', 'wpgetapi' ), 'id' => 'query_parameters', 'type' => 'parameter', 'classes' => 'field-query-parameters', 'repeatable' => true, 'desc' => sprintf( __( 'Parameters as name/value pairs that will be appended to the URL. %1s', 'wpgetapi' ), 'Help ' ) ), array( 'name' => __( 'Headers', 'wpgetapi' ), 'id' => 'header_parameters', 'type' => 'parameter', 'classes' => 'field-header-parameters', 'repeatable' => true, 'desc' => sprintf( __( 'Parameters as name/value pairs, sent in the headers. %1s', 'wpgetapi' ), 'Help ' ) ), array( 'name' => __( 'Body POST Fields', 'wpgetapi' ), 'id' => 'body_parameters', 'type' => 'parameter', 'classes' => 'field-body-parameters', 'repeatable' => true, 'desc' => sprintf( __( 'Parameters as name/value pairs, sent in the body as POST fields. %1s', 'wpgetapi' ), 'Help ' ) ), array( 'name' => __( 'Encode Body', 'wpgetapi' ), 'id' => 'body_json_encode', 'type' => 'select', 'classes' => 'field-body-json-encode', 'options' => array( 'false' => __( 'No encoding (raw)', 'wpgetapi' ), 'true' => __( 'JSON encode', 'wpgetapi' ), 'url' => __( 'URL encode (x-www-form-urlencoded)', 'wpgetapi' ), 'xml' => __( 'XML format (available in PRO only)', 'wpgetapi' ), ), 'desc' => __( 'Encoding of the above Body parameters. ', 'wpgetapi' ), ), ) ); $fields[] = array( 'id' => 'endpoints', 'type' => 'group', 'name' => '', 'description' => '', 'options' => array( 'group_title' => __( 'Endpoint {#}', 'wpgetapi' ), 'add_button' => __( 'Add Endpoint', 'wpgetapi' ), 'remove_button' => __( 'Remove Endpoint', 'wpgetapi' ), 'sortable' => true, // beta ), 'before_group' => '
Base URL: ' . $base_url . '
', 'fields' => $endpoint_fields, ); return apply_filters( 'wpgetapi_fields', $fields ); } public function add_options_pages() { $option_tabs = self::option_fields(); foreach ($option_tabs as $index => $option_tab) { if ( $index == 0) { $this->options_pages[] = add_menu_page( $this->title, $this->menu_title, 'manage_options', $option_tab['id'], array( $this, 'admin_page_display' ), 'none' ); //Link admin menu to first tab 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 } else { $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' ) ); } } foreach ( $this->options_pages as $page ) { // Include CMB CSS in the head to avoid FOUC add_action( "admin_print_styles-{$page}", array( 'CMB2_Hookup', 'enqueue_cmb_css' ) ); } } /** * Admin page markup. Mmply handled by CMB2 * @since 0.1.0 */ public function admin_page_display() { $option_tabs = self::option_fields(); //get all option tabs $tab_forms = array(); ?>

title, 'wpgetapi' ) ?>

true ) ); $output = array( 'data' => $data, 'endpoint_id' => $endpoint_id ); echo json_encode( $output ); wp_die(); // this is required to terminate immediately and return a proper response } public function load_testing_javascript() { ?> sidebar_setup_page(); ?>
  1. Unique ID', 'wpgetapi' ); ?>
  2. Endpoint which can be found in your API docs', 'wpgetapi' ); ?>
  3. Method - GET for getting data & POST for sending data to the API', 'wpgetapi' ); ?>
  4. Results Format', 'wpgetapi' ); ?>

  1. API Name field', 'wpgetapi' ); ?>
  2. Unique ID', 'wpgetapi' ); ?>
  3. Base URL of your API. This can be found in the docs of your API', 'wpgetapi' ); ?>

{$field}; } if ( 'option_metabox' === $field ) { return $this->option_fields(); } throw new Exception( 'Invalid property: ' . $field ); } } /** * Helper function to get/return the WpGetApi_Admin_Options object * @since 0.1.0 * @return WpGetApi_Admin_Options object */ function wpgetapi_admin_options() { return WpGetApi_Admin_Options::get_instance(); } // Get it started wpgetapi_admin_options(); endif;