File "ConvertAction.php"
Full Path: /home/jlklyejr/public_html/post-date/wp-content/plugins/flexible-shipping/src/WPDesk/FS/TableRate/ShippingMethod/Convert/ConvertAction.php
File size: 4.45 KB
MIME-type: text/x-php
Charset: utf-8
<?php
/**
* Class ConvertAction
*
* @package WPDesk\FS\TableRate\ShippingMethod\Convert
*/
namespace WPDesk\FS\TableRate\ShippingMethod\Convert;
use FSVendor\WPDesk\PluginBuilder\Plugin\Hookable;
use WC_Shipping_Zone;
use WC_Shipping_Zones;
use WPDesk\FS\TableRate\ShippingMethod\Management\ShippingMethodManagement;
use WPDesk\FS\TableRate\ShippingMethodSingle;
use WPDesk_Flexible_Shipping;
/**
* Action for convert Group Shipping Method.
*/
class ConvertAction implements Hookable {
const AJAX_ACTION = 'flexible_shipping_process_converting';
const AJAX_NONCE = 'flexible_shipping_process_converting';
/**
* @var ShippingMethodManagement
*/
private $shipping_method_management;
/**
* @param ShippingMethodManagement $shipping_method_management
*/
public function __construct( ShippingMethodManagement $shipping_method_management ) {
$this->shipping_method_management = $shipping_method_management;
}
/**
* Hooks.
*/
public function hooks() {
add_action( 'wp_ajax_' . self::AJAX_ACTION, [ $this, 'ajax_run_convert' ] );
}
/**
* Process convert.
*/
public function ajax_run_convert() {
check_ajax_referer( self::AJAX_NONCE );
if ( ! current_user_can( 'manage_woocommerce' ) ) {
wp_send_json_error();
}
$instance_id = filter_input( INPUT_GET, 'instance_id', FILTER_VALIDATE_INT );
if ( ! $instance_id ) {
return;
}
/** @var WPDesk_Flexible_Shipping $shipping_method */
$shipping_method = WC_Shipping_Zones::get_shipping_method( $instance_id );
if ( ! $shipping_method instanceof WPDesk_Flexible_Shipping ) {
return;
}
/** @var WC_Shipping_Zone $zone */
$zone = WC_Shipping_Zones::get_zone_by( 'instance_id', $instance_id );
$shipping_methods = $shipping_method->get_shipping_methods();
// Shipping method orders.
$shipping_method_order = $this->shipping_method_management->get_shipping_method_order( $instance_id );
$this->shipping_method_management->update_shipping_methods_order( $zone->get_id(), $shipping_method_order, count( $shipping_methods ) );
foreach ( $shipping_methods as $single_shipping_method ) {
$single_shipping_method_instance_id = $this->add_new_shipping_method_to_zone( $zone, $single_shipping_method, $shipping_method );
$method_status = $shipping_method->is_enabled() ? isset( $single_shipping_method['method_enabled'] ) && 'yes' === $single_shipping_method['method_enabled'] : false;
$this->shipping_method_management->set_shipping_method_status( $single_shipping_method_instance_id, $method_status, $zone );
$this->shipping_method_management->update_shipping_method_field( $single_shipping_method_instance_id, 'method_order', ++$shipping_method_order );
do_action( 'flexible-shipping/group-method/converted-single-method', $single_shipping_method_instance_id, $single_shipping_method );
}
// Turn off current Flexible Shipping Group Method.
$this->shipping_method_management->set_shipping_method_status( $instance_id, false, $zone );
$shipping_method->set_as_converted();
do_action( 'flexible-shipping/group-method/converted-method', $shipping_method );
wp_redirect( $this->get_redirect_url_success_convert( $zone->get_id() ) );
die();
}
/**
* @param WC_Shipping_Zone $zone .
* @param array $old_shipping_method_settings .
* @param WPDesk_Flexible_Shipping $old_shipping_method .
*
* @return int
*/
private function add_new_shipping_method_to_zone( WC_Shipping_Zone $zone, array $old_shipping_method_settings, WPDesk_Flexible_Shipping $old_shipping_method ): int {
$instance_id = $zone->add_shipping_method( ShippingMethodSingle::SHIPPING_METHOD_ID );
/** @var ShippingMethodSingle $shipping_method . */
$shipping_method = WC_Shipping_Zones::get_shipping_method( $instance_id );
$shipping_method_key = $shipping_method->get_instance_option_key();
if ( ! is_array( $old_shipping_method_settings ) ) {
$old_shipping_method_settings = [];
}
$old_shipping_method_settings['tax_status'] = $old_shipping_method->get_instance_option( 'tax_status' );
// Add default options.
update_option( $shipping_method_key, $old_shipping_method_settings );
return $instance_id;
}
/**
* @param int $zone_id .
*
* @return string
*/
private function get_redirect_url_success_convert( int $zone_id ): string {
return add_query_arg(
[
'page' => 'wc-settings',
'tab' => 'shipping',
'converted' => '1',
'zone_id' => $zone_id,
],
admin_url( 'admin.php' )
);
}
}