bzr branch
http://gegoxaren.bato24.eu/bzr/lenasys/0.1
1
by Henrik G.
First seed of Lenasys ... Needs to be Organized Further |
1 |
<?php
|
2 |
//// Returns a quiz variant including quiz data (If the student is registered for the course and the quiz is open)
|
|
3 |
//// If no quiz variant already assigned to the student a variant will be randomly selected and assigned
|
|
4 |
//// Parameters: (POST) login, courseName, courseOccasion, quizNr
|
|
4.10.1
by Daniel Johansson
Uppdaterat DuggaSys till att följa kodstandard utseendemässigt. Namnkonventioner kvar. |
5 |
//// Returns: quizNr
|
6 |
//// quizCourseName
|
|
7 |
//// quizData
|
|
8 |
//// quizObjectIDs
|
|
1
by Henrik G.
First seed of Lenasys ... Needs to be Organized Further |
9 |
|
10 |
session_start(); |
|
11 |
//Check if the sent login name is the same as the one stored in the session
|
|
4.10.1
by Daniel Johansson
Uppdaterat DuggaSys till att följa kodstandard utseendemässigt. Namnkonventioner kvar. |
12 |
if($_POST['loginName']==$_SESSION['loginName'] && $_POST['courseName']==$_SESSION['courseName'] && $_POST['quizNr']==$_SESSION['quizNr']) { |
1
by Henrik G.
First seed of Lenasys ... Needs to be Organized Further |
13 |
|
14 |
//Prevents browsers (IE) from caching the response
|
|
15 |
header('Cache-Control: no-cache, must-revalidate'); |
|
16 |
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); |
|
17 |
//header('Content-type: application/json');
|
|
18 |
header('Content-type: application/json; charset=utf-8'); |
|
9.5.1
by galaxyAbstractor
Moved shared js, css and php, updated all paths in DuggaSys. |
19 |
include "../../php/dbconnect.php"; |
1
by Henrik G.
First seed of Lenasys ... Needs to be Organized Further |
20 |
/* Function used to fetch quiz variant data */
|
4.10.1
by Daniel Johansson
Uppdaterat DuggaSys till att följa kodstandard utseendemässigt. Namnkonventioner kvar. |
21 |
function fetchQuizVariant($courseName, $quizNr, $quizVariantNr, $pdo) { |
1
by Henrik G.
First seed of Lenasys ... Needs to be Organized Further |
22 |
$queryString=" SELECT QuizVariant.quizNr, QuizVariant.quizCourseName, QuizVariant.quizObjectIDs, Quiz.quizData |
23 |
FROM QuizVariant, Quiz
|
|
24 |
WHERE QuizVariant.quizNr=Quiz.nr
|
|
25 |
AND QuizVariant.qVarNr=:VARNR
|
|
26 |
AND QuizVariant.quizCourseName=:CNAME
|
|
27 |
AND QuizVariant.quizNr=:QNR;)"; |
|
28 |
$stmt = $pdo->prepare($queryString); |
|
29 |
$stmt->bindParam(':CNAME', $courseName); |
|
30 |
$stmt->bindParam(':QNR', $quizNr); |
|
31 |
$stmt->bindParam(':VARNR', $quizVariantNr); |
|
32 |
$stmt->execute(); |
|
33 |
||
34 |
$quizVariantData=$stmt->fetch(PDO::FETCH_ASSOC); |
|
35 |
$quizVariantData['quizData']=htmlspecialchars_decode($quizVariantData['quizData']); |
|
36 |
return $quizVariantData; |
|
37 |
}
|
|
38 |
||
9.5.1
by galaxyAbstractor
Moved shared js, css and php, updated all paths in DuggaSys. |
39 |
|
1
by Henrik G.
First seed of Lenasys ... Needs to be Organized Further |
40 |
|
41 |
//Check if the student is a praticipant of the course
|
|
42 |
$queryString="SELECT COUNT(*) |
|
43 |
FROM Student, StudentCourseRegistration
|
|
44 |
WHERE Student.ssn=StudentCourseRegistration.studentSsn
|
|
45 |
AND Student.loginName=:LOGINN
|
|
46 |
AND Student.passw=:PASSW
|
|
47 |
AND courseName=:CNAME
|
|
48 |
AND courseOccasion=:COCCASION;"; |
|
49 |
$stmt = $pdo->prepare($queryString); |
|
50 |
$stmt->bindParam(':LOGINN', $_SESSION['loginName']); |
|
51 |
$stmt->bindParam(':PASSW', $_SESSION['password']); |
|
52 |
$stmt->bindParam(':CNAME', $_POST['courseName']); |
|
53 |
$stmt->bindParam(':COCCASION', $_POST['courseOccasion']); |
|
54 |
$stmt->execute(); |
|
55 |
||
4.10.1
by Daniel Johansson
Uppdaterat DuggaSys till att följa kodstandard utseendemässigt. Namnkonventioner kvar. |
56 |
if($stmt->fetchColumn()==1) { //Student is registered for the course - COUNT result read from the first column of the next unread row (i.e. the first row) |
1
by Henrik G.
First seed of Lenasys ... Needs to be Organized Further |
57 |
|
58 |
//Check if quiz is open
|
|
59 |
$queryString="SELECT Quiz.opening, Quiz.closing, Quiz.allowMultipleReplies |
|
60 |
FROM Quiz
|
|
61 |
WHERE Quiz.nr=:QNR
|
|
62 |
AND Quiz.courseName=:CNAME;"; |
|
63 |
$stmt = $pdo->prepare($queryString); |
|
64 |
$stmt->bindParam(':QNR', $_POST['quizNr']); |
|
65 |
$stmt->bindParam(':CNAME', $_POST['courseName']); |
|
66 |
$stmt->execute(); |
|
67 |
$quizData=$stmt->fetch(PDO::FETCH_ASSOC); |
|
4.10.1
by Daniel Johansson
Uppdaterat DuggaSys till att följa kodstandard utseendemässigt. Namnkonventioner kvar. |
68 |
if($quizData) { |
1
by Henrik G.
First seed of Lenasys ... Needs to be Organized Further |
69 |
$now = new DateTime(); |
70 |
$opening = new DateTime($quizData['opening']); |
|
71 |
$closing = new DateTime($quizData['closing']); |
|
72 |
||
73 |
if($now<$opening) { //Quiz is not open yet |
|
74 |
echo json_encode(array('Error' => 'Requested quiz is not open yet')); |
|
75 |
exit(); |
|
76 |
} else if($now>$closing) { //Quiz is closed |
|
77 |
echo json_encode(array('Error' => 'Requested quiz is closed')); |
|
78 |
exit(); |
|
79 |
} // else continue (Not the best coding practice...) |
|
80 |
||
81 |
} else { //Quiz does not exist |
|
82 |
echo json_encode(array('Error' => 'Requested quiz does not exist')); |
|
83 |
exit(); |
|
84 |
}
|
|
85 |
||
86 |
//Check if student already has been assigned a quiz variant
|
|
87 |
$queryString="SELECT AssignedQuizzes.qVarNr, AssignedQuizzes.answerHash, AssignedQuizzes.answer |
|
88 |
FROM AssignedQuizzes, Student
|
|
89 |
WHERE Student.ssn=AssignedQuizzes.ssn
|
|
90 |
AND Student.loginName=:LOGIN
|
|
91 |
AND AssignedQuizzes.quizNr=:QNR
|
|
92 |
AND AssignedQuizzes.quizCourseName=:CNAME
|
|
93 |
AND AssignedQuizzes.courseOccasion=:COCCASION;"; |
|
94 |
$stmt = $pdo->prepare($queryString); |
|
95 |
$stmt->bindParam(':LOGIN', $_POST['loginName']); |
|
96 |
$stmt->bindParam(':QNR', $_POST['quizNr']); |
|
97 |
$stmt->bindParam(':CNAME', $_POST['courseName']); |
|
98 |
$stmt->bindParam(':COCCASION', $_POST['courseOccasion']); |
|
99 |
$stmt->execute(); |
|
100 |
$result=$stmt->fetch(PDO::FETCH_ASSOC); |
|
101 |
if($result){ //If this quiz is assigned to the student |
|
102 |
//if($stmt->rowCount() >= 1){ //If this quiz is assigned to the student
|
|
4.10.1
by Daniel Johansson
Uppdaterat DuggaSys till att följa kodstandard utseendemässigt. Namnkonventioner kvar. |
103 |
|
104 |
if($result['answerHash']!=NULL && $quizData['allowMultipleReplies']!='1'){ //Student has already answered the quiz |
|
105 |
echo json_encode(array('Error' => 'This student has already answered this quiz', 'answerHash'=>$result['answerHash'])); |
|
106 |
exit(); |
|
107 |
} else { //Return quiz variant data assigned to student |
|
108 |
$quizVariant=$result['qVarNr']; |
|
109 |
$quizVariantData=fetchQuizVariant($_POST['courseName'], $_POST['quizNr'], $quizVariant, $pdo); |
|
110 |
$quizVariantData['storedAnswer']=$result['answer']; |
|
111 |
echo json_encode($quizVariantData); |
|
112 |
exit(); |
|
113 |
}
|
|
1
by Henrik G.
First seed of Lenasys ... Needs to be Organized Further |
114 |
} else { //This quiz has not been assigned to the student |
115 |
//Select random variant for requested quiz nr (for a particular course)
|
|
116 |
//$queryString="SELECT COUNT(QuizVariant.quizNr)
|
|
117 |
// FROM QuizVariant
|
|
118 |
// WHERE QuizVariant.quizNr=:QNR AND QuizVariant.quizCourseName=:CNAME;";
|
|
119 |
//SELECT COUNT(QuizVariant.quizNr) FROM QuizVariant WHERE QuizVariant.quizNr=1 AND QuizVariant.quizCourseName='DA133G Webbutveckling - datorgrafik G1N, 7,5hp (IKI)';
|
|
120 |
||
121 |
$queryString="SELECT QuizVariant.qVarNr |
|
122 |
FROM QuizVariant
|
|
123 |
WHERE QuizVariant.quizNr=:QNR
|
|
4.10.1
by Daniel Johansson
Uppdaterat DuggaSys till att följa kodstandard utseendemässigt. Namnkonventioner kvar. |
124 |
AND QuizVariant.quizCourseName=:CNAME;"; |
1
by Henrik G.
First seed of Lenasys ... Needs to be Organized Further |
125 |
|
126 |
$stmt = $pdo->prepare($queryString); |
|
127 |
$stmt->bindParam(':QNR', $_POST['quizNr']); |
|
128 |
$stmt->bindParam(':CNAME', $_POST['courseName']); |
|
129 |
$stmt->execute(); |
|
130 |
$quizVariants=$stmt->fetchAll(PDO::FETCH_NUM); |
|
4.10.1
by Daniel Johansson
Uppdaterat DuggaSys till att följa kodstandard utseendemässigt. Namnkonventioner kvar. |
131 |
if(count($quizVariants)>0) { |
1
by Henrik G.
First seed of Lenasys ... Needs to be Organized Further |
132 |
$randomIndex=rand(0,count($quizVariants)-1); |
133 |
$quizVariant=$quizVariants[$randomIndex][0]; |
|
134 |
$quizVariantData=fetchQuizVariant($_POST['courseName'], $_POST['quizNr'], $quizVariant, $pdo); |
|
4.10.1
by Daniel Johansson
Uppdaterat DuggaSys till att följa kodstandard utseendemässigt. Namnkonventioner kvar. |
135 |
|
1
by Henrik G.
First seed of Lenasys ... Needs to be Organized Further |
136 |
//Store selected variant
|
137 |
$insertString="INSERT INTO AssignedQuizzes(ssn, quizNr, qVarNr, quizCourseName, courseOccasion) |
|
138 |
VALUES((SELECT Student.ssn FROM Student WHERE Student.loginName=:LOGIN), :QNR, :QVARNR, :CNAME, :COCCASION);"; |
|
139 |
$insertStmt = $pdo->prepare($insertString); |
|
140 |
$insertStmt->bindParam(':LOGIN', $_SESSION['loginName']); |
|
141 |
$insertStmt->bindParam(':CNAME', $quizVariantData['quizCourseName']); |
|
142 |
$insertStmt->bindParam(':QNR', $quizVariantData['quizNr']); |
|
143 |
$insertStmt->bindParam(':QVARNR', $quizVariant); |
|
144 |
$insertStmt->bindParam(':COCCASION', $_SESSION['courseOccasion']); |
|
145 |
$insertStmt->execute(); |
|
4.10.1
by Daniel Johansson
Uppdaterat DuggaSys till att följa kodstandard utseendemässigt. Namnkonventioner kvar. |
146 |
|
1
by Henrik G.
First seed of Lenasys ... Needs to be Organized Further |
147 |
echo json_encode($quizVariantData); |
148 |
exit(); |
|
149 |
} else { |
|
150 |
echo json_encode(array('Error' => 'No quiz variants found')); |
|
151 |
exit(); |
|
152 |
}
|
|
153 |
}
|
|
154 |
||
155 |
} else { |
|
156 |
//TODO: Store login attempt in log-table
|
|
157 |
echo json_encode(array('Error' => 'Student not registered for this course')); |
|
158 |
exit(); |
|
159 |
}
|
|
160 |
} else { //Sent login name does not match the login name stored in the session |
|
161 |
echo json_encode(array('Error' => 'Sent login name does not match stored login name')); |
|
162 |
}
|
|
163 |
?>
|