PluginProbe ʕ •ᴥ•ʔ
Weight Based Shipping Table Rate for WooCommerce – Flexible Shipping / 6.12.0
Weight Based Shipping Table Rate for WooCommerce – Flexible Shipping v6.12.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 / FreeShippingThresholdRuleValidator.php
flexible-shipping / src / WPDesk / FS / TableRate / ShippingMethod Last commit date
BlockEditing 1 week ago Convert 1 week ago Duplicate 1 week ago Management 1 week ago Timestamps 1 week ago Tracker 1 week ago views 1 week ago CommonMethodSettings.php 1 week ago FreeShippingCalculator.php 1 week ago FreeShippingThresholdRuleValidator.php 1 week ago MethodDescription.php 1 week ago MethodLogo.php 1 week ago MethodLogoCheckoutBlocksAssets.php 1 week ago MethodLogoSettingsField.php 1 week ago MethodSettings.php 1 week ago MethodTitle.php 1 week ago RateCalculator.php 1 week ago RateCalculatorFactory.php 1 week ago SettingsDisplayPreparer.php 1 week ago SettingsProcessor.php 1 week ago SingleMethodSettings.php 1 week ago
FreeShippingThresholdRuleValidator.php
110 lines
1 <?php
2 /**
3 * Class FreeShippingThresholdRuleValidator
4 *
5 * @package WPDesk\FS\TableRate\ShippingMethod
6 */
7
8 declare( strict_types=1 );
9
10 namespace WPDesk\FS\TableRate\ShippingMethod;
11
12 use WPDesk\FS\TableRate\Rule\Condition\Price;
13 use WPDesk\FS\TableRate\Rule\Condition\None;
14
15 /**
16 * Validates if free shipping threshold is covered by price rules.
17 */
18 final class FreeShippingThresholdRuleValidator {
19
20 /**
21 * @param mixed $threshold Free shipping threshold after WooCommerce formatting.
22 * @param array $rules Normalized method rules.
23 *
24 * @return bool
25 */
26 public function is_valid( $threshold, array $rules ): bool {
27 if ( '' === $threshold || ! is_numeric( $threshold ) ) {
28 return true;
29 }
30
31 $threshold = (float) $threshold;
32
33 foreach ( $rules as $rule ) {
34 if ( ! is_array( $rule ) || $this->is_deleted( $rule ) ) {
35 continue;
36 }
37
38 if ( $this->rule_covers_threshold( $threshold, $rule ) ) {
39 return true;
40 }
41 }
42
43 return false;
44 }
45
46 /**
47 * @param float $threshold Free shipping threshold.
48 * @param array $rule Rule settings.
49 *
50 * @return bool
51 */
52 private function rule_covers_threshold( float $threshold, array $rule ): bool {
53 if ( ! isset( $rule['conditions'] ) || ! is_array( $rule['conditions'] ) ) {
54 return false;
55 }
56
57 foreach ( $rule['conditions'] as $condition ) {
58 if ( ! is_array( $condition ) || $this->is_deleted( $condition ) ) {
59 continue;
60 }
61
62 if ( ( $condition['condition_id'] ?? '' ) === None::CONDITION_ID ) {
63 return true;
64 }
65
66 if ( ( $condition['condition_id'] ?? '' ) !== Price::CONDITION_ID ) {
67 continue;
68 }
69
70 if ( $this->condition_covers_threshold( $threshold, $condition ) ) {
71 return true;
72 }
73 }
74
75 return false;
76 }
77
78 /**
79 * @param float $threshold Free shipping threshold.
80 * @param array $condition Price condition settings.
81 *
82 * @return bool
83 */
84 private function condition_covers_threshold( float $threshold, array $condition ): bool {
85 $min = $condition[ Price::MIN ] ?? '';
86 $max = $condition[ Price::MAX ] ?? '';
87
88 if ( '' !== $min && ! is_numeric( $min ) ) {
89 return false;
90 }
91
92 if ( '' !== $max && ! is_numeric( $max ) ) {
93 return false;
94 }
95
96 $min = '' === $min ? 0.0 : (float) $min;
97
98 return $min <= $threshold && ( '' === $max || (float) $max >= $threshold );
99 }
100
101 /**
102 * @param array $settings Rule or condition settings.
103 *
104 * @return bool
105 */
106 private function is_deleted( array $settings ): bool {
107 return filter_var( $settings['deleted'] ?? false, FILTER_VALIDATE_BOOLEAN );
108 }
109 }
110