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 / MethodDescription.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
MethodDescription.php
211 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 $method_logo_data = $this->get_method_logo_data( $method );
92
93 if ( '' !== $description || '' !== $method_logo_data['url'] ) {
94 // phpcs:disable WordPress.Security.EscapeOutput.OutputNotEscaped
95 echo $this->renderer->render(
96 'cart/flexible-shipping/after-shipping-rate',
97 [
98 'method_description' => $description,
99 'method_logo_url' => $method_logo_data['url'],
100 'method_logo_alt' => $method_logo_data['alt'],
101 ]
102 ); // WPCS: XSS OK.
103 // phpcs:enable WordPress.Security.EscapeOutput.OutputNotEscaped
104 }
105 }
106
107 /**
108 * @param WC_Shipping_Rate $method .
109 *
110 * @return string
111 */
112 private function get_method_description( $method ) {
113 $description = $this->get_method_description_from_meta_data( $method );
114
115 if ( '' !== $description ) {
116 return $description;
117 }
118
119 if ( ! method_exists( $method, 'get_description' ) ) {
120 return '';
121 }
122
123 return $method->get_description();
124 }
125
126 /**
127 * @param WC_Shipping_Rate $method .
128 *
129 * @return string
130 */
131 private function get_method_description_from_meta_data( $method ) {
132 $meta_data = $method->get_meta_data();
133
134 if ( isset( $meta_data[ RateCalculator::DESCRIPTION_BASE64ENCODED ] ) && ! empty( $meta_data[ RateCalculator::DESCRIPTION_BASE64ENCODED ] ) ) {
135 // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_decode
136 $description = base64_decode( $meta_data[ RateCalculator::DESCRIPTION_BASE64ENCODED ] );
137
138 if ( $description ) {
139 return wp_kses_post( $description );
140 }
141 }
142
143 if ( isset( $meta_data[ RateCalculator::DESCRIPTION ] ) ) {
144 return wp_kses_post( $meta_data[ RateCalculator::DESCRIPTION ] );
145 }
146
147 return '';
148 }
149
150 /**
151 * @param WC_Shipping_Rate $method .
152 *
153 * @return array{url:string,alt:string}
154 */
155 private function get_method_logo_data( $method ) {
156 $meta_data = $method->get_meta_data();
157
158 return [
159 'url' => (string) ( $meta_data[ RateCalculator::METHOD_LOGO_URL ] ?? '' ),
160 'alt' => (string) ( $meta_data[ RateCalculator::METHOD_LOGO_ALT ] ?? '' ),
161 ];
162 }
163
164 /**
165 * @param string $description .
166 *
167 * @return string
168 */
169 private function sanitize_method_description_for_rate( $description ) {
170 return trim( wp_strip_all_tags( html_entity_decode( $description, ENT_QUOTES, 'UTF-8' ) ) );
171 }
172
173 /**
174 * @param object $rate .
175 *
176 * @return bool
177 */
178 private function supports_native_rate_description( $rate ) {
179 return method_exists( $rate, 'get_description' ) && method_exists( $rate, 'set_description' );
180 }
181
182 /**
183 * @return bool
184 */
185 private function is_store_api_request() {
186 if ( ! defined( 'REST_REQUEST' ) || REST_REQUEST !== true ) {
187 return false;
188 }
189
190 $request_uri = sanitize_text_field( wp_unslash( $_SERVER['REQUEST_URI'] ?? '' ) );
191
192 return false !== strpos( $request_uri, '/wc/store/' );
193 }
194
195 /**
196 * @param WC_Shipping_Rate $method .
197 *
198 * @return bool
199 */
200 private function should_display_method_description( $method ) {
201 return in_array(
202 $method->get_method_id(),
203 [
204 WPDesk_Flexible_Shipping::METHOD_ID,
205 ShippingMethodSingle::SHIPPING_METHOD_ID,
206 ],
207 true
208 );
209 }
210 }
211