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