PluginProbe ʕ •ᴥ•ʔ
Tutor LMS – eLearning and online course solution / 4.0.4
Tutor LMS – eLearning and online course solution v4.0.4
4.0.4 4.0.3 4.0.2 4.0.1 4.0.0 3.9.15 3.9.14 3.9.13 3.9.12 3.9.11 trunk 1.0.0 1.0.0-alpha 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 1.0.8 1.0.9 1.1.0 1.1.1 1.2.0 1.2.1 1.2.11 1.2.12 1.2.13 1.2.20 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.7 1.3.8 1.3.9 1.4.0 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.4.9 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.5.9 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.6.9 1.7.0 1.7.1 1.7.2 1.7.3 1.7.4 1.7.5 1.7.6 1.7.7 1.7.8 1.7.9 1.8.0 1.8.1 1.8.10 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.8.7 1.8.8 1.8.9 1.9.0 1.9.1 1.9.10 1.9.11 1.9.12 1.9.13 1.9.14 1.9.15 1.9.16 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.1 2.0.10 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8 2.0.9 2.1.0 2.1.1 2.1.10 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.3.0 2.4.0 2.5.0 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.7.6 2.7.7 3.0.0 3.0.1 3.0.2 3.1.0 3.2.0 3.2.1 3.2.2 3.2.3 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.7.0 3.7.1 3.7.2 3.7.3 3.7.4 3.8.0 3.8.1 3.8.2 3.8.3 3.9.0 3.9.1 3.9.10 3.9.2 3.9.3 3.9.4 3.9.5 3.9.6 3.9.7 3.9.8 3.9.9
tutor / components / StarRating.php
tutor / components Last commit date
Constants 1 month ago Accordion.php 2 weeks ago Alert.php 2 weeks ago AttachmentCard.php 2 weeks ago Avatar.php 2 weeks ago Badge.php 2 weeks ago BaseComponent.php 1 month ago Button.php 2 weeks ago ConfirmationModal.php 2 weeks ago CourseFilter.php 2 weeks ago DateFilter.php 2 weeks ago DropdownFilter.php 2 weeks ago EmptyState.php 2 weeks ago FileUploader.php 2 weeks ago InputField.php 2 weeks ago Modal.php 2 weeks ago Nav.php 2 weeks ago Pagination.php 2 weeks ago Popover.php 2 weeks ago PreviewTrigger.php 2 weeks ago Progress.php 2 weeks ago SearchFilter.php 2 weeks ago Sorting.php 2 weeks ago StarRating.php 2 weeks ago StarRatingInput.php 2 weeks ago StatusSelect.php 2 weeks ago SvgIcon.php 2 weeks ago Table.php 2 weeks ago Tabs.php 2 weeks ago Tooltip.php 2 weeks ago WPEditor.php 2 weeks ago
StarRating.php
221 lines
1 <?php
2 /**
3 * StarRating Component Class.
4 *
5 * Renders a static star rating display.
6 *
7 * @package Tutor\Components
8 * @author Themeum
9 * @link https://themeum.com
10 * @since 4.0.0
11 */
12
13 namespace Tutor\Components;
14
15 defined( 'ABSPATH' ) || exit;
16
17 use TUTOR\Icon;
18
19 /**
20 * Class StarRating
21 *
22 * Example Usage:
23 * ```php
24 * // Display stars only (no numbers)
25 * StarRating::make()
26 * ->rating( 4.5 )
27 * ->render();
28 *
29 * // Stars with average numeric rating shown
30 * StarRating::make()
31 * ->rating( 4.5 )
32 * ->show_average( true )
33 * ->render();
34 *
35 * // Stars with review count
36 * StarRating::make()
37 * ->rating( 3.8 )
38 * ->count( 120 )
39 * ->render();
40 *
41 * // Stars with average and review count
42 * StarRating::make()
43 * ->rating( 4.2 )
44 * ->show_average( true )
45 * ->count( 58 )
46 * ->render();
47 *
48 * // Larger icon size
49 * StarRating::make()
50 * ->rating( 5.0 )
51 * ->icon_size( 24 )
52 * ->show_average( true )
53 * ->render();
54 *
55 * // Zero rating (no stars filled)
56 * StarRating::make()
57 * ->rating( 0 )
58 * ->show_average( true )
59 * ->count( 0 )
60 * ->render();
61 *
62 * // Retrieve HTML without echoing
63 * $html = StarRating::make()->rating( 4.5 )->show_average( true )->count( 30 )->get();
64 * ```
65 *
66 * @since 4.0.0
67 */
68 class StarRating extends BaseComponent {
69
70 /**
71 * Rating value
72 *
73 * @since 4.0.0
74 *
75 * @var float
76 */
77 protected $rating = 0;
78
79 /**
80 * Whether to show numerical rating
81 *
82 * @since 4.0.0
83 *
84 * @var bool
85 */
86 protected $show_average = false;
87
88 /**
89 * Star icon size
90 *
91 * @since 4.0.0
92 *
93 * @var int
94 */
95 protected $icon_size = 16;
96
97 /**
98 * Review count
99 *
100 * @since 4.0.0
101 *
102 * @var int|null
103 */
104 protected $count = null;
105
106 /**
107 * Set rating value
108 *
109 * @since 4.0.0
110 *
111 * @param float $rating rating.
112 *
113 * @return self
114 */
115 public function rating( float $rating ): self {
116 $this->rating = $rating;
117 return $this;
118 }
119
120 /**
121 * Set whether to show average rating text
122 *
123 * @since 4.0.0
124 *
125 * @param bool $show show average.
126 *
127 * @return self
128 */
129 public function show_average( bool $show = true ): self {
130 $this->show_average = $show;
131 return $this;
132 }
133
134 /**
135 * Set icon size
136 *
137 * @since 4.0.0
138 *
139 * @param int $size size.
140 *
141 * @return self
142 */
143 public function icon_size( int $size ): self {
144 $this->icon_size = $size;
145 return $this;
146 }
147
148 /**
149 * Set review count
150 *
151 * @since 4.0.0
152 *
153 * @param int $count count.
154 *
155 * @return self
156 */
157 public function count( int $count ): self {
158 $this->count = $count;
159 return $this;
160 }
161
162 /**
163 * Get component content
164 *
165 * @since 4.0.0
166 *
167 * @return string
168 */
169 public function get(): string {
170 $rating = $this->rating;
171 $icon_size = $this->icon_size;
172
173 $star_fill = SvgIcon::make()->name( Icon::STAR_FILL )->size( $icon_size )->ignore_kids()->get();
174 $star_half = SvgIcon::make()->name( Icon::STAR_HALF )->size( $icon_size )->ignore_kids()->get();
175 $star = SvgIcon::make()->name( Icon::STAR_LINE )->size( $icon_size )->ignore_kids()->get();
176
177 ob_start();
178 ?>
179 <div class="tutor-ratings-stars tutor-flex tutor-items-center tutor-gap-1" data-rating-value="<?php echo esc_attr( $rating ); ?>">
180 <div class="tutor-flex tutor-items-center tutor-gap-1">
181 <?php for ( $i = 1; $i <= 5; $i++ ) : ?>
182 <span class="tutor-icon-exception4 tutor-flex-center">
183 <?php
184 if ( (int) $rating >= $i ) {
185 echo $star_fill; // phpcs:ignore -- get_svg_icon returns escaped html
186 } elseif ( ( $rating - $i ) >= -0.5 ) {
187 echo $star_half; // phpcs:ignore -- get_svg_icon returns escaped html
188 } else {
189 echo $star; // phpcs:ignore -- get_svg_icon returns escaped html
190 }
191 ?>
192 </span>
193 <?php endfor; ?>
194 </div>
195
196 <?php if ( $this->show_average || $this->count ) : ?>
197 <div class="tutor-ratings-meta tutor-flex tutor-items-center tutor-gap-1 tutor-ml-1">
198 <?php if ( $this->show_average ) : ?>
199 <span class="tutor-small tutor-font-medium tutor-text-primary">
200 <?php echo esc_html( number_format( $rating, 1 ) ); ?>
201 </span>
202 <?php endif; ?>
203
204 <?php if ( $this->count ) : ?>
205 <span class="tutor-small tutor-text-subdued">
206 <?php
207 /* translators: %s: review count */
208 echo esc_html( sprintf( _n( '(%s Review)', '(%s Reviews)', $this->count, 'tutor' ), number_format_i18n( $this->count ) ) );
209 ?>
210 </span>
211 <?php endif; ?>
212 </div>
213 <?php endif; ?>
214 </div>
215 <?php
216
217 $this->component_string = ob_get_clean();
218 return $this->component_string;
219 }
220 }
221