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 / ProductReviewAverageRatingStars.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
ProductReviewAverageRatingStars.php
231 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 Average Rating Stars widget.
11 */
12 class ProductReviewAverageRatingStars extends \Elementor\Widget_Base {
13 /**
14 * Get widget name.
15 *
16 * @return string
17 */
18 public function get_name() {
19 return 'surecart-product-review-average-rating-stars';
20 }
21
22 /**
23 * Get widget title.
24 *
25 * @return string
26 */
27 public function get_title() {
28 return esc_html__( 'Product Average Rating Stars', 'surecart' );
29 }
30
31 /**
32 * Get widget icon.
33 *
34 * @return string
35 */
36 public function get_icon() {
37 return 'eicon-rating';
38 }
39
40 /**
41 * Get the widget keywords.
42 *
43 * @return array
44 */
45 public function get_keywords() {
46 return array( 'surecart', 'product', 'rating', 'stars', 'review' );
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 controls.
60 *
61 * @return void
62 */
63 protected function register_controls() {
64 $this->start_controls_section(
65 'section_rating_stars',
66 [
67 'label' => esc_html__( 'Rating Star Settings', 'surecart' ),
68 ]
69 );
70
71 $this->add_control(
72 'link_to_reviews',
73 [
74 'label' => esc_html__( 'Link to Reviews', 'surecart' ),
75 'type' => \Elementor\Controls_Manager::SWITCHER,
76 'label_on' => esc_html__( 'Yes', 'surecart' ),
77 'label_off' => esc_html__( 'No', 'surecart' ),
78 'return_value' => 'yes',
79 'default' => 'no',
80 'description' => esc_html__( 'Link to the reviews section.', 'surecart' ),
81 ]
82 );
83
84 $this->add_control(
85 'size',
86 [
87 'label' => esc_html__( 'Star Size', 'surecart' ),
88 'type' => \Elementor\Controls_Manager::SLIDER,
89 'size_units' => [ 'px' ],
90 'range' => [
91 'px' => [
92 'min' => 10,
93 'max' => 100,
94 ],
95 ],
96 'default' => [
97 'size' => 20,
98 'unit' => 'px',
99 ],
100 ]
101 );
102
103 $this->add_control(
104 'fill_color',
105 array(
106 'label' => esc_html__( 'Star Color', 'surecart' ),
107 'type' => \Elementor\Controls_Manager::COLOR,
108 'global' => [
109 'default' => \Elementor\Core\Kits\Documents\Tabs\Global_Colors::COLOR_PRIMARY,
110 ],
111 'selectors' => [
112 '{{WRAPPER}} .wp-block-surecart-product-review-average-rating-stars svg' => 'fill: {{VALUE}}; stroke: {{VALUE}}; color: {{VALUE}};',
113 ],
114 )
115 );
116
117 $this->end_controls_section();
118
119 $this->start_controls_section(
120 'section_layout',
121 [
122 'label' => esc_html__( 'Spacing', 'surecart' ),
123 ]
124 );
125
126 $this->add_control(
127 'display',
128 [
129 'label' => esc_html__( 'Display', 'surecart' ),
130 'type' => \Elementor\Controls_Manager::SELECT,
131 'options' => [
132 'inline-flex' => esc_html__( 'Inline Flex', 'surecart' ),
133 'flex' => esc_html__( 'Flex', 'surecart' ),
134 ],
135 'default' => 'flex',
136 'selectors' => [
137 '{{WRAPPER}} .wp-block-surecart-product-review-average-rating-stars' => 'display: {{VALUE}};',
138 ],
139 ]
140 );
141
142 $this->add_control(
143 'gap',
144 [
145 'label' => esc_html__( 'Gap Between Stars', 'surecart' ),
146 'type' => \Elementor\Controls_Manager::SLIDER,
147 'size_units' => [ 'px' ],
148 'range' => [
149 'px' => [
150 'min' => 0,
151 'max' => 50,
152 ],
153 ],
154 'default' => [
155 'size' => 2,
156 'unit' => 'px',
157 ],
158 'selectors' => [
159 '{{WRAPPER}} .wp-block-surecart-product-review-average-rating-stars' => 'gap: {{SIZE}}{{UNIT}};',
160 ],
161 ]
162 );
163
164 $this->end_controls_section();
165 }
166
167 /**
168 * Render the widget output on the frontend.
169 *
170 * @return void
171 */
172 protected function render() {
173 $settings = $this->get_settings_for_display();
174 $size = $settings['size']['size'] ?? 20;
175 $fill_color = ! empty( $settings['fill_color'] ) ? $settings['fill_color'] : 'var(--e-global-color-primary)'; // Fallback to CSS variable if no color is selected.
176 $link_to_reviews = 'yes' === ( $settings['link_to_reviews'] ?? 'yes' );
177
178 if ( \Elementor\Plugin::$instance->editor->is_edit_mode() ) {
179 $this->render_preview( $size );
180 return;
181 }
182
183 $attributes = [
184 'fill_color' => $fill_color,
185 'size' => absint( $size ) . 'px',
186 'link_to_reviews' => $link_to_reviews,
187 ];
188 ?>
189 <div <?php $this->print_render_attribute_string( 'wrapper' ); ?>>
190 <!-- wp:surecart/product-review-average-rating-stars <?php echo wp_json_encode( $attributes ); ?> /-->
191 </div>
192 <?php
193 }
194
195 /**
196 * Render preview in editor.
197 *
198 * @param int $size Star size.
199 *
200 * @return void
201 */
202 private function render_preview( $size ) {
203 ?>
204 <div class="wp-block-surecart-product-review-average-rating-stars" style="display: flex; line-height:1;">
205 <?php
206 for ( $i = 1; $i <= 5; $i++ ) {
207 $is_full_star = $i <= 4;
208 $is_half_star = 5 === $i;
209
210 echo wp_kses(
211 \SureCart::svg()->get(
212 $is_half_star ? 'half-star' : 'star',
213 [
214 'class' => 'sc-star-row__label__svg',
215 'height' => esc_attr( $size ),
216 'width' => esc_attr( $size ),
217 'fill' => $is_full_star || $is_half_star ? 'currentColor' : 'none',
218 'stroke' => 'currentColor',
219 'stroke-width' => 2,
220 'aria-hidden' => 'true',
221 ]
222 ),
223 sc_allowed_svg_html()
224 );
225 }
226 ?>
227 </div>
228 <?php
229 }
230 }
231