PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 4.5.0
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v4.5.0
4.5.1 4.5.0 4.4.2 4.4.1 4.4.0 4.3.3 4.3.2 4.3.1 4.3.0 4.2.3 4.2.2 4.2.1 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.11.0 1.11.1 1.11.2 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.4.0 1.4.1 1.4.2 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.9.0 1.9.1 1.9.2 1.9.3 1.9.4 1.9.5 2.0.0 2.0.1 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.10.0 2.10.1 2.11.0 2.11.1 2.11.2 2.11.3 2.11.4 2.12.0 2.13.0 2.14.0 2.14.1 2.15.0 2.15.1 2.16.0 2.16.1 2.16.2 2.16.3 2.17.0 2.17.1 2.17.2 2.18.0 2.19.0 2.19.2 2.19.3 2.19.4 2.2.0 2.2.1 2.20.0 2.20.1 2.20.2 2.20.3 2.20.4 2.20.5 2.20.6 2.21.0 2.22.0 2.22.1 2.23.0 2.24.0 2.25.0 2.25.1 2.25.2 2.26.0 2.27.0 2.27.1 2.28.0 2.29.0 2.29.1 2.29.2 2.29.3 2.29.4 2.3.0 2.3.1 2.30.0 2.31.0 2.31.1 2.31.2 2.31.3 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.40.0 2.40.1 2.5.0 2.5.1 2.5.2 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.8.2 2.8.3 2.8.4 2.9.0 3.0.0 3.0.0-RC1 3.0.0-RC2 3.0.0-beta1 3.0.0-beta2 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.10.0 3.10.1 3.11.0 3.12.0 3.13.0 3.13.1 3.13.2 3.13.3 3.13.4 3.14.0 3.15.0 3.15.1 3.15.2 3.15.3 3.15.4 3.15.5 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.16.6 3.16.7 3.16.8 3.17.0 3.17.1 3.17.2 3.17.3 3.17.4 3.17.5 3.17.6 3.18.0 3.19.0 3.19.1 3.19.2 3.2.0 3.2.1 3.2.2 3.20.0 3.20.1 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.2 3.5.3 3.6.0 3.6.1 3.6.2 3.7.0 3.7.1 3.7.2 3.7.3 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.9.0 4.0.0 4.0.1 4.0.2 4.0.3 trunk 4.1.0 0.2.19.1 4.1.1 1.0.0 4.2.0 1.0.1 1.0.2
surecart / app / src / Integrations / Elementor / Widgets / ProductReviewContent.php
surecart / app / src / Integrations / Elementor / Widgets Last commit date
AddToCartButton.php 3 months ago CartMenuIcon.php 1 year ago CollectionTags.php 1 year ago Media.php 1 year ago PriceChooser.php 1 year ago Product.php 1 year ago ProductCard.php 1 year ago ProductContent.php 7 months ago ProductLineItemNote.php 10 months ago ProductPricing.php 1 year ago ProductQuickAddButton.php 7 months ago ProductReviewAverageRatingStars.php 4 months ago ProductReviewAverageRatingValue.php 4 months ago ProductReviewBreakdown.php 4 months ago ProductReviewContent.php 4 months ago ProductReviewList.php 2 months ago ProductReviewRating.php 4 months ago ProductReviewTotalRating.php 4 months ago ProductReviews.php 4 months ago Quantity.php 1 year ago ReusableFormWidget.php 1 year ago SaleBadge.php 1 year ago SelectedPriceAdHocAmount.php 1 year ago VariantPills.php 6 months ago
ProductReviewContent.php
150 lines
1 <?php
2
3 namespace SureCart\Integrations\Elementor\Widgets;
4
5 if ( ! defined( 'ABSPATH' ) ) {
6 exit; // Exit if accessed directly.
7 }
8
9 /**
10 * Product Review Content widget.
11 *
12 * This widget acts as a conditional visibility controller for its parent container.
13 * Place this widget inside a section/container along with other review summary widgets.
14 * When no reviews exist, the entire parent container will be hidden.
15 */
16 class ProductReviewContent extends \Elementor\Widget_Base {
17 /**
18 * Get widget name.
19 *
20 * @return string
21 */
22 public function get_name() {
23 return 'surecart-product-review-content';
24 }
25
26 /**
27 * Get widget title.
28 *
29 * @return string
30 */
31 public function get_title() {
32 return esc_html__( 'Product Review Content', 'surecart' );
33 }
34
35 /**
36 * Get widget icon.
37 *
38 * @return string
39 */
40 public function get_icon() {
41 return 'eicon-eye';
42 }
43
44 /**
45 * Get the widget keywords.
46 *
47 * @return array
48 */
49 public function get_keywords() {
50 return array( 'surecart', 'review', 'content', 'conditional', 'visibility', 'wrapper' );
51 }
52
53 /**
54 * Get the widget categories.
55 *
56 * @return array
57 */
58 public function get_categories() {
59 return array( 'surecart-elementor-elements' );
60 }
61
62 /**
63 * Register the widget controls.
64 *
65 * @return void
66 */
67 protected function register_controls() {
68 $this->start_controls_section(
69 'section_info',
70 [
71 'label' => esc_html__( 'Info', 'surecart' ),
72 ]
73 );
74
75 $this->add_control(
76 'info_notice',
77 [
78 'type' => \Elementor\Controls_Manager::RAW_HTML,
79 'raw' => sprintf(
80 '<div style="padding: 10px; border-radius: 3px;">
81 <strong>%s</strong><br><br>%s
82 </div>',
83 esc_html__( 'Conditional Visibility Widget', 'surecart' ),
84 esc_html__( 'Place this widget inside a container/section along with your review summary widgets (Average Rating, Stars, Breakdown, etc.). When no reviews exist for the product, the entire parent container will be hidden on the frontend.', 'surecart' )
85 ),
86 'content_classes' => 'elementor-panel-alert',
87 ]
88 );
89
90 $this->end_controls_section();
91 }
92
93 /**
94 * Check if the product has any published reviews.
95 *
96 * @return bool
97 */
98 private function has_reviews() {
99 $product = sc_get_product();
100
101 if ( empty( $product ) ) {
102 return false;
103 }
104
105 // Check if reviews are enabled for this product.
106 if ( ! apply_filters( 'surecart/review_form/enabled', $product->reviews_enabled ) ) {
107 return false;
108 }
109
110 // Check total reviews count from product.
111 return ! empty( $product->total_reviews ) && (int) $product->total_reviews > 0;
112 }
113
114 /**
115 * Render the widget output on the frontend.
116 *
117 * @return void
118 */
119 protected function render() {
120 // In editor mode, return early - always show the container.
121 if ( \Elementor\Plugin::$instance->editor->is_edit_mode() ) {
122 return;
123 }
124
125 // On frontend, if no reviews exist, hide the parent container.
126 if ( ! $this->has_reviews() ) {
127 $widget_id = $this->get_id();
128 ?>
129 <div id="sc-review-content-<?php echo esc_attr( $widget_id ); ?>" data-sc-no-reviews="true" style="display: none;"></div>
130 <script>
131 (function() {
132 var widget = document.getElementById('sc-review-content-<?php echo esc_js( $widget_id ); ?>');
133 if (widget) {
134 // Find the closest Elementor container/column/section parent
135 var parent = widget.closest('.elementor-widget-container');
136 if (parent) {
137 parent = parent.closest('.elementor-column, .elementor-container, .e-con, .e-con-inner');
138 }
139 if (parent) {
140 parent.style.display = 'none';
141 }
142 }
143 })();
144 </script>
145 <?php
146 }
147 // If reviews exist, render nothing - the sibling widgets will render normally.
148 }
149 }
150