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.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 day ago Convert 1 day ago Duplicate 1 day ago Management 1 day ago Timestamps 1 day ago Tracker 1 day ago views 1 day ago CommonMethodSettings.php 1 day ago FreeShippingCalculator.php 1 day ago FreeShippingThresholdRuleValidator.php 1 day ago MethodDescription.php 1 day ago MethodLogo.php 1 day ago MethodLogoCheckoutBlocksAssets.php 1 day ago MethodLogoSettingsField.php 1 day ago MethodSettings.php 1 day ago MethodTitle.php 1 day ago RateCalculator.php 1 day ago RateCalculatorFactory.php 1 day ago SettingsDisplayPreparer.php 1 day ago SettingsProcessor.php 1 day ago SingleMethodSettings.php 1 day 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