VENOM-10: WIP
This commit is contained in:
parent
8d246aa381
commit
5c44d50989
33 changed files with 890 additions and 601 deletions
|
|
@ -38,6 +38,8 @@ class AdminController implements RenderController
|
|||
}
|
||||
Asset::get()->addCSS('styles', 'style.css', 1);
|
||||
Asset::get()->addJS('scripts', 'scripts.min.js', 1);
|
||||
// Components are the Rendering-Pipeline to know how each Admin-Component needs to be rendered
|
||||
Asset::get()->addJS('components', 'components.min.js', 5);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ namespace Venom\Admin;
|
|||
|
||||
|
||||
use Venom\Admin\Routes\LoginRoute;
|
||||
use Venom\Admin\Routes\TemplateLoader;
|
||||
use Venom\Routing\Router;
|
||||
use Venom\Venom;
|
||||
|
||||
|
|
@ -12,9 +13,7 @@ class AdminRouterInit
|
|||
{
|
||||
public static function registerAdminRouters(Venom $venom): void
|
||||
{
|
||||
$router = new Router(Router::ADMIN_ROUTER, 1.0, '/admin/api');
|
||||
$router->addRoutes(self::getRoutes());
|
||||
$venom->addRouter(Router::ADMIN_ROUTER, $router);
|
||||
$venom->getRouter(Router::ADMIN_ROUTER)->addRoutes(self::getRoutes());
|
||||
}
|
||||
|
||||
public static function getRoutes(): array
|
||||
|
|
@ -31,6 +30,15 @@ class AdminRouterInit
|
|||
"GET" => 'handle'
|
||||
]
|
||||
]
|
||||
],
|
||||
'/templateLoader' => [
|
||||
'cl' => TemplateLoader::class,
|
||||
'roles' => ['ROLE_GUEST'],
|
||||
'routes' => [
|
||||
'*' => [
|
||||
"GET" => 'handle'
|
||||
]
|
||||
]
|
||||
]
|
||||
];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,8 +21,7 @@ class LoginRoute implements Route
|
|||
{
|
||||
if ($fnc === 'logout') {
|
||||
Security::get()->logout();
|
||||
$url = ArgumentHandler::get()->getPostItem('REDIRECT_TO', '/admin/');
|
||||
header('Location: ' . $url);
|
||||
echo '{"reload": true}';
|
||||
die();
|
||||
}
|
||||
return true;
|
||||
|
|
|
|||
23
src/Venom/Admin/Routes/TemplateLoader.php
Normal file
23
src/Venom/Admin/Routes/TemplateLoader.php
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
<?php
|
||||
|
||||
|
||||
namespace Venom\Admin\Routes;
|
||||
|
||||
use Venom\Core\ArgumentHandler;
|
||||
use Venom\Helper\TemplateUtil;
|
||||
use Venom\Routing\Route;
|
||||
|
||||
class TemplateLoader implements Route
|
||||
{
|
||||
public function handle(): bool
|
||||
{
|
||||
header('Expires: ' . gmdate('D, d M Y H:i:s \G\M\T', time() + (60 * 60 * 60 * 30)));
|
||||
header('Cache-Control: public');
|
||||
$id = ArgumentHandler::get()->getItem('tpl', '..');
|
||||
if (strpos($id, '..')) {
|
||||
return false;
|
||||
}
|
||||
echo TemplateUtil::includeTemplate('jsTemplates/' . $id, '.tpl');
|
||||
die();
|
||||
}
|
||||
}
|
||||
|
|
@ -4,9 +4,11 @@
|
|||
namespace Venom\Core;
|
||||
|
||||
|
||||
use Venom\Venom;
|
||||
|
||||
interface Module
|
||||
{
|
||||
public function register(): bool;
|
||||
public function register(Venom $venom): bool;
|
||||
|
||||
public function init(): void;
|
||||
}
|
||||
25
src/Venom/Helper/AdminHelper.php
Normal file
25
src/Venom/Helper/AdminHelper.php
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
<?php
|
||||
|
||||
|
||||
namespace Venom\Helper;
|
||||
|
||||
|
||||
class AdminHelper
|
||||
{
|
||||
public static function getResponse($content, bool $shouldReload = false, string $component = '', $extra = false)
|
||||
{
|
||||
$response = [
|
||||
'content' => $content,
|
||||
'component' => $component
|
||||
];
|
||||
|
||||
if ($shouldReload) {
|
||||
$response['reload'] = true;
|
||||
}
|
||||
if ($extra) {
|
||||
$response['extra'] = $extra;
|
||||
}
|
||||
echo json_encode($response);
|
||||
die();
|
||||
}
|
||||
}
|
||||
58
src/Venom/Helper/TemplateUtil.php
Normal file
58
src/Venom/Helper/TemplateUtil.php
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
<?php
|
||||
|
||||
|
||||
namespace Venom\Helper;
|
||||
|
||||
|
||||
use Venom\Core\Config;
|
||||
|
||||
class TemplateUtil
|
||||
{
|
||||
private static ?TemplateUtil $instance = null;
|
||||
private string $baseTemplate;
|
||||
private string $templateDir;
|
||||
|
||||
private function __construct()
|
||||
{
|
||||
if (Config::getInstance()->isAdmin()) {
|
||||
$base = 'base';
|
||||
$theme = 'admin';
|
||||
} else {
|
||||
$data = Config::getInstance()->getRenderer();
|
||||
$theme = $data->theme;
|
||||
$base = $data->baseFile ?? 'base';
|
||||
}
|
||||
$this->baseTemplate = $base . '.php';
|
||||
$this->templateDir = __DIR__ . '/../../../tpl/' . $theme . '/';
|
||||
}
|
||||
|
||||
public static function getInstance(): TemplateUtil
|
||||
{
|
||||
if (self::$instance === null) {
|
||||
self::$instance = new TemplateUtil();
|
||||
}
|
||||
return self::$instance;
|
||||
}
|
||||
|
||||
public function getDir(): string
|
||||
{
|
||||
return $this->templateDir;
|
||||
}
|
||||
|
||||
public function getBase(): string
|
||||
{
|
||||
return $this->baseTemplate;
|
||||
}
|
||||
|
||||
public static function includeTemplate($template, $suffix = '.php')
|
||||
{
|
||||
$dir = self::getInstance()->getDir();
|
||||
$template .= $suffix;
|
||||
if (file_exists($dir . $template)) {
|
||||
ob_start();
|
||||
include_once $dir . $template;
|
||||
return ob_get_clean();
|
||||
}
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
|
@ -27,7 +27,7 @@ class Router
|
|||
|
||||
public function addRoutes(array $routes): void
|
||||
{
|
||||
$this->routes = $routes;
|
||||
$this->routes = array_merge($this->routes, $routes);
|
||||
}
|
||||
|
||||
public function addRoute(string $path, array $route): void
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ class Venom
|
|||
{
|
||||
ExceptionHandler::setExceptionHandler();
|
||||
$this->renderer = new VenomRenderer($this);
|
||||
$this->routers[Router::ADMIN_ROUTER] = new Router(Router::ADMIN_ROUTER, 1.0, '/admin/api');
|
||||
Asset::get()->setRenderer($this->renderer);
|
||||
}
|
||||
|
||||
|
|
@ -116,7 +117,7 @@ class Venom
|
|||
{
|
||||
foreach ($modules as $key => $moduleClass) {
|
||||
$module = new $moduleClass;
|
||||
if ($module instanceof Module && $module->register()) {
|
||||
if ($module instanceof Module && $module->register($this)) {
|
||||
$this->modules[$key] = $module;
|
||||
}
|
||||
}
|
||||
|
|
@ -131,4 +132,9 @@ class Venom
|
|||
{
|
||||
$this->routers[$name] = $router;
|
||||
}
|
||||
|
||||
public function getRouter(string $router): ?Router
|
||||
{
|
||||
return $this->routers[$router];
|
||||
}
|
||||
}
|
||||
|
|
@ -7,6 +7,7 @@ namespace Venom\Views;
|
|||
use Venom\Core\ArgumentHandler;
|
||||
use Venom\Core\Config;
|
||||
use Venom\Helper\MetaGenerator;
|
||||
use Venom\Helper\TemplateUtil;
|
||||
use Venom\Venom;
|
||||
|
||||
class VenomRenderer
|
||||
|
|
@ -52,8 +53,7 @@ class VenomRenderer
|
|||
public function renderTemplate($template): void
|
||||
{
|
||||
// random variable name... to remove it instantly
|
||||
echo $this->includeTemplate($template, '1408138186');
|
||||
unset($this->vars['1408138186']);
|
||||
echo TemplateUtil::includeTemplate($template);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -64,16 +64,9 @@ class VenomRenderer
|
|||
*/
|
||||
public function includeTemplate($template, $varName = '')
|
||||
{
|
||||
$template .= '.php';
|
||||
if (file_exists($this->templateDir . $template)) {
|
||||
ob_start();
|
||||
include_once $this->templateDir . $template;
|
||||
$data = ob_get_clean();
|
||||
$this->vars[$varName] = $data;
|
||||
return $data;
|
||||
}
|
||||
$this->vars[$varName] = '';
|
||||
return '';
|
||||
$data = TemplateUtil::includeTemplate($template);
|
||||
$this->vars[$varName] = $data;
|
||||
return $data;
|
||||
}
|
||||
|
||||
public function addVar($name, $value): void
|
||||
|
|
@ -94,17 +87,12 @@ class VenomRenderer
|
|||
public function init(?RenderController $controller): void
|
||||
{
|
||||
$this->controller = $controller;
|
||||
$data = Config::getInstance()->getRenderer();
|
||||
$theme = $data->theme;
|
||||
$base = $data->baseFile ?? 'base';
|
||||
$this->metaGenerator = new MetaGenerator();
|
||||
if (Config::getInstance()->isAdmin()) {
|
||||
$base = 'base';
|
||||
$theme = 'admin';
|
||||
} else {
|
||||
if (!Config::getInstance()->isAdmin()) {
|
||||
$this->metaGenerator = new MetaGenerator();
|
||||
$this->metaGenerator->loadById();
|
||||
}
|
||||
$this->baseTemplate = $base . '.php';
|
||||
$this->templateDir = __DIR__ . '/../../../tpl/' . $theme . '/';
|
||||
$util = TemplateUtil::getInstance();
|
||||
$this->templateDir = $util->getDir();
|
||||
$this->baseTemplate = $util->getBase();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
79
src/modules/RoleModule.php
Normal file
79
src/modules/RoleModule.php
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
<?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 RoleModule 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([
|
||||
'/roles' => [
|
||||
'cl' => RoleModule::class,
|
||||
'roles' => ['ROLE_ADMIN'],
|
||||
'routes' => [
|
||||
'*' => [
|
||||
"GET" => 'get',
|
||||
],
|
||||
'1' => [
|
||||
"GET" => 'getById',
|
||||
"POST" => 'update',
|
||||
"PUT" => 'insert',
|
||||
]
|
||||
]
|
||||
]
|
||||
]);
|
||||
}
|
||||
|
||||
public function get()
|
||||
{
|
||||
AdminHelper::getResponse([
|
||||
'roles' => [
|
||||
['id' => 1, 'name' => 'Admin', 'icon' => 'vt-visibility'],
|
||||
['id' => 2, 'name' => 'Moderator', 'icon' => 'vt-edit'],
|
||||
['id' => 3, 'name' => 'Gast', 'icon' => 'vt-edit'],
|
||||
]
|
||||
]);
|
||||
}
|
||||
|
||||
public function update(): bool
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
public function insert(): bool
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
public function getById($id)
|
||||
{
|
||||
AdminHelper::getResponse([
|
||||
'caseName' => 'ROLE_ADMIN',
|
||||
'id' => $id,
|
||||
'name' => 'Admin',
|
||||
'icon' => 'vt-visibility'
|
||||
]);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue