PluginProbe ʕ •ᴥ•ʔ
Tutor LMS – eLearning and online course solution / 4.0.3
Tutor LMS – eLearning and online course solution v4.0.3
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 / dashboard / quiz-attempts.php
tutor / templates / dashboard Last commit date
account 1 week ago components 3 weeks ago courses 3 weeks ago discussions 3 weeks ago elements 3 weeks ago instructor 3 weeks ago my-courses 1 year ago my-quiz-attempts 3 weeks ago quiz-attempts 3 weeks ago student 3 weeks ago wishlist 3 weeks ago announcements.php 3 weeks ago courses.php 3 weeks ago create-course.php 3 weeks ago dashboard.php 3 weeks ago discussions.php 3 weeks ago index.php 3 years ago logged-in.php 3 years ago my-courses.php 3 weeks ago my-quiz-attempts.php 3 weeks ago quiz-attempts.php 3 weeks ago registration.php 3 weeks ago wishlist.php 3 weeks ago
quiz-attempts.php
196 lines
1 <?php
2 /**
3 * Frontend Students Quiz Attempts
4 *
5 * @package Tutor\Templates
6 * @subpackage Dashboard
7 * @author Themeum <support@themeum.com>
8 * @link https://themeum.com
9 * @since 1.4.0
10 */
11
12 defined( 'ABSPATH' ) || exit;
13
14 use Tutor\Components\Button;
15 use Tutor\Components\ConfirmationModal;
16 use Tutor\Components\Constants\Positions;
17 use Tutor\Components\Constants\Size;
18 use Tutor\Components\Constants\Variant;
19 use Tutor\Components\CourseFilter;
20 use Tutor\Components\DateFilter;
21 use Tutor\Components\DropdownFilter;
22 use Tutor\Components\EmptyState;
23 use Tutor\Components\Pagination;
24 use Tutor\Components\SearchFilter;
25 use Tutor\Components\Sorting;
26 use TUTOR\Input;
27 use Tutor\Models\QuizModel;
28 use TUTOR\Quiz_Attempts_List;
29
30 if ( Input::has( 'attempt_id', Input::GET_REQUEST ) ) {
31 // Load single attempt details if ID provided.
32 include __DIR__ . '/quiz-attempts/quiz-reviews.php';
33 return;
34 }
35
36 $url = get_pagenum_link( 1, false );
37 $item_per_page = tutor_utils()->get_option( 'pagination_per_page' );
38 $current_page = max( 1, Input::get( 'current_page', 1, Input::TYPE_INT ) );
39 $offset = ( $current_page - 1 ) * $item_per_page;
40 $quiz_attempt_obj = new Quiz_Attempts_List( false );
41
42 // Filter params.
43 $course_id = Input::get( 'course-id', 0, Input::TYPE_INT );
44 $order_filter = Input::get( 'order', 'DESC' );
45 $start_date = Input::get( 'start_date', '' );
46 $end_date = Input::get( 'end_date', '' );
47 $result_filter = Input::get( 'result', '' );
48 $search_filter = Input::get( 'search', '' );
49
50 $quiz_attempts = QuizModel::get_quiz_attempts( $offset, $item_per_page, $search_filter, $course_id > 0 ? $course_id : '', $start_date, $end_date, $order_filter, $result_filter, false, true );
51 $quiz_attempts_list = QuizModel::format_quiz_attempts( $quiz_attempts, $result_filter );
52 $quiz_attempts_count = QuizModel::get_quiz_attempts( $offset, $item_per_page, $search_filter, $course_id > 0 ? $course_id : '', $start_date, $end_date, $order_filter, $result_filter, true, true );
53
54
55 $date_params_present = Input::has( 'start_date', Input::GET_REQUEST ) || Input::has( 'end_date', Input::GET_REQUEST );
56 if ( $date_params_present && $quiz_attempts_count <= $offset ) {
57 $offset = 0;
58 }
59
60
61 $nav_links = $quiz_attempt_obj->get_quiz_attempts_nav_data(
62 $quiz_attempts_count,
63 $url,
64 $result_filter,
65 $search_filter,
66 $course_id,
67 $start_date,
68 $end_date,
69 $order_filter,
70 array()
71 );
72
73 $hidden_inputs = array(
74 'order' => $order_filter,
75 'start_date' => $start_date,
76 'end_date' => $end_date,
77 'result' => $result_filter,
78 'course-id' => $course_id,
79 )
80
81 ?>
82
83 <div class="tutor-dashboard-quiz-attempts-wrapper" x-data="tutorQuizAttempts()">
84 <h4 class="tutor-quiz-attempts-mobile-heading tutor-h4 tutor-mb-5">
85 <?php esc_html_e( 'Quiz Attempts', 'tutor' ); ?>
86 </h4>
87 <div class="tutor-quiz-attempts tutor-instructor-quiz-attempts tutor-surface-l1 tutor-border tutor-rounded-2xl tutor-overflow-hidden">
88 <div class="tutor-quiz-attempts-filter">
89 <?php
90 CourseFilter::make()
91 ->size( Size::SMALL )
92 ->variant( Variant::PRIMARY_SOFT )
93 ->render();
94
95 DropdownFilter::make()
96 ->size( Size::SMALL )
97 ->options( $nav_links['options'] )
98 ->query_param( 'result' )
99 ->variant( Variant::OUTLINE )
100 ->position( Positions::BOTTOM_END )
101 ->render();
102 ?>
103 </div>
104 <div class="tutor-px-6 tutor-py-5 tutor-flex tutor-gap-3 tutor-justify-between tutor-border-b">
105 <?php
106 SearchFilter::make()
107 ->form_id( 'tutor-quiz-attempt-search-form' )
108 ->hidden_inputs( $hidden_inputs )
109 ->placeholder( __( 'Search quizzes...', 'tutor' ) )
110 ->size( Size::SMALL )
111 ->render();
112 ?>
113
114 <div class="tutor-flex tutor-gap-3">
115 <?php
116 $query_items = array( 'course-id', 'search', 'start_date', 'end_date', 'result', 'order' );
117 if ( Input::has_any( $query_items, Input::GET_REQUEST ) ) {
118 Button::make()
119 ->tag( 'a' )
120 ->size( Size::SMALL )
121 ->attr( 'href', tutor_utils()->tutor_dashboard_url( 'quiz-attempts' ) )
122 ->attr( 'class', 'tutor-text-brand' )
123 ->label( __( 'Clear all', 'tutor' ) )
124 ->variant( Variant::LINK )
125 ->render();
126 }
127
128 DateFilter::make()
129 ->type( DateFilter::TYPE_RANGE )
130 ->placement( Positions::BOTTOM_END )
131 ->hide_initial_label()
132 ->render();
133
134 Sorting::make()->size( Size::SMALL )->order( $order_filter )->render();
135 ?>
136 </div>
137 </div>
138 <?php if ( $quiz_attempts_count ) : ?>
139 <div class="tutor-quiz-attempts-header">
140 <div class="tutor-quiz-attempts-header-item"><?php esc_html_e( 'Quiz info', 'tutor' ); ?></div>
141 <div class="tutor-quiz-attempts-header-item"><?php esc_html_e( 'Marks', 'tutor' ); ?></div>
142 <div class="tutor-quiz-attempts-header-item"><?php esc_html_e( 'Time', 'tutor' ); ?></div>
143 <div class="tutor-quiz-attempts-header-item"><?php esc_html_e( 'Result', 'tutor' ); ?></div>
144 </div>
145 <div class="tutor-quiz-attempts-list">
146 <?php foreach ( $quiz_attempts_list as $quiz_attempt ) : ?>
147 <div class="tutor-quiz-attempts-item-wrapper">
148 <?php
149 tutor_load_template(
150 'dashboard.components.quiz-attempt-row',
151 array(
152 'attempt' => $quiz_attempt,
153 'quiz_title' => $quiz_attempt['quiz_title'],
154 'course_title' => $quiz_attempt['course_title'],
155 'course_id' => $quiz_attempt['course_id'],
156 'show_quiz_title' => true,
157 'show_course' => true,
158 'quiz_id' => $quiz_attempt['quiz_id'],
159 'attempts_count' => 1,
160 'attempt_id' => $quiz_attempt['attempt_id'] ?? 0,
161 'quiz_attempt_obj' => $quiz_attempt_obj,
162 )
163 );
164
165 ?>
166 </div>
167 <?php endforeach; ?>
168 <?php
169 Pagination::make()
170 ->current( $current_page )
171 ->total( $quiz_attempts_count )
172 ->limit( $item_per_page )
173 ->attr( 'class', 'tutor-p-6' )
174 ->render();
175 ?>
176 </div>
177 <?php else : ?>
178 <?php
179 EmptyState::make()
180 ->title( __( 'No Quiz Attempts Found', 'tutor' ) )
181 ->icon( tutor_utils()->get_themed_svg( 'images/illustrations/quiz-empty.svg' ) )
182 ->render();
183 ?>
184 <?php endif; ?>
185 </div>
186 <?php
187 ConfirmationModal::make()
188 ->id( 'tutor-quiz-attempt-delete-modal' )
189 ->title( __( 'Do You Want to Delete This?', 'tutor' ) )
190 ->message( __( 'Would you like to delete Quiz Attempt permanently? We suggest you proceed with caution.', 'tutor' ) )
191 ->confirm_handler( 'handleDeleteAttempt(payload?.attemptID)' )
192 ->mutation_state( 'deleteMutation' )
193 ->render();
194 ?>
195 </div>
196