PluginProbe
ShopBuilder – WooCommerce Builder For Elementor / 3.2.3
ShopBuilder – WooCommerce Builder For Elementor v3.2.3
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/Admin/Ajax/ModalTemplate.php +68 -81 2.2.13.2.3 View file →
@@ -37,9 +37,9 @@
37 37 * Popups For Create Template
38 38 *
39 39 * @return void
40 40 */
41 - public function response() {
41 + public function response() { // phpcs:ignore Generic.Metrics.CyclomaticComplexity.MaxExceeded
42 42 $title = '<h2>' . esc_html__( 'Template Settings', 'shopbuilder' ) . '</h2>';
43 43 if ( ! wp_verify_nonce( Fns::get_nonce(), rtsb()->nonceText ) ) {
44 44 $return = [
45 45 'success' => false,
@@ -56,9 +56,18 @@
56 56 'content' => esc_html__( 'Permission Denied...', 'shopbuilder' ),
57 57 ];
58 58 wp_send_json( $return );
59 59 }
60 + if ( ! defined( 'ELEMENTOR_VERSION' ) ) {
61 + $return = [
62 + 'success' => true,
63 + 'title' => $title,
64 + 'content' => '<h2 style="text-align: center;">' . esc_html__( 'Permission Denied. Please Install elementor', 'shopbuilder' ) . '</h2>',
65 + ];
60 66
67 + wp_send_json( $return );
68 + }
69 +
61 70 add_filter( 'option_' . Uploads_Manager::UNFILTERED_FILE_UPLOADS_KEY, '__return_true' );
62 71 Plugin::$instance->files_manager->clear_cache();
63 72
64 73 // user capability check.
@@ -64,19 +73,20 @@
64 73 // user capability check.
65 74 $user = wp_get_current_user();
66 75 $allowed_roles = [ 'editor', 'administrator', 'author' ];
67 76
68 - if ( ! array_intersect( $allowed_roles, $user->roles ) ) {
77 + if ( ! array_intersect( $allowed_roles, Fns::get_current_user_roles() ) ) {
69 78 wp_die( esc_html__( 'You don\'t have permission to perform this action', 'shopbuilder' ) );
70 79 }
71 80
72 81 // Check if the user is not logged in and the provided 'user_id' in the request does not match the currently logged-in user's ID.
82 + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotValidated, WordPress.Security.ValidatedSanitizedInput.MissingUnslash, WordPress.PHP.YodaConditions.NotYoda
73 83 if ( ! is_user_logged_in() && $user->ID !== sanitize_text_field( $_REQUEST['user_id'] ) ) {
74 84 wp_die( esc_html__( 'You don\'t have proper authorization to perform this action', 'shopbuilder' ) );
75 85 }
76 86
77 - $post_id = isset( $_POST['post_id'] ) ? absint( $_POST['post_id'] ) : null;
78 - $layout_id = isset( $_POST['layout_id'] ) ? absint( $_POST['layout_id'] ) : null;
87 + $post_id = isset( $_REQUEST['post_id'] ) ? absint( $_REQUEST['post_id'] ) : null;
88 + $layout_id = isset( $_REQUEST['layout_id'] ) ? absint( $_REQUEST['layout_id'] ) : null;
79 89
80 90 $template_type = null;
81 91 $product_page_for = 'all_products';
82 92 $template_default = null;
@@ -94,9 +104,9 @@
94 104 if ( rtsb()->has_pro() ) {
95 105 $product_page_for = get_post_meta( $post_id, '_is_product_page_template_for', true );
96 106 }
97 107
98 - // TODO:: This Condition Will remove after release Gutenberg Addons.
108 + /* This Condition Will remove after release Gutenberg Addons. */
99 109 if ( 'gutenberg' == $edit_by ) {
100 110 $action = 'elementor';
101 111 $edit_by = 'elementor';
102 112 }
@@ -114,20 +124,8 @@
114 124 );
115 125
116 126 $_rtsb_import_id = get_post_meta( $post_id, '_rtsb_import_id', true );
117 127 }
118 -
119 - $status = $_REQUEST['status'] ?? '';
120 - $post_args = [ 'timeout' => 120 ];
121 - $post_args['body'] = [
122 - 'status' => $status,
123 - ];
124 - $layoutRequest = wp_remote_post( rtsb()->BASE_API, $post_args );
125 - $layoutData = [];
126 - if ( ! is_wp_error( $layoutRequest ) && ! empty( $layoutRequest['body'] ) ) {
127 - $layoutData = json_decode( $layoutRequest['body'], true );
128 - }
129 -
130 128 ob_start();
131 129
132 130 ?>
133 131 <form action="<?php echo esc_url( admin_url( 'edit.php?post_type=rtsb_builder' ) ); ?>" autocomplete="off" data-imported-id="<?php echo esc_attr( $_rtsb_import_id ); ?>">
@@ -184,8 +182,15 @@
184 182 <?php } ?>
185 183 </select>
186 184 </div>
187 185
186 + <?php if ( ! rtsb()->has_pro() ) { ?>
187 + <div class="rtsb-product-page-for rtsb-tb-field-wraper" style="display:none;" >
188 + <label for="product_page_for"> </label>
189 + <span class="elementor-pro-notice"><a target="_blank" href="<?php echo esc_url( rtsb()->pro_version_link() ); ?>">Upgrade to PRO</a> to unlock Product Categories, Product Tags, Selected Products</span>
190 + </div>
191 + <?php } ?>
192 +
188 193 <!-- Product Page For Categories -->
189 194 <div class="rtsb-categories-page-field rtsb-product-page-for-the-categories rtsb-tb-field-wraper <?php echo esc_attr( ! rtsb()->has_pro() ? 'pro-disable' : '' ); ?>" style="display:none;">
190 195 <?php
191 196 $default_items_link = '';
@@ -226,8 +231,15 @@
226 231 ?>
227 232 </p>
228 233 </div>
229 234
235 + <?php if ( ! rtsb()->has_pro() ) { ?>
236 + <div class="rtsb-categories-page-field rtsb-product-page-for-the-categories rtsb-tb-field-wraper" style="display:none;">
237 + <label for="product_page_for"> </label>
238 + <span class="elementor-pro-notice"><a target="_blank" href="<?php echo esc_url( rtsb()->pro_version_link() ); ?>">Upgrade to PRO</a> to unlock Categories Base Prodcut Page.</span>
239 + </div>
240 + <?php } ?>
241 +
230 242 <!-- Product Page for Selected Product Tags-->
231 243 <div class="rtsb-product-tags-page-field rtsb-product-page-for-the-tags rtsb-tb-field-wraper <?php echo esc_attr( ! rtsb()->has_pro() ? 'pro-disable' : '' ); ?>" style="display:none;">
232 244 <?php
233 245 $default_items_link = '';
@@ -310,11 +322,14 @@
310 322 <div class="rtsb-product-page-preview-field rtsb-tb-field-wraper" style="display:none;">
311 323 <?php
312 324 $default_items = '';
313 325 $product_id = get_post_meta( $post_id, BuilderFns::$product_template_meta, true );
314 - if ( $product_id ) {
326 + if ( $product_id && get_post_status( $product_id ) ) {
315 327 $default_items = '<option selected="selected" value="' . $product_id . '">' . get_the_title( $product_id ) . ' - ( ID ' . $product_id . ' )</option>';
316 328 }
329 + if ( $product_id && ! get_post_status( $product_id ) ) {
330 + delete_post_meta( $post_id, BuilderFns::$product_template_meta );
331 + }
317 332 ?>
318 333 <label for="rtsb_product_page_preview"><?php esc_html_e( 'Select Preview Product', 'shopbuilder' ); ?></label>
319 334 <select class="rtsb-field" id="rtsb_product_page_preview" name="rtsb_product_page_preview">
320 335 <?php Fns::print_html( $default_items, true ); ?>
@@ -340,8 +355,11 @@
340 355 $set_default = BuilderFns::get_specific_product_as_default( $post_id );
341 356 if ( $set_default ) {
342 357 $template_default = $post_id;
343 358 }
359 + if ( ! $set_default && $template_default === $post_id ) {
360 + $template_default = '';
361 + }
344 362 } else {
345 363 $set_default_option_name = '';
346 364 if ( 'product_cats' === $product_page_for ) {
347 365 $set_default_option_name = BuilderFns::option_name_product_page_specific_cat_set_default( $post_id );
@@ -347,9 +365,9 @@
347 365 $set_default_option_name = BuilderFns::option_name_product_page_specific_cat_set_default( $post_id );
348 366 } elseif ( 'product_tags' === $product_page_for ) {
349 367 $set_default_option_name = BuilderFns::option_name_product_page_specific_tag_set_default( $post_id );
350 368 }
351 - $default_id = TemplateSettings::instance()->get_option( $set_default_option_name );
369 + $default_id = ! empty( $set_default_option_name ) && TemplateSettings::instance()->get_option( $set_default_option_name );
352 370 if ( $default_id ) {
353 371 $template_default = $post_id;
354 372 }
355 373 }
@@ -358,8 +376,11 @@
358 376 $set_default = BuilderFns::get_specific_category_as_default( $post_id );
359 377 if ( ! empty( $categories_name ) && $set_default ) {
360 378 $template_default = $post_id;
361 379 }
380 + if ( ! $set_default && $template_default === $post_id ) {
381 + $template_default = '';
382 + }
362 383 }
363 384
364 385 ?>
365 386 <span class="rtsb-switch-wrapper"
@@ -369,9 +390,9 @@
369 390 type="checkbox"
370 391 id="default_template"
371 392 name="default_template"
372 393 value="default_template"
373 - <?php echo esc_attr( ( $post_id && absint( $post_id ) === absint( $template_default ) ) ? 'checked' : '' ); ?>
394 + <?php echo esc_attr( ( $post_id && ( absint( $post_id ) === absint( $template_default ) ) ) ? 'checked' : '' ); ?>
374 395 >
375 396 <span class="rtsb-slider rtsb-round ">
376 397 <span class="rtsb-loader"></span>
377 398 </span>
@@ -378,32 +399,29 @@
378 399 </label>
379 400 </span>
380 401 </div>
381 402 <!-- TODO: Moday Layout -->
382 - <?php if ( ! $post_id ) { ?>
383 - <div class="set-default-layout-wrapper rtsb-tb-field-wraper">
384 - <label>
385 - <?php esc_html_e( 'Pre-built Templates ', 'shopbuilder' ); ?>
386 - <span id="modallabelPrefix"></span>
387 - </label>
388 - <div class="set-default-layout">
389 - <?php
390 - $default_item = [
391 - 'template_type' => 'default',
392 - 'image_url' => \Elementor\Utils::get_placeholder_image_src(),
393 - 'preview_link' => '',
394 - 'title' => __( 'Blank Template', 'shopbuilder' ),
395 - ];
396 -
397 - $this->get_modal_card_html( $default_item );
398 -
399 - if ( ! empty( $layoutData['layouts'] ) ) {
400 - foreach ( $layoutData['layouts'] as $item ) {
401 - $this->get_modal_card_html( $item );
402 - }
403 - }
404 - ?>
403 + <?php
404 + if ( ! $post_id ) {
405 + if ( defined( 'ELEMENTOR_PATH' ) && class_exists( '\Elementor\Utils' ) ) {
406 + $placeholderImageSrc = \Elementor\Utils::get_placeholder_image_src();
407 + } else {
408 + $placeholderImageSrc = '#';
409 + }
410 + ?>
411 + <div class="set-default-layout-wrapper rtsb-tb-field-wraper" style="opacity: 0" >
412 + <div style="display: flex; justify-content: space-between;">
413 + <label>
414 + <?php esc_html_e( 'Pre-built Templates ', 'shopbuilder' ); ?>
415 + <span id="modallabelPrefix"></span>
416 + </label>
417 + <div class="rtsb-tb-button-wrapper">
418 + <a class="btn" href="https://shopbuilderwp.com/themes/" target="_blank" style="opacity: 1; visibility: visible;">View Out Themes</a>
419 + </div>
405 420 </div>
421 + <div class="set-default-layout" data-has-pro="<?php echo esc_attr( rtsb()->has_pro() ); ?>" data-rest-url="<?php echo esc_url( rtsb()->BASE_API ); ?>" data-placeholder-image-src="<?php echo esc_url( $placeholderImageSrc ); ?>">
422 + <!-- Layout Will Add Via Ajax-->
423 + </div>
406 424 </div>
407 425 <?php } ?>
408 426 <input type="hidden" id="page_id" name="page_id" value="<?php echo esc_attr( $post_id ); ?>">
409 427 </div>
@@ -441,55 +459,20 @@
441 459 wp_send_json( $return );
442 460 wp_die();
443 461 }
444 462
445 - public function default_layout_template_html( $key, $is_checked, $builder, $value = [] ) {
446 - $layout_type = $key . ( $builder ? '_' . $builder : null );
447 - ?>
448 - <!-- Elementor -->
449 - <label class="layout-container type-<?php echo esc_attr( $key ); ?>"
450 - data-layout-type='<?php echo esc_attr( $layout_type ); ?>'>
451 - <input <?php echo esc_attr( $is_checked ); ?>
452 - class="rtsb-field" type="radio"
453 - value="<?php echo ! empty( $value['import_file'] ) ? esc_attr( $value['import_file'] ) : ''; ?>"
454 - name="import_default_layout"/>
455 -
456 - <span class="checkmark dashicons"></span>
457 - <div class="image-wrapper">
458 - <?php if ( ! empty( $value['image'] ) ) { ?>
459 - <img src="<?php echo esc_url( $value['image'] ); ?>" alt="">
460 - <?php } ?>
461 - </div>
462 - <?php if ( ! empty( $value['text_label'] ) ) { ?>
463 - <div class="image-label">
464 - <span class="label-text"><?php echo esc_html( $value['text_label'] ); ?></span>
465 - <?php if ( ! empty( $value['live_preview'] ) ) { ?>
466 - <a target="_blank" class="btn-live-preview" href="<?php echo esc_url( $value['live_preview'] ); ?>">
467 - <span class="dashicons dashicons-visibility"></span>
468 - <?php esc_html_e( 'Live Preview', 'shopbuilder' ); ?>
469 - </a>
470 - <?php } ?>
471 - </div>
472 - <?php } ?>
473 - </label>
474 - <?php
475 - }
476 -
477 463 /**
478 464 * Get Modal Card Markup.
479 465 *
480 - * @param $item
481 - * @param $checked
466 + * @param array $item Item.
482 467 *
483 468 * @return void
484 469 */
485 470 public function get_modal_card_html( $item ) {
486 -
487 471 ?>
488 472 <div class="layout-container rtsb-template-item type-<?php echo esc_attr( $item['template_type'] ); ?>"
489 473 data-layout-type='<?php echo esc_attr( $item['template_type'] ); ?>'>
490 474 <input class="rtsb-field" type="hidden" value="<?php echo esc_attr( $item['id'] ?? '' ); ?>" name="import_default_layout"/>
491 -
492 475 <div class="image-wrapper">
493 476 <?php if ( $item['image_url'] ) : ?>
494 477 <img src="<?php echo esc_url( $item['image_url'] ); ?>" alt="<?php echo esc_attr( $item['title'] ); ?>">
495 478 <?php endif; ?>
@@ -494,9 +477,10 @@
494 477 <img src="<?php echo esc_url( $item['image_url'] ); ?>" alt="<?php echo esc_attr( $item['title'] ); ?>">
495 478 <?php endif; ?>
496 479
497 480 <?php if ( 'default' != $item['template_type'] && ( ! rtsb()->has_pro() ) ) : ?>
498 - <div class="card-label">
481 + <div class="card-label lllllll">
482 + label
499 483 <span class="rtsb-btn-import <?php echo esc_attr( $item['status'] ?? 'free' ); ?>-btn">
500 484 <?php echo esc_html( $item['status'] ?? 'Free' ); ?>
501 485 </span>
502 486 </div>
@@ -514,9 +498,12 @@
514 498 <?php echo esc_html__( 'Preview', 'shopbuilder' ); ?>
515 499 </a>
516 500
517 501
518 - <?php if ( rtsb()->has_pro() || $item['status'] == 'free' ) : ?>
502 + <?php
503 + // phpcs:ignore WordPress.PHP.YodaConditions.NotYoda
504 + if ( rtsb()->has_pro() || $item['status'] == 'free' ) :
505 + ?>
519 506 <a class="rtsb-btn-import import-btn rtsb-import-layout">
520 507 <svg width="22" height="20" viewBox="0 0 22 20" fill="none" xmlns="http://www.w3.org/2000/svg">
521 508 <path d="M11 12.2295C10.9048 12.2296 10.8106 12.2113 10.7226 12.1757C10.6347 12.14 10.5547 12.0878 10.4874 12.0219C10.4201 11.956 10.3668 11.8778 10.3304 11.7917C10.294 11.7056 10.2753 11.6134 10.2754 11.5202L10.2754 0.912773C10.2754 0.72466 10.3517 0.544251 10.4876 0.411235C10.6235 0.278219 10.8078 0.203491 11 0.203491C11.1922 0.203491 11.3765 0.278219 11.5124 0.411235C11.6483 0.544251 11.7246 0.72466 11.7246 0.912773L11.7246 11.5202C11.7246 11.7083 11.6483 11.8887 11.5124 12.0218C11.3765 12.1548 11.1922 12.2295 11 12.2295Z"
522 509 fill="white"></path>