PluginProbe
ShopBuilder – WooCommerce Builder For Elementor / 3.2.0
ShopBuilder – WooCommerce Builder For Elementor v3.2.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/Controllers/BuilderController.php +70 -39 2.1.83.2.0 View file →
@@ -8,14 +8,15 @@
8 8 namespace RadiusTheme\SB\Controllers;
9 9
10 10 use RadiusTheme\SB\Helpers\Fns;
11 11 use RadiusTheme\SB\Helpers\BuilderFns;
12 +use RadiusTheme\SB\Models\GeneralList;
13 +use RadiusTheme\SB\Models\ElementList;
12 14 use RadiusTheme\SB\Traits\SingletonTrait;
13 15 use RadiusTheme\SB\Controllers\Builder\BuilderCpt;
14 16 use RadiusTheme\SB\Controllers\Hooks\BuilderHooks;
15 17 use RadiusTheme\SB\Elementor\Controls\ImageSelectorControl;
16 18 use RadiusTheme\SB\Elementor\Controls\Select2AjaxControl;
17 -use RadiusTheme\SB\Models\ElementList;
18 19
19 20 // Do not allow directly accessing this file.
20 21 if ( ! defined( 'ABSPATH' ) ) {
21 22 exit( 'This script cannot be accessed directly.' );
@@ -60,22 +61,19 @@
60 61 BuilderHooks::instance();
61 62 }
62 63
63 64 BuilderCpt::instance();
64 -
65 - $this->elementor_init();
66 - $this->both_builder_frontend();
67 -
68 - // add_action( 'elementor/init', [ $this, 'elementor_init' ] );
69 - add_action( 'elementor/editor/before_enqueue_scripts', [ $this, 'editor_scripts' ] );
70 - // add_action( 'template_redirect', [ $this, 'both_builder_frontend' ], 99 );
71 -
65 + if ( defined( 'ELEMENTOR_VERSION' ) ) {
66 + $this->elementor_init();
67 + $this->both_builder_frontend();
68 + add_action( 'elementor/editor/before_enqueue_scripts', [ $this, 'editor_scripts' ] );
69 + }
72 70 // 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' ] );
71 + add_action( 'wp_ajax_rtsb_select2_object_search', [ $this, 'select2_ajax_posts_filter_autocomplete' ] );
72 + add_action( 'wp_ajax_nopriv_rtsb_select2_object_search', [ $this, 'select2_ajax_posts_filter_autocomplete' ] );
75 73 // 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' ] );
74 + add_action( 'wp_ajax_rtsb_select2_get_title', [ $this, 'select2_ajax_get_posts_value_titles' ] );
75 + add_action( 'wp_ajax_nopriv_rtsb_select2_get_title', [ $this, 'select2_ajax_get_posts_value_titles' ] );
78 76 }
79 77
80 78 /**
81 79 * Apply for frontend.
@@ -92,13 +90,20 @@
92 90 *
93 91 * @return void
94 92 */
95 93 public function elementor_init() {
96 - add_action( 'elementor/elements/categories_registered', [ $this, 'add_elementor_widget_categories' ] );
97 - add_action( 'elementor/widgets/register', [ $this, 'init_widgets' ] );
98 - add_action( 'elementor/controls/register', [ $this, 'init_controls' ] );
99 - add_filter( 'elementor/editor/localize_settings', [ $this, 'promotePremiumWidgets' ] );
100 - add_action( 'elementor/icons_manager/additional_tabs', [ $this, 'rtsb_icons' ] );
94 + add_action(
95 + 'init',
96 + function () {
97 + if ( Fns::should_load_elementor_scripts() ) {
98 + add_action( 'elementor/elements/categories_registered', [ $this, 'add_elementor_widget_categories' ] );
99 + add_action( 'elementor/widgets/register', [ $this, 'init_widgets' ] );
100 + add_action( 'elementor/controls/register', [ $this, 'init_controls' ] );
101 + add_filter( 'elementor/editor/localize_settings', [ $this, 'promotePremiumWidgets' ] );
102 + add_action( 'elementor/icons_manager/additional_tabs', [ $this, 'rtsb_icons' ] );
103 + }
104 + }
105 + );
101 106 }
102 107
103 108 /**
104 109 * Register Category
@@ -108,12 +113,15 @@
108 113 * @return void
109 114 */
110 115 public function add_elementor_widget_categories( $elements_manager ) {
111 116 $categories = [];
112 - $type = BuilderFns::builder_type( get_the_ID() );
117 + $builder_id = get_queried_object_id();
118 + $id = Fns::wpml_object_id( $builder_id, BuilderFns::$post_type_tb, 'default' );
119 + $type = BuilderFns::builder_type( $id );
120 +
113 121 if ( $type ) {
114 122 $builder_type = ! empty( BuilderFns::builder_page_types()[ $type ] ) ? BuilderFns::builder_page_types()[ $type ] : '';
115 - $builder_type = str_replace( 'My Account - ', '', $builder_type );
123 + $builder_type = str_replace( [ 'My Account - ', 'Endpoint: ' ], '', $builder_type );
116 124 $categories['rtsb-shopbuilder'] = [
117 125 'title' => esc_html__( 'ShopBuilder', 'shopbuilder' ) . ' - ' . ucfirst( $builder_type ),
118 126 'icon' => 'fa fa-plug',
119 127 ];
@@ -123,9 +131,10 @@
123 131 'title' => esc_html__( 'Shopbuilder - General', 'shopbuilder' ),
124 132 'icon' => 'fa fa-plug',
125 133 ];
126 134 }
127 - $categories = apply_filters( 'rtsb_elementor_widgets_category_lists', $categories );
135 + $categories = apply_filters( 'rtsb_elementor_widgets_category_lists', $categories );
136 +
128 137 $other_categories = $elements_manager->get_categories();
129 138 $categories = array_merge(
130 139 array_slice( $other_categories, 0, 1 ),
131 140 $categories,
@@ -131,10 +140,10 @@
131 140 $categories,
132 141 array_slice( $other_categories, 1 )
133 142 );
134 143
135 - $set_categories = function ( $categories ) {
136 - $this->categories = $categories;
144 + $set_categories = function ( $categories ) use ( $elements_manager ) {
145 + $elements_manager->categories = $categories;
137 146 };
138 147
139 148 $set_categories->call( $elements_manager, $categories );
140 149 }
@@ -155,10 +164,14 @@
155 164
156 165 /**
157 166 * Init Widgets
158 167 *
159 - * Include widgets files and register them
168 + * Include widget files and register them
160 169 *
170 + * @param object $widgets_manager Widgets Manager.
171 + *
172 + * @return void
173 + *
161 174 * @since 1.0.0
162 175 */
163 176 public function init_widgets( $widgets_manager ) {
164 177
@@ -226,9 +239,9 @@
226 239 *
227 240 * @return array
228 241 */
229 242 public function rtsb_icons( $tabs = [] ) {
230 - $custom_icons = $this->get_icons();
243 + $custom_icons = Fns::get_custom_icon_names();
231 244
232 245 $tabs['shopbuilder-icons'] = [
233 246 'name' => 'rtsb-fonts',
234 247 'label' => esc_html__( 'ShopBuilder Icons', 'shopbuilder' ),
@@ -285,9 +298,9 @@
285 298 *
286 299 * @since 2.0.0
287 300 */
288 301 if ( did_action( 'elementor/loaded' ) && 'elementor' === $this->page_edit_with ) {
289 - do_action( 'elementor/page_templates/header-footer/before_content' );
302 + do_action( 'elementor/page_templates/header-footer/before_content' ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
290 303 }
291 304
292 305 $parent_class = apply_filters( 'rtsb/builder/content/parent_class', [] );
293 306
@@ -326,9 +339,12 @@
326 339 if ( ! apply_filters( 'rtsb/multi/step/checkout/widget', true ) ) {
327 340 return;
328 341 }
329 342 ?>
330 - <form name="checkout" method="post" class="rtsb-woocommerce-checkout checkout" action="<?php echo esc_url( wc_get_checkout_url() ); ?>" enctype="multipart/form-data">
343 + <!--
344 + woocommerce-checkout added for fix issue with payment method ( Revolut Pay )
345 + -->
346 + <form name="checkout" method="post" class="rtsb-woocommerce-checkout woocommerce-checkout checkout" action="<?php echo esc_url( wc_get_checkout_url() ); ?>" enctype="multipart/form-data">
331 347 <?php
332 348 }
333 349 }
334 350
@@ -345,9 +361,9 @@
345 361 *
346 362 * @since 2.0.0
347 363 */
348 364 if ( did_action( 'elementor/loaded' ) && 'elementor' === $this->page_edit_with ) {
349 - do_action( 'elementor/page_templates/header-footer/after_content' );
365 + do_action( 'elementor/page_templates/header-footer/after_content' ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
350 366 }
351 367
352 368 if ( BuilderFns::is_checkout() ) {
353 369 if ( ! apply_filters( 'rtsb/multi/step/checkout/widget', true ) ) {
@@ -376,17 +392,20 @@
376 392 $post_type = 'post';
377 393 $source_name = 'post_type';
378 394 $paged = absint( $_POST['page'] ?? 1 );
379 395 if ( ! empty( $_POST['post_type'] ) ) {
396 + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash
380 397 $post_type = sanitize_text_field( $_POST['post_type'] );
381 398 }
382 399
383 400 if ( ! empty( $_POST['source_name'] ) ) {
401 + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash
384 402 $source_name = sanitize_text_field( $_POST['source_name'] );
385 403 }
386 404
405 + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash
387 406 $search = ! empty( $_POST['search'] ) ? sanitize_text_field( $_POST['search'] ) : '';
388 - $results = $post_list = [];
407 + $results = $post_list = []; // phpcs:ignore Squiz.PHP.DisallowMultipleAssignments.Found
389 408 switch ( $source_name ) {
390 409 case 'taxonomy':
391 410 $args = [
392 411 'hide_empty' => false,
@@ -395,9 +414,9 @@
395 414 'search' => $search,
396 415 'number' => '5',
397 416 ];
398 417
399 - if ( $post_type !== 'all' ) {
418 + if ( 'all' !== $post_type ) {
400 419 $args['taxonomy'] = $post_type;
401 420 }
402 421
403 422 $post_list = wp_list_pluck( get_terms( $args ), 'name', 'term_id' );
@@ -452,13 +471,14 @@
452 471 if ( empty( $_POST['id'] ) ) {
453 472 wp_send_json_error( [] );
454 473 }
455 474
475 + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
456 476 if ( empty( array_filter( $_POST['id'] ) ) ) {
457 477 wp_send_json_error( [] );
458 478 }
459 479 $ids = array_map( 'intval', $_POST['id'] );
460 - $source_name = ! empty( $_POST['source_name'] ) ? sanitize_text_field( $_POST['source_name'] ) : '';
480 + $source_name = ! empty( $_POST['source_name'] ) ? sanitize_text_field( $_POST['source_name'] ) : ''; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash
461 481
462 482 switch ( $source_name ) {
463 483 case 'taxonomy':
464 484 $args = [
@@ -467,9 +487,11 @@
467 487 'order' => 'ASC',
468 488 'include' => implode( ',', $ids ),
469 489 ];
470 490
471 - if ( $_POST['post_type'] !== 'all' ) {
491 + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotValidated
492 + if ( 'all' !== $_POST['post_type'] ) {
493 + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotValidated, WordPress.Security.ValidatedSanitizedInput.MissingUnslash
472 494 $args['taxonomy'] = sanitize_text_field( $_POST['post_type'] );
473 495 }
474 496
475 497 $response = wp_list_pluck( get_terms( $args ), 'name', 'term_id' );
@@ -487,9 +509,9 @@
487 509 break;
488 510 default:
489 511 $post_info = get_posts(
490 512 [
491 - 'post_type' => sanitize_text_field( $_POST['post_type'] ),
513 + 'post_type' => sanitize_text_field( $_POST['post_type'] ), // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash, WordPress.Security.ValidatedSanitizedInput.InputNotValidated
492 514 'include' => implode( ',', $ids ),
493 515 ]
494 516 );
495 517 $response = wp_list_pluck( $post_info, 'post_title', 'ID' );
@@ -505,12 +527,12 @@
505 527
506 528 /**
507 529 * Ajax callback for rt-select2
508 530 *
509 - * @param $post_type
510 - * @param $limit
511 - * @param $search
512 - * @param $paged
531 + * @param string $post_type Post type.
532 + * @param int $limit Limit.
533 + * @param string $search Search.
534 + * @param int $paged Paged.
513 535 *
514 536 * @return array
515 537 */
516 538 public function get_query_data( $post_type = 'any', $limit = 10, $search = '', $paged = 1 ) {
@@ -547,8 +569,17 @@
547 569 if ( ! empty( $search ) ) {
548 570 $where .= $wpdb->prepare( " AND {$wpdb->posts}.post_title LIKE %s", '%' . esc_sql( $search ) . '%' );
549 571 }
550 572
573 + // Add a query for shop_coupon post-type to check 'show on frontend' meta.
574 + if ( 'shop_coupon' === $post_type ) {
575 + $where .= " AND {$wpdb->posts}.ID IN (
576 + SELECT post_id FROM {$wpdb->postmeta}
577 + WHERE meta_key = 'rtsb_show_on_frontend'
578 + AND meta_value = 'on'
579 + )";
580 + }
581 +
551 582 $query = "select post_title,ID from $wpdb->posts where post_status = 'publish' {$where} {$limit}";
552 583 $results = $wpdb->get_results( $query ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.DirectDatabaseQuery.NoCaching
553 584
554 585 if ( ! empty( $results ) ) {
@@ -581,10 +612,10 @@
581 612
582 613 $pro_widgets = [
583 614 [
584 615 'name' => 'rtsb-ajax-product-filters',
585 - 'title' => esc_html__( 'Ajax Product Filters', 'testimonial-slider-showcase' ),
586 - 'description' => esc_html__( 'Ajax Product Filters', 'testimonial-slider-showcase' ),
616 + 'title' => esc_html__( 'Ajax Product Filters', 'shopbuilder' ),
617 + 'description' => esc_html__( 'Ajax Product Filters', 'shopbuilder' ),
587 618 'icon' => 'rtsb-el-custom rtsb-element icon-rtsb-ajax-product-filters rtsb-promotional-element',
588 619 'categories' => '[ "rtsb-shopbuilder" ]',
589 620 ],
590 621 ];