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 / MethodDescription.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
MethodDescription.php
212 lines
1 <?php
2 /**
3 * Class MethodDescription
4 *
5 * @package WPDesk\FS\TableRate\ShippingMethod
6 */
7
8 namespace WPDesk\FS\TableRate\ShippingMethod;
9
10 use FSVendor\WPDesk\PluginBuilder\Plugin\Hookable;
11 use FSVendor\WPDesk\View\Renderer\Renderer;
12 use WC_Shipping_Rate;
13 use WC_Shipping_Zones;
14 use WPDesk\FS\TableRate\ShippingMethodSingle;
15 use WPDesk_Flexible_Shipping;
16
17 /**
18 * Can display method description.
19 */
20 class MethodDescription implements Hookable {
21
22 /**
23 * Renderer.
24 *
25 * @var Renderer;
26 */
27 private $renderer;
28
29 /**
30 * MethodDescription constructor.
31 *
32 * @param Renderer $renderer .
33 */
34 public function __construct( Renderer $renderer ) {
35 $this->renderer = $renderer;
36 }
37
38 /**
39 * Hooks.
40 */
41 public function hooks() {
42 add_action( 'woocommerce_after_shipping_rate', [ $this, 'display_description_if_present' ], 10, 2 );
43 add_filter( 'woocommerce_package_rates', [ $this, 'add_description_to_rate_if_present' ] );
44 }
45
46 /**
47 * @param WC_Shipping_Rate[] $rates .
48 *
49 * @return WC_Shipping_Rate[]
50 */
51 public function add_description_to_rate_if_present( $rates ) {
52 if ( $this->is_store_api_request() ) {
53 return $rates;
54 }
55
56 foreach ( $rates as $rate ) {
57 if ( ! $rate instanceof WC_Shipping_Rate || ! $this->should_display_method_description( $rate ) ) {
58 continue;
59 }
60
61 if ( ! $this->supports_native_rate_description( $rate ) ) {
62 continue;
63 }
64
65 if ( '' !== $rate->get_description() ) {
66 continue;
67 }
68
69 $description = $this->get_method_description_from_meta_data( $rate );
70
71 if ( '' === $description ) {
72 continue;
73 }
74
75 $rate->set_description( $this->sanitize_method_description_for_rate( $description ) );
76 }
77
78 return $rates;
79 }
80
81 /**
82 * @param WC_Shipping_Rate $method .
83 * @param int $index .
84 */
85 public function display_description_if_present( $method, $index ) {
86 if ( ! $method instanceof WC_Shipping_Rate || ! $this->should_display_method_description( $method ) ) {
87 return;
88 }
89
90 $description = $this->get_method_description( $method );
91
92 if ( '' !== $description ) {
93 $method_logo_data = $this->get_method_logo_data( $method );
94
95 // phpcs:disable WordPress.Security.EscapeOutput.OutputNotEscaped
96 echo $this->renderer->render(
97 'cart/flexible-shipping/after-shipping-rate',
98 [
99 'method_description' => $description,
100 'method_logo_url' => $method_logo_data['url'],
101 'method_logo_alt' => $method_logo_data['alt'],
102 ]
103 ); // WPCS: XSS OK.
104 // phpcs:enable WordPress.Security.EscapeOutput.OutputNotEscaped
105 }
106 }
107
108 /**
109 * @param WC_Shipping_Rate $method .
110 *
111 * @return string
112 */
113 private function get_method_description( $method ) {
114 $description = $this->get_method_description_from_meta_data( $method );
115
116 if ( '' !== $description ) {
117 return $description;
118 }
119
120 if ( ! method_exists( $method, 'get_description' ) ) {
121 return '';
122 }
123
124 return $method->get_description();
125 }
126
127 /**
128 * @param WC_Shipping_Rate $method .
129 *
130 * @return string
131 */
132 private function get_method_description_from_meta_data( $method ) {
133 $meta_data = $method->get_meta_data();
134
135 if ( isset( $meta_data[ RateCalculator::DESCRIPTION_BASE64ENCODED ] ) && ! empty( $meta_data[ RateCalculator::DESCRIPTION_BASE64ENCODED ] ) ) {
136 // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_decode
137 $description = base64_decode( $meta_data[ RateCalculator::DESCRIPTION_BASE64ENCODED ] );
138
139 if ( $description ) {
140 return wp_kses_post( $description );
141 }
142 }
143
144 if ( isset( $meta_data[ RateCalculator::DESCRIPTION ] ) ) {
145 return wp_kses_post( $meta_data[ RateCalculator::DESCRIPTION ] );
146 }
147
148 return '';
149 }
150
151 /**
152 * @param WC_Shipping_Rate $method .
153 *
154 * @return array{url:string,alt:string}
155 */
156 private function get_method_logo_data( $method ) {
157 $meta_data = $method->get_meta_data();
158
159 return [
160 'url' => (string) ( $meta_data[ RateCalculator::METHOD_LOGO_URL ] ?? '' ),
161 'alt' => (string) ( $meta_data[ RateCalculator::METHOD_LOGO_ALT ] ?? '' ),
162 ];
163 }
164
165 /**
166 * @param string $description .
167 *
168 * @return string
169 */
170 private function sanitize_method_description_for_rate( $description ) {
171 return trim( wp_strip_all_tags( html_entity_decode( $description, ENT_QUOTES, 'UTF-8' ) ) );
172 }
173
174 /**
175 * @param object $rate .
176 *
177 * @return bool
178 */
179 private function supports_native_rate_description( $rate ) {
180 return method_exists( $rate, 'get_description' ) && method_exists( $rate, 'set_description' );
181 }
182
183 /**
184 * @return bool
185 */
186 private function is_store_api_request() {
187 if ( ! defined( 'REST_REQUEST' ) || REST_REQUEST !== true ) {
188 return false;
189 }
190
191 $request_uri = sanitize_text_field( wp_unslash( $_SERVER['REQUEST_URI'] ?? '' ) );
192
193 return false !== strpos( $request_uri, '/wc/store/' );
194 }
195
196 /**
197 * @param WC_Shipping_Rate $method .
198 *
199 * @return bool
200 */
201 private function should_display_method_description( $method ) {
202 return in_array(
203 $method->get_method_id(),
204 [
205 WPDesk_Flexible_Shipping::METHOD_ID,
206 ShippingMethodSingle::SHIPPING_METHOD_ID,
207 ],
208 true
209 );
210 }
211 }
212