PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 4.5.1
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v4.5.1
4.6.2 4.6.1 4.6.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 / ProductReviewTotalRating.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 5 months ago ProductReviewAverageRatingValue.php 5 months ago ProductReviewBreakdown.php 5 months ago ProductReviewContent.php 5 months ago ProductReviewList.php 2 months ago ProductReviewRating.php 5 months ago ProductReviewTotalRating.php 5 months ago ProductReviews.php 5 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
ProductReviewTotalRating.php
275 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 Total Rating widget.
11 */
12 class ProductReviewTotalRating extends \Elementor\Widget_Base {
13 /**
14 * Get widget name.
15 *
16 * @return string
17 */
18 public function get_name() {
19 return 'surecart-product-review-total-rating';
20 }
21
22 /**
23 * Get widget title.
24 *
25 * @return string
26 */
27 public function get_title() {
28 return esc_html__( 'Product Total Rating', 'surecart' );
29 }
30
31 /**
32 * Get widget icon.
33 *
34 * @return string
35 */
36 public function get_icon() {
37 return 'eicon-number-field';
38 }
39
40 /**
41 * Get the widget keywords.
42 *
43 * @return array
44 */
45 public function get_keywords() {
46 return array( 'surecart', 'product', 'total', 'rating', 'review', 'count' );
47 }
48
49 /**
50 * Get the widget categories.
51 *
52 * @return array
53 */
54 public function get_categories() {
55 return array( 'surecart-elementor-elements' );
56 }
57
58 /**
59 * Register the widget content settings.
60 *
61 * @return void
62 */
63 private function register_content_settings() {
64 $this->start_controls_section(
65 'settings',
66 [
67 'label' => esc_html__( 'Settings', 'surecart' ),
68 ]
69 );
70
71 $this->add_control(
72 'show_for_zero_reviews',
73 [
74 'label' => esc_html__( 'Show For Zero Reviews', 'surecart' ),
75 'type' => \Elementor\Controls_Manager::SWITCHER,
76 'label_on' => esc_html__( 'Show', 'surecart' ),
77 'label_off' => esc_html__( 'Hide', 'surecart' ),
78 'return_value' => 'yes',
79 'default' => 'yes',
80 'description' => esc_html__( 'Display the block even when there are zero reviews.', 'surecart' ),
81 ]
82 );
83
84 $this->add_control(
85 'show_label',
86 [
87 'label' => esc_html__( 'Show Label', 'surecart' ),
88 'type' => \Elementor\Controls_Manager::SWITCHER,
89 'label_on' => esc_html__( 'Show', 'surecart' ),
90 'label_off' => esc_html__( 'Hide', 'surecart' ),
91 'return_value' => 'yes',
92 'default' => 'yes',
93 'description' => esc_html__( 'Show "review" or "reviews" label after the count.', 'surecart' ),
94 ]
95 );
96
97 $this->add_control(
98 'style_variant',
99 [
100 'label' => esc_html__( 'Style', 'surecart' ),
101 'type' => \Elementor\Controls_Manager::SELECT,
102 'options' => [
103 'default' => esc_html__( 'Default', 'surecart' ),
104 'plus-sign' => esc_html__( 'Plus Sign', 'surecart' ),
105 ],
106 'default' => 'default',
107 ]
108 );
109
110 $this->add_control(
111 'link_to_reviews',
112 [
113 'label' => esc_html__( 'Link to Reviews', 'surecart' ),
114 'type' => \Elementor\Controls_Manager::SWITCHER,
115 'label_on' => esc_html__( 'Yes', 'surecart' ),
116 'label_off' => esc_html__( 'No', 'surecart' ),
117 'return_value' => 'yes',
118 'default' => 'no',
119 'description' => esc_html__( 'Link to the reviews section.', 'surecart' ),
120 ]
121 );
122
123 $this->end_controls_section();
124 }
125
126 /**
127 * Register the widget style settings.
128 *
129 * @return void
130 */
131 private function register_style_settings() {
132 $this->start_controls_section(
133 'settings_style',
134 array(
135 'label' => esc_html__( 'Style', 'surecart' ),
136 'tab' => \Elementor\Controls_Manager::TAB_STYLE,
137 )
138 );
139
140 $selector = '{{WRAPPER}} .wp-block-surecart-product-review-total-rating';
141
142 $this->add_control(
143 'text_color',
144 array(
145 'label' => esc_html__( 'Color', 'surecart' ),
146 'type' => \Elementor\Controls_Manager::COLOR,
147 'selectors' => [
148 $selector => 'color: {{VALUE}} !important;',
149 $selector . '.sc-review-link' => 'color: {{VALUE}} !important;',
150 '{{WRAPPER}} a' . $selector . '.sc-review-link' => 'color: {{VALUE}} !important;',
151 ],
152 )
153 );
154
155 $this->add_control(
156 'hover_color',
157 [
158 'label' => esc_html__( 'Hover Color', 'surecart' ),
159 'type' => \Elementor\Controls_Manager::COLOR,
160 'selectors' => [
161 $selector . '.sc-review-link:hover' => 'color: {{VALUE}} !important;',
162 '{{WRAPPER}} a' . $selector . '.sc-review-link:hover' => 'color: {{VALUE}} !important;',
163 ],
164 'condition' => [
165 'link_to_reviews' => 'yes',
166 ],
167 ]
168 );
169
170 $this->add_group_control(
171 \Elementor\Group_Control_Typography::get_type(),
172 [
173 'name' => 'typography',
174 'label' => esc_html__( 'Typography', 'surecart' ),
175 'selector' => $selector . ', {{WRAPPER}} a' . $selector . '.sc-review-link',
176 'fields_options' => [
177 'font_size' => [
178 'selectors' => [
179 $selector => 'font-size: {{SIZE}}{{UNIT}} !important;',
180 ],
181 ],
182 'font_weight' => [
183 'selectors' => [
184 $selector => 'font-weight: {{VALUE}} !important;',
185 ],
186 ],
187 'line_height' => [
188 'selectors' => [
189 $selector => 'line-height: {{SIZE}}{{UNIT}} !important;',
190 ],
191 ],
192 ],
193 ]
194 );
195
196 $this->end_controls_section();
197 }
198
199 /**
200 * Register the widget controls.
201 *
202 * @return void
203 */
204 protected function register_controls() {
205 $this->register_content_settings();
206 $this->register_style_settings();
207 }
208
209 /**
210 * Render the widget output on the frontend.
211 *
212 * @return void
213 */
214 protected function render() {
215 $settings = $this->get_settings_for_display();
216 $show_label = 'yes' === ( $settings['show_label'] ?? 'yes' );
217 $show_for_zero_reviews = 'yes' === ( $settings['show_for_zero_reviews'] ?? 'yes' );
218 $link_to_reviews = 'yes' === ( $settings['link_to_reviews'] ?? 'yes' );
219 $style_variant = $settings['style_variant'] ?? 'default';
220
221 if ( \Elementor\Plugin::$instance->editor->is_edit_mode() ) {
222 $this->render_preview( $show_label );
223 return;
224 }
225
226 // Convert style_variant to className for WordPress block styles.
227 $class_name = 'default' !== $style_variant ? 'is-style-' . $style_variant : '';
228
229 $attributes = [
230 'show_label' => $show_label,
231 'show_for_zero_reviews' => $show_for_zero_reviews,
232 'link_to_reviews' => $link_to_reviews,
233 'className' => $class_name,
234 ];
235 ?>
236 <div <?php $this->print_render_attribute_string( 'wrapper' ); ?>>
237 <!-- wp:surecart/product-review-total-rating <?php echo wp_json_encode( $attributes ); ?> /-->
238 </div>
239 <?php
240 }
241
242 /**
243 * Render preview in editor.
244 *
245 * @param bool $show_label Show label flag.
246 *
247 * @return void
248 */
249 private function render_preview( $show_label ) {
250 $settings = $this->get_settings_for_display();
251 $is_plus = 'plus-sign' === ( $settings['style_variant'] ?? 'default' );
252 $plus_sign = $is_plus ? '+' : '';
253 $link_to_reviews = 'yes' === ( $settings['link_to_reviews'] ?? 'no' );
254
255 $content = '<span>42' . esc_html( $plus_sign ) . '</span>';
256 if ( $show_label ) {
257 $content .= ' ' . esc_html__( 'reviews', 'surecart' );
258 }
259
260 if ( $link_to_reviews ) {
261 ?>
262 <a href="#reviews" class="wp-block-surecart-product-review-total-rating sc-review-link">
263 <?php echo $content; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
264 </a>
265 <?php
266 } else {
267 ?>
268 <div class="wp-block-surecart-product-review-total-rating">
269 <?php echo $content; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
270 </div>
271 <?php
272 }
273 }
274 }
275