From f18680c020e1b88db48b2529ebff9d0d3f1fbef3 Mon Sep 17 00:00:00 2001 From: Skylar Ittner Date: Tue, 13 Jun 2017 02:15:41 -0600 Subject: [PATCH] Add (much) better text questions. --- api.php | 31 +++++-- database.mwb | Bin 8888 -> 13511 bytes database.sql | 164 ++++++++++++++++++++++++++++++++++++-- db_upgrade/0.3_to_0.4.sql | 164 ++++++++++++++++++++++++++++++++++++++ scrapetexts.php | 33 ++++++++ 5 files changed, 379 insertions(+), 13 deletions(-) create mode 100644 db_upgrade/0.3_to_0.4.sql create mode 100644 scrapetexts.php diff --git a/api.php b/api.php index 0ca6505..09cbdaf 100644 --- a/api.php +++ b/api.php @@ -18,32 +18,47 @@ switch ($VARS['action']) { // generate unique session ID that has an essentially zero chance of being a duplicate. // Contains a hash of a secure random number, a hash of the user's IP, and 23 uniqid() characters. $skey = uniqid(substr(hash("md5", mt_rand()), 3, 5) . hash("md5", getUserIP()), true); - $answers = $database->select('answers', ['aid', 'aname']); + + // Image problem + // + // Get five random options + $answer_count = $database->count('answers'); + $answers = $database->select('answers', ['aid', 'aname'], ["LIMIT" => [mt_rand(0, $answer_count - 6), 5]]); shuffle($answers); - $answers = array_slice($answers, 0, 5); - //var_dump($answers); + // Pick a correct one at random $correct_answer = $answers[mt_rand(0, count($answers) - 1)]; + // Scramble the answer names so the client doesn't know the real answers. $scrambled = ["real" => [], "fake" => []]; foreach ($answers as $a) { $scrambled["real"][] = $a['aid']; $scrambled["fake"][] = substr(hash("md5", mt_rand()), 0, 20); } - $database->insert("sessions", ["skey" => $skey, "aid" => $correct_answer['aid'], "expired" => 0, "#timestamp" => "NOW()", "ipaddr" => getUserIP()]); + + // Text problem + // + // Get random question + $access_count = $database->count('access_questions'); + $access_question = $database->select('access_questions', ['acqid', 'acqtext'], ["LIMIT" => [mt_rand(0, $access_count - 1), 1]])[0]; + + // Save the session data + $database->insert("sessions", ["skey" => $skey, "aid" => $correct_answer['aid'], "acqid" => $access_question['acqid'], "expired" => 0, "#timestamp" => "NOW()", "ipaddr" => getUserIP()]); $sid = $database->id(); + // Save the answer data $scrambled_insert = []; for ($i = 0; $i < count($scrambled['real']); $i++) { $scrambled_insert[] = ["sid" => $sid, "aid" => $scrambled['real'][$i], "acode" => $scrambled['fake'][$i]]; } $database->insert("scrambled_answers", $scrambled_insert); + + // Vary question wording a little $questions = ["Please click on the [].", "Click the [].", "Find the []."]; - $accessible_questions = ["Please type [] here.", "Enter [] into the box.", "Type []."]; shuffle($questions); - shuffle($accessible_questions); + $resp = [ "session" => $skey, "id_prefix" => substr(hash("md5", mt_rand()), 3, 5), "question_i" => str_replace("[]", $correct_answer['aname'], $questions[0]), - "question_a" => str_replace("[]", $correct_answer['aname'], $accessible_questions[0]), + "question_a" => $access_question['acqtext'], "answers" => $scrambled["fake"] ]; exit(json_encode($resp)); @@ -99,7 +114,7 @@ switch ($VARS['action']) { if ($database->has("scrambled_answers", ["AND" => ["sid" => $sid, "acode" => $VARS['answer_id']]])) { // Image maybe correct $image = true; - } else if ($database->has("sessions", ["[>]answers" => ["aid" => "aid"]], ["AND" => ["sid" => $sid, "aname" => $VARS['answer_id']]])) { + } else if ($database->has("sessions", ["[>]access_answers" => ["acqid" => "acqid"]], ["AND" => ["sid" => $sid, "OR" => ["acatext" => $VARS['answer_id'], "acahash" => hash('md5', $VARS['answer_id'])]]])) { // Accessible text correct $image = false; } else { diff --git a/database.mwb b/database.mwb index 375c8da401093548ba28ed8b57598bbe660abffa..0d2a2f21b3ff7d7b34ad7a1e46636d6715f9a597 100644 GIT binary patch literal 13511 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 delta 8779 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'access_questions', ["acqtext" => $data['q']]); + $id = $database->id(); + foreach ($data['a'] as $a) { + $database->insert('access_answers', ["acqid" => $id, "acahash" => $a]); + } + echo "."; + ob_flush(); + sleep(1); +} +echo "\ndone\n";