PluginProbe
ShopBuilder – WooCommerce Builder For Elementor / 3.0.0
ShopBuilder – WooCommerce Builder For Elementor v3.0.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 +52 -28 2.2.03.0.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,16 +61,13 @@
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 71 add_action( 'wp_ajax_rtsb_select2_object_search', [ $this, 'select2_ajax_posts_filter_autocomplete' ] );
74 72 add_action( 'wp_ajax_nopriv_rtsb_select2_object_search', [ $this, 'select2_ajax_posts_filter_autocomplete' ] );
75 73 // Select2 ajax save data.
@@ -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
@@ -135,10 +140,10 @@
135 140 $categories,
136 141 array_slice( $other_categories, 1 )
137 142 );
138 143
139 - $set_categories = function ( $categories ) {
140 - $this->categories = $categories;
144 + $set_categories = function ( $categories ) use ( $elements_manager ) {
145 + $elements_manager->categories = $categories;
141 146 };
142 147
143 148 $set_categories->call( $elements_manager, $categories );
144 149 }
@@ -159,10 +164,14 @@
159 164
160 165 /**
161 166 * Init Widgets
162 167 *
163 - * Include widgets files and register them
168 + * Include widget files and register them
164 169 *
170 + * @param object $widgets_manager Widgets Manager.
171 + *
172 + * @return void
173 + *
165 174 * @since 1.0.0
166 175 */
167 176 public function init_widgets( $widgets_manager ) {
168 177
@@ -289,9 +298,9 @@
289 298 *
290 299 * @since 2.0.0
291 300 */
292 301 if ( did_action( 'elementor/loaded' ) && 'elementor' === $this->page_edit_with ) {
293 - 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
294 303 }
295 304
296 305 $parent_class = apply_filters( 'rtsb/builder/content/parent_class', [] );
297 306
@@ -349,9 +358,9 @@
349 358 *
350 359 * @since 2.0.0
351 360 */
352 361 if ( did_action( 'elementor/loaded' ) && 'elementor' === $this->page_edit_with ) {
353 - do_action( 'elementor/page_templates/header-footer/after_content' );
362 + do_action( 'elementor/page_templates/header-footer/after_content' ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
354 363 }
355 364
356 365 if ( BuilderFns::is_checkout() ) {
357 366 if ( ! apply_filters( 'rtsb/multi/step/checkout/widget', true ) ) {
@@ -380,17 +389,20 @@
380 389 $post_type = 'post';
381 390 $source_name = 'post_type';
382 391 $paged = absint( $_POST['page'] ?? 1 );
383 392 if ( ! empty( $_POST['post_type'] ) ) {
393 + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash
384 394 $post_type = sanitize_text_field( $_POST['post_type'] );
385 395 }
386 396
387 397 if ( ! empty( $_POST['source_name'] ) ) {
398 + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash
388 399 $source_name = sanitize_text_field( $_POST['source_name'] );
389 400 }
390 401
402 + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash
391 403 $search = ! empty( $_POST['search'] ) ? sanitize_text_field( $_POST['search'] ) : '';
392 - $results = $post_list = [];
404 + $results = $post_list = []; // phpcs:ignore Squiz.PHP.DisallowMultipleAssignments.Found
393 405 switch ( $source_name ) {
394 406 case 'taxonomy':
395 407 $args = [
396 408 'hide_empty' => false,
@@ -399,9 +411,9 @@
399 411 'search' => $search,
400 412 'number' => '5',
401 413 ];
402 414
403 - if ( $post_type !== 'all' ) {
415 + if ( 'all' !== $post_type ) {
404 416 $args['taxonomy'] = $post_type;
405 417 }
406 418
407 419 $post_list = wp_list_pluck( get_terms( $args ), 'name', 'term_id' );
@@ -456,13 +468,14 @@
456 468 if ( empty( $_POST['id'] ) ) {
457 469 wp_send_json_error( [] );
458 470 }
459 471
472 + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
460 473 if ( empty( array_filter( $_POST['id'] ) ) ) {
461 474 wp_send_json_error( [] );
462 475 }
463 476 $ids = array_map( 'intval', $_POST['id'] );
464 - $source_name = ! empty( $_POST['source_name'] ) ? sanitize_text_field( $_POST['source_name'] ) : '';
477 + $source_name = ! empty( $_POST['source_name'] ) ? sanitize_text_field( $_POST['source_name'] ) : ''; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash
465 478
466 479 switch ( $source_name ) {
467 480 case 'taxonomy':
468 481 $args = [
@@ -471,9 +484,11 @@
471 484 'order' => 'ASC',
472 485 'include' => implode( ',', $ids ),
473 486 ];
474 487
475 - if ( $_POST['post_type'] !== 'all' ) {
488 + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotValidated
489 + if ( 'all' !== $_POST['post_type'] ) {
490 + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotValidated, WordPress.Security.ValidatedSanitizedInput.MissingUnslash
476 491 $args['taxonomy'] = sanitize_text_field( $_POST['post_type'] );
477 492 }
478 493
479 494 $response = wp_list_pluck( get_terms( $args ), 'name', 'term_id' );
@@ -491,9 +506,9 @@
491 506 break;
492 507 default:
493 508 $post_info = get_posts(
494 509 [
495 - 'post_type' => sanitize_text_field( $_POST['post_type'] ),
510 + 'post_type' => sanitize_text_field( $_POST['post_type'] ), // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash, WordPress.Security.ValidatedSanitizedInput.InputNotValidated
496 511 'include' => implode( ',', $ids ),
497 512 ]
498 513 );
499 514 $response = wp_list_pluck( $post_info, 'post_title', 'ID' );
@@ -509,12 +524,12 @@
509 524
510 525 /**
511 526 * Ajax callback for rt-select2
512 527 *
513 - * @param $post_type
514 - * @param $limit
515 - * @param $search
516 - * @param $paged
528 + * @param string $post_type Post type.
529 + * @param int $limit Limit.
530 + * @param string $search Search.
531 + * @param int $paged Paged.
517 532 *
518 533 * @return array
519 534 */
520 535 public function get_query_data( $post_type = 'any', $limit = 10, $search = '', $paged = 1 ) {
@@ -549,8 +564,17 @@
549 564 }
550 565
551 566 if ( ! empty( $search ) ) {
552 567 $where .= $wpdb->prepare( " AND {$wpdb->posts}.post_title LIKE %s", '%' . esc_sql( $search ) . '%' );
568 + }
569 +
570 + // Add a query for shop_coupon post-type to check 'show on frontend' meta.
571 + if ( 'shop_coupon' === $post_type ) {
572 + $where .= " AND {$wpdb->posts}.ID IN (
573 + SELECT post_id FROM {$wpdb->postmeta}
574 + WHERE meta_key = 'rtsb_show_on_frontend'
575 + AND meta_value = 'on'
576 + )";
553 577 }
554 578
555 579 $query = "select post_title,ID from $wpdb->posts where post_status = 'publish' {$where} {$limit}";
556 580 $results = $wpdb->get_results( $query ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.DirectDatabaseQuery.NoCaching