<?php /** * Onboarding option AJAX updater. * * @package WPDesk\FS\TableRate\NewRulesTableBanner */ namespace WPDesk\FS\Onboarding\TableRate; use FSVendor\WPDesk\PluginBuilder\Plugin\Hookable; /** * Can update option when onboarding is clicked. */ class OptionAjaxUpdater implements Hookable { const AJAX_ACTION_CLICK = 'flexible_shipping_onboarding_table_rate_click'; const AJAX_ACTION_EVENT = 'flexible_shipping_onboarding_table_rate_event'; const AJAX_ACTION_AUTO_SHOP_POPUP = 'flexible_shipping_onboarding_table_rate_auto_show_popup'; const NONCE_ACTION = 'flexible_shipping_onboarding_table_rate'; /** * @var FinishOption */ private $option; /** * OptionAjaxUpdater constructor. * * @param FinishOption $option . */ public function __construct( FinishOption $option ) { $this->option = $option; } /** * Hooks. */ public function hooks() { add_action( 'wp_ajax_' . self::AJAX_ACTION_CLICK, [ $this, 'handle_ajax_action_click' ] ); add_action( 'wp_ajax_' . self::AJAX_ACTION_EVENT, [ $this, 'handle_ajax_action_event' ] ); add_action( 'wp_ajax_' . self::AJAX_ACTION_AUTO_SHOP_POPUP, [ $this, 'handle_ajax_action_auto_show_popup' ] ); } /** * Handle AJAX action OK. * * @internal */ public function handle_ajax_action_event() { check_ajax_referer( self::NONCE_ACTION ); if ( ! current_user_can( 'manage_woocommerce' ) ) { wp_send_json_error(); } $event = $this->filter_input( INPUT_POST, 'event' ); $step = (int) $this->filter_input( INPUT_POST, 'step' ); if ( $event ) { $this->option->update_option( 'event', sanitize_text_field( $event ) ); $this->option->update_option( 'step', $step ); wp_send_json_success(); } else { wp_send_json_error(); } } /** * Handle AJAX action Click. * * @internal */ public function handle_ajax_action_click() { check_ajax_referer( self::NONCE_ACTION ); if ( ! current_user_can( 'manage_woocommerce' ) ) { wp_send_json_error(); } $clicks = (int) $this->option->get_option_value( 'clicks' ); $this->option->update_option( 'clicks', $clicks + 1 ); $this->option->update_option( 'step', 0 ); wp_send_json_success(); } /** * Handle AJAX action Click. * * @internal */ public function handle_ajax_action_auto_show_popup() { check_ajax_referer( self::NONCE_ACTION ); if ( ! current_user_can( 'manage_woocommerce' ) ) { wp_send_json_error(); } $this->option->update_option( 'auto_show_popup', 1 ); wp_send_json_success(); } /** * @param int $type . * @param string $var_name . * * @return mixed * @codeCoverageIgnore */ protected function filter_input( int $type, string $var_name ) { return filter_input( $type, $var_name ); } }