PluginProbe
ShopBuilder – WooCommerce Builder For Elementor / 2.4.2
ShopBuilder – WooCommerce Builder For Elementor v2.4.2
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/Elementor/Helper/RenderHelpers.php +86 -25 2.1.3 → 2.4.2 View file →
@@ -178,8 +178,9 @@
178 178 'out_of_stock_badge_text' => self::get_data( $meta, 'stock_badges_text', esc_html__( 'Out of Stock', 'shopbuilder' ) ),
179 179 'badge_position' => self::get_data( $meta, 'badges_position', 'top' ),
180 180 'badge_alignment' => self::get_data( $meta, 'badges_alignment', 'left' ),
181 181 'badge_preset' => self::get_data( $meta, 'custom_badge_preset', 'preset-1' ),
182 + 'enable_badges_module' => self::get_data( $meta, 'enable_badges_module', '' ),
182 183
183 184 // Link.
184 185 'image_link' => ! empty( $meta['image_link'] ),
185 186 'title_link' => ! empty( $meta['title_link'] ),
@@ -195,8 +196,9 @@
195 196 'auto_play' => ! empty( $meta['slide_autoplay'] ),
196 197 'stop_on_hover' => ! empty( $meta['pause_hover'] ),
197 198 'slider_nav' => ! empty( $meta['slider_nav'] ),
198 199 'slider_dot' => ! empty( $meta['slider_pagi'] ),
200 + 'slider_dynamic_dot' => ! empty( $meta['slider_dynamic_pagi'] ),
199 201 'loop' => ! empty( $meta['slider_loop'] ),
200 202 'lazy_load' => ! empty( $meta['slider_lazy_load'] ),
201 203 'auto_height' => ! empty( $meta['slider_auto_height'] ),
202 204 'speed' => self::get_data( $meta, 'slide_speed', 2000 ),
@@ -428,8 +430,9 @@
428 430 $columns = 2;
429 431 break;
430 432
431 433 case 'grid-layout6':
434 + case 'grid-layout9':
432 435 $columns = 5;
433 436 break;
434 437
435 438 case 'category-layout1':
@@ -470,9 +473,10 @@
470 473 public static function prepare_container_classes( $metas = [], $settings = [], $custom_class = '' ) {
471 474 $classes = 'rtsb-elementor-container products rtsb-pos-r ';
472 475 $classes .= $custom_class;
473 476
474 - $layout = $metas['layout'];
477 + $raw_layout = esc_html( $metas['layout'] );
478 + $layout = self::filter_layout( $raw_layout );
475 479 $is_cat = preg_match( '/category/', $layout );
476 480 $cart_txt_class = '';
477 481
478 482 $animation = $metas['hover_animation'];
@@ -532,8 +536,51 @@
532 536 return apply_filters( 'rtsb/product/container/class', $classes, $settings );
533 537 }
534 538
535 539 /**
540 + * Function to filter and validate the layout against allowed patterns.
541 + *
542 + * @param string $layout The layout string to be filtered.
543 + * @param string $template The template to be checked.
544 + *
545 + * @return string
546 + */
547 + public static function filter_layout( $layout, $template = '' ) {
548 + $allowed_patterns = apply_filters( 'rtsb/elementor/custom_layout', [ 'grid', 'list', 'slider', 'category', 'toyup', 'zilly' ] );
549 + $layout_part = explode( '-', $layout );
550 + $default = 'grid-layout1';
551 +
552 + if ( empty( $layout_part[0] ) ) {
553 + return $default;
554 + }
555 +
556 + if ( in_array( $layout_part[0], $allowed_patterns, true ) ) {
557 + return $layout;
558 + } else {
559 + if ( ! empty( $template ) ) {
560 + $grid = preg_match( '/grid/', $template );
561 + $list = preg_match( '/list/', $template );
562 + $slider = preg_match( '/slider/', $template );
563 + $category = preg_match( '/category/', $template );
564 +
565 + if ( $grid ) {
566 + return $default;
567 + } elseif ( $list ) {
568 + return 'list-layout1';
569 + } elseif ( $slider ) {
570 + return 'slider-layout1';
571 + } elseif ( $category ) {
572 + return 'category-layout1';
573 + } else {
574 + return $default;
575 + }
576 + } else {
577 + return $default;
578 + }
579 + }
580 + }
581 +
582 + /**
536 583 * Row classes
537 584 *
538 585 * @param array $settings Settings array.
539 586 *
@@ -543,9 +590,10 @@
543 590 $masonry_class = null;
544 591 $classes = 'rtsb-row rtsb-content-loader element-loading';
545 592 $loader_class = ' rtsb-pre-loader';
546 593
547 - $layout = $settings['layout'];
594 + $raw_layout = esc_html( $settings['layout'] );
595 + $layout = self::filter_layout( $raw_layout );
548 596 $grid_type = $settings['grid_type'];
549 597 $is_carousel = preg_match( '/slider/', $layout );
550 598
551 599 if ( preg_match( '/category/', $layout ) && ! empty( $settings['active_cat_slider'] ) ) {
@@ -561,8 +609,20 @@
561 609 if ( ! rtsb()->has_pro() || $is_carousel ) {
562 610 $masonry_class = ' rtsb-even';
563 611 }
564 612
613 + if ( $is_carousel && ! empty( $settings['raw_settings']['always_show_nav'] ) ) {
614 + $classes .= ' always-show-nav';
615 + }
616 +
617 + if ( ! empty( $settings['raw_settings']['inner_slider_always_show_nav'] ) ) {
618 + $classes .= ' inner-slider-always-show-nav';
619 + }
620 +
621 + if ( empty( $settings['raw_settings']['cols_mobile'] ) ) {
622 + $classes .= ' rtsb-mobile-flex-row';
623 + }
624 +
565 625 $classes .= ' rtsb-' . $layout . $masonry_class . $loader_class;
566 626
567 627 return apply_filters( 'rtsb/elementor/row/classes', $classes, $settings );
568 628 }
@@ -569,13 +629,13 @@
569 629
570 630 /**
571 631 * Prepare pagination attributes.
572 632 *
573 - * @param string $layout The layout type.
633 + * @param string $layout The layout type.
574 634 * @param bool $has_filters Whether the widget has filters.
575 - * @param string $template The template name.
576 - * @param array $settings The widget settings.
577 - * @param bool $ajax Whether to enable AJAX pagination.
635 + * @param string $template The template name.
636 + * @param array $settings The widget settings.
637 + * @param bool $ajax Whether to enable AJAX pagination.
578 638 *
579 639 * @return string
580 640 */
581 641 public static function prepare_pagination_attr( $layout, $has_filters, $template, $settings, $ajax ) {
@@ -587,9 +647,9 @@
587 647 } elseif ( $is_cat ) {
588 648 return '';
589 649 } else {
590 650 $ajax_pagination = ! empty( $settings['show_pagination'] ) && 'pagination' !== $settings['pagination_type'];
591 - $page = Fns::product_filters_has_ajax( 'shop' ) || Fns::product_filters_has_ajax( 'archive' );
651 + $page = Fns::product_filters_has_ajax( apply_filters( 'rtsb/builder/set/current/page/type', '' ) );
592 652 $condition = rtsb()->has_pro() && $ajax && ( $ajax_pagination || $has_filters || $page );
593 653
594 654 return $condition ? self::pagination_data( $settings, $template ) : '';
595 655 }
@@ -617,13 +677,14 @@
617 677 *
618 678 * @return array
619 679 */
620 680 public static function slider_data( array $meta, $settings = [] ) {
621 - $has_dots = $meta['slider_dot'] ? ' has-dot' : ' no-dot';
622 - $has_dots .= $meta['slider_nav'] ? ' has-nav' : ' no-nav';
623 - $d_col = 0 === $meta['d_cols'] ? self::default_columns( $meta['layout'] ) : $meta['d_cols'];
624 - $t_col = 0 === $meta['t_cols'] ? 2 : $meta['t_cols'];
625 - $m_col = 0 === $meta['m_cols'] ? 1 : $meta['m_cols'];
681 + $has_dots = $meta['slider_dot'] ? ' has-dot' : ' no-dot';
682 + $has_dots .= $meta['slider_nav'] ? ' has-nav' : ' no-nav';
683 + $has_dynamic_dots = $meta['slider_dynamic_dot'] ? true : false;
684 + $d_col = 0 === $meta['d_cols'] ? self::default_columns( $meta['layout'] ) : $meta['d_cols'];
685 + $t_col = 0 === $meta['t_cols'] ? 2 : $meta['t_cols'];
686 + $m_col = 0 === $meta['m_cols'] ? 1 : $meta['m_cols'];
626 687
627 688 if ( \Elementor\Plugin::$instance->breakpoints->has_custom_breakpoints() ) {
628 689 // Widescreen.
629 690 $w_col = self::get_data( $settings, 'cols_widescreen' );
@@ -657,9 +718,9 @@
657 718 0 => [
658 719 'slidesPerView' => absint( $m_col ),
659 720 'slidesPerGroup' => absint( $meta['m_group'] ),
660 721 'pagination' => [
661 - 'dynamicBullets' => true,
722 + 'dynamicBullets' => $has_dynamic_dots,
662 723 ],
663 724 ],
664 725 ];
665 726
@@ -684,16 +745,16 @@
684 745 }
685 746
686 747 foreach ( $el_breakpoints as $el_breakpoint => $value ) {
687 748 $breakpoint_value = ! empty( $value['value'] ) ? $value['value'] : $value['default_value'];
688 - $dynamic_bullets = false;
749 + $dynamic_bullets = $has_dynamic_dots;
689 750 $slides_per_view = $d_col;
690 751 $slides_per_group = $meta['d_group'];
691 752
692 753 switch ( $el_breakpoint ) {
693 754 case 'widescreen':
694 - $slides_per_view = $w_col;
695 - $slides_per_group = $w_group;
755 + $slides_per_view = $w_col;
756 + $slides_per_group = $w_group;
696 757
697 758 break;
698 759
699 760 case 'laptop':
@@ -702,10 +763,10 @@
702 763
703 764 break;
704 765
705 766 case 'tablet_extra':
706 - $slides_per_view = $l_col;
707 - $slides_per_group = $l_group;
767 + $slides_per_view = $l_col;
768 + $slides_per_group = $l_group;
708 769
709 770 if ( empty( $el_breakpoints['laptop'] ) ) {
710 771 $slides_per_view = $d_col;
711 772 $slides_per_group = $meta['d_group'];
@@ -730,11 +791,11 @@
730 791
731 792 break;
732 793
733 794 case 'mobile_extra':
734 - $slides_per_view = $t_col;
735 - $slides_per_group = $meta['t_group'];
736 - $dynamic_bullets = true;
795 + $slides_per_view = $t_col;
796 + $slides_per_group = $meta['t_group'];
797 + $dynamic_bullets = $has_dynamic_dots;
737 798
738 799 break;
739 800
740 801 case 'mobile':
@@ -739,9 +800,9 @@
739 800
740 801 case 'mobile':
741 802 $slides_per_view = $t_col;
742 803 $slides_per_group = $meta['t_group'];
743 - $dynamic_bullets = true;
804 + $dynamic_bullets = $has_dynamic_dots;
744 805
745 806 if ( ! empty( $el_breakpoints['mobile_extra'] ) ) {
746 807 $slides_per_view = $me_col;
747 808 $slides_per_group = $me_group;
@@ -767,9 +828,9 @@
767 828 0 => [
768 829 'slidesPerView' => absint( $m_col ),
769 830 'slidesPerGroup' => absint( $meta['m_group'] ),
770 831 'pagination' => [
771 - 'dynamicBullets' => true,
832 + 'dynamicBullets' => $has_dynamic_dots,
772 833 ],
773 834 ],
774 835 768 => [
775 836 'slidesPerView' => absint( $t_col ),
@@ -774,9 +835,9 @@
774 835 768 => [
775 836 'slidesPerView' => absint( $t_col ),
776 837 'slidesPerGroup' => absint( $meta['t_group'] ),
777 838 'pagination' => [
778 - 'dynamicBullets' => false,
839 + 'dynamicBullets' => $has_dynamic_dots,
779 840 ],
780 841 ],
781 842 1025 => [
782 843 'slidesPerView' => absint( $d_col ),
@@ -781,9 +842,9 @@
781 842 1025 => [
782 843 'slidesPerView' => absint( $d_col ),
783 844 'slidesPerGroup' => absint( $meta['d_group'] ),
784 845 'pagination' => [
785 - 'dynamicBullets' => false,
846 + 'dynamicBullets' => $has_dynamic_dots,
786 847 ],
787 848 ],
788 849 ];
789 850 }