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/Elementor/Helper/RenderHelpers.php +72 -25 2.1.72.1.13 View file →
@@ -196,8 +196,9 @@
196 196 'auto_play' => ! empty( $meta['slide_autoplay'] ),
197 197 'stop_on_hover' => ! empty( $meta['pause_hover'] ),
198 198 'slider_nav' => ! empty( $meta['slider_nav'] ),
199 199 'slider_dot' => ! empty( $meta['slider_pagi'] ),
200 + 'slider_dynamic_dot' => ! empty( $meta['slider_dynamic_pagi'] ),
200 201 'loop' => ! empty( $meta['slider_loop'] ),
201 202 'lazy_load' => ! empty( $meta['slider_lazy_load'] ),
202 203 'auto_height' => ! empty( $meta['slider_auto_height'] ),
203 204 'speed' => self::get_data( $meta, 'slide_speed', 2000 ),
@@ -471,9 +472,10 @@
471 472 public static function prepare_container_classes( $metas = [], $settings = [], $custom_class = '' ) {
472 473 $classes = 'rtsb-elementor-container products rtsb-pos-r ';
473 474 $classes .= $custom_class;
474 475
475 - $layout = $metas['layout'];
476 + $raw_layout = esc_html( $metas['layout'] );
477 + $layout = self::filter_layout( $raw_layout );
476 478 $is_cat = preg_match( '/category/', $layout );
477 479 $cart_txt_class = '';
478 480
479 481 $animation = $metas['hover_animation'];
@@ -533,8 +535,51 @@
533 535 return apply_filters( 'rtsb/product/container/class', $classes, $settings );
534 536 }
535 537
536 538 /**
539 + * Function to filter and validate the layout against allowed patterns.
540 + *
541 + * @param string $layout The layout string to be filtered.
542 + * @param string $template The template to be checked.
543 + *
544 + * @return string
545 + */
546 + public static function filter_layout( $layout, $template = '' ) {
547 + $allowed_patterns = [ 'grid', 'list', 'slider', 'category' ];
548 + $layout_part = explode( '-', $layout );
549 + $default = 'grid-layout1';
550 +
551 + if ( empty( $layout_part[0] ) ) {
552 + return $default;
553 + }
554 +
555 + if ( in_array( $layout_part[0], $allowed_patterns, true ) ) {
556 + return $layout;
557 + } else {
558 + if ( ! empty( $template ) ) {
559 + $grid = preg_match( '/grid/', $template );
560 + $list = preg_match( '/list/', $template );
561 + $slider = preg_match( '/slider/', $template );
562 + $category = preg_match( '/category/', $template );
563 +
564 + if ( $grid ) {
565 + return $default;
566 + } elseif ( $list ) {
567 + return 'list-layout1';
568 + } elseif ( $slider ) {
569 + return 'slider-layout1';
570 + } elseif ( $category ) {
571 + return 'category-layout1';
572 + } else {
573 + return $default;
574 + }
575 + } else {
576 + return $default;
577 + }
578 + }
579 + }
580 +
581 + /**
537 582 * Row classes
538 583 *
539 584 * @param array $settings Settings array.
540 585 *
@@ -544,9 +589,10 @@
544 589 $masonry_class = null;
545 590 $classes = 'rtsb-row rtsb-content-loader element-loading';
546 591 $loader_class = ' rtsb-pre-loader';
547 592
548 - $layout = $settings['layout'];
593 + $raw_layout = esc_html( $settings['layout'] );
594 + $layout = self::filter_layout( $raw_layout );
549 595 $grid_type = $settings['grid_type'];
550 596 $is_carousel = preg_match( '/slider/', $layout );
551 597
552 598 if ( preg_match( '/category/', $layout ) && ! empty( $settings['active_cat_slider'] ) ) {
@@ -576,13 +622,13 @@
576 622
577 623 /**
578 624 * Prepare pagination attributes.
579 625 *
580 - * @param string $layout The layout type.
626 + * @param string $layout The layout type.
581 627 * @param bool $has_filters Whether the widget has filters.
582 - * @param string $template The template name.
583 - * @param array $settings The widget settings.
584 - * @param bool $ajax Whether to enable AJAX pagination.
628 + * @param string $template The template name.
629 + * @param array $settings The widget settings.
630 + * @param bool $ajax Whether to enable AJAX pagination.
585 631 *
586 632 * @return string
587 633 */
588 634 public static function prepare_pagination_attr( $layout, $has_filters, $template, $settings, $ajax ) {
@@ -594,9 +640,9 @@
594 640 } elseif ( $is_cat ) {
595 641 return '';
596 642 } else {
597 643 $ajax_pagination = ! empty( $settings['show_pagination'] ) && 'pagination' !== $settings['pagination_type'];
598 - $page = Fns::product_filters_has_ajax( 'shop' ) || Fns::product_filters_has_ajax( 'archive' );
644 + $page = Fns::product_filters_has_ajax( apply_filters( 'rtsb/builder/set/current/page/type', '' ) );
599 645 $condition = rtsb()->has_pro() && $ajax && ( $ajax_pagination || $has_filters || $page );
600 646
601 647 return $condition ? self::pagination_data( $settings, $template ) : '';
602 648 }
@@ -624,13 +670,14 @@
624 670 *
625 671 * @return array
626 672 */
627 673 public static function slider_data( array $meta, $settings = [] ) {
628 - $has_dots = $meta['slider_dot'] ? ' has-dot' : ' no-dot';
629 - $has_dots .= $meta['slider_nav'] ? ' has-nav' : ' no-nav';
630 - $d_col = 0 === $meta['d_cols'] ? self::default_columns( $meta['layout'] ) : $meta['d_cols'];
631 - $t_col = 0 === $meta['t_cols'] ? 2 : $meta['t_cols'];
632 - $m_col = 0 === $meta['m_cols'] ? 1 : $meta['m_cols'];
674 + $has_dots = $meta['slider_dot'] ? ' has-dot' : ' no-dot';
675 + $has_dots .= $meta['slider_nav'] ? ' has-nav' : ' no-nav';
676 + $has_dynamic_dots = $meta['slider_dynamic_dot'] ? true : false;
677 + $d_col = 0 === $meta['d_cols'] ? self::default_columns( $meta['layout'] ) : $meta['d_cols'];
678 + $t_col = 0 === $meta['t_cols'] ? 2 : $meta['t_cols'];
679 + $m_col = 0 === $meta['m_cols'] ? 1 : $meta['m_cols'];
633 680
634 681 if ( \Elementor\Plugin::$instance->breakpoints->has_custom_breakpoints() ) {
635 682 // Widescreen.
636 683 $w_col = self::get_data( $settings, 'cols_widescreen' );
@@ -664,9 +711,9 @@
664 711 0 => [
665 712 'slidesPerView' => absint( $m_col ),
666 713 'slidesPerGroup' => absint( $meta['m_group'] ),
667 714 'pagination' => [
668 - 'dynamicBullets' => true,
715 + 'dynamicBullets' => $has_dynamic_dots,
669 716 ],
670 717 ],
671 718 ];
672 719
@@ -691,16 +738,16 @@
691 738 }
692 739
693 740 foreach ( $el_breakpoints as $el_breakpoint => $value ) {
694 741 $breakpoint_value = ! empty( $value['value'] ) ? $value['value'] : $value['default_value'];
695 - $dynamic_bullets = false;
742 + $dynamic_bullets = $has_dynamic_dots;
696 743 $slides_per_view = $d_col;
697 744 $slides_per_group = $meta['d_group'];
698 745
699 746 switch ( $el_breakpoint ) {
700 747 case 'widescreen':
701 - $slides_per_view = $w_col;
702 - $slides_per_group = $w_group;
748 + $slides_per_view = $w_col;
749 + $slides_per_group = $w_group;
703 750
704 751 break;
705 752
706 753 case 'laptop':
@@ -709,10 +756,10 @@
709 756
710 757 break;
711 758
712 759 case 'tablet_extra':
713 - $slides_per_view = $l_col;
714 - $slides_per_group = $l_group;
760 + $slides_per_view = $l_col;
761 + $slides_per_group = $l_group;
715 762
716 763 if ( empty( $el_breakpoints['laptop'] ) ) {
717 764 $slides_per_view = $d_col;
718 765 $slides_per_group = $meta['d_group'];
@@ -737,11 +784,11 @@
737 784
738 785 break;
739 786
740 787 case 'mobile_extra':
741 - $slides_per_view = $t_col;
742 - $slides_per_group = $meta['t_group'];
743 - $dynamic_bullets = true;
788 + $slides_per_view = $t_col;
789 + $slides_per_group = $meta['t_group'];
790 + $dynamic_bullets = $has_dynamic_dots;
744 791
745 792 break;
746 793
747 794 case 'mobile':
@@ -746,9 +793,9 @@
746 793
747 794 case 'mobile':
748 795 $slides_per_view = $t_col;
749 796 $slides_per_group = $meta['t_group'];
750 - $dynamic_bullets = true;
797 + $dynamic_bullets = $has_dynamic_dots;
751 798
752 799 if ( ! empty( $el_breakpoints['mobile_extra'] ) ) {
753 800 $slides_per_view = $me_col;
754 801 $slides_per_group = $me_group;
@@ -774,9 +821,9 @@
774 821 0 => [
775 822 'slidesPerView' => absint( $m_col ),
776 823 'slidesPerGroup' => absint( $meta['m_group'] ),
777 824 'pagination' => [
778 - 'dynamicBullets' => true,
825 + 'dynamicBullets' => $has_dynamic_dots,
779 826 ],
780 827 ],
781 828 768 => [
782 829 'slidesPerView' => absint( $t_col ),
@@ -781,9 +828,9 @@
781 828 768 => [
782 829 'slidesPerView' => absint( $t_col ),
783 830 'slidesPerGroup' => absint( $meta['t_group'] ),
784 831 'pagination' => [
785 - 'dynamicBullets' => false,
832 + 'dynamicBullets' => $has_dynamic_dots,
786 833 ],
787 834 ],
788 835 1025 => [
789 836 'slidesPerView' => absint( $d_col ),
@@ -788,9 +835,9 @@
788 835 1025 => [
789 836 'slidesPerView' => absint( $d_col ),
790 837 'slidesPerGroup' => absint( $meta['d_group'] ),
791 838 'pagination' => [
792 - 'dynamicBullets' => false,
839 + 'dynamicBullets' => $has_dynamic_dots,
793 840 ],
794 841 ],
795 842 ];
796 843 }