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.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 / SettingsProcessor.php
flexible-shipping / src / WPDesk / FS / TableRate / ShippingMethod Last commit date
BlockEditing 3 days ago Convert 3 days ago Duplicate 3 days ago Management 3 days ago Timestamps 3 days ago Tracker 3 days ago views 3 days ago CommonMethodSettings.php 3 days ago FreeShippingCalculator.php 3 days ago FreeShippingThresholdRuleValidator.php 3 days ago MethodDescription.php 3 days ago MethodLogo.php 3 days ago MethodLogoCheckoutBlocksAssets.php 3 days ago MethodLogoSettingsField.php 3 days ago MethodSettings.php 3 days ago MethodTitle.php 3 days ago RateCalculator.php 3 days ago RateCalculatorFactory.php 3 days ago SettingsDisplayPreparer.php 3 days ago SettingsProcessor.php 3 days ago SingleMethodSettings.php 3 days ago
SettingsProcessor.php
266 lines
1 <?php
2 /**
3 * Class SettingsProcessor
4 *
5 * @package WPDesk\FS\TableRate\ShippingMethod
6 */
7
8 namespace WPDesk\FS\TableRate\ShippingMethod;
9
10 use Exception;
11 use WPDesk\FS\TableRate\Rule\Condition\ConditionsFactory;
12 use WPDesk\FS\TableRate\Rule\Settings\Validator\Conditions;
13 use WPDesk\FS\TableRate\Rule;
14 use WPDesk\FS\TableRate\Rule\Cost\RuleAdditionalCostFactory;
15 use WPDesk\FS\TableRate\Rule\Cost\RuleCostFieldsFactory;
16 use WPDesk_Flexible_Shipping;
17
18 /**
19 * Can process Flexible Shipping Method settings.
20 */
21 class SettingsProcessor {
22
23 /**
24 * @var string
25 */
26 private $id;
27
28 /**
29 * @var string
30 */
31 private $instance_id;
32
33 /**
34 * @var string
35 */
36 private $shipping_methods_option;
37
38 /**
39 * @var string
40 */
41 private $shipping_method_order_option;
42
43 /**
44 * Save_Rules constructor.
45 *
46 * @param string $id .
47 * @param string $instance_id .
48 * @param array $shipping_methods_option .
49 * @param array $shipping_method_order_option .
50 */
51 public function __construct( $id, $instance_id, $shipping_methods_option, $shipping_method_order_option ) {
52 $this->id = $id;
53 $this->instance_id = $instance_id;
54 $this->shipping_methods_option = $shipping_methods_option;
55 $this->shipping_method_order_option = $shipping_method_order_option;
56 }
57
58 /**
59 * @param string $action .
60 * @param array $posted_data .
61 *
62 * @return array
63 *
64 * @throws Exception .
65 */
66 public function process_and_save_settings( $action, $posted_data ) {
67 $shipping_method_settings = $this->save_settings( $action, $posted_data );
68 $this->add_method_creation_date();
69
70 return $shipping_method_settings;
71 }
72
73 /**
74 * @param string $action .
75 * @param array $shipping_methods .
76 * @param array $posted_data .
77 *
78 * @return string
79 */
80 private function get_method_id( $action, $shipping_methods, $posted_data ) {
81 if ( 'new' === $action ) {
82 $method_id = get_option( 'flexible_shipping_method_id', 0 );
83
84 foreach ( $shipping_methods as $shipping_method ) {
85 if ( intval( $shipping_method['id'] ) > $method_id ) {
86 $method_id = intval( $shipping_method['id'] );
87 }
88 }
89 ++$method_id;
90
91 return $method_id;
92 }
93
94 return sanitize_text_field( wp_unslash( $posted_data['method_id'] ) );
95 }
96
97 /**
98 * @param string $action .
99 * @param array $posted_data .
100 *
101 * @return array
102 */
103 private function save_settings( $action, $posted_data ) {
104 $shipping_method = [];
105 $shipping_methods = get_option( $this->shipping_methods_option, [] );
106
107 $method_id = $this->get_method_id( $action, $shipping_methods, $posted_data );
108
109 if ( 'new' === $action ) {
110 $method_id_for_shipping = $this->id . '_' . $this->instance_id . '_' . $method_id;
111 } else {
112 $method_id_for_shipping = sanitize_text_field( wp_unslash( $posted_data['method_id_for_shipping'] ) );
113 $shipping_method = isset( $shipping_methods[ $method_id ] ) ? $shipping_methods[ $method_id ] : [];
114 }
115
116 $shipping_method = $this->update_shipping_methods( $method_id, $method_id_for_shipping, $shipping_method, $shipping_methods, $posted_data );
117 $this->update_rates( $shipping_methods );
118
119 if ( 'new' === $action ) {
120 $shipping_method_order = get_option( $this->shipping_method_order_option, [] );
121
122 $shipping_method_order[ $method_id ] = $method_id;
123
124 update_option( $this->shipping_method_order_option, $shipping_method_order );
125 update_option( 'flexible_shipping_method_id', $method_id );
126 }
127
128 return $shipping_method;
129 }
130
131 /**
132 * @param string $method_id .
133 * @param string $method_id_for_shipping .
134 * @param array $shipping_method .
135 * @param array $shipping_methods .
136 * @param array $posted_data .
137 *
138 * @return array
139 */
140 private function update_shipping_methods( $method_id, $method_id_for_shipping, $shipping_method, $shipping_methods, $posted_data ) {
141 // Prepare fields for settings.
142 $shipping_method_settings = $this->prepare_shipping_method_settings( $method_id, $method_id_for_shipping, $posted_data );
143
144 // Add shipping method to list.
145 $shipping_methods[ $method_id ] = array_merge( $shipping_method, $shipping_method_settings );
146
147 // Save shipping methods.
148 update_option( $this->shipping_methods_option, $shipping_methods );
149
150 return $shipping_method_settings;
151 }
152
153 /**
154 * Add method creation date.
155 */
156 private function add_method_creation_date() {
157 if ( ! get_option( 'flexible_shipping_method_creation_date' ) ) {
158 add_option( 'flexible_shipping_method_creation_date', current_time( 'mysql' ) );
159 }
160 }
161
162 /**
163 * @param array $shipping_methods .
164 */
165 private function update_rates( $shipping_methods ) {
166 $rates = [];
167
168 foreach ( $shipping_methods as $shipping_method ) {
169 $id = sprintf( '%s_%s_%s', $this->id, $this->instance_id, sanitize_title( $shipping_method['method_title'] ) );
170
171 $id = apply_filters( 'flexible_shipping_method_rate_id', $id, $shipping_method );
172
173 if ( ! isset( $rates[ $id ] ) && 'yes' === $shipping_method['method_enabled'] ) {
174 $rates[ $id ] = [
175 'identifier' => $id,
176 'title' => $shipping_method['method_title'],
177 ];
178 }
179 }
180 update_option( 'flexible_shipping_rates', $rates );
181 }
182
183
184 /**
185 * @param int $method_id .
186 * @param int $method_id_for_shipping .
187 * @param array $posted_data .
188 *
189 * @return array
190 */
191 private function prepare_shipping_method_settings( $method_id, $method_id_for_shipping, $posted_data ) {
192
193 $shipping_method = [
194 'woocommerce_method_instance_id' => $this->instance_id,
195 'id' => $method_id,
196 'id_for_shipping' => $method_id_for_shipping,
197 'method_title' => sanitize_text_field( $this->get_field_value( 'method_title', $posted_data ) ),
198 'method_description' => sanitize_text_field( $this->get_field_value( 'method_description', $posted_data ) ),
199 CommonMethodSettings::METHOD_LOGO_ID => absint( $this->get_field_value( CommonMethodSettings::METHOD_LOGO_ID, $posted_data ) ),
200 ];
201
202 $shipping_method[ WPDesk_Flexible_Shipping::FIELD_METHOD_FREE_SHIPPING ] = '';
203
204 $method_free_shipping = $this->get_field_value( 'method_free_shipping', $posted_data );
205 if ( ! empty( $method_free_shipping ) ) {
206 $shipping_method[ WPDesk_Flexible_Shipping::FIELD_METHOD_FREE_SHIPPING ] = wc_format_decimal( sanitize_text_field( $method_free_shipping ) );
207 }
208
209 $method_integration = $this->get_field_value( 'method_integration', $posted_data );
210 $shipping_method['method_integration'] = sanitize_text_field( $method_integration );
211
212 $shipping_method['method_free_shipping_label'] = sanitize_text_field( $this->get_field_value( 'method_free_shipping_label', $posted_data ) );
213 $shipping_method['method_calculation_method'] = sanitize_text_field( $this->get_field_value( 'method_calculation_method', $posted_data ) );
214 $shipping_method[ WPDesk_Flexible_Shipping::SETTING_METHOD_FREE_SHIPPING_NOTICE ] = $this->get_value_of_yes_no( WPDesk_Flexible_Shipping::SETTING_METHOD_FREE_SHIPPING_NOTICE, $posted_data );
215
216 $shipping_method['method_default'] = $this->get_value_of_yes_no( 'method_default', $posted_data );
217 $shipping_method['method_visibility'] = $this->get_value_of_yes_no( 'method_visibility', $posted_data );
218 $shipping_method['method_debug_mode'] = $this->get_value_of_yes_no( 'method_debug_mode', $posted_data );
219 $shipping_method['method_enabled'] = $this->get_value_of_yes_no( 'method_enabled', $posted_data );
220
221 $shipping_method[ WPDesk_Flexible_Shipping::SETTING_METHOD_RULES ] = $this->get_normalized_rules(
222 isset( $posted_data[ WPDesk_Flexible_Shipping::SETTING_METHOD_RULES ] ) ? $posted_data[ WPDesk_Flexible_Shipping::SETTING_METHOD_RULES ] : []
223 );
224
225 return apply_filters( 'flexible_shipping_process_admin_options', $shipping_method );
226 }
227
228 /**
229 * @param array $posted_rules_settings .
230 *
231 * @return array
232 */
233 private function get_normalized_rules( $posted_rules_settings ) {
234 $rules_settings_processor = new Rule\Settings\SettingsProcessor(
235 $posted_rules_settings,
236 ( new ConditionsFactory() )->get_conditions(),
237 ( new RuleCostFieldsFactory() )->get_fields(),
238 ( new Rule\Cost\RuleAdditionalCostFieldsFactory( ( new RuleAdditionalCostFactory() )->get_additional_costs() ) )->get_fields(),
239 ( new Rule\SpecialAction\SpecialActionFieldsFactory( ( new Rule\SpecialAction\SpecialActionFactory() )->get_special_actions() ) )->get_fields()
240 );
241 return $rules_settings_processor->prepare_settings();
242 }
243
244 /**
245 * @param string $name .
246 * @param array $posted_data .
247 *
248 * @return mixed
249 */
250 private function get_field_value( $name, $posted_data ) {
251 $key = sprintf( 'woocommerce_%s_%s', $this->id, $name );
252
253 return isset( $posted_data[ $key ] ) ? wp_unslash( $posted_data[ $key ] ) : null;
254 }
255
256 /**
257 * @param string $name .
258 * @param array $posted_data .
259 *
260 * @return string
261 */
262 private function get_value_of_yes_no( $name, $posted_data ) {
263 return filter_var( $this->get_field_value( $name, $posted_data ), FILTER_VALIDATE_BOOLEAN ) ? 'yes' : 'no';
264 }
265 }
266