/lenasys/0.1

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/lenasys/0.1

« back to all changes in this revision

Viewing changes to trunk/DuggaSys/quizSystem/answerQuiz.php

  • Committer: Henrik G.
  • Date: 2013-03-26 23:22:55 UTC
  • Revision ID: henrik.gustavsson@his.se-20130326232255-ik6snyatlbkf3zs1
First seed of Lenasys ... Needs to be Organized Further

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<?php
 
2
////Handels quiz answers 
 
3
////Parameters: loginName, password, courseName, courseOccasion, quizNr, qVarNr, quizAnswer
 
4
////If autoCorrection==false the answer is stored without checking
 
5
////Else the quiz answer is checked for correctness, 
 
6
////    if incorrect the answer is not stored, else stored 
 
7
 
 
8
//Store answer and loginName+answer hash
 
9
function storeAnswer($loginName,$password,$courseName,$courseOccasion,$quizNr,$qVarNr,$quizAnswer,$grade,$gradeComment,$ip,$userAgent,$pdo){
 
10
        $updateQuery="UPDATE AssignedQuizzes 
 
11
                                  SET AssignedQuizzes.answer=:ANSWER, 
 
12
                                          AssignedQuizzes.answerHash=:ANSWERHASH, 
 
13
                                          AssignedQuizzes.grade=:GRADE, 
 
14
                                          AssignedQuizzes.gradeComment=:GRADECOMMENT, 
 
15
                                          AssignedQuizzes.answeredDateTime=:DATETIME,
 
16
                                          AssignedQuizzes.userAgent=:AGENT,
 
17
                                          AssignedQuizzes.userIP=:IP
 
18
                                  WHERE AssignedQuizzes.ssn=(SELECT Student.ssn FROM Student WHERE Student.loginName=:LOGIN AND Student.passw=:PASSW)
 
19
                                        AND AssignedQuizzes.quizNr=:QNR
 
20
                                        AND AssignedQuizzes.qVarNr=:QVNR
 
21
                                        AND AssignedQuizzes.quizCourseName=:CNAME
 
22
                                        AND AssignedQuizzes.courseOccasion=:COCCASION;";
 
23
        $updateStmt = $pdo->prepare($updateQuery);
 
24
        $updateStmt->bindParam(':LOGIN', $loginName);
 
25
        $updateStmt->bindParam(':CNAME', $courseName);
 
26
        $updateStmt->bindParam(':QNR', $quizNr);
 
27
        $updateStmt->bindParam(':QVNR', $qVarNr);
 
28
        $updateStmt->bindParam(':COCCASION', $courseOccasion);
 
29
        $updateStmt->bindParam(':ANSWER', $quizAnswer);
 
30
        $hashedAnswer= md5($loginName.$quizAnswer);
 
31
        $updateStmt->bindParam(':ANSWERHASH', $hashedAnswer);
 
32
        $updateStmt->bindParam(':GRADE', $grade);
 
33
        $updateStmt->bindParam(':GRADECOMMENT', $gradeComment);
 
34
        $now=new DateTime();
 
35
        $dateString=$now->format('Y-m-d H:i:s');
 
36
        //$updateStmt->bindParam(':DATETIME', new DateTime()->format('Y-m-d H:i:s')); // date and time formated to string e.g. "2012-08-23 08:59:00"
 
37
        $updateStmt->bindParam(':DATETIME', $dateString); // date and time formated to string e.g. "2012-08-23 08:59:00"
 
38
        $updateStmt->bindParam(':PASSW',$password);
 
39
        $updateStmt->bindParam(':IP',$ip);
 
40
        $updateStmt->bindParam(':AGENT',$userAgent);
 
41
        return $updateStmt->execute();
 
42
}
 
43
 
 
44
 
 
45
//Prevents browsers (IE) from caching the response
 
46
header('Cache-Control: no-cache, must-revalidate');
 
47
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
 
48
header('Content-type: application/json; charset=utf-8'); 
 
49
 
 
50
include "dbconnect.php";
 
51
 
 
52
//Check if the student is a praticipant of the course
 
53
$queryString="SELECT COUNT(*) 
 
54
               FROM Student, StudentCourseRegistration 
 
55
                           WHERE Student.ssn=StudentCourseRegistration.studentSsn
 
56
                           AND Student.loginName=:LOGIN
 
57
                           AND Student.passw=:PASSW
 
58
                           AND courseName=:CNAME 
 
59
                           AND courseOccasion=:COCCASION;";
 
60
$stmt = $pdo->prepare($queryString);
 
61
$stmt->bindParam(':LOGIN', $_POST['loginName']);
 
62
$stmt->bindParam(':PASSW', $_POST['password']);
 
63
$stmt->bindParam(':CNAME', $_POST['courseName']);
 
64
$stmt->bindParam(':COCCASION', $_POST['courseOccasion']);
 
65
$stmt->execute();
 
66
 
 
67
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) 
 
68
        //Check if quiz is open (and fetch auto correction setting)
 
69
        $queryString="SELECT Quiz.opening, Quiz.closing, Quiz.autoCorrected
 
70
                                   FROM Quiz
 
71
                                   WHERE Quiz.nr=:QNR
 
72
                                   AND Quiz.courseName=:CNAME;";
 
73
        $stmt = $pdo->prepare($queryString);
 
74
        $stmt->bindParam(':QNR', $_POST['quizNr']);
 
75
        $stmt->bindParam(':CNAME', $_POST['courseName']);
 
76
        $stmt->execute();
 
77
        $quizData=$stmt->fetch(PDO::FETCH_ASSOC);
 
78
        if($quizData){
 
79
                
 
80
                $now = new DateTime();
 
81
                $opening = new DateTime($quizData['opening']);
 
82
                $closing = new DateTime($quizData['closing']);
 
83
 
 
84
                if($now<$opening) { //Quiz is not open yet
 
85
                        echo json_encode(array('Error' => 'Requested quiz is not open yet'));
 
86
                        exit();
 
87
                } else if($now>$closing) { //Quiz is closed
 
88
                        echo json_encode(array('Error' => 'Requested quiz is closed'));
 
89
                        exit();
 
90
                } // else continue (Not the best coding practice...)
 
91
                
 
92
        } else { //Quiz does not exist
 
93
                echo json_encode(array('Error' => 'Requested quiz does not exist'));
 
94
                exit();
 
95
        }
 
96
        /*
 
97
                AssignedQuizzes(
 
98
    ssn CHAR(11), //YYMMDD-XXXX
 
99
    quizNr INTEGER,
 
100
    qVarNr INTEGER,
 
101
    quizCourseName VARCHAR(200),
 
102
        courseOccasion VARCHAR(25) NOT NULL,
 
103
    answerHash VARCHAR(255), //Hash of Student login name + answer 
 
104
    answer TEXT,
 
105
        grade VARCHAR(10),
 
106
        gradeComment TEXT,
 
107
        answeredDateTime TIMESTAMP,
 
108
    userAgent VARCHAR(1024),
 
109
    userIP VARCHAR(20), //$_SERVER['REMOTE_ADDR']
 
110
        PRIMARY KEY(ssn, qVarNr, quizNr, quizCourseName),
 
111
        */
 
112
        
 
113
        //Check if student already has answered the assigned quiz variant
 
114
        $queryString="SELECT AssignedQuizzes.answerHash 
 
115
                                  FROM AssignedQuizzes, Student
 
116
                                  WHERE Student.ssn=AssignedQuizzes.ssn
 
117
                                        AND AssignedQuizzes.quizNr=:QNR 
 
118
                                        AND AssignedQuizzes.qVarNr=:QVARNR 
 
119
                                        AND Student.loginName=:LOGIN
 
120
                                        AND AssignedQuizzes.quizCourseName=:CNAME
 
121
                                        AND AssignedQuizzes.courseOccasion=:COCCASION;";
 
122
        $stmt = $pdo->prepare($queryString);
 
123
        $stmt->bindParam(':QNR', $_POST['quizNr']);
 
124
        $stmt->bindParam(':QVARNR', $_POST['qVarNr']);
 
125
        $stmt->bindParam(':LOGIN', $_POST['loginName']);
 
126
        $stmt->bindParam(':CNAME', $_POST['courseName']);
 
127
        $stmt->bindParam(':COCCASION', $_POST['courseOccasion']);
 
128
        $stmt->execute();
 
129
        $result=$stmt->fetch(PDO::FETCH_ASSOC);
 
130
        if($result){ //If there is a quiz variant assigned to the student
 
131
                        if($result['answerHash']!=NULL){ //Student has already answered the quiz
 
132
                                echo json_encode(array('Error' => 'This quiz has already been answered', 'answerHash'=>$result['answerHash']));
 
133
                                exit();
 
134
                        } else { //check if autoCorrection
 
135
                        
 
136
                                if($quizData['autoCorrected']=='0'){ //Not auto corrected
 
137
                                        if(storeAnswer($_POST['loginName'],
 
138
                                                                   $_POST['password'],
 
139
                                                                   $_POST['courseName'],
 
140
                                                                   $_POST['courseOccasion'],
 
141
                                                                   $_POST['quizNr'],
 
142
                                                                   $_POST['qVarNr'],
 
143
                                                                   $_POST['quizAnswer'],
 
144
                                                                   "ungraded",
 
145
                                                                   "-",
 
146
                                                                   $_SERVER['REMOTE_ADDR'],
 
147
                                                                   $_SERVER['HTTP_USER_AGENT'],
 
148
                                                                   $pdo)){
 
149
                                        //Stored answer
 
150
                                                echo json_encode(array('Success' => 'true'));
 
151
                                        } else {
 
152
                                                //Failed to store answer
 
153
                                                echo json_encode(array('Success' => 'false'));
 
154
                                        }
 
155
                                        exit();
 
156
                                } else { //Is auto corrected - Check if the correct answer was given 
 
157
                                        /*QuizVariant(
 
158
                                         qVarNr INTEGER,
 
159
                                        quizNr INTEGER,
 
160
                                        quizCourseName VARCHAR(200),
 
161
                                        correctAnswer VARCHAR(255),
 
162
                                        quizObjectIDs TEXT,
 
163
                                        PRIMARY KEY(qVarNr, quizNr, quizCourseName),
 
164
                                        */
 
165
                                        $queryString = "SELECT QuizVariant.correctAnswer
 
166
                                                                        FROM QuizVariant
 
167
                                                                        WHERE QuizVariant.qVarNr=:QVNR
 
168
                                                                                AND QuizVariant.quizNr=:QNR
 
169
                                                                                AND QuizVariant.quizCourseName=:CNAME";
 
170
                                        $stmt = $pdo->prepare($queryString);
 
171
                                        $stmt->bindParam(':QNR', $_POST['quizNr']);
 
172
                                        $stmt->bindParam(':QVNR', $_POST['qVarNr']);
 
173
                                        $stmt->bindParam(':CNAME', $_POST['courseName']);
 
174
                                        $stmt->execute();
 
175
                                        $qVarData=$stmt->fetch(PDO::FETCH_ASSOC);
 
176
                                        $correctAnswer=$qVarData['correctAnswer'];
 
177
                                        if($_POST['quizAnswer']==$correctAnswer){ //Correct answer was given
 
178
                                                $hashedAnswer= md5($_POST['loginName'].$_POST['quizAnswer']);
 
179
                                                
 
180
                                                if(storeAnswer($_POST['loginName'],
 
181
                                                                   $_POST['password'],
 
182
                                                                   $_POST['courseName'],
 
183
                                                                   $_POST['courseOccasion'],
 
184
                                                                   $_POST['quizNr'],
 
185
                                                                   $_POST['qVarNr'],
 
186
                                                                   $_POST['quizAnswer'],
 
187
                                                                   "Correct",
 
188
                                                                   "Quiz was corrected automatically",
 
189
                                                                   $_SERVER['REMOTE_ADDR'],
 
190
                                                                   $_SERVER['HTTP_USER_AGENT'],
 
191
                                                                   $pdo)){
 
192
                                                        //Stored answer
 
193
                                                        echo json_encode(array('Success' => 'true', 'isCorrect' => 'true', 'hashedAnswer' => $hashedAnswer));
 
194
                                                } else {
 
195
                                                        //Failed to store answer
 
196
                                                        echo json_encode(array('Success' => 'false', 'isCorrect' => 'true', 'hashedAnswer' => $hashedAnswer));
 
197
                                                }
 
198
                                                exit();
 
199
                                        } else { //Answer is incorrect
 
200
                                                echo json_encode(array('isCorrect' => 'false'));
 
201
                                        }
 
202
                                        exit();
 
203
                                }
 
204
                        }
 
205
        } else {
 
206
                echo json_encode(array('Error' => 'This student has not been assigned the quiz'));
 
207
                exit();
 
208
        }
 
209
        
 
210
} else {
 
211
        echo json_encode(array('Error' => 'Student not registered for this course (or incorrect password was sent)'));
 
212
        exit();
 
213
}
 
214
 
 
215
?>
 
 
b'\\ No newline at end of file'