PluginProbe
ShopBuilder – WooCommerce Builder For Elementor / 3.2.5
ShopBuilder – WooCommerce Builder For Elementor v3.2.5
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 +56 -31 2.1.153.2.5 View file →
@@ -8,14 +8,14 @@
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\ElementList;
12 13 use RadiusTheme\SB\Traits\SingletonTrait;
13 14 use RadiusTheme\SB\Controllers\Builder\BuilderCpt;
14 15 use RadiusTheme\SB\Controllers\Hooks\BuilderHooks;
15 16 use RadiusTheme\SB\Elementor\Controls\ImageSelectorControl;
16 17 use RadiusTheme\SB\Elementor\Controls\Select2AjaxControl;
17 -use RadiusTheme\SB\Models\ElementList;
18 18
19 19 // Do not allow directly accessing this file.
20 20 if ( ! defined( 'ABSPATH' ) ) {
21 21 exit( 'This script cannot be accessed directly.' );
@@ -54,22 +54,18 @@
54 54 */
55 55 private function __construct() {
56 56 $this->builder_page_id = BuilderFns::builder_page_id_by_page();
57 57 $this->page_edit_with = Fns::page_edit_with( $this->builder_page_id );
58 -
59 58 if ( ! is_admin() ) {
60 59 BuilderHooks::instance();
61 60 }
62 61
63 62 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 -
63 + if ( defined( 'ELEMENTOR_VERSION' ) ) {
64 + $this->elementor_init();
65 + $this->both_builder_frontend();
66 + add_action( 'elementor/editor/before_enqueue_scripts', [ $this, 'editor_scripts' ] );
67 + }
72 68 // RT Select2 Ajax.
73 69 add_action( 'wp_ajax_rtsb_select2_object_search', [ $this, 'select2_ajax_posts_filter_autocomplete' ] );
74 70 add_action( 'wp_ajax_nopriv_rtsb_select2_object_search', [ $this, 'select2_ajax_posts_filter_autocomplete' ] );
75 71 // Select2 ajax save data.
@@ -92,13 +88,20 @@
92 88 *
93 89 * @return void
94 90 */
95 91 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' ] );
92 + add_action(
93 + 'init',
94 + function () {
95 + if ( Fns::should_load_elementor_scripts() ) {
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' ] );
101 + }
102 + }
103 + );
101 104 }
102 105
103 106 /**
104 107 * Register Category
@@ -112,9 +115,9 @@
112 115 $builder_id = get_queried_object_id();
113 116 $id = Fns::wpml_object_id( $builder_id, BuilderFns::$post_type_tb, 'default' );
114 117 $type = BuilderFns::builder_type( $id );
115 118
116 - if ( $type ) {
119 + if ( $type && 'popup-builder' !== $type ) {
117 120 $builder_type = ! empty( BuilderFns::builder_page_types()[ $type ] ) ? BuilderFns::builder_page_types()[ $type ] : '';
118 121 $builder_type = str_replace( [ 'My Account - ', 'Endpoint: ' ], '', $builder_type );
119 122 $categories['rtsb-shopbuilder'] = [
120 123 'title' => esc_html__( 'ShopBuilder', 'shopbuilder' ) . ' - ' . ucfirst( $builder_type ),
@@ -135,10 +138,10 @@
135 138 $categories,
136 139 array_slice( $other_categories, 1 )
137 140 );
138 141
139 - $set_categories = function ( $categories ) {
140 - $this->categories = $categories;
142 + $set_categories = function ( $categories ) use ( $elements_manager ) {
143 + $elements_manager->categories = $categories;
141 144 };
142 145
143 146 $set_categories->call( $elements_manager, $categories );
144 147 }
@@ -159,10 +162,14 @@
159 162
160 163 /**
161 164 * Init Widgets
162 165 *
163 - * Include widgets files and register them
166 + * Include widget files and register them
164 167 *
168 + * @param object $widgets_manager Widgets Manager.
169 + *
170 + * @return void
171 + *
165 172 * @since 1.0.0
166 173 */
167 174 public function init_widgets( $widgets_manager ) {
168 175
@@ -289,9 +296,9 @@
289 296 *
290 297 * @since 2.0.0
291 298 */
292 299 if ( did_action( 'elementor/loaded' ) && 'elementor' === $this->page_edit_with ) {
293 - do_action( 'elementor/page_templates/header-footer/before_content' );
300 + do_action( 'elementor/page_templates/header-footer/before_content' ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
294 301 }
295 302
296 303 $parent_class = apply_filters( 'rtsb/builder/content/parent_class', [] );
297 304
@@ -330,9 +337,12 @@
330 337 if ( ! apply_filters( 'rtsb/multi/step/checkout/widget', true ) ) {
331 338 return;
332 339 }
333 340 ?>
334 - <form name="checkout" method="post" class="rtsb-woocommerce-checkout checkout" action="<?php echo esc_url( wc_get_checkout_url() ); ?>" enctype="multipart/form-data">
341 + <!--
342 + woocommerce-checkout added for fix issue with payment method ( Revolut Pay )
343 + -->
344 + <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">
335 345 <?php
336 346 }
337 347 }
338 348
@@ -349,9 +359,9 @@
349 359 *
350 360 * @since 2.0.0
351 361 */
352 362 if ( did_action( 'elementor/loaded' ) && 'elementor' === $this->page_edit_with ) {
353 - do_action( 'elementor/page_templates/header-footer/after_content' );
363 + do_action( 'elementor/page_templates/header-footer/after_content' ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
354 364 }
355 365
356 366 if ( BuilderFns::is_checkout() ) {
357 367 if ( ! apply_filters( 'rtsb/multi/step/checkout/widget', true ) ) {
@@ -380,17 +390,20 @@
380 390 $post_type = 'post';
381 391 $source_name = 'post_type';
382 392 $paged = absint( $_POST['page'] ?? 1 );
383 393 if ( ! empty( $_POST['post_type'] ) ) {
394 + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash
384 395 $post_type = sanitize_text_field( $_POST['post_type'] );
385 396 }
386 397
387 398 if ( ! empty( $_POST['source_name'] ) ) {
399 + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash
388 400 $source_name = sanitize_text_field( $_POST['source_name'] );
389 401 }
390 402
403 + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash
391 404 $search = ! empty( $_POST['search'] ) ? sanitize_text_field( $_POST['search'] ) : '';
392 - $results = $post_list = [];
405 + $results = $post_list = []; // phpcs:ignore Squiz.PHP.DisallowMultipleAssignments.Found
393 406 switch ( $source_name ) {
394 407 case 'taxonomy':
395 408 $args = [
396 409 'hide_empty' => false,
@@ -399,9 +412,9 @@
399 412 'search' => $search,
400 413 'number' => '5',
401 414 ];
402 415
403 - if ( $post_type !== 'all' ) {
416 + if ( 'all' !== $post_type ) {
404 417 $args['taxonomy'] = $post_type;
405 418 }
406 419
407 420 $post_list = wp_list_pluck( get_terms( $args ), 'name', 'term_id' );
@@ -456,13 +469,14 @@
456 469 if ( empty( $_POST['id'] ) ) {
457 470 wp_send_json_error( [] );
458 471 }
459 472
473 + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
460 474 if ( empty( array_filter( $_POST['id'] ) ) ) {
461 475 wp_send_json_error( [] );
462 476 }
463 477 $ids = array_map( 'intval', $_POST['id'] );
464 - $source_name = ! empty( $_POST['source_name'] ) ? sanitize_text_field( $_POST['source_name'] ) : '';
478 + $source_name = ! empty( $_POST['source_name'] ) ? sanitize_text_field( $_POST['source_name'] ) : ''; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash
465 479
466 480 switch ( $source_name ) {
467 481 case 'taxonomy':
468 482 $args = [
@@ -471,9 +485,11 @@
471 485 'order' => 'ASC',
472 486 'include' => implode( ',', $ids ),
473 487 ];
474 488
475 - if ( $_POST['post_type'] !== 'all' ) {
489 + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotValidated
490 + if ( 'all' !== $_POST['post_type'] ) {
491 + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotValidated, WordPress.Security.ValidatedSanitizedInput.MissingUnslash
476 492 $args['taxonomy'] = sanitize_text_field( $_POST['post_type'] );
477 493 }
478 494
479 495 $response = wp_list_pluck( get_terms( $args ), 'name', 'term_id' );
@@ -491,9 +507,9 @@
491 507 break;
492 508 default:
493 509 $post_info = get_posts(
494 510 [
495 - 'post_type' => sanitize_text_field( $_POST['post_type'] ),
511 + 'post_type' => sanitize_text_field( $_POST['post_type'] ), // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash, WordPress.Security.ValidatedSanitizedInput.InputNotValidated
496 512 'include' => implode( ',', $ids ),
497 513 ]
498 514 );
499 515 $response = wp_list_pluck( $post_info, 'post_title', 'ID' );
@@ -509,12 +525,12 @@
509 525
510 526 /**
511 527 * Ajax callback for rt-select2
512 528 *
513 - * @param $post_type
514 - * @param $limit
515 - * @param $search
516 - * @param $paged
529 + * @param string $post_type Post type.
530 + * @param int $limit Limit.
531 + * @param string $search Search.
532 + * @param int $paged Paged.
517 533 *
518 534 * @return array
519 535 */
520 536 public function get_query_data( $post_type = 'any', $limit = 10, $search = '', $paged = 1 ) {
@@ -549,8 +565,17 @@
549 565 }
550 566
551 567 if ( ! empty( $search ) ) {
552 568 $where .= $wpdb->prepare( " AND {$wpdb->posts}.post_title LIKE %s", '%' . esc_sql( $search ) . '%' );
569 + }
570 +
571 + // Add a query for shop_coupon post-type to check 'show on frontend' meta.
572 + if ( 'shop_coupon' === $post_type ) {
573 + $where .= " AND {$wpdb->posts}.ID IN (
574 + SELECT post_id FROM {$wpdb->postmeta}
575 + WHERE meta_key = 'rtsb_show_on_frontend'
576 + AND meta_value = 'on'
577 + )";
553 578 }
554 579
555 580 $query = "select post_title,ID from $wpdb->posts where post_status = 'publish' {$where} {$limit}";
556 581 $results = $wpdb->get_results( $query ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.DirectDatabaseQuery.NoCaching