PluginProbe ʕ •ᴥ•ʔ
Tutor LMS – eLearning and online course solution / 2.1.2
Tutor LMS – eLearning and online course solution v2.1.2
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 / restapi / REST_Quiz.php
tutor / restapi Last commit date
REST_Author.php 5 years ago REST_Course.php 4 years ago REST_Course_Announcement.php 5 years ago REST_Lesson.php 5 years ago REST_Quiz.php 5 years ago REST_Rating.php 5 years ago REST_Response.php 5 years ago REST_Topic.php 5 years ago
REST_Quiz.php
211 lines
1 <?php
2 /*
3 @REST API for quiz
4 @author : themeum
5 */
6
7 namespace TUTOR;
8 use WP_REST_Request;
9
10 if(!defined ('ABSPATH'))
11 exit;
12
13 class REST_Quiz {
14
15 use REST_Response;
16
17 private $post_type = "tutor_quiz";
18 private $post_parent;
19 private $t_quiz_question = "tutor_quiz_questions";
20 private $t_quiz_ques_ans = "tutor_quiz_question_answers";
21 private $t_quiz_attempt = "tutor_quiz_attempts";
22 private $t_quiz_attempt_ans = "tutor_quiz_attempt_answers";
23
24 public function quiz_with_settings(WP_REST_Request $request) {
25 $this->post_parent = $request->get_param('id');
26
27 global $wpdb;
28
29 $table = $wpdb->prefix."posts";
30
31 $quizs = $wpdb->get_results(
32 $wpdb->prepare("SELECT ID, post_title, post_content, post_name FROM $table WHERE post_type = %s AND post_parent = %d", $this->post_type, $this->post_parent)
33 );
34
35 $data = [];
36
37 if (count($quizs)>0) {
38 foreach ($quizs as $quiz) {
39 $quiz->quiz_settings = get_post_meta($quiz->ID,'tutor_quiz_option',false);
40
41 array_push($data, $quiz);
42
43 $response = array(
44 'status_code'=> 'success',
45 'message'=> __("Quiz retrieved successfully",'tutor'),
46 'data'=> $data
47 );
48 }
49 return self::send($response);
50 }
51 $response = array(
52 'status_code'=> 'not_found',
53 'message'=> __("Quiz not found for given ID",'tutor'),
54 'data'=> $data
55 );
56 return self::send($response);
57 }
58
59 public function quiz_question_ans(WP_REST_Request $request) {
60 global $wpdb;
61
62 $this->post_parent = $request->get_param('id');
63
64
65 $q_t = $wpdb->prefix.$this->t_quiz_question;//question table
66
67 $q_a_t = $wpdb->prefix.$this->t_quiz_ques_ans;//question answer table
68
69 $quizs = $wpdb->get_results(
70 $wpdb->prepare("SELECT question_id,question_title, question_description, question_type, question_mark, question_settings FROM $q_t WHERE quiz_id = %d", $this->post_parent)
71 );
72 $data = [];
73
74 if (count($quizs)>0) {
75
76 //get question ans by question_id
77 foreach ($quizs as $quiz) {
78 //unserialized question settings
79 $quiz->question_settings = maybe_unserialize($quiz->question_settings);
80
81 //question options with correct ans
82 $options = $wpdb->get_results(
83 $wpdb->prepare("SELECT answer_title,is_correct FROM $q_a_t WHERE belongs_question_id = %d", $quiz->question_id)
84 );
85
86 //set question_answers as quiz property
87 $quiz->question_answers = $options;
88
89 array_push($data, $quiz);
90 }
91
92 $response = array(
93 'status_code'=> 'success',
94 'message'=> __('Question retrieved successfully','tutor'),
95 'data'=> $data
96 );
97
98 return self::send($response);
99 }
100
101 $response = array(
102 'status_code'=> 'not_found',
103 'message'=> __('Question not found for given ID','tutor'),
104 'data'=> []
105 );
106
107 return self::send($response);
108 }
109
110 public function quiz_attempt_details(WP_REST_Request $request) {
111 $quiz_id = $request->get_param('id');
112
113 global $wpdb;
114 $quiz_attempt = $wpdb->prefix.$this->t_quiz_attempt;
115
116 $attempts = $wpdb->get_results(
117 $wpdb->prepare("SELECT att.user_id,att.total_questions,att.total_answered_questions,att.total_marks,att.earned_marks,att.attempt_info,att.attempt_status,att.attempt_started_at,att.attempt_ended_at,att.is_manually_reviewed,att.manually_reviewed_at FROM $quiz_attempt att WHERE att.quiz_id = %d", $quiz_id)
118 );
119
120 if (count($attempts)>0) {
121 //unserialize each attempt info
122 foreach ($attempts as $key => $attempt) {
123 $attempt->attempt_info = maybe_unserialize($attempt->attempt_info);
124 //attach attempt ans
125 $answers = $this->get_quiz_attemp_ans($quiz_id);
126
127 if($answers !==false)
128 {
129 $attempt->attempts_answer = $answers;
130 }
131 else
132 {
133 $attempt->attempts_answer = [];
134 }
135
136 }
137
138 $response = array(
139 'status_code'=> 'success',
140 'message'=> __('Quiz attempts retrieved successfully','tutor'),
141 'data'=> $attempts
142 );
143
144 return self::send($response);
145 }
146 $response = array(
147 'status_code'=> 'not_found',
148 'message'=> __('Quiz attempts not found for given ID','tutor'),
149 'data'=> []
150 );
151
152 return self::send($response);
153 }
154
155 /*
156 *required quiz_id
157 *return attempts ans
158 */
159 protected function get_quiz_attemp_ans($quiz_id) {
160 global $wpdb;
161 $quiz_attempt_ans = $wpdb->prefix.$this->t_quiz_attempt_ans;
162 $quiz_question = $wpdb->prefix.$this->t_quiz_question;
163 //get attempt answers
164 $answers = $wpdb->get_results(
165 $wpdb->prepare("SELECT q.question_title,att_ans.given_answer,att_ans.question_mark,att_ans.achieved_mark,att_ans.minus_mark,att_ans.is_correct FROM $quiz_attempt_ans as att_ans JOIN $quiz_question q ON q.question_id = att_ans.question_id WHERE att_ans.quiz_id = %d",$quiz_id)
166 );
167
168 if (count($answers)>0) {
169 //unserialize each given answer
170 foreach ($answers as $key => $answer) {
171 $answer->given_answer = maybe_unserialize($answer->given_answer);
172
173 if(is_numeric($answer->given_answer) || is_array($answer->given_answer))
174 {
175 $ids = $answer->given_answer;
176 $ans_title = $this->answer_titles_by_id($ids);
177 $answer->given_answer = $ans_title;
178 }
179 }
180
181 return $answers;
182 }
183 return false;
184 }
185
186 /*
187 *require ids (1,2,3)
188 *return results containing answer title
189 */
190 protected function answer_titles_by_id($id) {
191 global $wpdb;
192 $table = $wpdb->prefix.$this->t_quiz_ques_ans;
193
194 if(is_array($id)) {
195 $string = implode(',', $id);
196 $array=array_map('intval', explode(',', $string));
197 $array = implode("','",$array);
198
199 $results = $wpdb->get_results(
200 "SELECT answer_title FROM $table WHERE answer_id IN ('".$array."')"
201 );
202 } else {
203 $results = $wpdb->get_results(
204 "SELECT answer_title FROM $table WHERE answer_id = {$id}"
205 );
206 }
207
208 return $results;
209 }
210 }
211