PluginProbe ʕ •ᴥ•ʔ
Weight Based Shipping Table Rate for WooCommerce – Flexible Shipping / 6.11.0
Weight Based Shipping Table Rate for WooCommerce – Flexible Shipping v6.11.0
6.12.1 6.12.0 6.11.0 6.10.0 6.9.1 6.9.0 6.8.1 6.8.0 6.7.4 6.7.3 6.7.2 6.7.0 4.21.7 4.22.0 4.22.1 4.23.0 4.23.1 4.23.2 4.23.3 4.24.0 4.24.1 4.24.10 4.24.11 4.24.12 4.24.13 4.24.14 4.24.15 4.24.16 4.24.17 4.24.18 4.24.19 4.24.2 4.24.4 4.24.6 4.24.7 4.24.8 4.24.9 4.25.0 4.25.1 4.25.2 4.25.4 4.25.5 4.25.6 4.25.7 4.25.8 4.3.0 4.3.1 4.4.0 4.4.1 4.5.0 4.5.1 4.6.0 4.6.1 4.7.0 4.7.1 4.7.2 4.8.0 4.8.1 4.8.3 4.8.4 4.8.5 4.9.0 5.0.0 5.0.1 5.0.2 5.0.3 5.0.4 5.0.5 5.0.6 5.0.7 5.0.8 5.0.9 5.1.0 5.1.1 5.1.2 5.1.3 5.2.0 5.3.0 5.3.1 5.3.3 5.3.4 5.3.5 6.0.0 6.1.0 6.1.1 6.1.2 6.2.0 6.2.1 6.2.2 6.2.3 6.2.4 6.3.0 trunk 6.4.0 1.4 6.4.1 1.4.1 6.4.2 1.5 6.4.3 1.6 6.4.5 1.6.1 6.5.0 1.6.2 6.5.1 1.7 6.5.2 1.8 6.5.3 1.9 6.5.4 1.9.1 6.5.5 1.9.10 6.5.6 1.9.11 6.5.7 1.9.12 6.5.8 1.9.2 6.6.0 1.9.3 6.6.1 1.9.4 6.6.2 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0 2.0.1 2.1 2.1.1 2.1.10 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 3.0.6 3.0.7 3.1 3.1.1 3.1.10 3.1.11 3.1.12 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7 3.1.8 3.1.9 3.10.0 3.11.0 3.11.1 3.11.2 3.11.3 3.11.4 3.12.0 3.13.0 3.14.0 3.14.1 3.14.2 3.14.3 3.14.4 3.15.0 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.2.0 3.3.1 3.3.10 3.3.11 3.3.12 3.3.13 3.3.14 3.3.2 3.3.3 3.3.4 3.3.5 3.3.6 3.3.7 3.3.8 3.3.9 3.4.0 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.7.0 3.8.0 3.9.0 3.9.1 3.9.10 3.9.11 3.9.12 3.9.13 3.9.15 3.9.16 3.9.17 3.9.18 3.9.19 3.9.2 3.9.20 3.9.21 3.9.3 3.9.4 3.9.5 3.9.6 3.9.7 3.9.9 4.0.0 4.0.1 4.0.10 4.0.2 4.0.3 4.0.4 4.0.5 4.0.6 4.0.7 4.0.8 4.0.9 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4 4.10.0 4.10.1 4.11.0 4.11.1 4.11.2 4.11.3 4.11.4 4.11.5 4.11.6 4.11.7 4.11.8 4.11.9 4.12.0 4.13.0 4.13.1 4.13.2 4.13.3 4.14.0 4.14.1 4.14.2 4.15.0 4.16.0 4.16.1 4.16.2 4.17.0 4.18.0 4.18.1 4.18.2 4.18.3 4.18.4 4.18.5 4.18.6 4.19.0 4.19.1 4.2.0 4.20.0 4.20.1 4.20.2 4.20.3 4.21.0 4.21.1 4.21.2 4.21.3 4.21.4 4.21.5
flexible-shipping / src / WPDesk / FS / TableRate / ShippingMethod / Duplicate / DuplicateAction.php
flexible-shipping / src / WPDesk / FS / TableRate / ShippingMethod / Duplicate Last commit date
DuplicateAction.php 1 week ago DuplicateNotice.php 1 week ago DuplicateScript.php 1 week ago DuplicateTracker.php 1 week ago DuplicatorChecker.php 1 week ago
DuplicateAction.php
146 lines
1 <?php
2 /**
3 * Class DuplicateAction
4 *
5 * @package WPDesk\FS\TableRate\ShippingMethod\Duplicate
6 */
7
8 namespace WPDesk\FS\TableRate\ShippingMethod\Duplicate;
9
10 use FSVendor\WPDesk\PluginBuilder\Plugin\Hookable;
11 use WPDesk\FS\TableRate\ShippingMethod\Management\ShippingMethodManagement;
12 use WPDesk\FS\TableRate\ShippingMethodSingle;
13
14 /**
15 * Duplicate Action.
16 */
17 class DuplicateAction implements Hookable {
18 const ACTION = 'fs_duplicate_method';
19 const OPTION = 'fs_duplicate_method';
20 const PARAM_ID = 'instance_id';
21
22 /**
23 * @var ShippingMethodManagement
24 */
25 private $shipping_method_management;
26
27 /**
28 * @var DuplicatorChecker
29 */
30 private $duplicator_checker;
31
32 /**
33 * @param DuplicatorChecker $duplicator_checker .
34 * @param ShippingMethodManagement $shipping_method_management .
35 */
36 public function __construct( DuplicatorChecker $duplicator_checker, ShippingMethodManagement $shipping_method_management ) {
37 $this->duplicator_checker = $duplicator_checker;
38 $this->shipping_method_management = $shipping_method_management;
39 }
40
41 /**
42 * Init hooks (actions and filters).
43 *
44 * @return void
45 */
46 public function hooks() {
47 add_action( 'admin_post_' . self::ACTION, [ $this, 'action_duplicate' ] );
48 }
49
50 public function action_duplicate() {
51 check_admin_referer( self::ACTION );
52
53 $instance_id = (int) ( sanitize_text_field( wp_unslash( $_GET[ self::PARAM_ID ] ?? 0 ) ) );
54
55 if ( ! $instance_id ) {
56 wp_die( __( 'Shipping method duplication error. Please try again later.', 'flexible-shipping' ) ); // phpcs:ignore
57
58 return;
59 }
60
61 $title = $this->shipping_method_management->get_shipping_method( $instance_id )->get_title();
62
63 if ( ! $this->duplicator_checker->should_duplicate( $instance_id ) ) {
64 wp_redirect( $this->get_redirect_url( 'error', $title ) );
65 $this->end_request();
66
67 return;
68 }
69
70 $zone = $this->shipping_method_management->get_shipping_zone( $instance_id );
71 $new_instance_id = $zone->add_shipping_method( ShippingMethodSingle::SHIPPING_METHOD_ID );
72
73 $options = $this->get_instance_settings( $instance_id );
74 $new_instance_options = $this->get_instance_settings( $new_instance_id );
75 foreach ( [ 'creation_time_with_free', 'creation_time_with_pro' ] as $creation_time_key ) {
76 if ( isset( $new_instance_options[ $creation_time_key ] ) ) {
77 $options[ $creation_time_key ] = $new_instance_options[ $creation_time_key ];
78 }
79 }
80 unset( $options['method_rules_update_time_with_free'], $options['method_rules_update_time_with_pro'] );
81
82 if ( empty( $options['method_title'] ?? '' ) ) {
83 $options['method_title'] = __( 'Flexible Shipping', 'flexible-shipping' );
84 }
85
86 $options['method_title'] .= ' ' . __( '(Copy)', 'flexible-shipping' );
87
88 update_option( $this->get_option_settings_field( $new_instance_id ), $options );
89
90 $this->shipping_method_management->set_shipping_method_status( $new_instance_id, false, $zone );
91
92 $this->update_usage_functionality();
93
94 wp_redirect( $this->get_redirect_url( 'success', $title ) );
95 $this->end_request();
96 }
97
98 /**
99 * @codeCoverageIgnore
100 */
101 protected function end_request() {
102 die();
103 }
104
105 /**
106 * @param int $instance_id .
107 *
108 * @return array
109 */
110 private function get_instance_settings( int $instance_id ): array {
111 return (array) get_option( $this->get_option_settings_field( $instance_id ), [] );
112 }
113
114 /**
115 * @param int $instance_id .
116 *
117 * @return string
118 */
119 private function get_option_settings_field( int $instance_id ): string {
120 return sprintf( 'woocommerce_%s_%d_settings', ShippingMethodSingle::SHIPPING_METHOD_ID, $instance_id );
121 }
122
123 private function update_usage_functionality() {
124 $current = (int) get_option( self::OPTION, 0 );
125
126 update_option( self::OPTION, ++$current );
127 }
128
129 /**
130 * @param string $status .
131 * @param string $method_title .
132 *
133 * @return string
134 */
135 private function get_redirect_url( string $status, string $method_title ): string {
136 return add_query_arg(
137 [
138 self::ACTION => true,
139 'status' => $status,
140 'method_title' => urlencode( $method_title ),
141 ],
142 wp_get_referer()
143 );
144 }
145 }
146