Files
krolewskie-miody.pl/wp-content/plugins/woocommerce-payments/includes/admin/class-wc-rest-payments-settings-option-controller.php
2026-04-28 15:13:50 +02:00

132 lines
3.5 KiB
PHP

<?php
/**
* Class WC_REST_Payments_Settings_Option_Controller
*
* @package WooCommerce\Payments\Admin
*/
defined( 'ABSPATH' ) || exit;
/**
* REST controller for settings options.
*/
class WC_REST_Payments_Settings_Option_Controller extends WC_Payments_REST_Controller {
/**
* Map of allowed option names to their accepted value types.
* Types: 'bool', 'array', 'string'.
*
* @var array
*/
private const ALLOWED_OPTIONS = [
'wcpay_multi_currency_setup_completed' => 'bool',
'woocommerce_dismissed_todo_tasks' => 'array',
'woocommerce_remind_me_later_todo_tasks' => 'array',
'woocommerce_deleted_todo_tasks' => 'array',
'wcpay_fraud_protection_welcome_tour_dismissed' => 'bool',
'wcpay_onboarding_eligibility_modal_dismissed' => 'bool',
'wcpay_connection_success_modal_dismissed' => 'bool',
'wcpay_next_deposit_notice_dismissed' => 'bool',
'wcpay_duplicate_payment_method_notices_dismissed' => 'array',
'wcpay_instant_deposit_notice_dismissed' => 'bool',
'wcpay_exit_survey_last_shown' => 'string',
];
/**
* Endpoint path.
*
* @var string
*/
protected $rest_base = 'payments/settings';
/**
* Configure REST API routes.
*/
public function register_routes() {
register_rest_route(
$this->namespace,
'/' . $this->rest_base . '/(?P<option_name>[a-zA-Z0-9_-]+)',
[
'methods' => WP_REST_Server::EDITABLE,
'callback' => [ $this, 'update_option' ],
'permission_callback' => [ $this, 'check_permission' ],
'args' => [
'option_name' => [
'required' => true,
'validate_callback' => [ $this, 'validate_option_name' ],
],
'value' => [
'required' => true,
'validate_callback' => [ $this, 'validate_value' ],
],
],
]
);
}
/**
* Validate the option name.
*
* @param string $option_name The option name to validate.
* @return bool
*/
public function validate_option_name( string $option_name ): bool {
return array_key_exists( $option_name, self::ALLOWED_OPTIONS );
}
/**
* Validate the value parameter based on the option's expected type.
*
* @param mixed $value The value to validate.
* @param WP_REST_Request $request The request object.
* @return bool|WP_Error True if valid, WP_Error if invalid.
*/
public function validate_value( $value, WP_REST_Request $request ) {
$option_name = $request->get_param( 'option_name' );
$expected_type = self::ALLOWED_OPTIONS[ $option_name ] ?? null;
$is_valid = false;
switch ( $expected_type ) {
case 'bool':
$is_valid = is_bool( $value );
break;
case 'array':
$is_valid = is_array( $value );
break;
case 'string':
$is_valid = is_string( $value );
break;
}
if ( $is_valid ) {
return true;
}
return new WP_Error(
'rest_invalid_param',
/* translators: %s: expected type (bool, array, or string) */
sprintf( __( 'Invalid value type; expected %s', 'woocommerce-payments' ), $expected_type ),
[ 'status' => 400 ]
);
}
/**
* Update the option value.
*
* @param WP_REST_Request $request The request object.
* @return WP_Error|WP_REST_Response
*/
public function update_option( WP_REST_Request $request ) {
$option_name = $request->get_param( 'option_name' );
$value = $request->get_param( 'value' );
update_option( $option_name, $value );
return rest_ensure_response(
[
'success' => true,
]
);
}
}