functions.php

1 lines ASCII Unix (LF)
1
<?php
/**
 * Get details for key or die.
 *
 * @param String $key
 *
 * @return Object as resultset
 */
function getDetailsFromKeyOrDie($key)
{
    global $db;
    
    $sql = "
        select * from lab
        where 
        gen_key = ?
    ";
    
    $stmt = $db->prepare($sql);
    $stmt->execute([$key]);
    $res = $stmt->fetch(PDO::FETCH_OBJ);

    if (!$res) {
        die("No such key");
    }
    
    return $res;
}



/**
 * Init database and create table.
 *
 * @return void
 */
function init()
{
    global $db;

    $sql = "
create table if not exists lab
(
    int id primary key,
    gen_key text key,
    acronym text,
    course text,
    lab text,
    version text,
    created datetime
)
";
    $stmt = $db->prepare($sql);
    $stmt->execute();
}



/**
 * Create a new key, or use existing
 *
 * @return void
 */
function generateKey($acronym, $course, $lab, $created)
{
    global $db;

    // 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)) {
        $gen_key = md5($acronym . $course . $lab . $created);
        $sql = "
    insert into lab
    (acronym, course, lab, created, gen_key, version)
    values 
    (?, ?, ?, ?, ?, ?)
    ";
        $stmt = $db->prepare($sql);
        $stmt->execute([$acronym, $course, $lab, $created, $gen_key, VERSION]);
    } else {
        $gen_key = $res->gen_key;
    }
    
    return $gen_key;
}



/**
 * Read configuration for lab, or die
 *
 * @return void
 */
function getConfigurationFor($course, $lab)
{
    global $VALID_LABS;
    
    if ($lab == 'labtest') {
        return "config/labtest.php";
    } elseif (array_key_exists("$course/$lab", $VALID_LABS)) {
        return $VALID_LABS["$course/$lab"];
    }
    return false;
}



/**
 * Read configuration for lab, or die
 *
 * @return void
 */
function getLabType($course, $lab, $type)
{
    global $LAB_TYPE;
    
    if (!$type) {
        if ($course && $lab) {
            if (isset($LAB_TYPE[$course])) {
                if (is_array($LAB_TYPE[$course])) {
                    if (isset($LAB_TYPE[$course][$lab])) {
                        $type = $LAB_TYPE[$course][$lab];
                    }
                } else {
                    $type = $LAB_TYPE[$course];
                }
            }
        }
    }
    return $type;
}



/**
 * Format the basic values
 */
function formatType($value)
{
    if (is_bool($value)) {
        $value = $value ? "true" : "false";
    } elseif (is_int($value)) {
        ;
    } elseif (is_string($value)) {
        $value = "\"$value\"";
    }

    return $value;
}



/**
 * Format the answer for print in HTML
 */
function formatAnswerPrintable($answer)
{
    return json_encode($answer, JSON_PRETTY_PRINT);
}



/**
 * Format the answer for a JSON object
 */
function formatAnswerJSON($answer)
{
    if (defined("JSON_PRESERVE_ZERO_FRACTION")) {
        return json_encode($answer, JSON_PRETTY_PRINT | JSON_PRESERVE_ZERO_FRACTION);
    }
    return json_encode($answer, JSON_PRETTY_PRINT);
}