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 / FreeShippingThresholdRuleValidator.php
flexible-shipping / src / WPDesk / FS / TableRate / ShippingMethod Last commit date
BlockEditing 1 month ago Convert 1 month ago Duplicate 1 month ago Management 1 month ago Timestamps 1 month ago Tracker 1 month ago views 1 month ago CommonMethodSettings.php 1 month ago FreeShippingCalculator.php 1 month ago FreeShippingThresholdRuleValidator.php 1 month ago MethodDescription.php 1 month ago MethodLogo.php 1 month ago MethodLogoCheckoutBlocksAssets.php 1 month ago MethodLogoSettingsField.php 1 month ago MethodSettings.php 1 month ago MethodTitle.php 1 month ago RateCalculator.php 1 month ago RateCalculatorFactory.php 1 month ago SettingsDisplayPreparer.php 1 month ago SettingsProcessor.php 1 month ago SingleMethodSettings.php 1 month 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