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