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 / quiz / questions / matching.php
tutor / templates / learning-area / quiz / questions Last commit date
fill-in-the-blank.php 3 days ago image-answering.php 3 days ago matching.php 3 days ago multiple-choice.php 3 days ago open-ended.php 3 days ago ordering.php 3 days ago true-false.php 3 days ago
matching.php
129 lines
1 <?php
2 /**
3 * Matching
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\Quiz;
15 use Tutor\Components\SvgIcon;
16 use Tutor\Components\Constants\Color;
17 use Tutor\Components\Button;
18 use Tutor\Components\Constants\Size;
19 use Tutor\Components\Constants\Variant;
20
21 $answer_field_name = ( $question_field_name_base ?? '' ) . '[answers][]';
22 $register_rules = '';
23 $question = $question ?? array();
24 $draggable_answers = $question['question_randomized_answers'] ?? $question['question_answers'] ?? array();
25 $is_image_matching = isset( $question['question_settings']['is_image_matching'] ) && '1' === (string) $question['question_settings']['is_image_matching'];
26 if ( $answer_is_required ?? false ) {
27 $register_rules = ", { validate: (value) => Array.isArray(value) && value.every((item) => item) || '" . esc_js( $required_message ?? '' ) . "' }";
28 }
29 $register_attr = "register('{$answer_field_name}'{$register_rules})";
30
31 ?>
32
33 <div
34 x-data="tutorQuestionMatching({
35 questionId: 'question-<?php echo esc_attr( $question['question_id'] ); ?>',
36 onDrop: (values) => setValue('<?php echo esc_attr( $answer_field_name ); ?>', values, { shouldDirty: true }),
37 onClear: (values) => setValue('<?php echo esc_attr( $answer_field_name ); ?>', values, { shouldDirty: true }),
38 })"
39 class='tutor-flex tutor-flex-column tutor-gap-7 tutor-sm-gap-5'
40 >
41 <div
42 class="tutor-quiz-question-options"
43 data-image-matching="<?php echo esc_attr( $is_image_matching ? '1' : '0' ); ?>"
44 >
45 <?php if ( tutor_utils()->count( $question['question_answers'] ) ) : ?>
46 <?php foreach ( $question['question_answers'] as $answer ) : ?>
47 <div class="tutor-quiz-question-option">
48 <?php if ( $is_image_matching && ! empty( $answer['image_id'] ) ) : ?>
49 <img
50 src="<?php echo esc_url( wp_get_attachment_image_url( $answer['image_id'], 'full' ) ); ?>"
51 alt="<?php echo esc_attr( Quiz::sanitize_quiz_content( $answer['answer_title'] ?? '' ) ); ?>"
52 >
53 <?php else : ?>
54 <div data-title>
55 <div class="tutor-quiz-question-option-number">
56 <?php echo esc_html( $answer['answer_order'] ); ?>
57 </div>
58 <?php echo esc_html( Quiz::sanitize_quiz_content( $answer['answer_title'] ?? '' ) ); ?>
59 </div>
60 <?php endif; ?>
61 <div
62 class="tutor-quiz-question-option-drop-zone"
63 tabindex="0"
64 data-drop-placeholder-text="<?php echo esc_attr__( 'Drop here', 'tutor' ); ?>"
65 >
66 <input
67 class="tutor-hidden"
68 name="<?php echo esc_attr( $answer_field_name ); ?>"
69 x-bind="<?php echo esc_attr( $register_attr ); ?>"
70 >
71 <span data-drop-placeholder class="tutor-text-subdued">
72 <?php esc_html_e( 'Drop here', 'tutor' ); ?>
73 </span>
74 <?php
75 Button::make()
76 ->variant( Variant::GHOST )
77 ->size( Size::X_SMALL )
78 ->icon( Icon::CROSS )
79 ->icon_only()
80 ->attrs(
81 array(
82 'class' => 'tutor-force-hidden',
83 '@click.prevent' => 'clearDropZone',
84 'aria-label' => __( 'Clear matched option', 'tutor' ),
85 )
86 )
87 ->render();
88 ?>
89 </div>
90 </div>
91 <?php endforeach; ?>
92 <?php endif; ?>
93 </div>
94 <div
95 class="tutor-quiz-questions-error"
96 x-cloak
97 x-show="errors?.['<?php echo esc_attr( $answer_field_name ); ?>']?.message"
98 x-text="errors?.['<?php echo esc_attr( $answer_field_name ); ?>']?.message"
99 ></div>
100
101 <div class="tutor-quiz-question-draggable">
102 <div class="tutor-quiz-question-draggable-header">
103 <?php SvgIcon::make()->name( Icon::DRAG )->size( 20 )->color( Color::SECONDARY )->render(); ?>
104 <span class="tutor-text-small tutor-font-medium"><?php esc_html_e( 'Drag from here', 'tutor' ); ?></span>
105 </div>
106 <div class="tutor-quiz-question-options">
107 <?php foreach ( $draggable_answers as $answer ) : ?>
108 <?php
109 $draggable_title = $is_image_matching
110 ? Quiz::sanitize_quiz_content( $answer['answer_title'] ?? '' ) : Quiz::sanitize_quiz_content( $answer['answer_two_gap_match'] ?? '' );
111 ?>
112 <div
113 class="tutor-quiz-question-option"
114 data-option="draggable"
115 data-id="<?php echo esc_attr( $answer['answer_id'] ); ?>"
116 >
117 <div data-title>
118 <?php echo esc_html( $draggable_title ); ?>
119 </div>
120 <button type="button" data-grab-handle tabindex="-1" aria-label="<?php esc_attr_e( 'Drag matching option', 'tutor' ); ?>">
121 <?php SvgIcon::make()->name( Icon::GRAB_HANDLE )->size( 24 )->render(); ?>
122 </button>
123 </div>
124 <?php endforeach; ?>
125 </div>
126 </div>
127 </div>
128
129