PluginProbe
ShopBuilder – WooCommerce Builder For Elementor / 3.3.0
ShopBuilder – WooCommerce Builder For Elementor v3.3.0
3.4.2 3.4.1 3.4.0 2.0.1 2.0.2 2.0.3 2.1.0 2.1.1 2.1.10 2.1.11 2.1.12 2.1.13 2.1.14 2.1.15 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 2.2.0 2.2.1 2.2.2 All 63 releases
← All changes | app/Modules/QuickView/QuickViewFrontEnd.php +73 -75 2.1.23.3.0 View file →
@@ -1,5 +1,10 @@
1 1 <?php
2 +/**
3 + * Quick View Module Class.
4 + *
5 + * @package RadiusTheme\SB
6 + */
2 7
3 8 namespace RadiusTheme\SB\Modules\QuickView;
4 9
5 10 use RadiusTheme\SB\Helpers\Fns;
@@ -10,21 +15,32 @@
10 15 if ( ! defined( 'ABSPATH' ) ) {
11 16 exit( 'This script cannot be accessed directly.' );
12 17 }
13 18
19 +/**
20 + * Quick View Module Class.
21 + */
14 22 class QuickViewFrontEnd {
15 23 use SingletonTrait;
16 24
25 + /**
26 + * Asset Handle
27 + *
28 + * @var string
29 + */
30 + private $handle = 'rtsb-quick-view';
31 +
32 + /**
33 + * Class constructor.
34 + */
17 35 public function __construct() {
18 - add_action( 'wp_enqueue_scripts', [ $this, 'enqueue' ] );
36 + add_action( 'wp_enqueue_scripts', [ $this, 'enqueue' ], 99 );
19 37
20 - // Gallery Plugin Support rtwpvg_disable_enqueue_scripts
38 + // Gallery Plugin Support rtwpvg_disable_enqueue_scripts.
21 39 add_filter( 'rtwpvg_disable_enqueue_scripts', '__return_false', 11 );
22 40
23 41 // Template.
24 -
25 42 add_action( 'rtsb/modules/quick_view/frontend/display', [ $this, 'button_hook' ] );
26 - // Add do_action( 'rtsb/modules/quick_view/frontend/display' ); for display anywhere.
27 43
28 44 add_action( 'rtsb/modules/quick_view/print_button', [ $this, 'print_button' ] );
29 45
30 46 // Load action for product template.
@@ -49,9 +65,9 @@
49 65 * @return void
50 66 * @since 1.0.0
51 67 */
52 68 public function quick_view_action_template() {
53 -
69 + wp_enqueue_style( 'elementor-frontend' );
54 70 // Image.
55 71 add_action( 'rtsb/wcqv/product/image', 'woocommerce_show_product_sale_flash', 10 );
56 72 add_action( 'rtsb/wcqv/product/image', 'woocommerce_show_product_images', 20 );
57 73
@@ -63,18 +79,23 @@
63 79 add_action( 'rtsb/wcqv/product/summary', 'woocommerce_template_single_add_to_cart', 25 );
64 80 add_action( 'rtsb/wcqv/product/summary', 'woocommerce_template_single_meta', 30 );
65 81 }
66 82
83 + /**
84 + * Quick View AJAX.
85 + *
86 + * @return void
87 + */
67 88 public function product_quick_view_ajax() {
68 - $product_id = absint( $_REQUEST['product_id'] );
89 + $product_id = isset( $_REQUEST['product_id'] ) ? absint( $_REQUEST['product_id'] ) : 0; // phpcs:ignore WordPress.Security.NonceVerification.Recommended
69 90
70 - if ( empty( $product_id ) ) {
91 + if ( empty( $product_id ) || 'publish' !== get_post_status( $product_id ) ) {
71 92 wp_send_json_error( esc_html__( 'Product Id not found', 'shopbuilder' ) );
72 93 }
73 94
74 95 global $sitepress;
75 96
76 - $lang = isset( $_REQUEST['lang'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['lang'] ) ) : '';
97 + $lang = isset( $_REQUEST['lang'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['lang'] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification.Recommended
77 98 if ( defined( 'ICL_LANGUAGE_CODE' ) && $lang && isset( $sitepress ) ) {
78 99 $sitepress->switch_lang( $lang, true );
79 100 }
80 101
@@ -84,12 +105,8 @@
84 105 // Remove product thumbnails gallery.
85 106 if ( defined( 'RTWPVG_VERSION' ) ) {
86 107 remove_action( 'woocommerce_product_thumbnails', 'woocommerce_show_product_thumbnails', 20 );
87 108 }
88 - if ( ! defined( 'RTWPVG_VERSION' ) ) {
89 - add_action( 'woocommerce_product_thumbnails', [ $this, 'woocommerce_product_thumbnails_before' ], 1 );
90 - add_action( 'woocommerce_product_thumbnails', [ $this, 'woocommerce_product_thumbnails_after' ], 25 );
91 - }
92 109
93 110 ob_start();
94 111 Fns::load_template( 'quick-view/content' );
95 112 $html = ob_get_contents(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
@@ -104,9 +121,8 @@
104 121 * @return void
105 122 * @since 1.0.0
106 123 */
107 124 public function attach_button() {
108 -
109 125 $positions = apply_filters(
110 126 'rtsb/module/quick_view/loop_btn_position',
111 127 [
112 128
@@ -125,9 +141,8 @@
125 141 ]
126 142 );
127 143
128 144 // Add the link "Add to wishlist" in the loop.
129 -
130 145 $loop_btn_position = Fns::get_option( 'modules', 'quick_view', 'loop_btn_position', 'after_add_to_cart' );
131 146
132 147 if ( 'shortcode' !== $loop_btn_position && isset( $positions[ $loop_btn_position ]['hook'] ) ) {
133 148 add_action(
@@ -138,9 +153,9 @@
138 153 ],
139 154 isset( $positions[ $loop_btn_position ]['priority'] ) ? $positions[ $loop_btn_position ]['priority'] : ''
140 155 );
141 156 }
142 - // TODO:: Maybe this hooks is not working. Need to Check gutenberg compatibility.
157 +
143 158 // Add the link "Quick view" for Gutenberg blocks.
144 159 add_filter( 'woocommerce_blocks_product_grid_item_html', [ $this, 'add_button_for_block' ], 10, 3 );
145 160 }
146 161
@@ -148,30 +163,8 @@
148 163 * Print "Add to compare" button
149 164 *
150 165 * @return void
151 166 */
152 - public function woocommerce_product_thumbnails_before() {
153 - ?>
154 - <div class="rtsb-gallery-images-wrapper">
155 - <?php
156 - }
157 - /**
158 - * Print "Add to compare" button
159 - *
160 - * @return void
161 - */
162 - public function woocommerce_product_thumbnails_after() {
163 -
164 - ?>
165 - </div>
166 - <?php
167 - }
168 -
169 - /**
170 - * Print "Add to compare" button
171 - *
172 - * @return void
173 - */
174 167 public function button_hook() {
175 168 if ( ! apply_filters( 'rtsb/module/quick_view/show_button', true ) ) {
176 169 return;
177 170 }
@@ -182,9 +175,13 @@
182 175 }
183 176
184 177
185 178 /**
186 - * @return string|void
179 + * Print "Add to compare" button.
180 + *
181 + * @param int $product_id Product ID.
182 + *
183 + * @return void
187 184 */
188 185 public function print_button( $product_id = 0 ) {
189 186 global $product;
190 187
@@ -191,25 +188,27 @@
191 188 if ( ! $product instanceof WC_Product && $product_id ) {
192 189 $product = wc_get_product( $product_id );
193 190 }
194 191
195 - // if ( ! $current_product instanceof WC_Product ) {
196 - // return '';
197 - // }
192 + $classes = [];
193 + $button_text = Fns::get_option( 'modules', 'quick_view', 'button_text', esc_html__( 'Quick View', 'shopbuilder' ) );
194 + $has_button_text = ! empty( Fns::get_option( 'modules', 'quick_view', 'button_text', '' ) );
198 195
199 - $classes = []; // button class.
200 - $button_text = Fns::get_option( 'modules', 'quick_view', 'button_text', esc_html__( 'Quick View', 'shopbuilder' ) );
196 + if ( $has_button_text ) {
197 + $classes[] = 'has-text';
198 + }
201 199
202 200 $icon_html = '<i class="rtsb-icon rtsb-icon-eye"></i>';
203 201 // get product type.
204 202 $product_type = $product->get_type();
205 203 $params = [
206 - 'classes' => $classes,
207 - 'product_id' => $product->get_id(),
208 - 'product_type' => $product_type,
209 - 'button_text' => $button_text,
210 - 'left_text' => apply_filters( 'rtsb/module/quick_view/button_left_text', '' ),
211 - 'right_text' => apply_filters( 'rtsb/module/quick_view/button_right_text', '' ),
204 + 'classes' => $classes,
205 + 'product_id' => $product->get_id(),
206 + 'product_type' => $product_type,
207 + 'button_text' => $button_text,
208 + 'has_button_text' => $has_button_text,
209 + 'left_text' => apply_filters( 'rtsb/module/quick_view/button_left_text', '' ),
210 + 'right_text' => apply_filters( 'rtsb/module/quick_view/button_right_text', '' ),
212 211 ];
213 212 // let third party developer filter options.
214 213 $atts = apply_filters( 'rtsb/module/quick_view/button_params', $params );
215 214 // set fragment options.
@@ -217,39 +216,51 @@
217 216
218 217 Fns::load_template( 'quick-view/button', $atts );
219 218 }
220 219
221 -
222 220 /**
223 221 * Wishlist button Shortcode callable function
224 222 *
225 - * @param array $atts
226 - * @param string $content
227 - *
228 - * @return string [HTML]
223 + * @return string
229 224 */
230 - public function button_shortcode( $atts, $content = '' ) {
231 - $this->enqueue();
225 + public function button_shortcode() {
232 226 global $product;
227 +
233 228 if ( ! $product instanceof WC_Product ) {
234 229 return '';
235 230 }
231 +
236 232 ob_start();
237 -
238 233 do_action( 'rtsb/modules/quick_view/print_button', $product->get_id() );
239 234
240 235 return ob_get_clean();
241 236 }
242 237
238 + /**
239 + * Enqueue assets.
240 + *
241 + * @return void
242 + */
243 243 public function enqueue() {
244 + wp_enqueue_style( 'elementor-icons-fa-regular' );
245 + wp_enqueue_style( 'elementor-icons-fa-solid' );
246 + wp_enqueue_style( 'elementor-icons-shared-0' );
247 +
248 + if ( ! class_exists( 'WooProductVariationGallery' ) && current_theme_supports( 'wc-product-gallery-slider' ) ) {
249 + wp_enqueue_script( 'wc-flexslider' );
250 + }
251 +
244 252 wp_enqueue_script( 'wc-add-to-cart-variation' );
253 +
245 254 if ( version_compare( WC()->version, '3.0.0', '>=' ) ) {
246 255 if ( current_theme_supports( 'wc-product-gallery-zoom' ) ) {
247 - wp_enqueue_script( 'zoom' );
256 + wp_enqueue_script( 'wc-zoom' );
248 257 }
258 +
249 259 if ( current_theme_supports( 'wc-product-gallery-lightbox' ) ) {
250 - wp_enqueue_script( 'photoswipe-ui-default' );
260 + wp_enqueue_script( 'wc-photoswipe-ui-default' );
251 261 wp_enqueue_style( 'photoswipe-default-skin' );
262 +
252 263 if ( has_action( 'wp_footer', 'woocommerce_photoswipe' ) === false ) {
253 264 add_action( 'wp_footer', 'woocommerce_photoswipe', 15 );
254 265 }
255 266 }
@@ -254,23 +265,10 @@
254 265 }
255 266 }
256 267 wp_enqueue_script( 'wc-single-product' );
257 268 }
258 -
259 - wp_register_style( 'rtsb-modules', rtsb()->get_assets_uri( 'modules/modules.css' ), [], RTSB_VERSION );
260 - wp_register_script(
261 - 'rtsb-quick-view',
262 - rtsb()->get_assets_uri( 'modules/quick-view.js' ),
263 - [
264 - 'jquery',
265 - 'rtsb-public',
266 - ],
267 - RTSB_VERSION,
268 - true
269 - );
270 - wp_enqueue_style( 'rtsb-modules' );
271 - wp_enqueue_script( 'rtsb-quick-view' );
272 -
269 + // Enqueue assets.
270 + $this->handle = Fns::enqueue_module_assets( $this->handle, 'quick-view' );
273 271 // Allow user to load custom style and scripts!
274 272 do_action( 'rtsb/modules/quick_view/custom_scripts' );
275 273
276 274 $params = apply_filters(
@@ -281,9 +279,9 @@
281 279 'isLoggedIn' => is_user_logged_in(),
282 280 ]
283 281 );
284 282
285 - wp_localize_script( 'rtsb-quick-view', 'rtsbQvParams', $params );
283 + wp_localize_script( $this->handle, 'rtsbQvParams', $params );
286 284 }
287 285
288 286
289 287 /**