PluginProbe ʕ •ᴥ•ʔ
Tutor LMS – eLearning and online course solution / 4.0.2
Tutor LMS – eLearning and online course solution v4.0.2
4.0.7 4.0.6 4.0.5 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 / templates / learning-area / subpages / reviews / review-card.php
tutor / templates / learning-area / subpages / reviews Last commit date
create-review-modal.php 1 month ago review-card.php 1 month ago
review-card.php
167 lines
1 <?php
2 /**
3 * Tutor learning area review card.
4 *
5 * @package Tutor\Templates
6 * @author Themeum <support@themeum.com>
7 * @link https://themeum.com
8 * @since 4.0.0
9 */
10
11 defined( 'ABSPATH' ) || exit;
12
13 use TUTOR\Icon;
14 use Tutor\Components\Avatar;
15 use Tutor\Components\Badge;
16 use Tutor\Components\Button;
17 use Tutor\Components\Constants\Size;
18 use Tutor\Components\Constants\Variant;
19 use Tutor\Components\InputField;
20 use Tutor\Components\StarRating;
21 use Tutor\Components\StarRatingInput;
22 use Tutor\Components\SvgIcon;
23
24 // Get global variables.
25 global $current_user_id;
26
27 $form_id = "review-form-{$review->comment_ID}";
28 $delete_modal_id = 'review-delete-modal';
29 $review->comment_content = wp_kses_post( htmlspecialchars( stripslashes( $review->comment_content ?? '' ) ) );
30
31 ?>
32 <div x-data="tutorReviewCard('<?php echo esc_attr( $review->comment_ID ); ?>')" class="tutor-border-t tutor-p-6">
33 <div x-show="!isEditMode">
34 <div class="tutor-flex tutor-items-center tutor-justify-between">
35 <div class="tutor-flex tutor-items-center tutor-gap-4">
36 <?php Avatar::make()->user( (int) $review->user_id )->size( Size::SIZE_40 )->render(); ?>
37 <div class="tutor-flex tutor-flex-column">
38 <div class="tutor-flex tutor-items-center tutor-gap-5">
39 <div class="tutor-small"><?php echo esc_html( $review->display_name ?? '' ); ?></div>
40 <?php
41 if ( $current_user_id === (int) $review->user_id ) {
42 Badge::make()->label( __( 'Your Review', 'tutor' ) )->variant( Badge::INFO )->render();
43 }
44 ?>
45 </div>
46 <div class="tutor-small tutor-text-subdued">
47 <?php
48 /* translators: %s human-readable time difference. */
49 echo esc_html( sprintf( __( '%s ago', 'tutor' ), human_time_diff( strtotime( $review->comment_date_gmt ) ) ) );
50 ?>
51 </div>
52 </div>
53 </div>
54
55 <div class="tutor-flex tutor-items-center tutor-gap-5">
56 <?php
57 StarRating::make()->rating( (float) ( $review->rating ?? 0 ) )->render();
58
59 // Show pending badge for on hold reviews.
60 if ( 'hold' === $review->comment_status ) {
61 Badge::make()->label( __( 'Pending', 'tutor' ) )->variant( Badge::WARNING )->render();
62 }
63 ?>
64 </div>
65 </div>
66
67 <div class="tutor-p1 tutor-text-secondary tutor-mt-6">
68 <?php echo esc_textarea( html_entity_decode( $review->comment_content ?? '' ) ); ?>
69 </div>
70
71 <?php if ( $current_user_id === (int) $review->user_id ) : ?>
72 <div class="tutor-flex tutor-items-center tutor-gap-4 tutor-mt-6">
73 <?php
74 Button::make()
75 ->variant( Variant::OUTLINE )
76 ->size( Size::SMALL )
77 ->label( __( 'Edit Review', 'tutor' ) )
78 ->icon( Icon::EDIT_2 )
79 ->attr( 'x-ref', 'edit' )
80 ->render();
81
82 Button::make()
83 ->label( __( 'Delete Review', 'tutor' ) )
84 ->variant( Variant::OUTLINE )
85 ->size( Size::SMALL )
86 ->icon( Icon::DELETE_2 )
87 ->icon_only()
88 ->attr( 'onclick', 'TutorCore.modal.showModal(' . wp_json_encode( $delete_modal_id ) . ', { id: ' . esc_js( $review->comment_ID ) . ' })' )
89 ->icon_only()
90 ->render();
91 ?>
92 </div>
93 <?php endif; ?>
94 </div>
95
96 <?php if ( $current_user_id === (int) $review->user_id ) : ?>
97 <div x-show="isEditMode" x-cloak class="tutor-flex tutor-flex-column tutor-gap-6">
98 <form
99 class="tutor-flex tutor-flex-column tutor-gap-6"
100 id="<?php echo esc_attr( $form_id ); ?>"
101 x-data='tutorForm({
102 id: "<?php echo esc_attr( $form_id ); ?>",
103 mode: "onChange",
104 defaultValues: <?php echo wp_json_encode( $review ); ?>,
105 })'
106 x-bind="getFormBindings()"
107 @submit.prevent="handleSubmit(
108 (data) => handleReviewSubmit(data),
109 )($event)"
110 >
111 <?php
112 StarRatingInput::make()
113 ->field_name( 'rating' )
114 ->current_rating( $review->rating ?? 0 )
115 ->render();
116 ?>
117
118 <?php
119 InputField::make()
120 ->type( 'textarea' )
121 ->name( 'comment_content' )
122 ->required()
123 ->clearable()
124 ->attr( 'x-bind', "register('comment_content', { required: '" . esc_js( __( 'Review content is required', 'tutor' ) ) . "' })" )
125 ->attr( '@keydown.meta.enter.prevent', 'handleSubmit((data) => handleReviewSubmit(data))' )
126 ->attr( '@keydown.ctrl.enter.prevent', 'handleSubmit((data) => handleReviewSubmit(data))' )
127 ->render();
128 ?>
129 </form>
130 <div class="tutor-flex tutor-justify-between tutor-gap-3 tutor-sm-justify-end">
131 <div class="tutor-flex tutor-gap-3 tutor-tiny tutor-text-subdued tutor-items-center tutor-flex-wrap tutor-sm-hidden">
132 <span>
133 <?php SvgIcon::make()->name( Icon::COMMAND )->size( 12 )->render(); ?>
134 </span>
135 <?php esc_html_e( 'Cmd/Ctrl +', 'tutor' ); ?>
136 <span>
137 <?php SvgIcon::make()->name( Icon::ENTER )->size( 12 )->render(); ?>
138 </span>
139 <?php esc_html_e( 'Enter to Save', 'tutor' ); ?>
140 </div>
141 <div class="tutor-flex tutor-gap-3">
142 <?php
143 Button::make()
144 ->label( __( 'Cancel', 'tutor' ) )
145 ->variant( Variant::GHOST )
146 ->size( Size::X_SMALL )
147 ->attr( 'x-ref', 'cancel' )
148 ->attr( 'type', 'button' )
149 ->render();
150 ?>
151 <?php
152 Button::make()
153 ->label( __( 'Save and Continue', 'tutor' ) )
154 ->variant( Variant::PRIMARY_SOFT )
155 ->size( Size::X_SMALL )
156 ->attr( 'type', 'submit' )
157 ->attr( 'form', $form_id )
158 ->attr( ':class', '{ \'tutor-btn-loading\': saveRatingMutation.isPending }' )
159 ->attr( ':disabled', 'saveRatingMutation.isPending' )
160 ->render();
161 ?>
162 </div>
163 </div>
164 </div>
165 <?php endif; ?>
166 </div>
167