diff options
Diffstat (limited to 'plugins/jetpack/json-endpoints/jetpack/class.wpcom-json-api-get-option-endpoint.php')
-rw-r--r-- | plugins/jetpack/json-endpoints/jetpack/class.wpcom-json-api-get-option-endpoint.php | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/plugins/jetpack/json-endpoints/jetpack/class.wpcom-json-api-get-option-endpoint.php b/plugins/jetpack/json-endpoints/jetpack/class.wpcom-json-api-get-option-endpoint.php new file mode 100644 index 00000000..3a76256f --- /dev/null +++ b/plugins/jetpack/json-endpoints/jetpack/class.wpcom-json-api-get-option-endpoint.php @@ -0,0 +1,41 @@ +<?php + +class WPCOM_JSON_API_Get_Option_Endpoint extends Jetpack_JSON_API_Endpoint { + + protected $needed_capabilities = 'manage_options'; + + public $option_name; + public $site_option; + + function result() { + if ( $this->site_option ) { + return array( 'option_value' => get_site_option( $this->option_name ) ); + } + return array( 'option_value' => get_option( $this->option_name ) ); + } + + function validate_input( $object ) { + $query_args = $this->query_args(); + $this->option_name = isset( $query_args['option_name'] ) ? $query_args['option_name'] : false; + if ( ! $this->option_name ) { + return new WP_Error( 'option_name_not_set', __( 'You must specify an option_name', 'jetpack' ) ); + } + $this->site_option = isset( $query_args['site_option'] ) ? $query_args['site_option'] : false; + + require_once JETPACK__PLUGIN_DIR . '/sync/class.jetpack-sync-defaults.php'; + /** + * Filter the list of options that are manageable via the JSON API. + * + * @module json-api + * + * @since 3.8.2 + * + * @param array The default list of site options. + * @param bool Is the option a site option. + */ + if ( ! in_array( $this->option_name, apply_filters( 'jetpack_options_whitelist', Jetpack_Sync_Defaults::$default_options_whitelist, $this->site_option ) ) ) { + return new WP_Error( 'option_name_not_in_whitelist', __( 'You must specify a whitelisted option_name', 'jetpack' ) ); + } + return true; + } +} |