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 / ProductReviewAverageRatingValue.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
ProductReviewAverageRatingValue.php
228 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 Value widget.
11 */
12 class ProductReviewAverageRatingValue 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-value';
20 }
21
22 /**
23 * Get widget title.
24 *
25 * @return string
26 */
27 public function get_title() {
28 return esc_html__( 'Product Average Rating Value', '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', 'rating', 'value', 'review', 'number' );
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 'section_settings',
66 [
67 'label' => esc_html__( 'Settings', 'surecart' ),
68 ]
69 );
70
71 $this->add_control(
72 'format_style',
73 [
74 'label' => esc_html__( 'Format Style', 'surecart' ),
75 'type' => \Elementor\Controls_Manager::SELECT,
76 'options' => [
77 'none' => esc_html__( 'None', 'surecart' ),
78 'parentheses' => esc_html__( 'Parentheses', 'surecart' ),
79 'slash' => '/ 5.0',
80 ],
81 'default' => 'none',
82 ]
83 );
84
85 $this->add_control(
86 'link_to_reviews',
87 [
88 'label' => esc_html__( 'Link to Reviews', 'surecart' ),
89 'type' => \Elementor\Controls_Manager::SWITCHER,
90 'label_on' => esc_html__( 'Yes', 'surecart' ),
91 'label_off' => esc_html__( 'No', 'surecart' ),
92 'return_value' => 'yes',
93 'default' => 'no',
94 'description' => esc_html__( 'Link to the reviews section.', 'surecart' ),
95 ]
96 );
97
98 $this->end_controls_section();
99 }
100
101 /**
102 * Register the widget style settings.
103 *
104 * @return void
105 */
106 private function register_style_settings() {
107 $selector = '{{WRAPPER}} .wp-block-surecart-product-review-average-rating-value';
108 $this->start_controls_section(
109 'section_style',
110 array(
111 'label' => esc_html__( 'Text Style', 'surecart' ),
112 'tab' => \Elementor\Controls_Manager::TAB_STYLE,
113 )
114 );
115
116 $this->add_control(
117 'text_color',
118 array(
119 'label' => esc_html__( 'Text Color', 'surecart' ),
120 'type' => \Elementor\Controls_Manager::COLOR,
121 'selectors' => [
122 $selector => 'color: {{VALUE}} !important;',
123 $selector . ' a' => 'color: {{VALUE}} !important;',
124 ],
125 )
126 );
127
128 $this->add_group_control(
129 \Elementor\Group_Control_Typography::get_type(),
130 [
131 'name' => 'typography',
132 'selector' => $selector,
133 'fields_options' => [
134 'font_size' => [
135 'selectors' => [
136 $selector => 'font-size: {{SIZE}}{{UNIT}} !important;',
137 ],
138 ],
139 'font_weight' => [
140 'selectors' => [
141 $selector => 'font-weight: {{VALUE}} !important;',
142 ],
143 ],
144 'line_height' => [
145 'selectors' => [
146 $selector => 'line-height: {{SIZE}}{{UNIT}} !important;',
147 ],
148 ],
149 ],
150 ]
151 );
152
153 $this->end_controls_section();
154 }
155
156 /**
157 * Register the widget controls.
158 *
159 * @return void
160 */
161 protected function register_controls() {
162 $this->register_content_settings();
163 $this->register_style_settings();
164 }
165
166 /**
167 * Render the widget output on the frontend.
168 *
169 * @return void
170 */
171 protected function render() {
172 $settings = $this->get_settings_for_display();
173 $format_style = $settings['format_style'] ?? 'none';
174 $class_name = 'none' === $format_style ? '' : 'is-style-' . $format_style;
175 $link_to_reviews = 'yes' === ( $settings['link_to_reviews'] ?? 'yes' );
176
177 if ( \Elementor\Plugin::$instance->editor->is_edit_mode() ) {
178 $this->render_preview( $class_name, $link_to_reviews );
179 return;
180 }
181
182 $attributes = [
183 'className' => $class_name,
184 'link_to_reviews' => $link_to_reviews,
185 ];
186 ?>
187 <div <?php $this->print_render_attribute_string( 'wrapper' ); ?>>
188 <!-- wp:surecart/product-review-average-rating-value <?php echo wp_json_encode( $attributes ); ?> /-->
189 </div>
190 <?php
191 }
192
193 /**
194 * Render preview in editor.
195 *
196 * @param string $class_name Class name for styling.
197 * @param bool $link_to_reviews Link to reviews flag.
198 *
199 * We need to add the styles manually, because if on demand block assets load settings are enabled,
200 * then those styles won't be loaded and that's mandatory for editor preview.
201 *
202 * @return void
203 */
204 public function render_preview( $class_name, $link_to_reviews = true ): void {
205 $product = sc_get_product();
206 $content = ! empty( $product->average_stars ) ? (string) $product->average_stars : '4.5';
207
208 if ( strpos( $class_name, 'is-style-parentheses' ) !== false ) {
209 $content = '(' . $content . ')';
210 } elseif ( strpos( $class_name, 'is-style-slash' ) !== false ) {
211 $content = $content . ' / 5.0';
212 }
213
214 $reviews_url = sc_get_product_review_link();
215 ?>
216 <div class="wp-block-surecart-product-review-average-rating-value">
217 <span class="<?php echo esc_attr( trim( $class_name ) ); ?>">
218 <?php if ( $link_to_reviews ) : ?>
219 <a href="<?php echo $reviews_url; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>" class="sc-review-link"><?php echo esc_html( $content ); ?></a>
220 <?php else : ?>
221 <?php echo esc_html( $content ); ?>
222 <?php endif; ?>
223 </span>
224 </div>
225 <?php
226 }
227 }
228