PluginProbe ʕ •ᴥ•ʔ
Tutor LMS – eLearning and online course solution / 1.6.0
Tutor LMS – eLearning and online course solution v1.6.0
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 / single / quiz / body.php
tutor / templates / single / quiz Last commit date
body.php 6 years ago content.php 6 years ago no_course_belongs.php 6 years ago previous-attempts.php 6 years ago single_quiz_contents.php 6 years ago top.php 6 years ago
body.php
425 lines
1 <?php
2 /**
3 * @package TutorLMS/Templates
4 * @version 1.5.7
5 */
6
7
8 global $post;
9 $currentPost = $post;
10
11 $quiz_id = get_the_ID();
12 $is_started_quiz = tutor_utils()->is_started_quiz();
13
14 $previous_attempts = tutor_utils()->quiz_attempts();
15 $attempted_count = is_array($previous_attempts) ? count($previous_attempts) : 0;
16 $questions_order = tutor_utils()->get_quiz_option($quiz_id, 'questions_order', 'rand');
17 $attempts_allowed = tutor_utils()->get_quiz_option($quiz_id, 'attempts_allowed', 0);
18 $passing_grade = tutor_utils()->get_quiz_option($quiz_id, 'passing_grade', 0);
19
20 $attempt_remaining = $attempts_allowed - $attempted_count;
21 ?>
22
23 <div id="tutor-quiz-body" class="tutor-quiz-body tutor-quiz-body-<?php the_ID(); ?>">
24 <?php
25
26 do_action('tutor_quiz/body/before', $quiz_id);
27
28 if ($is_started_quiz){
29 $quiz_attempt_info = tutor_utils()->quiz_attempt_info($is_started_quiz->attempt_info);
30 $quiz_attempt_info['date_time_now'] = date("Y-m-d H:i:s", tutor_time());
31
32 $time_limit_seconds = tutor_utils()->avalue_dot('time_limit.time_limit_seconds', $quiz_attempt_info);
33 $question_layout_view = tutor_utils()->avalue_dot('question_layout_view', $quiz_attempt_info);
34
35 $hide_quiz_time_display = (bool) tutor_utils()->avalue_dot('hide_quiz_time_display', $quiz_attempt_info);
36 $hide_question_number_overview = (bool) tutor_utils()->avalue_dot('hide_question_number_overview', $quiz_attempt_info);
37
38 $remaining_time_secs = (strtotime($is_started_quiz->attempt_started_at) + $time_limit_seconds ) - strtotime($quiz_attempt_info['date_time_now']);
39
40 $remaining_time_context = tutor_utils()->seconds_to_time_context($remaining_time_secs);
41 $questions = tutor_utils()->get_random_questions_by_quiz();
42 ?>
43
44 <div class="quiz-head-meta-info">
45 <?php
46 if ( ! $hide_quiz_time_display){
47 ?>
48 <div class="time-remaining">
49 <?php _e('Time remaining : '); ?> <span id="tutor-quiz-time-update" data-attempt-settings="<?php echo esc_attr(json_encode($is_started_quiz)) ?>" data-attempt-meta="<?php echo esc_attr(json_encode($quiz_attempt_info)) ?>"><?php echo $remaining_time_context; ?></span>
50 </div>
51 <?php } ?>
52 </div>
53
54 <?php
55 if (is_array($questions) && count($questions)) {
56 ?>
57 <div id="tutor-quiz-attempt-questions-wrap" data-question-layout-view="<?php echo $question_layout_view; ?>">
58
59 <?php
60 if ($question_layout_view === 'question_pagination'){
61 $question_i = 0;
62 ?>
63 <div class="tutor-quiz-questions-pagination">
64 <ul>
65 <?php
66 foreach ($questions as $question) {
67 $question_i++;
68 echo "<li><a href='#quiz-attempt-single-question-{$question->question_id}' class='tutor-quiz-question-paginate-item'>{$question_i}</a> </li>";
69 }
70 ?>
71 </ul>
72 </div>
73 <?php
74 }
75 ?>
76
77 <form id="tutor-answering-quiz" method="post">
78 <?php wp_nonce_field( tutor()->nonce_action, tutor()->nonce ); ?>
79 <input type="hidden" value="<?php echo $is_started_quiz->attempt_id; ?>" name="attempt_id"/>
80 <input type="hidden" value="tutor_answering_quiz_question" name="tutor_action"/>
81 <?php
82 $question_i = 0;
83 foreach ($questions as $question) {
84 $question_i++;
85 $question_settings = maybe_unserialize($question->question_settings);
86
87 $style_display = ($question_layout_view !== 'question_below_each_other' && $question_i == 1) ? 'block' : 'none';
88 if ($question_layout_view === 'question_below_each_other'){
89 $style_display = 'block';
90 }
91
92 $next_question = isset($questions[$question_i]) ? $questions[$question_i] : false;
93 ?>
94 <div id="quiz-attempt-single-question-<?php echo $question->question_id; ?>" class="quiz-attempt-single-question quiz-attempt-single-question-<?php echo $question_i; ?>" style="display: <?php echo $style_display; ?> ;" <?php echo $next_question ? "data-next-question-id='#quiz-attempt-single-question-{$next_question->question_id}'" : '' ; ?> >
95
96 <?php echo "<input type='hidden' name='attempt[{$is_started_quiz->attempt_id}][quiz_question_ids][]' value='{$question->question_id}' />";
97
98
99 $question_type = $question->question_type;
100 $answers = tutor_utils()->get_answers_by_quiz_question($question->question_id);
101 $show_question_mark = (bool) tutor_utils()->avalue_dot('show_question_mark', $question_settings);
102
103 echo '<h4 class="question-text">';
104 if ( ! $hide_question_number_overview){
105 echo $question_i. ". ";
106 }
107 echo stripslashes($question->question_title);
108 echo '</h4>';
109
110 if ($show_question_mark){
111 echo '<p class="question-marks"> '.__('Marks : ', 'tutor').$question->question_mark.' </p>';
112 }
113 ?>
114 <p class="question-description"><?php echo stripslashes($question->question_description); ?></p>
115
116 <div class="tutor-quiz-answers-wrap question-type-<?php echo $question_type; ?>">
117 <?php
118 if ( is_array($answers) && count($answers) ) {
119 foreach ($answers as $answer){
120 $answer_title = stripslashes($answer->answer_title);
121
122 if ( $question_type === 'true_false' || $question_type === 'single_choice' ) {
123 ?>
124 <label class="answer-view-<?php echo $answer->answer_view_format; ?>">
125 <div class="quiz-answer-input-body">
126 <?php
127 if ($answer->answer_view_format === 'image' || $answer->answer_view_format === 'text_image'){
128 ?>
129 <div class="quiz-answer-image-wrap">
130 <img src="<?php echo wp_get_attachment_image_url($answer->image_id, 'full') ?>" />
131 </div>
132 <?php
133 }
134 ?>
135 <div class="quiz-answer-input-bottom">
136 <div class="quiz-answer-input-field">
137 <input name="attempt[<?php echo $is_started_quiz->attempt_id; ?>][quiz_question][<?php echo $question->question_id; ?>]" type="radio" value="<?php echo $answer->answer_id; ?>">
138 <span>&nbsp;</span>
139 <?php
140 if ($answer->answer_view_format !== 'image'){ echo $answer_title;}
141 ?>
142 </div>
143 </div>
144 </div>
145 </label>
146 <?php
147 }elseif ($question_type === 'multiple_choice'){
148 ?>
149 <label class="answer-view-<?php echo $answer->answer_view_format; ?>">
150
151
152 <div class="quiz-answer-input-body">
153 <?php if ($answer->answer_view_format === 'image' || $answer->answer_view_format === 'text_image'){ ?>
154 <div class="quiz-answer-image-wrap">
155 <img src="<?php echo wp_get_attachment_image_url($answer->image_id, 'full') ?>" />
156 </div>
157 <?php } ?>
158
159 <div class="quiz-answer-input-bottom">
160 <div class="quiz-answer-input-field">
161 <input name="attempt[<?php echo $is_started_quiz->attempt_id; ?>][quiz_question][<?php echo $question->question_id; ?>][]" type="checkbox" value="<?php echo $answer->answer_id; ?>">
162 <span>&nbsp;</span>
163 <?php if ($answer->answer_view_format !== 'image'){
164 echo $answer_title;
165 } ?>
166 </div>
167 </div>
168 </div>
169 </label>
170 <?php
171 }
172 elseif ($question_type === 'fill_in_the_blank'){
173 ?>
174 <p class="fill-in-the-blank-field">
175 <?php
176 $count_dash_fields = substr_count($answer_title, '{dash}');
177 if ($count_dash_fields){
178
179 $dash_string = array();
180 $input_data = array();
181 for($i=1; $i <=$count_dash_fields; $i ++){
182 $dash_string[] = '{dash}';
183 $input_data[] = "<input type='text' name='attempt[{$is_started_quiz->attempt_id}][quiz_question][{$question->question_id}][]' class='fill-in-the-blank-text-input' />";
184 }
185 echo str_replace($dash_string, $input_data, $answer_title);
186 }
187 ?>
188 </p>
189 <?php
190 }
191 elseif ($question_type === 'ordering'){
192 ?>
193 <div class="question-type-ordering-item">
194 <div class="answer-title">
195 <?php
196 if ($answer->answer_view_format !== 'image'){
197 echo "<p class='tutor-quiz-answer-title'>{$answer_title}</p>";
198 }
199 if ($answer->answer_view_format === 'image' || $answer->answer_view_format === 'text_image'){
200 ?>
201 <div class="quiz-answer-image-wrap">
202 <img src="<?php echo wp_get_attachment_image_url($answer->image_id, 'full') ?>" />
203 </div>
204 <?php
205 }
206 ?>
207 </div>
208 <span class="answer-sorting-bar"><i class="tutor-icon-menu-2"></i> </span>
209 <input type="hidden" name="attempt[<?php echo $is_started_quiz->attempt_id; ?>][quiz_question][<?php echo $question->question_id; ?>][answers][]" value="<?php echo $answer->answer_id; ?>" >
210 </div>
211 <?php
212 }
213 }
214
215 /**
216 * Question type matchind and image matching
217 */
218 if ($question_type === 'matching' || $question_type === 'image_matching'){
219 ?>
220 <div class="quiz-answers-type-matching-wrap <?php echo 'answer-type-'.$question_type ?> ">
221 <div class="quiz-draggable-rand-answers">
222 <?php
223 $rand_answers = tutor_utils()->get_answers_by_quiz_question($question->question_id, true);
224 foreach ($rand_answers as $rand_answer){
225 ?>
226 <div class="quiz-draggable-answer-item">
227 <?php
228 if ($question_type === 'matching'){
229 echo "<span class='draggable-answer-title'>{$rand_answer->answer_two_gap_match}</span>";
230 }else{
231 echo "<span class='draggable-answer-title'>{$rand_answer->answer_title}</span>";
232 }
233 ?>
234 <span class="draggable-answer-icon"> <i class="tutor-icon-menu-2"></i> </span>
235 <input type="hidden" name="attempt[<?php echo $is_started_quiz->attempt_id; ?>][quiz_question][<?php echo $question->question_id; ?>][answers][]" value="<?php echo $rand_answer->answer_id; ?>" >
236 </div>
237 <?php
238 }
239 ?>
240 </div>
241
242 <div class="quiz-answer-matching-items-wrap">
243 <?php
244 foreach ($answers as $answer){
245 ?>
246 <div class="quiz-answer-item-matching">
247 <div class="quiz-answer-matching-title">
248 <?php
249 if ($question_type === 'matching') {
250
251 if ($answer->answer_view_format !== 'image'){
252 echo "<p class='tutor-quiz-answer-title'>{$answer->answer_title}</p>";
253 }
254 if ($answer->answer_view_format === 'image' || $answer->answer_view_format === 'text_image'){
255 ?>
256 <div class="quiz-answer-image-wrap">
257 <img src="<?php echo wp_get_attachment_image_url($answer->image_id, 'full') ?>" />
258 </div>
259 <?php
260 }
261 }elseif (intval($answer->image_id)){
262 echo '<img src="'.wp_get_attachment_image_url($answer->image_id, 'full').'" />';
263 }
264 ?>
265 </div>
266 <div class="quiz-answer-matching-droppable"></div>
267 </div>
268 <?php
269 }
270 ?>
271
272 </div>
273 </div>
274 <?php
275 }
276 }
277
278 /**
279 * For Open Ended Question Type
280 */
281 if ($question_type === 'open_ended' || $question_type === 'short_answer'){
282 ?>
283 <textarea class="question_type_<?php echo $question_type; ?>" name="attempt[<?php echo
284 $is_started_quiz->attempt_id; ?>][quiz_question][<?php echo $question->question_id; ?>]"></textarea>
285 <?php
286
287 if ($question_type === 'short_answer'){
288 $characters_limit = tutor_utils()->avalue_dot('short_answer_characters_limit', $quiz_attempt_info);
289 echo '<p class="answer_limit_desc"> characters remaining <span class="characters_remaining">'.$characters_limit.'</span> </p>';
290 }
291
292 }
293
294
295 if ($question_type === 'image_answering'){
296 ?>
297 <div class="quiz-image-answering-wrap">
298 <?php
299 foreach ($answers as $answer){
300 ?>
301 <div class="quiz-image-answering-answer">
302 <?php
303 if (intval($answer->image_id)){
304 ?>
305 <div class="quiz-image-answering-image-wrap">
306 <?php echo '<img src="'.wp_get_attachment_image_url($answer->image_id, 'full').'" />'; ?>
307 </div>
308
309 <div class="quiz-image-answering-input-field-wrap">
310 <input type="text" name="attempt[<?php echo $is_started_quiz->attempt_id; ?>][quiz_question][<?php echo $question->question_id; ?>][answer_id][<?php echo $answer->answer_id; ?>]" >
311 </div>
312 <?php
313 }
314 ?>
315 </div>
316 <?php
317 }
318 ?>
319 </div>
320 <?php
321 }
322 ?>
323 </div>
324
325 <?php
326 if ($question_layout_view !== 'question_below_each_other'){
327 if ($next_question){
328 ?>
329 <div class="quiz-answer-footer-bar">
330 <div class="quiz-footer-button">
331 <button type="button" value="quiz_answer_submit" class="tutor-button
332 tutor-success tutor-quiz-answer-next-btn"><?php _e( 'Answer &amp; Next Question', 'tutor' ); ?></button>
333 </div>
334 </div>
335 <?php
336 }else{
337 ?>
338 <div class="quiz-answer-footer-bar">
339 <div class="quiz-footer-button">
340 <button type="submit" name="quiz_answer_submit_btn" value="quiz_answer_submit" class="tutor-button tutor-success"><?php
341 _e( 'Submit Quiz', 'tutor' ); ?></button>
342 </div>
343 </div>
344 <?php
345 }
346 }
347 ?>
348 </div>
349
350 <?php
351 }
352
353 if ($question_layout_view === 'question_below_each_other'){
354 ?>
355 <div class="quiz-answer-footer-bar">
356 <div class="quiz-footer-button">
357 <button type="submit" name="quiz_answer_submit_btn" value="quiz_answer_submit" class="tutor-button
358 tutor-success"><?php _e( 'Submit Quiz', 'tutor' ); ?></button>
359 </div>
360 </div>
361 <?php } ?>
362
363 </form>
364 </div>
365
366 <?php
367
368 }else{
369 ?>
370 <div class="start-quiz-wrap">
371 <form id="tutor-finish-quiz" method="post">
372 <?php wp_nonce_field( tutor()->nonce_action, tutor()->nonce ); ?>
373
374 <input type="hidden" value="<?php echo $quiz_id; ?>" name="quiz_id"/>
375 <input type="hidden" value="tutor_finish_quiz_attempt" name="tutor_action"/>
376
377 <button type="submit" class="tutor-button" name="finish_quiz_btn" value="finish_quiz">
378 <i class="icon-floppy"></i> <?php _e( 'Finish', 'tutor' ); ?>
379 </button>
380 </form>
381 </div>
382
383 <?php
384 }
385 }else{
386 if ($attempt_remaining > 0 || $attempts_allowed == 0) {
387 do_action('tuotr_quiz/start_form/before', $quiz_id);
388 ?>
389 <div class="start-quiz-wrap">
390 <form id="tutor-start-quiz" method="post">
391 <?php wp_nonce_field( tutor()->nonce_action, tutor()->nonce ); ?>
392
393 <input type="hidden" value="<?php echo $quiz_id; ?>" name="quiz_id"/>
394 <input type="hidden" value="tutor_start_quiz" name="tutor_action"/>
395
396 <button type="submit" class="tutor-button" name="start_quiz_btn" value="start_quiz">
397 <i class="icon-hourglass-1"></i> <?php _e( 'Start Quiz', 'tutor' ); ?>
398 </button>
399 </form>
400 </div>
401
402 <?php
403 do_action('tuotr_quiz/start_form/after', $quiz_id);
404 }
405
406
407
408 if ($previous_attempts){
409 do_action('tutor_quiz/previous_attempts_html/before', $previous_attempts, $quiz_id);
410
411 ob_start();
412 tutor_load_template('single.quiz.previous-attempts', compact('previous_attempts', 'quiz_id'));
413 $previous_attempts_html = ob_get_clean();
414 echo apply_filters('tutor_quiz/previous_attempts_html', $previous_attempts_html, $previous_attempts, $quiz_id);
415
416 do_action('tutor_quiz/previous_attempts/after', $previous_attempts, $quiz_id);
417 }
418 }
419
420
421 tutor_next_previous_pagination();
422
423 do_action('tutor_quiz/body/after', $quiz_id);
424 ?>
425 </div>