PluginProbe ʕ •ᴥ•ʔ
Tutor LMS – eLearning and online course solution / 1.7.3
Tutor LMS – eLearning and online course solution v1.7.3
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 / views / pages / view_attempt.php
tutor / views / pages Last commit date
tools 5 years ago add_new_instructor.php 5 years ago addons.php 5 years ago answer.php 5 years ago enable_disable_addons.php 5 years ago get-pro.php 5 years ago instructors.php 5 years ago question_answer.php 5 years ago quiz_attempts.php 5 years ago students.php 5 years ago tools.php 5 years ago tutor-pro-addons.php 5 years ago uninstall.php 5 years ago view_attempt.php 5 years ago withdraw_requests.php 5 years ago
view_attempt.php
364 lines
1 <?php
2 $attempt_id = (int) sanitize_text_field($_GET['attempt_id']);
3 $attempt = tutor_utils()->get_attempt($attempt_id);
4
5 if ( ! $attempt){
6 ?>
7 <h1><?php _e('Attempt not found', 'tutor'); ?></h1>
8 <?php
9 return;
10 }
11
12 $quiz_attempt_info = tutor_utils()->quiz_attempt_info($attempt->attempt_info);
13 $answers = tutor_utils()->get_quiz_answers_by_attempt_id($attempt->attempt_id);
14
15 $user_id = tutor_utils()->avalue_dot('user_id', $attempt);
16 $user = get_userdata($user_id);
17 ?>
18
19
20 <div class="tutor-quiz-attempt-review-wrap">
21 <div class="attempt-review-title"> <i class="tutor-icon-list"></i> <?php _e('View Attempts', 'tutor'); ?></div>
22
23 <div class="tutor-quiz-attempt-info-row">
24 <div class="attempt-view-top">
25 <div class="attempt-info-col">
26 <div class="attempt-user-details">
27 <div class="attempt-user-avatar">
28 <img src="<?php echo esc_url(get_avatar_url($user_id)) ?>" alt="<?php echo esc_attr($user->display_name); ?>">
29 </div>
30 <div class="attempt-info-content">
31 <h5><?php echo __('Student Name', 'tutor'); ?></h5>
32 <h4><?php echo $user->display_name; ?></h4>
33 </div>
34 </div>
35 </div>
36
37 <div class="attempt-info-col">
38 <div class="attempt-info-content">
39 <h5><?php echo __('Quiz', 'tutor'); ?></h5>
40 <h4>
41 <?php
42 echo "<a href='" .admin_url("post.php?post={$attempt->quiz_id}&action=edit")."'>".get_the_title($attempt->quiz_id)."</a>";
43 ?>
44 </h4>
45 </div>
46 </div>
47
48 <div class="attempt-info-col">
49 <div class="attempt-info-content">
50 <h5><?php echo __('Attempt Time', 'tutor'); ?></h5>
51 <h4>
52 <?php echo date_i18n(get_option('date_format'), strtotime($attempt->attempt_started_at)).' '.date_i18n(get_option('time_format'), strtotime($attempt->attempt_started_at)); ?>
53 </h4>
54 </div>
55 </div>
56
57 <div class="attempt-info-col">
58 <div class="attempt-info-content">
59 <h5><?php echo __('Status', 'tutor'); ?></h5>
60 <h4>
61 <?php
62 $status = ucwords(str_replace('quiz_', '', $attempt->attempt_status));
63 echo $status;
64 ?>
65 </h4>
66 </div>
67 </div>
68 </div>
69
70 <div class="attempt-view-bottom">
71 <div class="attempt-info-col">
72 <div class="attempt-info-content">
73 <h5><?php echo __('Course', 'tutor'); ?></h5>
74 <h4>
75 <?php
76 $quiz = tutor_utils()->get_course_by_quiz($attempt->quiz_id);
77 if ($quiz) {
78 echo "<a href='".admin_url( "post.php?post={$quiz->ID}&action=edit" ) . "'>". get_the_title( $quiz->ID )."</a>";
79 }
80 ?>
81 </h4>
82 </div>
83 </div>
84
85 <div class="attempt-info-col">
86 <div class="attempt-info-content">
87 <h5><?php echo __('Result', 'tutor'); ?></h5>
88 <h4>
89 <?php
90
91 if ($attempt->attempt_status === 'review_required'){
92 $output = '<span class="result-review-required">' . __('Under Review', 'tutor') . '</span>';
93 }else {
94
95 $pass_mark_percent = tutor_utils()->get_quiz_option($attempt->quiz_id, 'passing_grade', 0);
96 $earned_percentage = $attempt->earned_marks > 0 ? (number_format(($attempt->earned_marks * 100) / $attempt->total_marks)) : 0;
97 $output = '';
98 if ($earned_percentage >= $pass_mark_percent) {
99 $output .= '<span class="result-pass">' . __('Pass', 'tutor') . '</span>';
100 } else {
101 $output .= '<span class="result-fail">' . __('Fail', 'tutor') . '</span>';
102 }
103
104 $output .= "" . $attempt->earned_marks . " out of {$attempt->total_marks}";
105 $output .= "<span>, Marks earned ({$earned_percentage}%)</span>";
106 }
107 echo $output;
108 ?>
109 </h4>
110 </div>
111 </div>
112
113 <div class="attempt-info-col">
114 <div class="attempt-info-content">
115 <h5><?php echo __('Quiz Time', 'tutor'); ?></h5>
116 <h4>
117 <?php
118 $time_limit_seconds = tutor_utils()->avalue_dot('time_limit.time_limit_seconds', $quiz_attempt_info);
119 echo tutor_utils()->seconds_to_time_context($time_limit_seconds);
120 ?>
121 </h4>
122 </div>
123 </div>
124
125 <div class="attempt-info-col">
126 <div class="attempt-info-content">
127 <h5><?php echo __('Attempt Time', 'tutor'); ?></h5>
128 <h4>
129 <?php
130 $attempt_time_sec = strtotime($attempt->attempt_ended_at) - strtotime($attempt->attempt_started_at);
131 echo tutor_utils()->seconds_to_time_context($attempt_time_sec);
132 ?>
133 </h4>
134 </div>
135
136 </div>
137
138 </div>
139
140 </div>
141
142
143 <div class="attempt-review-notice-wrap">
144 <?php
145 if (is_array($answers) && count($answers)) {
146 $question_no = 0;
147 $required_review = array();
148
149 foreach ($answers as $answer){
150 $question_no++;
151 if ($answer->question_type === 'open_ended' || $answer->question_type === 'short_answer'){
152 $required_review[] = $question_no;
153 }
154 }
155
156 if (count($required_review)){
157 echo '<p class="attempt-review-notice"> <i class="tutor-icon-warning-2"></i> <strong>Reminder: </strong> Please review answers for question no. '.implode(', ', $required_review).' </p>';
158 }
159 }
160
161
162 ?>
163
164 <?php if ((bool) $attempt->is_manually_reviewed ){
165 ?>
166 <p class="attempt-review-at">
167 <span class="circle-arrow">&circlearrowright; </span>
168 <strong>
169 <?php _e('Manually reviewed at: ', 'tutor'); ?>
170 </strong>
171 <?php echo date_i18n(get_option('date_format'), strtotime($attempt->manually_reviewed_at)).' '.date_i18n(get_option('time_format'), strtotime($attempt->manually_reviewed_at)); ?>
172 </p>
173 <?php
174 } ?>
175
176 </div>
177
178 <?php
179 if (is_array($answers) && count($answers)){
180
181 ?>
182 <div class="quiz-attempt-answers-wrap">
183
184 <div class="attempt-answers-header">
185 <div class="attempt-header-quiz"><?php _e('Quiz Overview', 'tutor'); ?></div>
186 </div>
187
188 <table class="wp-list-table">
189 <tr>
190 <th><?php _e('Type', 'tutor'); ?></th>
191 <th><?php _e('No.', 'tutor'); ?></th>
192 <th><?php _e('Question', 'tutor'); ?></th>
193 <th><?php _e('Given Answers', 'tutor'); ?></th>
194 <th><?php _e('Correct/Incorrect', 'tutor'); ?></th>
195 <th><?php _e('Manual Review', 'tutor'); ?></th>
196 </tr>
197 <?php
198 $answer_i = 0;
199 foreach ($answers as $answer){
200 $answer_i++;
201 $question_type = tutor_utils()->get_question_types($answer->question_type);
202 ?>
203 <tr>
204 <td><?php echo $question_type['icon']; ?></td>
205 <td><?php echo $answer_i; ?></td>
206 <td><?php echo stripslashes($answer->question_title); ?></td>
207 <td>
208 <?php
209 if ($answer->question_type === 'true_false' || $answer->question_type === 'single_choice' ){
210 $get_answers = tutor_utils()->get_answer_by_id($answer->given_answer);
211 $answer_titles = wp_list_pluck($get_answers, 'answer_title');
212 $answer_titles = array_map('stripslashes', $answer_titles);
213 echo '<p>'.implode('</p><p>', $answer_titles).'</p>';
214 }elseif ($answer->question_type === 'multiple_choice'){
215 $get_answers = tutor_utils()->get_answer_by_id(maybe_unserialize($answer->given_answer));
216 $answer_titles = wp_list_pluck($get_answers, 'answer_title');
217 $answer_titles = array_map('stripslashes', $answer_titles);
218 echo '<p>'.implode('</p><p>', $answer_titles).'</p>';
219 }elseif ($answer->question_type === 'fill_in_the_blank'){
220 $answer_titles = maybe_unserialize($answer->given_answer);
221 $get_db_answers_by_question = tutor_utils()->get_answers_by_quiz_question($answer->question_id);
222 foreach ($get_db_answers_by_question as $db_answer);
223 $count_dash_fields = substr_count($db_answer->answer_title, '{dash}');
224 if ($count_dash_fields){
225 $dash_string = array();
226 $input_data = array();
227 for($i=0; $i<$count_dash_fields; $i++){
228 //$dash_string[] = '{dash}';
229 $input_data[] = isset($answer_titles[$i]) ? "<span class='filled_dash_unser'>{$answer_titles[$i]}</span>" : "______";
230 }
231 $answer_title = $db_answer->answer_title;
232 foreach($input_data as $replace){
233 $answer_title = preg_replace('/{dash}/i', $replace, $answer_title, 1);
234 }
235 echo str_replace('{dash}', '_____', $answer_title);
236 }
237
238 }elseif ($answer->question_type === 'open_ended' || $answer->question_type === 'short_answer'){
239
240 if ($answer->given_answer){
241 echo wpautop(stripslashes($answer->given_answer));
242 }
243
244 }elseif ($answer->question_type === 'ordering'){
245
246 $ordering_ids = maybe_unserialize($answer->given_answer);
247 foreach ($ordering_ids as $ordering_id){
248 $get_answers = tutor_utils()->get_answer_by_id($ordering_id);
249 $answer_titles = wp_list_pluck($get_answers, 'answer_title');
250 $answer_titles = array_map('stripslashes', $answer_titles);
251 echo '<p>'.implode('</p><p>', $answer_titles).'</p>';
252 }
253
254 }elseif ($answer->question_type === 'matching'){
255
256 $ordering_ids = maybe_unserialize($answer->given_answer);
257 $original_saved_answers = tutor_utils()->get_answers_by_quiz_question($answer->question_id);
258
259 foreach ($original_saved_answers as $key => $original_saved_answer){
260 $provided_answer_order_id = isset($ordering_ids[$key]) ? $ordering_ids[$key] : 0;
261 $provided_answer_order = tutor_utils()->get_answer_by_id($provided_answer_order_id);
262 if(tutils()->count($provided_answer_order)){
263 foreach ($provided_answer_order as $provided_answer_order);
264 echo $original_saved_answer->answer_title ." - {$provided_answer_order->answer_two_gap_match} <br />";
265 }
266 }
267
268 }elseif ($answer->question_type === 'image_matching'){
269
270 $ordering_ids = maybe_unserialize($answer->given_answer);
271 $original_saved_answers = tutor_utils()->get_answers_by_quiz_question($answer->question_id);
272
273 echo '<div class="answer-image-matched-wrap">';
274 foreach ($original_saved_answers as $key => $original_saved_answer){
275 $provided_answer_order_id = isset($ordering_ids[$key]) ? $ordering_ids[$key] : 0;
276 $provided_answer_order = tutor_utils()->get_answer_by_id($provided_answer_order_id);
277 foreach ($provided_answer_order as $provided_answer_order);
278 ?>
279 <div class="image-matching-item">
280 <p class="dragged-img-rap"><img src="<?php echo wp_get_attachment_image_url( $original_saved_answer->image_id); ?>" /> </p>
281 <p class="dragged-caption"><?php echo $provided_answer_order->answer_title; ?></p>
282 </div>
283 <?php
284 }
285 echo '</div>';
286 }elseif ($answer->question_type === 'image_answering'){
287
288 $ordering_ids = maybe_unserialize($answer->given_answer);
289
290 echo '<div class="answer-image-matched-wrap">';
291 foreach ($ordering_ids as $answer_id => $image_answer){
292 $db_answers = tutor_utils()->get_answer_by_id($answer_id);
293 foreach ($db_answers as $db_answer);
294 ?>
295 <div class="image-matching-item">
296 <p class="dragged-img-rap"><img src="<?php echo wp_get_attachment_image_url( $db_answer->image_id); ?>" /> </p>
297 <p class="dragged-caption"><?php echo $image_answer; ?></p>
298 </div>
299 <?php
300 }
301 echo '</div>';
302 }
303
304 ?>
305 </td>
306
307 <td>
308 <?php
309
310 if ( $answer->is_correct ) {
311 echo '<span class="quiz-correct-answer-text"><i class="tutor-icon-mark"></i> '.__('Correct', 'tutor').'</span>';
312 }
313 else {
314 if ($answer->question_type === 'open_ended' || $answer->question_type === 'short_answer')
315 {
316
317 //if ( (bool) $attempt->is_manually_reviewed && (!isset( $answer->is_correct ) || $answer->is_correct == 0 )) {
318 if($answer->is_correct==NULL)
319 {
320 echo '<p style="color: #878A8F;"><span style="color: #ff282a;">&ast;</span> '.__('Review Required', 'tutor').'</p>';
321 }
322 else if ( $answer->is_correct == 0 ) {
323
324 echo '<span class="tutor-status-blocked-context"><i class="tutor-icon-line-cross"></i> '.__('Incorrect', 'tutor').'</span>';
325 }
326 else {
327 echo '<span class="quiz-correct-answer-text"><i class="tutor-icon-mark"></i> '.__('Correct', 'tutor').'</span>';
328 }
329 }
330 else {
331 echo '<span class="quiz-incorrect-answer-text"><i class="tutor-icon-line-cross"></i> '.__('Incorrect', 'tutor').'</span>';
332 }
333 }
334 ?>
335 </td>
336
337 <td style="white-space: nowrap">
338 <a href="<?php echo admin_url("admin.php?action=review_quiz_answer&attempt_id={$attempt_id}&attempt_answer_id={$answer->attempt_answer_id}&mark_as=correct"); ?>" title="<?php _e('Mark as correct', 'tutor'); ?>" class="attempt-mark-correct-btn quiz-manual-review-action"><i class="tutor-icon-mark"></i> </a>
339 <a href="<?php echo admin_url("admin.php?action=review_quiz_answer&attempt_id={$attempt_id}&attempt_answer_id={$answer->attempt_answer_id}&mark_as=incorrect"); ?>" title="<?php _e('Mark as In correct', 'tutor'); ?>" class="attempt-mark-incorrect-btn quiz-manual-review-action"><i class="tutor-icon-line-cross"></i></a>
340 </td>
341 </tr>
342 <?php
343 }
344 ?>
345 </table>
346 </div>
347
348 <?php
349 }
350 ?>
351 </div>
352
353
354
355 <div class="quiz-attempt-answers-wrap">
356 <div class="attempt-answers-header">
357 <div class="attempt-header-quiz"><?php _e('Instructor Feedback', 'tutor'); ?></div>
358 </div>
359 <div class="tutor-instructor-feedback-wrap">
360 <textarea class="tutor-instructor-feedback-content" style="width:100%; height: 100px;"><?php echo get_post_meta($attempt_id, 'instructor_feedback', true); ?></textarea>
361 <a class="tutor-button tutor-button-primary tutor-instructor-feedback" data-attemptid="<?php echo $attempt_id; ?>"><?php _e('Update', 'tutor'); ?></a>
362 </div>
363 </div>
364