PluginProbe
ShopBuilder – WooCommerce Builder For Elementor / 3.2.1
ShopBuilder – WooCommerce Builder For Elementor v3.2.1
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/PluginRow.php +46 -264 3.4.23.2.1 View file →
@@ -51,9 +51,9 @@
51 51
52 52 $current = time();
53 53 // Check if current date is within promotional period (Sept 19 - Jan 5).
54 54 $start_date = strtotime( '2025-11-12 00:00:00' );
55 - $end_date = strtotime( '2025-12-30 23:59:59' );
55 + $end_date = strtotime( '2026-01-05 23:59:59' );
56 56 $is_promo_period = $start_date <= $current && $current <= $end_date;
57 57 $text = esc_html__( 'Get Pro', 'shopbuilder' );
58 58 if ( $is_promo_period ) {
59 59 $text = esc_html__( 'Get 60% off', 'shopbuilder' );
@@ -107,14 +107,9 @@
107 107 <div id="deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?>" title="Quick Feedback">
108 108 <!-- Modal content -->
109 109 <div class="modal-content">
110 110 <div id="feedback-form-body-<?php echo esc_attr( $this->textdomain ); ?>">
111 - <p class="rtsb-deactivate-intro" style="margin: 0 0 15px 0;">
112 - Having trouble? <br/>
113 - For faster and more accurate support, please
114 - <a target="_blank" href="https://www.radiustheme.com/contact/" class="rtsb-support-link">open a support ticket</a>
115 - — our support agent will personally review and resolve your issue.
116 - </p>
111 + <p style="margin: 0 0 15px 0;"> Having trouble? <br/> It’s best to <a target="_blank" href="https://www.radiustheme.com/contact/" style="text-decoration: none;"><span style="color: red"> open a support ticket </span></a> — our agent will assist you personally. </p>
117 112
118 113 <div class="feedback-input-header">
119 114 <?php echo esc_html__( 'If you’d prefer not to open a support ticket, please take a moment to share why you’re deactivating ShopBuilder:', 'shopbuilder' ); ?>
120 115 </div>
@@ -153,18 +148,16 @@
153 148 temporary deactivation</label>
154 149 </div>
155 150 <span style="color:red;font-size: 13px;"></span>
156 151 </div>
157 - <div class="rtsb-feedback-extra" style="display:none;">
158 - <p style="margin: 10px 0 15px 0;">
159 - Please let us know about any issues you are facing with the plugin.
160 - How can we improve the plugin?
161 - </p>
162 - <div class="feedback-text-wrapper-<?php echo esc_attr( $this->textdomain ); ?>">
163 - <textarea id="deactivation-feedback-<?php echo esc_attr( $this->textdomain ); ?>" rows="2" cols="40"
164 - placeholder=" Write something here. How can we improve the plugin?"></textarea>
165 - <span style="display: block;color:red;font-size: 13px;margin-top: 5px;"></span>
166 - </div>
152 + <p style="margin: 10px 0 15px 0;">
153 + Please let us know about any issues you are facing with the plugin.
154 + How can we improve the plugin?
155 + </p>
156 + <div class="feedback-text-wrapper-<?php echo esc_attr( $this->textdomain ); ?>">
157 + <textarea id="deactivation-feedback-<?php echo esc_attr( $this->textdomain ); ?>" rows="4" cols="40"
158 + placeholder=" Write something here. How can we improve the plugin?"></textarea>
159 + <span style="display: block;color:red;font-size: 13px;margin-top: 5px;"></span>
167 160 </div>
168 161 </div>
169 162 </div>
170 163 <?php
@@ -226,19 +219,37 @@
226 219 margin: auto;
227 220 padding: 0;
228 221 }
229 222
223 + div#deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> p {
224 + font-size: 15px;
225 + }
226 +
230 227 #deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> .modal-content > * {
231 228 width: 100%;
232 229 overflow: hidden;
233 230 }
234 231
232 + #deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> .modal-content textarea {
233 + border: 1px solid rgba(0, 0, 0, 0.3);
234 + padding: 15px;
235 + width: 100%;
236 + }
237 +
238 + #deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> .modal-content textarea:focus {
239 + border-color: #2271b1;
240 + }
241 +
235 242 #deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> .modal-content input.feedback-feedback-text {
236 - border: 1px solid #cbd5e1;
243 + border: 1px solid rgba(0, 0, 0, 0.3);
237 244 min-width: 250px;
238 - border-radius: 6px;
239 245 }
240 246
247 + /* The Close Button */
248 + #deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> input[type="radio"] {
249 + margin: 0;
250 + }
251 +
241 252 .ui-dialog-title {
242 253 font-size: 18px;
243 254 font-weight: 600;
244 255 }
@@ -284,15 +295,9 @@
284 295
285 296 .ui-dialog[aria-describedby="deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?>"] {
286 297 background-color: #fefefe;
287 298 box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
288 - z-index: 9999;
289 - position: fixed !important;
290 - top: 50% !important;
291 - left: 50% !important;
292 - transform: translate(-50%, -50%) !important;
293 - max-height: 90vh;
294 - overflow-y: auto;
299 + z-index: 99;
295 300 }
296 301
297 302 .ui-dialog[aria-describedby="deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?>"] .ui-dialog-title {
298 303 text-transform: uppercase;
@@ -305,44 +310,15 @@
305 310 #deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> {
306 311 padding: 30px !important;
307 312 }
308 313
309 - #deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> .rtsb-support-link {
310 - display: inline-block;
311 - padding: 2px 8px;
312 - margin: 0 2px;
313 - background: rgba(216, 14, 14, 0.08);
314 - color: #d80e0e;
315 - font-weight: 600;
316 - border-radius: 4px;
317 - text-decoration: none;
318 - border: 1px solid rgba(216, 14, 14, 0.25);
319 - transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease;
320 - }
321 -
322 - #deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> .rtsb-support-link:hover,
323 - #deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> .rtsb-support-link:focus {
324 - background: #d80e0e;
325 - color: #fff;
326 - border-color: #d80e0e;
327 - text-decoration: none;
328 - outline: none;
329 - }
330 -
331 314 #deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> .feedback-input-header {
332 315 font-weight: 600;
333 - font-size: 14px;
334 - line-height: 1.5;
335 - margin-bottom: 16px;
336 - color: #1f2937;
316 + font-size: 15px;
317 + line-height: 1.4;
318 + margin-bottom: 20px;
337 319 }
338 320
339 - div#deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> p {
340 - font-size: 14px;
341 - color: #4b5563;
342 - line-height: 1.55;
343 - }
344 -
345 321 div#deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?>,
346 322 .ui-draggable .ui-dialog-titlebar {
347 323 padding: 18px 15px;
348 324 box-shadow: 0 0 3px rgba(0, 0, 0, 0.1);
@@ -349,143 +325,33 @@
349 325 text-align: left;
350 326 }
351 327
352 328 div#deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> .modal-content .feedback-input-wrapper {
353 - margin-bottom: 6px;
329 + margin-bottom: 8px;
354 330 display: flex;
355 331 align-items: center;
356 - gap: 10px;
357 - padding: 10px 12px;
332 + gap: 8px;
333 + /*line-height: 2;*/
334 + padding: 0 1px;
358 335 font-size: 14px;
359 - border: 1px solid #e5e7eb;
360 - border-radius: 8px;
361 - background: #fff;
362 - cursor: pointer;
363 - transition: border-color 0.15s ease, background 0.15s ease, box-shadow 0.15s ease;
364 336 }
365 337
366 - div#deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> .modal-content .feedback-input-wrapper:hover {
367 - border-color: #4360ef;
368 - background: rgba(67, 96, 239, 0.04);
369 - }
370 -
371 - div#deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> .modal-content .feedback-input-wrapper:has(input[type="radio"]:checked) {
372 - border-color: #4360ef;
373 - background: rgba(67, 96, 239, 0.06);
374 - }
375 -
376 - div#deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> .modal-content .feedback-input-wrapper .feedback-label {
377 - flex: 1;
378 - cursor: pointer;
379 - user-select: none;
380 - color: #1f2937;
381 - font-weight: 500;
382 - line-height: 1.4;
383 - }
384 -
385 - #deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> input[type="radio"] {
386 - appearance: none;
387 - -webkit-appearance: none;
388 - width: 18px;
389 - height: 18px;
390 - border: 1.5px solid #cbd5e1;
391 - border-radius: 50%;
392 - background: #fff;
393 - cursor: pointer;
394 - position: relative;
395 - flex: 0 0 auto;
396 - box-sizing: border-box;
397 - outline: none;
398 - box-shadow: none;
399 - transition: border-color 0.15s ease;
400 - }
401 -
402 - #deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> input[type="radio"]:hover,
403 - #deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> input[type="radio"]:focus,
404 - #deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> input[type="radio"]:focus-visible,
405 - #deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> input[type="radio"]:active {
406 - outline: none;
407 - box-shadow: none;
408 - }
409 -
410 - #deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> input[type="radio"]:hover {
411 - border-color: #94a3b8;
412 - }
413 -
414 - #deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> input[type="radio"]:checked {
415 - border-color: #4360ef;
416 - outline: none;
417 - box-shadow: none;
418 - }
419 -
420 - #deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> input[type="radio"]:checked::after {
421 - content: '';
422 - position: absolute;
423 - top: 50%;
424 - left: 50%;
425 - transform: translate(-50%, -50%);
426 - width: 8px;
427 - height: 8px;
428 - border-radius: 50%;
429 - background: #4360ef;
430 - }
431 -
432 338 div#deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> .modal-content .feedback-input-wrapper.conditional {
433 339 flex-wrap: wrap;
434 340 }
435 341
436 342 div#deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> .modal-content .feedback-input-wrapper.conditional .feedback-feedback-text {
437 - flex: 0 0 calc(100% - 28px);
438 - margin: 8px 0 0 28px;
439 - min-height: 38px;
440 - border: 1px solid #cbd5e1;
441 - border-radius: 6px;
442 - padding: 0 12px;
443 - font-size: 13px;
444 - transition: border-color 0.15s ease, box-shadow 0.15s ease;
343 + flex: 0 0 calc(100% - 24px);
344 + margin: 5px 0 10px 24px;
345 + min-height: 40px;
346 + border: 1px solid rgba(0, 0, 0, 0.3);
347 + padding: 0 15px;
445 348 }
446 349
447 350 div#deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> .modal-content .feedback-input-wrapper.conditional .feedback-feedback-text:focus {
448 - border-color: #4360ef;
449 - outline: none;
450 - box-shadow: 0 0 0 3px rgba(67, 96, 239, 0.15);
351 + border-color: #2271b1;
451 352 }
452 353
453 - #deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> .rtsb-feedback-extra {
454 - margin: 6px 0 10px;
455 - padding: 12px 14px;
456 - background: #f8fafc;
457 - border: 1px dashed #cbd5e1;
458 - border-radius: 8px;
459 - }
460 -
461 - #deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> .rtsb-feedback-extra p {
462 - margin: 0 0 8px !important;
463 - font-size: 13px !important;
464 - font-weight: 500;
465 - color: #4b5563;
466 - line-height: 1.4;
467 - }
468 -
469 - #deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> .modal-content textarea {
470 - border: 1px solid #cbd5e1;
471 - border-radius: 6px;
472 - padding: 8px 10px;
473 - width: 100%;
474 - min-height: 56px;
475 - max-height: 120px;
476 - font-size: 13px;
477 - line-height: 1.45;
478 - resize: vertical;
479 - transition: border-color 0.15s ease, box-shadow 0.15s ease;
480 - }
481 -
482 - #deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> .modal-content textarea:focus {
483 - border-color: #4360ef;
484 - outline: none;
485 - box-shadow: 0 0 0 3px rgba(67, 96, 239, 0.15);
486 - }
487 -
488 354 .ui-widget-overlay.ui-front {
489 355 position: fixed;
490 356 top: 0;
491 357 left: 0;
@@ -537,35 +403,8 @@
537 403 .ui-dialog[aria-describedby="deactivation-dialog-shopbuilder"] .ui-dialog-buttonset .ui-button:last-child:hover {
538 404 background: #d80e0e;
539 405 color: #fff;
540 406 }
541 -
542 - /* Loading overlay shown while submitting feedback / deactivating. */
543 - .rtsb-deactivate-loader {
544 - position: absolute;
545 - inset: 0;
546 - display: flex;
547 - align-items: center;
548 - justify-content: center;
549 - background: rgba(255, 255, 255, 0.72);
550 - z-index: 100;
551 - border-radius: inherit;
552 - }
553 -
554 - .rtsb-deactivate-loader .rtsb-deactivate-spinner {
555 - width: 40px;
556 - height: 40px;
557 - border: 3px solid rgba(67, 96, 239, 0.2);
558 - border-top-color: #4360ef;
559 - border-radius: 50%;
560 - animation: rtsb-deactivate-spin 0.8s linear infinite;
561 - }
562 -
563 - @keyframes rtsb-deactivate-spin {
564 - to {
565 - transform: rotate(360deg);
566 - }
567 - }
568 407 </style>
569 408
570 409 <?php
571 410 }
@@ -586,9 +425,8 @@
586 425 $('#deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> .modal-content input[name="reason_found_a_better_plugin"]').hide();
587 426 var dialogbox = $('#deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?>').dialog({
588 427 modal: true,
589 428 width: 550,
590 - position: { my: "center", at: "center", of: window },
591 429 show: {
592 430 effect: "fadeIn",
593 431 duration: 400
594 432 },
@@ -601,49 +439,18 @@
601 439 Submit: function () {
602 440 submitFeedback();
603 441 },
604 442 Cancel: function () {
605 - showDeactivateLoader();
443 + $(this).dialog('close');
606 444 window.location.href = href;
607 445 }
608 446 }
609 447 });
610 448
611 - // Keep the dialog centered on window resize.
612 - $(window).off('resize.rtsbDeactivate').on('resize.rtsbDeactivate', function () {
613 - if ( dialogbox.dialog('instance') ) {
614 - dialogbox.dialog('option', 'position', { my: 'center', at: 'center', of: window });
615 - }
616 - });
617 449
618 -
619 - // Make the entire feedback-input-wrapper card clickable to select its radio.
620 - dialogbox.on('click', '.feedback-input-wrapper', function (event) {
621 - // Ignore clicks on the inner radio/label (native behavior handles them) and the
622 - // "Found a better plugin" name input so typing inside it doesn't re-toggle.
623 - if ( $(event.target).is('input, label') ) {
624 - return;
625 - }
626 - var $radio = $(this).find('input[type="radio"]');
627 - if ( $radio.length && ! $radio.prop('checked') ) {
628 - $radio.prop('checked', true).trigger('change');
629 - }
630 - });
631 -
632 450 // Close the dialog when clicking outside of it
633 451 dialogbox.on('change', 'input[type="radio"]', function (event) {
634 - var $extra = $('#deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> .rtsb-feedback-extra');
635 - var $selectedRow = $(this).closest('.feedback-input-wrapper');
636 - var reasons = $('#deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> input[type="radio"]:checked').val();
637 - // Temporary deactivation does not need a feedback message — keep the textarea hidden.
638 - if ( 'temporary_deactivation' === reasons ) {
639 - $extra.stop( true, true ).slideUp(200);
640 - } else if ( $selectedRow.length ) {
641 - // Move the feedback textarea so it appears directly below the selected radio.
642 - $extra.hide().insertAfter( $selectedRow ).slideDown(200);
643 - } else {
644 - $extra.slideDown(200);
645 - }
452 + var reasons = $('#deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> input[type="radio"]:checked').val();
646 453 if( 'found_a_better_plugin' === reasons ){
647 454 $('#deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> .modal-content input[name="reason_found_a_better_plugin"]').show();
648 455 } else {
649 456 $('#deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> .modal-content input[name="reason_found_a_better_plugin"]').hide();
@@ -661,22 +468,8 @@
661 468 $('.ui-dialog-buttonpane button:contains("Submit")').text('Submit & Deactivate');
662 469 $('.ui-dialog-buttonpane button:contains("Cancel")').text('Skip & Deactivate');
663 470 });
664 471
665 - // Show a loading spinner over the dialog while submitting /
666 - // deactivating, and lock the footer buttons to avoid double clicks.
667 - function showDeactivateLoader() {
668 - var $content = $('#deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?>');
669 - if ( ! $content.length || ! $content.hasClass('ui-dialog-content') ) {
670 - return;
671 - }
672 - var $widget = $content.dialog('widget');
673 - if ( ! $widget.find('.rtsb-deactivate-loader').length ) {
674 - $widget.append('<div class="rtsb-deactivate-loader"><span class="rtsb-deactivate-spinner"></span></div>');
675 - }
676 - $widget.find('.ui-dialog-buttonpane button').prop('disabled', true);
677 - }
678 -
679 472 // Submit the feedback
680 473 function submitFeedback() {
681 474 var href = $('.deactivate #deactivate-shopbuilder').attr('href');
682 475 var reasons = $('#deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> input[type="radio"]:checked').val();
@@ -703,34 +496,25 @@
703 496 return;
704 497 }
705 498
706 499 if ('temporary_deactivation' === reasons || ! feedback ) {
707 - showDeactivateLoader();
708 500 window.location.href = href;
709 501 return;
710 502 }
711 503
712 504 if ( ! feedback.length > 0 ) {
713 - showDeactivateLoader();
714 505 window.location.href = href;
715 506 return;
716 507 }
717 508 var websiteUrl = '<?php echo esc_url( home_url() ); ?>';
718 509 if ( ! websiteUrl.length > 0 ) {
719 - showDeactivateLoader();
720 510 window.location.href = href;
721 511 return;
722 512 }
723 - showDeactivateLoader();
724 513 $.ajax({
725 514 url: 'https://shopbuilderwp.com/wp-json/RadiusTheme/pluginSurvey/v1/Survey/appendToSheet',
726 515 method: 'GET',
727 516 dataType: 'json',
728 - // Feedback is best-effort: if the endpoint is slow/unreachable,
729 - // fail fast so the user isn't stuck on the loader. `complete`
730 - // runs on success, error and timeout, so deactivation always
731 - // proceeds (redirects to the deactivate link) regardless.
732 - timeout: 5000,
733 517 data: {
734 518 website: websiteUrl,
735 519 reasons: reasons ? reasons : '',
736 520 better_plugin: better_plugin,
@@ -735,10 +519,8 @@
735 519 reasons: reasons ? reasons : '',
736 520 better_plugin: better_plugin,
737 521 feedback: feedback,
738 522 wpplugin: 'ShopBuilder',
739 - version: '<?php echo esc_js( defined( 'RTSB_VERSION' ) ? RTSB_VERSION : '' ); ?>',
740 - date: '<?php echo esc_js( gmdate( 'M j, Y' ) ); ?>',
741 523 },
742 524 success: function (response) {
743 525 },
744 526 error: function (xhr, status, error) {