PluginProbe ʕ •ᴥ•ʔ
Weight Based Shipping Table Rate for WooCommerce – Flexible Shipping / 6.10.0
Weight Based Shipping Table Rate for WooCommerce – Flexible Shipping v6.10.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 month ago DuplicateNotice.php 1 month ago DuplicateScript.php 1 month ago DuplicateTracker.php 1 month ago DuplicatorChecker.php 1 month ago
DuplicateAction.php
139 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
75 if ( empty( $options['method_title'] ?? '' ) ) {
76 $options['method_title'] = __( 'Flexible Shipping', 'flexible-shipping' );
77 }
78
79 $options['method_title'] .= ' ' . __( '(Copy)', 'flexible-shipping' );
80
81 add_option( $this->get_option_settings_field( $new_instance_id ), $options );
82
83 $this->shipping_method_management->set_shipping_method_status( $new_instance_id, false, $zone );
84
85 $this->update_usage_functionality();
86
87 wp_redirect( $this->get_redirect_url( 'success', $title ) );
88 $this->end_request();
89 }
90
91 /**
92 * @codeCoverageIgnore
93 */
94 protected function end_request() {
95 die();
96 }
97
98 /**
99 * @param int $instance_id .
100 *
101 * @return array
102 */
103 private function get_instance_settings( int $instance_id ): array {
104 return (array) get_option( $this->get_option_settings_field( $instance_id ), [] );
105 }
106
107 /**
108 * @param int $instance_id .
109 *
110 * @return string
111 */
112 private function get_option_settings_field( int $instance_id ): string {
113 return sprintf( 'woocommerce_%s_%d_settings', ShippingMethodSingle::SHIPPING_METHOD_ID, $instance_id );
114 }
115
116 private function update_usage_functionality() {
117 $current = (int) get_option( self::OPTION, 0 );
118
119 update_option( self::OPTION, ++$current );
120 }
121
122 /**
123 * @param string $status .
124 * @param string $method_title .
125 *
126 * @return string
127 */
128 private function get_redirect_url( string $status, string $method_title ): string {
129 return add_query_arg(
130 [
131 self::ACTION => true,
132 'status' => $status,
133 'method_title' => urlencode( $method_title ),
134 ],
135 wp_get_referer()
136 );
137 }
138 }
139