95 lines
2.6 KiB
PHP
Executable File
95 lines
2.6 KiB
PHP
Executable File
<?php
|
|
|
|
|
|
namespace Venom\Views;
|
|
|
|
use RuntimeException;
|
|
use Venom\Core\DatabaseHandler;
|
|
use Venom\Models\DataModel;
|
|
|
|
class DataLoader
|
|
{
|
|
private static ?DataLoader $instance = null;
|
|
|
|
private function __construct()
|
|
{
|
|
}
|
|
|
|
public static function get(): DataLoader
|
|
{
|
|
if (self::$instance === null) {
|
|
self::$instance = new DataLoader();
|
|
}
|
|
return self::$instance;
|
|
}
|
|
|
|
public static function loadById(string $id): ?DataModel
|
|
{
|
|
if ($id === '') {
|
|
throw new RuntimeException('Try to Load empty ID from Database');
|
|
}
|
|
$data = DatabaseHandler::get()->getOne('SELECT identity, raw, generated, datatype FROM data WHERE identity = :id and isActive = 1 LIMIT 1', [
|
|
':id' => $id
|
|
]);
|
|
|
|
if ($data !== null) {
|
|
$model = new DataModel($data->identity, $data->datatype, $data->raw, $data->generated);
|
|
$model->setActive(true);
|
|
return $model;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public function updateData(DataModel $model): bool
|
|
{
|
|
if ($model->getId() === '') {
|
|
return $this->insertData($model);
|
|
}
|
|
return DatabaseHandler::get()->execute(
|
|
"UPDATE data SET identity=:id, isActive=:isActive, generated=:gen, raw=:raw, datatype=:dt WHERE identity=:id",
|
|
[
|
|
':id' => $model->getId(),
|
|
':isActive' => $model->getActive(),
|
|
':gen' => $model->getGenerated(),
|
|
':raw' => $model->getRaw(),
|
|
':dt' => $model->getType()
|
|
]
|
|
);
|
|
}
|
|
|
|
public function insertData(DataModel $model): bool
|
|
{
|
|
|
|
$this->validateModel($model);
|
|
return DatabaseHandler::get()->execute(
|
|
"INSERT INTO data (identity, isActive, generated, raw, datatype) VALUES (:id, :isActive, :gen, :raw, :dt)",
|
|
[
|
|
':id' => $model->getId(),
|
|
':isActive' => $model->getActive(),
|
|
':gen' => $model->getGenerated(),
|
|
':raw' => $model->getRaw(),
|
|
':dt' => $model->getType()
|
|
]
|
|
);
|
|
}
|
|
|
|
private function validateModel(DataModel $model): void
|
|
{
|
|
if ($model->getId() === '') {
|
|
$model->setId($this->generateID());
|
|
}
|
|
if (!$model->validate()) {
|
|
$id = htmlspecialchars($model->getId());
|
|
throw new RuntimeException("DataModel with id: \"$id\" is invalid!");
|
|
}
|
|
}
|
|
|
|
private function generateID(string $id = ''): string
|
|
{
|
|
if ($id === '') {
|
|
$id = bin2hex(random_bytes(16));
|
|
}
|
|
return $id;
|
|
}
|
|
}
|