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/Admin/PluginRow.php +48 -259 3.4.03.2.5 View file →
@@ -107,12 +107,14 @@
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;">
111 + <p style="margin: 0 0 15px 0;">
112 112 Having trouble? <br/>
113 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>
114 + <a target="_blank" href="https://www.radiustheme.com/contact/" style="text-decoration: none;">
115 + <span style="color: red">open a support ticket</span>
116 + </a>
115 117 — our support agent will personally review and resolve your issue.
116 118 </p>
117 119
118 120 <div class="feedback-input-header">
@@ -153,18 +155,16 @@
153 155 temporary deactivation</label>
154 156 </div>
155 157 <span style="color:red;font-size: 13px;"></span>
156 158 </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>
159 + <p style="margin: 10px 0 15px 0;">
160 + Please let us know about any issues you are facing with the plugin.
161 + How can we improve the plugin?
162 + </p>
163 + <div class="feedback-text-wrapper-<?php echo esc_attr( $this->textdomain ); ?>">
164 + <textarea id="deactivation-feedback-<?php echo esc_attr( $this->textdomain ); ?>" rows="4" cols="40"
165 + placeholder=" Write something here. How can we improve the plugin?"></textarea>
166 + <span style="display: block;color:red;font-size: 13px;margin-top: 5px;"></span>
167 167 </div>
168 168 </div>
169 169 </div>
170 170 <?php
@@ -226,19 +226,37 @@
226 226 margin: auto;
227 227 padding: 0;
228 228 }
229 229
230 + div#deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> p {
231 + font-size: 15px;
232 + }
233 +
230 234 #deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> .modal-content > * {
231 235 width: 100%;
232 236 overflow: hidden;
233 237 }
234 238
239 + #deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> .modal-content textarea {
240 + border: 1px solid rgba(0, 0, 0, 0.3);
241 + padding: 15px;
242 + width: 100%;
243 + }
244 +
245 + #deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> .modal-content textarea:focus {
246 + border-color: #2271b1;
247 + }
248 +
235 249 #deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> .modal-content input.feedback-feedback-text {
236 - border: 1px solid #cbd5e1;
250 + border: 1px solid rgba(0, 0, 0, 0.3);
237 251 min-width: 250px;
238 - border-radius: 6px;
239 252 }
240 253
254 + /* The Close Button */
255 + #deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> input[type="radio"] {
256 + margin: 0;
257 + }
258 +
241 259 .ui-dialog-title {
242 260 font-size: 18px;
243 261 font-weight: 600;
244 262 }
@@ -284,15 +302,9 @@
284 302
285 303 .ui-dialog[aria-describedby="deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?>"] {
286 304 background-color: #fefefe;
287 305 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;
306 + z-index: 99;
295 307 }
296 308
297 309 .ui-dialog[aria-describedby="deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?>"] .ui-dialog-title {
298 310 text-transform: uppercase;
@@ -305,44 +317,15 @@
305 317 #deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> {
306 318 padding: 30px !important;
307 319 }
308 320
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 321 #deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> .feedback-input-header {
332 322 font-weight: 600;
333 - font-size: 14px;
334 - line-height: 1.5;
335 - margin-bottom: 16px;
336 - color: #1f2937;
323 + font-size: 15px;
324 + line-height: 1.4;
325 + margin-bottom: 20px;
337 326 }
338 327
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 328 div#deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?>,
346 329 .ui-draggable .ui-dialog-titlebar {
347 330 padding: 18px 15px;
348 331 box-shadow: 0 0 3px rgba(0, 0, 0, 0.1);
@@ -349,143 +332,33 @@
349 332 text-align: left;
350 333 }
351 334
352 335 div#deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> .modal-content .feedback-input-wrapper {
353 - margin-bottom: 6px;
336 + margin-bottom: 8px;
354 337 display: flex;
355 338 align-items: center;
356 - gap: 10px;
357 - padding: 10px 12px;
339 + gap: 8px;
340 + /*line-height: 2;*/
341 + padding: 0 1px;
358 342 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 343 }
365 344
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 345 div#deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> .modal-content .feedback-input-wrapper.conditional {
433 346 flex-wrap: wrap;
434 347 }
435 348
436 349 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;
350 + flex: 0 0 calc(100% - 24px);
351 + margin: 5px 0 10px 24px;
352 + min-height: 40px;
353 + border: 1px solid rgba(0, 0, 0, 0.3);
354 + padding: 0 15px;
445 355 }
446 356
447 357 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);
358 + border-color: #2271b1;
451 359 }
452 360
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 361 .ui-widget-overlay.ui-front {
489 362 position: fixed;
490 363 top: 0;
491 364 left: 0;
@@ -537,35 +410,8 @@
537 410 .ui-dialog[aria-describedby="deactivation-dialog-shopbuilder"] .ui-dialog-buttonset .ui-button:last-child:hover {
538 411 background: #d80e0e;
539 412 color: #fff;
540 413 }
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 414 </style>
569 415
570 416 <?php
571 417 }
@@ -586,9 +432,8 @@
586 432 $('#deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> .modal-content input[name="reason_found_a_better_plugin"]').hide();
587 433 var dialogbox = $('#deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?>').dialog({
588 434 modal: true,
589 435 width: 550,
590 - position: { my: "center", at: "center", of: window },
591 436 show: {
592 437 effect: "fadeIn",
593 438 duration: 400
594 439 },
@@ -601,49 +446,18 @@
601 446 Submit: function () {
602 447 submitFeedback();
603 448 },
604 449 Cancel: function () {
605 - showDeactivateLoader();
450 + $(this).dialog('close');
606 451 window.location.href = href;
607 452 }
608 453 }
609 454 });
610 455
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 456
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 457 // Close the dialog when clicking outside of it
633 458 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 - }
459 + var reasons = $('#deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> input[type="radio"]:checked').val();
646 460 if( 'found_a_better_plugin' === reasons ){
647 461 $('#deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> .modal-content input[name="reason_found_a_better_plugin"]').show();
648 462 } else {
649 463 $('#deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> .modal-content input[name="reason_found_a_better_plugin"]').hide();
@@ -661,22 +475,8 @@
661 475 $('.ui-dialog-buttonpane button:contains("Submit")').text('Submit & Deactivate');
662 476 $('.ui-dialog-buttonpane button:contains("Cancel")').text('Skip & Deactivate');
663 477 });
664 478
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 479 // Submit the feedback
680 480 function submitFeedback() {
681 481 var href = $('.deactivate #deactivate-shopbuilder').attr('href');
682 482 var reasons = $('#deactivation-dialog-<?php echo esc_attr( $this->textdomain ); ?> input[type="radio"]:checked').val();
@@ -703,34 +503,25 @@
703 503 return;
704 504 }
705 505
706 506 if ('temporary_deactivation' === reasons || ! feedback ) {
707 - showDeactivateLoader();
708 507 window.location.href = href;
709 508 return;
710 509 }
711 510
712 511 if ( ! feedback.length > 0 ) {
713 - showDeactivateLoader();
714 512 window.location.href = href;
715 513 return;
716 514 }
717 515 var websiteUrl = '<?php echo esc_url( home_url() ); ?>';
718 516 if ( ! websiteUrl.length > 0 ) {
719 - showDeactivateLoader();
720 517 window.location.href = href;
721 518 return;
722 519 }
723 - showDeactivateLoader();
724 520 $.ajax({
725 521 url: 'https://shopbuilderwp.com/wp-json/RadiusTheme/pluginSurvey/v1/Survey/appendToSheet',
726 522 method: 'GET',
727 523 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 524 data: {
734 525 website: websiteUrl,
735 526 reasons: reasons ? reasons : '',
736 527 better_plugin: better_plugin,
@@ -735,10 +526,8 @@
735 526 reasons: reasons ? reasons : '',
736 527 better_plugin: better_plugin,
737 528 feedback: feedback,
738 529 wpplugin: 'ShopBuilder',
739 - version: '<?php echo esc_js( defined( 'RTSB_VERSION' ) ? RTSB_VERSION : '' ); ?>',
740 - date: '<?php echo esc_js( gmdate( 'M j, Y' ) ); ?>',
741 530 },
742 531 success: function (response) {
743 532 },
744 533 error: function (xhr, status, error) {