index.php

1 lines ASCII Unix (LF)
1
<?php
error_reporting(-1);              // Report all type of errors
ini_set('display_errors', 1);     // Display all errors
ini_set('output_buffering', 0);   // Do not buffer outputs, write directly

date_default_timezone_set("UTC");



/**
 * Check that database exists and open it
 */
if (!is_writable(__DIR__)) {
    echo "<p>You must make this directory writable. Then click <a href='?init'>this link to generate the database tables</a>.</p>";
    exit;
}


$db = new PDO("sqlite:db.sqlite");

/**
 * Create table
 */
if (isset($_GET['init'])) {
    $sql = "
create table if not exists lab
(
    int id primary key,
    gen_key string key,
    acronym string,
    course string,
    lab string,
    created datetime
)
";
    $stmt = $db->prepare($sql);
    $stmt->execute();
}



/**
 * Generate a lab
 */
$action     = isset($_GET['action']) ? $_GET['action'] : null;
$acronym    = isset($_GET['acronym']) ? $_GET['acronym'] : null;
$course     = isset($_GET['course']) ? $_GET['course'] : null;
$lab        = isset($_GET['lab']) ? $_GET['lab'] : null;
$created    = date('Y-m-d H:i:s');
$gen_key    = md5($acronym . $course . $lab . $created);

$generate = null;

if (isset($_GET['doGenerate'])) {

    // Check if key already exists, then use it
    $sql = "
    select * from lab
    where 
        acronym = ? AND 
        course = ? AND
        lab = ?
    ";
    $stmt = $db->prepare($sql);
    $stmt->execute([$acronym, $course, $lab]);
    $res = $stmt->fetch(PDO::FETCH_OBJ);

    // Create new key
    if (empty($res)) {
        $sql = "
    insert into lab
    (acronym, course, lab, created, gen_key)
    values 
    (?, ?, ?, ?, ?)
    ";
        $stmt = $db->prepare($sql);
        $stmt->execute([$acronym, $course, $lab, $created, $gen_key]);
    } else {
        $gen_key = $res->gen_key;
    }

    $generate =<<<EOD
<p>
<a href="lab.php?lab&key=$gen_key">Lab</a> | 
<a href="lab.php?lab&answers&key=$gen_key">Lab with answers</a> | 
<a href="lab.php?answers&key=$gen_key">Answers</a> | 
<a href="lab.php?answer-html&key=$gen_key">Answer-html</a> | 
<a href="lab.php?answer-js&key=$gen_key">Answer-js</a> | 
<a href="lab.php?answer-py&key=$gen_key">Answer-py</a> | 
<a href="lab.php?answer-json&key=$gen_key">Answer-json</a> | 
<a href="lab.php?answer-py-assert&key=$gen_key">Answer-py-assert</a> | 
</p>
EOD;

    if ($action == "only-key") {
        die($gen_key);
    }
}





?><!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Lab generation</title>
<link rel="stylesheet" href="style/style.css">
<style>
<?=file_get_contents("style/style.css")?>
</style>
</head>
<body>


<h1>Lab utility</h1>

<p><a href="?">Clear</a></p>



<h2>Generate a lab</h2>

<?=$generate?>


<form>

<p>
    <label>Course:</br>
    <select name="course">
        <option value="javascript1">javascript1</option>
        <option value="python">python</option>
    </select></label>
</p>

<p>
    <label>Lab:</br>
    <select name="lab">
        <option value="lab1">Lab 1</option>
        <option value="lab2">Lab 2</option>
        <option value="lab3">Lab 3</option>
        <option value="lab4">Lab 4</option>
        <option value="lab5">Lab 5</option>
        <option value="labtest">Lab Test</option>
    </select></label>
</p>

<p>
    <label>Acronym:<br>
        <input type="text" name="acronym" placeholder="Enter acronym">
    </label>
</p>

<p>
    <input type="submit" name="doGenerate" value="Submit">
</p>

</form>



<h2>Get details for an existing lab</h2>

<?php

$key = isset($_GET['key']) ? $_GET['key'] : null;

if (isset($_GET['doKey'])) {
    $sql = "
select * from lab
where 
    gen_key = ?
";
    $stmt = $db->prepare($sql);
    $stmt->execute([$key]);
    $res = $stmt->fetch(PDO::FETCH_OBJ);

    if (!$res) {
        echo "<p><b>No such key!</b><p>";
    } else {

        $gen_key = $res->gen_key;

        echo <<<EOD
<p>
Acronym: {$res->acronym}</br>
Course: {$res->course}</br>
Lab: {$res->lab}</br>
Created: {$res->created}</br>
Key: {$res->gen_key}</br>
</p>
<p>
<a href="lab.php?lab&key=$gen_key">Lab</a> | 
<a href="lab.php?lab&answers&key=$gen_key">Lab with answers</a> | 
<a href="lab.php?answers&key=$gen_key">Answers</a> | 
<a href="lab.php?answer-html&key=$gen_key">Answer-html</a> | 
<a href="lab.php?answer-js&key=$gen_key">Answer-js</a> | 
<a href="lab.php?answer-py&key=$gen_key">Answer-py</a> | 
<a href="lab.php?answer-json&key=$gen_key">Answer-json</a> | 
<a href="lab.php?answer-py-assert&key=$gen_key">Answer-py-assert</a> | 
</p>
EOD;

    }
}

?>


<form>

<p>
    <label>Lab key:<br>
    <input type="text" name="key" value="<?=$key?>" placeholder="Enter lab key">
    </acronym>
</p>

<p>
    <input type="submit" name="doKey" value="Submit">
</p>

</form>



</body>
</html>