VENOM: Hardcode WIP (versustunez)

This commit is contained in:
engineerTrooper 2020-12-22 18:07:13 +01:00
commit 32a78ed1b9
21 changed files with 285 additions and 158 deletions

View file

@ -3,18 +3,24 @@
namespace Venom\Admin;
use Modules\Meta\MetaDataModule;
use Modules\PageModule;
use Modules\RoleModule;
use Modules\SeoUrlModule;
use Modules\User\UserModule;
use Modules\VenomStatusModule;
class AdminModulesLoader
{
public static function getModules(): array
{
return [
'metaData' => \Modules\MetaDataModule::class,
'overview' => \Modules\OverviewModule::class,
'pages' => \Modules\PageModule::class,
'role' => \Modules\RoleModule::class,
'seoUrl' => \Modules\SeoUrlModule::class,
'users' => \Modules\UserModule::class,
'venomStatus' => \Modules\VenomStatusModule::class,
'metaData' => MetaDataModule::class,
'pages' => PageModule::class,
'role' => RoleModule::class,
'seoUrl' => SeoUrlModule::class,
'users' => UserModule::class,
'venomStatus' => VenomStatusModule::class,
];
}
}

View file

@ -71,4 +71,22 @@ class DatabaseHandler
$stmt = $this->db->prepare($query);
return $stmt->execute($args);
}
// Returns a Select like this: SELECT id, name, ... FROM table || do what you want
public static function createEasySelect(array $fields, string $table): string
{
return "SELECT " . implode(",", $fields) . " FROM " . $table;
}
public static function getUpdateString(array $data, string $table, string $where): array
{
$string = [];
$save = [];
foreach ($data as $key => $value) {
$k = ":" . strtolower($key);
$string[] = $key . "= " . $k;
$save[$k] = $value;
}
return ["UPDATE " . $table . " SET " . implode(",", $string) . " " . $where, $save];
}
}

View file

@ -8,6 +8,12 @@ use Venom\Venom;
interface Module
{
const NAME = "name";
const AUTHOR = "author";
const SECURE = "secure";
const ROUTE = "routes";
const DESC = "description";
public function register(Venom $venom): bool;
public function init(): void;

View file

@ -22,4 +22,16 @@ class AdminHelper
echo json_encode($response);
die();
}
public static function sendStatus(bool $isSuccess, string $message = "")
{
if ($message == "") {
$message = $isSuccess ? "Operation Success" : "Operation failed";
}
echo json_encode([
"status" => $isSuccess ? 'success' : 'failed',
"message" => $message
]);
die();
}
}

View file

@ -4,6 +4,7 @@
namespace Venom\Helper;
use http\Exception\RuntimeException;
use Venom\Core\ArgumentHandler;
class ErrorHandler

View file

@ -9,23 +9,15 @@ class DataModel
public const TYPE_CONTENT = 'content';
public const TYPE_FORM = 'form';
public string $id;
public string $raw;
public string $generated;
public string $type;
public int $active = 1;
public function __construct(
string $id,
string $type = self::TYPE_CONTENT,
string $raw = '',
string $generated = ''
public string $id,
public string $type = self::TYPE_CONTENT,
public string $raw = '',
public string $generated = ''
)
{
$this->id = $id;
$this->type = $type;
$this->raw = $raw;
$this->generated = $generated;
}
public function getId(): string

View file

@ -4,12 +4,14 @@
namespace Venom\Models;
use JsonSerializable;
/**
* Database Object to use queries like this $obj->id, $obj->value
* also the option to print it in csv format ; as delimiter
* @package Venom\Database
*/
class DatabaseObject
class DatabaseObject implements JsonSerializable
{
private array $data = [];
@ -26,19 +28,29 @@ class DatabaseObject
$this->data[$name] = $value;
}
public function __isset($name)
public function __isset($name): bool
{
return isset($this->data[$name]);
}
public function toString()
public function toString(): string
{
return implode(';', $this->data);
}
public function getHead()
public function getHead(): string
{
$keys = array_keys($this->data);
return implode(';', $keys);
}
public function getData(): array
{
return $this->data;
}
public function jsonSerialize(): array
{
return $this->data;
}
}

View file

@ -12,9 +12,11 @@ class User
public const GUEST_ROLE = 'ROLE_GUEST';
private string $username = 'GUEST';
private string $email = 'GUEST';
private string $password = '---';
private string $salt = '---';
private string $token = '---';
private string $firstname = '';
private string $lastname = '';
private string $password = '';
private string $salt = '';
private string $token = '';
private string $id = '-1';
private array $roles = [];
private bool $isLoaded = false;

View file

@ -6,6 +6,7 @@ namespace Venom\Routing;
use Exception;
use Venom\Core\Config;
use Venom\Exceptions\ExceptionHandler;
use Venom\Models\User;
use Venom\Security\Security;
@ -122,6 +123,7 @@ class Router
$route->$fnc(...$params);
return true;
} catch (Exception $ex) {
ExceptionHandler::handleException($ex);
return false;
}
}

View file

@ -0,0 +1,36 @@
<?php
namespace Modules\Meta\Controller;
use Venom\Core\DatabaseHandler;
use Venom\Helper\AdminHelper;
class MetaAPIController
{
public function get()
{
AdminHelper::sendResponse([]);
}
public function getById($id)
{
AdminHelper::sendResponse(MetaController::getById($id));
}
public function update($id)
{
return true;
}
public function delete($id)
{
return true;
}
public function create($id)
{
return true;
}
}

View file

@ -0,0 +1,18 @@
<?php
namespace Modules\Meta\Controller;
class MetaController
{
public static function get(): array
{
return [];
}
public static function getById($id): array
{
return [];
}
}

View file

@ -1,9 +1,9 @@
<?php
namespace Modules;
namespace Modules\Meta;
use Modules\Meta\Controller\MetaAPIController;
use Venom\Core\Config;
use Venom\Core\Module;
use Venom\Helper\AdminHelper;
@ -30,7 +30,7 @@ class MetaDataModule implements Module, Route
{
$venom->getRouter(Router::ADMIN_ROUTER)->addRoutes([
'/metaData' => [
'cl' => MetaDataModule::class,
'cl' => MetaAPIController::class,
'roles' => ['ROLE_ADMIN'],
'routes' => [
'*' => [
@ -40,6 +40,7 @@ class MetaDataModule implements Module, Route
"GET" => 'getById',
"POST" => 'update',
"PUT" => 'insert',
"DELETE" => 'delete'
]
]
]

View file

@ -0,0 +1,22 @@
<?php
use Venom\Core\Module;
/*$module = [
Module::NAME => 'MetaModule',
Module::DESC => 'Meta Data Module for SEO',
Module::AUTHOR => 'VstZ dev',
Module::SECURE => true,
MODULE::ROUTE => [
'/'
],
MODULE::TEMPLATES => [
// Include Templates with shorter names! $render->include("meta_roles")
'meta_roles' => 'PATH_TO_TEMPLATE'
],
MODULE::ADMIN_TEMPLATES => [
//
]
];
$venom = $venom ?? die();
$venom->registerModule($module);*/

View file

@ -1,81 +0,0 @@
<?php
namespace Modules;
use Venom\Core\Config;
use Venom\Core\Module;
use Venom\Helper\AdminHelper;
use Venom\Routing\Route;
use Venom\Routing\Router;
use Venom\Venom;
class OverviewModule implements Module, Route
{
public function register(Venom $venom): bool
{
if (Config::getInstance()->isAdmin()) {
$this->registerAdminRoutes($venom);
}
return true;
}
public function init(): void
{
}
private function registerAdminRoutes(Venom $venom)
{
$venom->getRouter(Router::ADMIN_ROUTER)->addRoutes([
'/overview' => [
'cl' => OverviewModule::class,
'roles' => ['ROLE_ADMIN'],
'routes' => [
'*' => [
"GET" => 'get',
],
'1' => [
"GET" => 'getById',
"POST" => 'update',
"PUT" => 'insert',
]
]
]
]);
}
public function get()
{
AdminHelper::sendResponse([
'pages' => [
['id' => 1, 'name' => 'Flamingos going wild!', 'icon' => 'vt-edit'],
['id' => 2, 'name' => 'Turbinen sind geil.', 'icon' => 'vt-edit'],
['id' => 3, 'name' => 'Aufbau und Umbau des neuen VENOMs Plugins', 'icon' => 'vt-edit'],
['id' => 4, 'name' => 'Aber Mama hat gesagt!', 'icon' => 'vt-edit'],
['id' => 5, 'name' => 'Frische Fische nur heute!', 'icon' => 'vt-edit']
]
]);
}
public function update(): bool
{
return false;
}
public function insert(): bool
{
return false;
}
public function getById($id)
{
AdminHelper::sendResponse([
'caseName' => 'ROLE_ADMIN',
'id' => $id,
'name' => 'Admin',
'icon' => 'vt-visibility',
]);
}
}

View file

@ -0,0 +1,64 @@
<?php
namespace Modules\User\Controller;
use Venom\Core\ArgumentHandler;
use Venom\Core\DatabaseHandler;
use Venom\Helper\AdminHelper;
class UserAPIController
{
public function get()
{
//['id' => 1, 'name' => 'engineertrooper', 'icon' => 'vt-edit'],
$data = UserController::get(["id", "username", "firstname", "lastname", "email", "isActive"]);
AdminHelper::sendResponse(["users" => $data]);
}
public function getById($id)
{
$d = UserController::getById($id, ["id", "username", "firstname", "lastname", "email", "isActive"]);
AdminHelper::sendResponse($d);
}
public function update($id)
{
$original = UserController::getById($id);
if ($original == null) {
AdminHelper::sendStatus(false, "User not Found");
}
$args = ArgumentHandler::get();
$data = [];
$d = $original->getData();
foreach ($d as $key => $item) {
if ($args->hasPostItem($key)) {
$val = $args->getPostItem($key);
if ($val != $item) {
$data[$key] = $val;
}
}
}
parse_str(file_get_contents('php://input'), $_PUT);
var_dump(array_keys($_PUT));
//var_dump($data, $d, $_POST);
// $args->getPostItem("username")//UPDATE users SET lastname='Doe', firstname='' WHERE id=2
AdminHelper::sendStatus(UserController::update($id, $data));
}
public function delete($id)
{
AdminHelper::sendStatus(DatabaseHandler::get()->execute(
"DELETE FROM users WHERE id=:id",
[
':id' => $id
]
));
}
public function create($id)
{
// INSERT INTO
AdminHelper::sendStatus(true);
}
}

View file

@ -0,0 +1,36 @@
<?php
namespace Modules\User\Controller;
use Venom\Core\DatabaseHandler;
use Venom\Models\DatabaseObject;
class UserController
{
public static function getById($id, array $fields = ["*"]): ?DatabaseObject
{
if (empty($id)) {
return null;
}
$sel = DatabaseHandler::createEasySelect($fields, "users") . " WHERE id = :id";
return DatabaseHandler::get()->getOne($sel, [
':id' => $id
]);
}
public static function get(array $fields = ["*"]): array
{
return DatabaseHandler::get()->getAll(DatabaseHandler::createEasySelect($fields, "users"));
}
public static function update($id, array $values = []): bool
{
if (count($values) === 0) {
return false;
}
return DatabaseHandler::get()->execute(...DatabaseHandler::getUpdateString($values, "users", "WHERE id = :id"));
}
}

View file

@ -1,9 +1,10 @@
<?php
namespace Modules;
namespace Modules\User;
use Modules\User\Controller\UserAPIController;
use Venom\Core\Config;
use Venom\Core\Module;
use Venom\Helper\AdminHelper;
@ -30,7 +31,7 @@ class UserModule implements Module, Route
{
$venom->getRouter(Router::ADMIN_ROUTER)->addRoutes([
'/users' => [
'cl' => UserModule::class,
'cl' => UserAPIController::class,
'roles' => ['ROLE_ADMIN'],
'routes' => [
'*' => [
@ -38,41 +39,11 @@ class UserModule implements Module, Route
],
'1' => [
"GET" => 'getById',
"POST" => 'update',
"PUT" => 'insert',
"POST" => 'insert',
"PUT" => 'update',
]
]
]
]);
}
public function get()
{
AdminHelper::sendResponse([
'users' => [
['id' => 1, 'name' => 'engineertrooper', 'icon' => 'vt-edit'],
['id' => 2, 'name' => 'versustunez', 'icon' => 'vt-edit']
]
]);
}
public function update(): bool
{
return false;
}
public function insert(): bool
{
return false;
}
public function getById($id)
{
AdminHelper::sendResponse([
'caseName' => 'ROLE_ADMIN',
'id' => $id,
'name' => 'Admin',
'icon' => 'vt-visibility',
]);
}
}