PluginProbe
ShopBuilder – WooCommerce Builder For Elementor / 2.1.13
ShopBuilder – WooCommerce Builder For Elementor v2.1.13
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/Controllers/BuilderController.php +55 -24 2.1.02.1.13 View file →
@@ -69,13 +69,13 @@
69 69 add_action( 'elementor/editor/before_enqueue_scripts', [ $this, 'editor_scripts' ] );
70 70 // add_action( 'template_redirect', [ $this, 'both_builder_frontend' ], 99 );
71 71
72 72 // RT Select2 Ajax.
73 - add_action( 'wp_ajax_rt_select2_object_search', [ $this, 'select2_ajax_posts_filter_autocomplete' ] );
74 - add_action( 'wp_ajax_nopriv_rt_select2_object_search', [ $this, 'select2_ajax_posts_filter_autocomplete' ] );
73 + add_action( 'wp_ajax_rtsb_select2_object_search', [ $this, 'select2_ajax_posts_filter_autocomplete' ] );
74 + add_action( 'wp_ajax_nopriv_rtsb_select2_object_search', [ $this, 'select2_ajax_posts_filter_autocomplete' ] );
75 75 // Select2 ajax save data.
76 - add_action( 'wp_ajax_rt_select2_get_title', [ $this, 'select2_ajax_get_posts_value_titles' ] );
77 - add_action( 'wp_ajax_nopriv_rt_select2_get_title', [ $this, 'select2_ajax_get_posts_value_titles' ] );
76 + add_action( 'wp_ajax_rtsb_select2_get_title', [ $this, 'select2_ajax_get_posts_value_titles' ] );
77 + add_action( 'wp_ajax_nopriv_rtsb_select2_get_title', [ $this, 'select2_ajax_get_posts_value_titles' ] );
78 78 }
79 79
80 80 /**
81 81 * Apply for frontend.
@@ -107,21 +107,29 @@
107 107 *
108 108 * @return void
109 109 */
110 110 public function add_elementor_widget_categories( $elements_manager ) {
111 - $type = BuilderFns::builder_type( get_the_ID() );
112 - $builder_type = ! empty( BuilderFns::builder_page_types()[ $type ] ) ? BuilderFns::builder_page_types()[ $type ] : '';
113 - $builder_type = str_replace( 'My Account - ', '', $builder_type );
114 - $categories['rtsb-shopbuilder'] = [
115 - 'title' => esc_html__( 'ShopBuilder', 'shopbuilder' ) . ' - ' . ucfirst( $builder_type ),
116 - 'icon' => 'fa fa-plug',
117 - ];
118 - $categories['rtsb-shopbuilder-general'] = [
119 - 'title' => esc_html__( 'Shopbuilder - General', 'shopbuilder' ),
120 - 'icon' => 'fa fa-plug',
121 - ];
111 + $categories = [];
112 + $builder_id = get_queried_object_id();
113 + $id = Fns::wpml_object_id( $builder_id, BuilderFns::$post_type_tb, 'default' );
114 + $type = BuilderFns::builder_type( $id );
122 115
123 - $categories = apply_filters( 'rtsb_elementor_widgets_category_lists', $categories );
116 + if ( $type ) {
117 + $builder_type = ! empty( BuilderFns::builder_page_types()[ $type ] ) ? BuilderFns::builder_page_types()[ $type ] : '';
118 + $builder_type = str_replace( [ 'My Account - ', 'Endpoint: ' ], '', $builder_type );
119 + $categories['rtsb-shopbuilder'] = [
120 + 'title' => esc_html__( 'ShopBuilder', 'shopbuilder' ) . ' - ' . ucfirst( $builder_type ),
121 + 'icon' => 'fa fa-plug',
122 + ];
123 + }
124 + if ( 'quick-view' !== $type ) {
125 + $categories['rtsb-shopbuilder-general'] = [
126 + 'title' => esc_html__( 'Shopbuilder - General', 'shopbuilder' ),
127 + 'icon' => 'fa fa-plug',
128 + ];
129 + }
130 + $categories = apply_filters( 'rtsb_elementor_widgets_category_lists', $categories );
131 +
124 132 $other_categories = $elements_manager->get_categories();
125 133 $categories = array_merge(
126 134 array_slice( $other_categories, 0, 1 ),
127 135 $categories,
@@ -222,9 +230,9 @@
222 230 *
223 231 * @return array
224 232 */
225 233 public function rtsb_icons( $tabs = [] ) {
226 - $custom_icons = $this->get_icons();
234 + $custom_icons = Fns::get_custom_icon_names();
227 235
228 236 $tabs['shopbuilder-icons'] = [
229 237 'name' => 'rtsb-fonts',
230 238 'label' => esc_html__( 'ShopBuilder Icons', 'shopbuilder' ),
@@ -289,8 +297,18 @@
289 297
290 298 if ( BuilderFns::is_product() ) {
291 299 $product_id = Fns::get_prepared_product_id();
292 300 $parent_class = wc_get_product_class( $parent_class, $product_id );
301 + if ( function_exists( 'rtwpvs' ) ) {
302 + $_product = Fns::get_product();
303 + if ( $_product->is_type( 'variable' ) ) {
304 + $parent_class[] = 'rtwpvs-product';
305 + $beside_label = function_exists( 'rtwpvsp' ) && rtwpvs()->get_option( 'attribute_on_click_behavior' );
306 + if ( $beside_label ) {
307 + $parent_class[] = 'rtwpvs-selected-term-beside-label';
308 + }
309 + }
310 + }
293 311 }
294 312
295 313 if ( BuilderFns::is_shop() ) {
296 314 $parent_class[] = 'shop';
@@ -306,9 +324,14 @@
306 324
307 325 ?>
308 326 <!-- Before Content start -->
309 327 <div class="<?php echo esc_attr( implode( ' ', $parent_class ) ); ?>">
310 - <?php if ( BuilderFns::is_checkout() ) { ?>
328 + <?php
329 + if ( BuilderFns::is_checkout() ) {
330 + if ( ! apply_filters( 'rtsb/multi/step/checkout/widget', true ) ) {
331 + return;
332 + }
333 + ?>
311 334 <form name="checkout" method="post" class="rtsb-woocommerce-checkout checkout" action="<?php echo esc_url( wc_get_checkout_url() ); ?>" enctype="multipart/form-data">
312 335 <?php
313 336 }
314 337 }
@@ -330,8 +353,11 @@
330 353 do_action( 'elementor/page_templates/header-footer/after_content' );
331 354 }
332 355
333 356 if ( BuilderFns::is_checkout() ) {
357 + if ( ! apply_filters( 'rtsb/multi/step/checkout/widget', true ) ) {
358 + return;
359 + }
334 360 ?>
335 361 </form>
336 362 <?php
337 363 }
@@ -346,14 +372,15 @@
346 372 *
347 373 * @return void
348 374 */
349 375 public function select2_ajax_posts_filter_autocomplete() {
350 -
376 + if ( ! wp_verify_nonce( Fns::get_nonce(), rtsb()->nonceText ) ) {
377 + wp_send_json_error( [] );
378 + }
351 379 $query_per_page = 15;
352 380 $post_type = 'post';
353 381 $source_name = 'post_type';
354 - $paged = $_POST['page'] ?? 1;
355 -
382 + $paged = absint( $_POST['page'] ?? 1 );
356 383 if ( ! empty( $_POST['post_type'] ) ) {
357 384 $post_type = sanitize_text_field( $_POST['post_type'] );
358 385 }
359 386
@@ -421,8 +448,12 @@
421 448 * @return void
422 449 */
423 450 public function select2_ajax_get_posts_value_titles() {
424 451
452 + if ( ! wp_verify_nonce( Fns::get_nonce(), rtsb()->nonceText ) ) {
453 + wp_send_json_error( [] );
454 + }
455 +
425 456 if ( empty( $_POST['id'] ) ) {
426 457 wp_send_json_error( [] );
427 458 }
428 459
@@ -521,9 +552,9 @@
521 552 $where .= $wpdb->prepare( " AND {$wpdb->posts}.post_title LIKE %s", '%' . esc_sql( $search ) . '%' );
522 553 }
523 554
524 555 $query = "select post_title,ID from $wpdb->posts where post_status = 'publish' {$where} {$limit}";
525 - $results = $wpdb->get_results( $query );
556 + $results = $wpdb->get_results( $query ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.DirectDatabaseQuery.NoCaching
526 557
527 558 if ( ! empty( $results ) ) {
528 559 foreach ( $results as $row ) {
529 560 $data[ $row->ID ] = $row->post_title . ' [#' . $row->ID . ']';
@@ -554,10 +585,10 @@
554 585
555 586 $pro_widgets = [
556 587 [
557 588 'name' => 'rtsb-ajax-product-filters',
558 - 'title' => esc_html__( 'Ajax Product Filters', 'testimonial-slider-showcase' ),
559 - 'description' => esc_html__( 'Ajax Product Filters', 'testimonial-slider-showcase' ),
589 + 'title' => esc_html__( 'Ajax Product Filters', 'shopbuilder' ),
590 + 'description' => esc_html__( 'Ajax Product Filters', 'shopbuilder' ),
560 591 'icon' => 'rtsb-el-custom rtsb-element icon-rtsb-ajax-product-filters rtsb-promotional-element',
561 592 'categories' => '[ "rtsb-shopbuilder" ]',
562 593 ],
563 594 ];