PluginProbe ʕ •ᴥ•ʔ
Tutor LMS – eLearning and online course solution / 4.0.5
Tutor LMS – eLearning and online course solution v4.0.5
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 / qna / card.php
tutor / templates / learning-area / subpages / qna Last commit date
card.php 1 month ago form.php 1 month ago replies.php 1 month ago single.php 1 month ago
card.php
174 lines
1 <?php
2 /**
3 * Single Q&A card for Q&A list.
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\Components\Constants\Size;
14 use TUTOR\Icon;
15 use Tutor\Components\SvgIcon;
16 use Tutor\Components\Avatar;
17 use Tutor\Components\Button;
18 use Tutor\Components\Constants\Variant;
19 use Tutor\Helpers\UrlHelper;
20
21 global $tutor_course_id;
22
23 $current_user_id = get_current_user_id();
24 $is_user_asker = $current_user_id === (int) $question->user_id;
25
26 $limit = 60; // Content text limit.
27 $content = wp_strip_all_tags( $question->comment_content );
28 $content = strlen( $content ) > $limit ? substr( $content, 0, $limit ) . '...' : $content;
29
30 $question_id = $question->comment_ID;
31 $last_reply = null;
32 $answers = tutor_utils()->get_qa_answer_by_question( $question_id, 'DESC', 'frontend' );
33
34 if ( ! empty( $answers ) ) {
35 $last_reply = $answers[0];
36 }
37
38 $single_url = UrlHelper::add_query_params(
39 get_permalink( $tutor_course_id ),
40 array(
41 'subpage' => 'qna',
42 'question_id' => $question_id,
43 )
44 );
45 ?>
46 <div
47 class="tutor-discussion-card"
48 data-question-id="<?php echo esc_attr( (int) $question_id ); ?>"
49 x-show="editingId !== <?php echo (int) $question_id; ?>"
50 x-data="tutorPopover({ placement: 'bottom-end' })"
51 :class="{'active': open}"
52 >
53 <div class="tutor-flex tutor-gap-4 tutor-w-full">
54 <?php Avatar::make()->user( $question->user_id )->size( Size::SIZE_32 )->render(); ?>
55 <div class="tutor-discussion-card-content">
56 <div class="tutor-discussion-card-top">
57 <div class="tutor-discussion-card-author"><?php echo esc_html( $question->comment_author ); ?></div>
58 <div class="tutor-text-tiny tutor-text-subdued">
59 <?php
60 /* translators: %s human-readable time difference. */
61 echo esc_html( sprintf( __( '%s ago', 'tutor' ), human_time_diff( strtotime( $question->comment_date_gmt ) ) ) );
62 ?>
63 </div>
64 </div>
65 <a href="<?php echo esc_url( $single_url ); ?>" class="tutor-discussion-card-title" id="<?php echo esc_attr( 'tutor-qna-text-' . (int) $question_id ); ?>"><?php echo wp_kses_post( $content ); ?></a>
66 <div class="tutor-flex tutor-items-center tutor-justify-between tutor-sm-mt-4">
67 <div class="tutor-discussion-card-meta">
68 <button
69 @click="toggleReply(<?php echo (int) $question_id; ?>)"
70 class="tutor-discussion-card-meta-reply-button"
71 type="button"
72 >
73 <?php esc_html_e( 'Reply', 'tutor' ); ?>
74 </button>
75 <a href="<?php echo esc_url( $single_url ); ?>" class="tutor-flex tutor-items-center tutor-gap-2">
76 <?php SvgIcon::make()->name( Icon::COMMENTS )->size( 20 )->render(); ?>
77 <span class="tutor-discussion-card-reply-count tutor-text-subdued"><?php echo esc_html( $question->answer_count ); ?></span>
78 </a>
79
80 <?php if ( $last_reply ) : ?>
81 <div class="tutor-flex tutor-items-center tutor-gap-3 tutor-sm-ml-2">
82 <?php Avatar::make()->user( $last_reply->user_id )->size( Size::SIZE_20 )->render(); ?>
83 <div class="tutor-text-small">
84 <?php
85 /* translators: %s human-readable time difference. */
86 echo esc_html( sprintf( __( '%s ago', 'tutor' ), human_time_diff( strtotime( $last_reply->comment_date_gmt ) ) ) );
87 ?>
88 </div>
89 </div>
90 <?php endif; ?>
91 </div>
92 </div>
93 </div>
94 <div class="tutor-discussion-card-actions" x-show="replyingId !== <?php echo (int) $question_id; ?>">
95 <?php
96 Button::make()
97 ->label( __( 'Reply', 'tutor' ) )
98 ->attr( '@click', 'toggleReply(' . (int) $question_id . ')' )
99 ->attr( 'class', 'tutor-btn tutor-btn-primary tutor-btn-x-small tutor-force-sm-hidden' )
100 ->attr( 'type', 'button' )
101 ->size( Size::X_SMALL )
102 ->render();
103 ?>
104 <?php if ( $is_user_asker ) : ?>
105 <div class="tutor-flex">
106 <?php
107 Button::make()
108 ->label( __( 'More options', 'tutor' ) )
109 ->variant( Variant::SECONDARY )
110 ->size( Size::X_SMALL )
111 ->attr( 'x-ref', 'trigger' )
112 ->attr( '@click', 'toggle()' )
113 ->attr( 'class', 'tutor-discussion-card-actions-trigger' )
114 ->icon( Icon::ELLIPSES )
115 ->icon_only()
116 ->render()
117 ?>
118 <div x-ref="content" x-show="open" x-cloak @click.outside="handleClickOutside()" class="tutor-popover">
119 <div class="tutor-popover-menu" style="min-width: 110px;">
120 <button class="tutor-popover-menu-item tutor-gap-5" @click="setEditing(<?php echo (int) $question_id; ?>); hide()">
121 <?php SvgIcon::make()->name( Icon::EDIT_2 )->size( 20 )->render(); ?>
122 <?php esc_html_e( 'Edit', 'tutor' ); ?>
123 </button>
124 <button
125 class="tutor-popover-menu-item tutor-gap-5 tutor-sm-border-t"
126 @click="hide(); TutorCore.modal.showModal('tutor-qna-delete-modal', { question_id: <?php echo esc_html( $question_id ); ?> });"
127 >
128 <?php SvgIcon::make()->name( Icon::DELETE_2 )->size( 20 )->render(); ?>
129 <?php esc_html_e( 'Delete', 'tutor' ); ?>
130 </button>
131 </div>
132 </div>
133 </div>
134 <?php endif; ?>
135 </div>
136 </div>
137
138 <div x-show="replyingId === <?php echo (int) $question_id; ?>" x-cloak class="tutor-card tutor-surface-l1-hover tutor-mt-4 tutor-w-full">
139 <?php
140 tutor_load_template(
141 'learning-area.subpages.qna.form',
142 array(
143 'form_id' => 'qna-reply-form-' . (int) $question_id,
144 'submit_handler' => '(data) => replyQnAMutation?.mutate({ ...data, question_id: ' . (int) $question_id . ', course_id: ' . (int) $question->course_id . ', reply_context: "list" })',
145 'cancel_handler' => 'setReplying(null)',
146 'is_pending' => 'replyQnAMutation?.isPending',
147 'placeholder' => __( 'Just drop your response here!', 'tutor' ),
148 'label' => __( 'Reply', 'tutor' ),
149 'submit_label' => __( 'Save', 'tutor' ),
150 'keep_footer_visible' => true,
151 )
152 );
153 ?>
154 </div>
155 </div>
156
157 <?php if ( $is_user_asker ) : ?>
158 <div x-show="editingId === <?php echo (int) $question_id; ?>" x-cloak class="tutor-card tutor-surface-l1-hover">
159 <?php
160 tutor_load_template(
161 'learning-area.subpages.qna.form',
162 array(
163 'form_id' => 'qna-edit-' . (int) $question_id,
164 'default_value' => $question->comment_content,
165 'submit_handler' => '(data) => updateQnAMutation?.mutate({ ...data, question_id: ' . (int) $question->comment_ID . ' })',
166 'cancel_handler' => 'setEditing(null)',
167 'is_pending' => 'updateQnAMutation?.isPending',
168 'keep_footer_visible' => true,
169 )
170 );
171 ?>
172 </div>
173 <?php endif; ?>
174