<?php
namespace PrestoPlayer\Services\API;
class RestSettingsController extends \WP_REST_Settings_Controller
{
/**
* Constructor.
*
* @since 4.7.0
*/
public function __construct()
{
$this->namespace = 'presto-player/v1';
$this->rest_base = 'settings';
}
/**
* Register controller
*
* @return void
*/
public function register()
{
add_action('rest_api_init', [$this, 'register_routes']);
}
/**
* Checks if a given request has access to read and manage settings.
*
* @since 4.7.0
*
* @param WP_REST_Request $request Full details about the request.
* @return bool True if the request has read access for the item, otherwise false.
*/
public function get_item_permissions_check($request)
{
return current_user_can('edit_posts');
}
/**
* Retrieves all of the registered options for the Settings API.
*
* @since 4.7.0
*
* @return array Array of registered options.
*/
protected function get_registered_options()
{
$rest_options = array();
foreach (get_registered_settings() as $name => $args) {
if (!in_array($name, ['presto_player_branding', 'presto_player_youtube', 'presto_player_presets', 'presto_player_audio_presets'])) {
continue;
}
if (empty($args['show_in_rest'])) {
continue;
}
$rest_args = array();
if (is_array($args['show_in_rest'])) {
$rest_args = $args['show_in_rest'];
}
$defaults = array(
'name' => !empty($rest_args['name']) ? $rest_args['name'] : $name,
'schema' => array(),
);
$rest_args = array_merge($defaults, $rest_args);
$default_schema = array(
'type' => empty($args['type']) ? null : $args['type'],
'description' => empty($args['description']) ? '' : $args['description'],
'default' => isset($args['default']) ? $args['default'] : null,
);
$rest_args['schema'] = array_merge($default_schema, $rest_args['schema']);
$rest_args['option_name'] = $name;
// Skip over settings that don't have a defined type in the schema.
if (empty($rest_args['schema']['type'])) {
continue;
}
/*
* Allow the supported types for settings, as we don't want invalid types
* to be updated with arbitrary values that we can't do decent sanitizing for.
*/
if (!in_array($rest_args['schema']['type'], array('number', 'integer', 'string', 'boolean', 'array', 'object'), true)) {
continue;
}
$rest_args['schema'] = rest_default_additional_properties_to_false($rest_args['schema']);
$rest_options[$rest_args['name']] = $rest_args;
}
return $rest_options;
}
}