PluginProbe
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 4.7.2
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v4.7.2
4.7.2 4.7.1 4.7.0 4.6.6 4.6.5 4.6.4 4.6.3 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 All 281 releases
surecart / app / src / Integrations / Elementor / Widgets / ProductReviewAverageRatingValue.php
ProductReviewAverageRatingValue.php
228 lines 5.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
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