admin theme manager
This commit is contained in:
@ -3,6 +3,7 @@
|
||||
namespace kernel;
|
||||
|
||||
use kernel\Controller;
|
||||
use kernel\helpers\Debug;
|
||||
use kernel\services\AdminThemeService;
|
||||
|
||||
class AdminController extends Controller
|
||||
|
@ -4,7 +4,6 @@ namespace kernel;
|
||||
|
||||
|
||||
|
||||
use app\helpers\Debug;
|
||||
use Phroute\Phroute\Dispatcher;
|
||||
|
||||
class App
|
||||
|
@ -2,8 +2,6 @@
|
||||
|
||||
namespace kernel;
|
||||
|
||||
use app\helpers\Debug;
|
||||
|
||||
class CgView
|
||||
{
|
||||
public string $viewPath = '';
|
||||
|
@ -2,8 +2,6 @@
|
||||
|
||||
namespace kernel;
|
||||
|
||||
use app\helpers\Debug;
|
||||
|
||||
class FileUpload
|
||||
{
|
||||
protected string $fileTmpPath;
|
||||
|
@ -2,7 +2,6 @@
|
||||
|
||||
namespace kernel;
|
||||
|
||||
use app\helpers\Debug;
|
||||
use MadeSimple\Validator\Validator;
|
||||
|
||||
class FormModel
|
||||
|
@ -1,6 +1,7 @@
|
||||
{
|
||||
"name": "Default",
|
||||
"version": "0.1",
|
||||
"slug": "default",
|
||||
"description": "Default admin theme",
|
||||
"preview": "preview.png",
|
||||
"resource": "/resources/default",
|
||||
|
@ -1,6 +1,7 @@
|
||||
{
|
||||
"name": "Simple",
|
||||
"version": "0.1",
|
||||
"slug": "simple",
|
||||
"description": "Simple admin theme",
|
||||
"preview": "preview.png",
|
||||
"resource": "/resources/simple",
|
||||
|
@ -4,7 +4,6 @@
|
||||
namespace kernel\console;
|
||||
|
||||
|
||||
use app\helpers\Debug;
|
||||
use kernel\App;
|
||||
use Phroute\Phroute\Dispatcher;
|
||||
|
||||
|
@ -1,29 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace kernel\console\controllers;
|
||||
|
||||
use app\helpers\Debug;
|
||||
use kernel\console\ConsoleController;
|
||||
use ZipArchive;
|
||||
|
||||
class AdminTheme extends ConsoleController
|
||||
{
|
||||
|
||||
public function actionInstallTheme()
|
||||
{
|
||||
if (!isset($this->argv['path'])) {
|
||||
throw new \Exception('Missing admin theme path "--path" specified');
|
||||
}
|
||||
|
||||
$zip = new ZipArchive;
|
||||
$res = $zip->open(ROOT_DIR . $this->argv['path']);
|
||||
if ($res === TRUE) {
|
||||
$zip->extractTo(RESOURCES_DIR . '/tmp/ad/');
|
||||
$zip->close();
|
||||
echo 'woot!';
|
||||
} else {
|
||||
echo 'doh!';
|
||||
}
|
||||
}
|
||||
|
||||
}
|
49
kernel/console/controllers/AdminThemeController.php
Normal file
49
kernel/console/controllers/AdminThemeController.php
Normal file
@ -0,0 +1,49 @@
|
||||
<?php
|
||||
|
||||
namespace kernel\console\controllers;
|
||||
|
||||
use kernel\console\ConsoleController;
|
||||
use kernel\helpers\Files;
|
||||
use kernel\helpers\Manifest;
|
||||
use ZipArchive;
|
||||
|
||||
class AdminThemeController extends ConsoleController
|
||||
{
|
||||
|
||||
public function actionInstallTheme(): void
|
||||
{
|
||||
if (!isset($this->argv['path'])) {
|
||||
throw new \Exception('Missing admin theme path "--path" specified');
|
||||
}
|
||||
|
||||
$zip = new ZipArchive;
|
||||
$tmpThemeDir = md5(time());
|
||||
$res = $zip->open(ROOT_DIR . $this->argv['path']);
|
||||
if ($res === TRUE) {
|
||||
$tmpThemeDirFull = RESOURCES_DIR . '/tmp/ad/' . $tmpThemeDir . "/";
|
||||
$zip->extractTo($tmpThemeDirFull);
|
||||
$zip->close();
|
||||
$this->out->r('Архив распакован', 'green');
|
||||
} else {
|
||||
$this->out->r('Message: Ошибка чтения архива', 'red');
|
||||
}
|
||||
|
||||
if (file_exists($tmpThemeDirFull . "meta/manifest.json")){
|
||||
$manifestJson = getConst(file_get_contents($tmpThemeDirFull . "meta/manifest.json"));
|
||||
$manifest = Manifest::getWithVars($manifestJson);
|
||||
$this->out->r('manifest.json инициализирован', 'green');
|
||||
|
||||
$fileHelper = new Files();
|
||||
$fileHelper->copy_folder($tmpThemeDirFull . "meta", $manifest['theme_path']);
|
||||
$fileHelper->copy_folder($tmpThemeDirFull . "resources", $manifest['resource_path']);
|
||||
|
||||
$this->out->r("Удаляем временные файлы", 'green');
|
||||
$fileHelper->recursiveRemoveDir($tmpThemeDirFull);
|
||||
|
||||
$this->out->r("Тема " . $manifest['name'] . " установлена", 'green');
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -13,6 +13,6 @@ App::$collector->group(["prefix" => "migration"], callback: function (RouteColle
|
||||
});
|
||||
|
||||
App::$collector->group(["prefix" => "admin-theme"], callback: function (RouteCollector $router){
|
||||
App::$collector->console('install', [\kernel\console\controllers\AdminTheme::class, 'actionInstallTheme']);
|
||||
App::$collector->console('install', [\kernel\console\controllers\AdminThemeController::class, 'actionInstallTheme']);
|
||||
});
|
||||
|
||||
|
20
kernel/helpers/Debug.php
Normal file
20
kernel/helpers/Debug.php
Normal file
@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
namespace kernel\helpers;
|
||||
|
||||
class Debug
|
||||
{
|
||||
public static function prn($content)
|
||||
{
|
||||
echo '<pre style="background: lightgray; border: 1px solid black; padding: 2px">';
|
||||
print_r($content);
|
||||
echo '</pre>';
|
||||
}
|
||||
public static function dd($content)
|
||||
{
|
||||
echo '<pre style="background: lightgray; border: 1px solid black; padding: 2px">';
|
||||
print_r($content);
|
||||
echo '</pre>';
|
||||
die();
|
||||
}
|
||||
}
|
44
kernel/helpers/Files.php
Normal file
44
kernel/helpers/Files.php
Normal file
@ -0,0 +1,44 @@
|
||||
<?php
|
||||
|
||||
namespace kernel\helpers;
|
||||
|
||||
use FilesystemIterator;
|
||||
|
||||
class Files
|
||||
{
|
||||
public function copy_folder($d1, $d2): void
|
||||
{
|
||||
if (is_dir($d1)) {
|
||||
if (!file_exists($d2)){
|
||||
$_d2 = mkdir($d2, permissions: 0755, recursive: true);
|
||||
if (!$_d2) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
$d = dir($d1);
|
||||
while (false !== ($entry = $d->read())) {
|
||||
if ($entry != '.' && $entry != '..') {
|
||||
$this->copy_folder("$d1/$entry", "$d2/$entry");
|
||||
}
|
||||
}
|
||||
$d->close();
|
||||
} else {
|
||||
copy($d1, $d2);
|
||||
}
|
||||
}
|
||||
|
||||
public function recursiveRemoveDir($dir): void
|
||||
{
|
||||
$includes = new FilesystemIterator($dir);
|
||||
foreach ($includes as $include) {
|
||||
if(is_dir($include) && !is_link($include)) {
|
||||
$this->recursiveRemoveDir($include);
|
||||
}
|
||||
else {
|
||||
unlink($include);
|
||||
}
|
||||
}
|
||||
rmdir($dir);
|
||||
}
|
||||
}
|
20
kernel/helpers/Manifest.php
Normal file
20
kernel/helpers/Manifest.php
Normal file
@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
namespace kernel\helpers;
|
||||
|
||||
class Manifest
|
||||
{
|
||||
|
||||
public static function getWithVars(string $manifestJson): array
|
||||
{
|
||||
$manifest = json_decode($manifestJson, true);
|
||||
$keys = ["{slug}" => $manifest['slug']];
|
||||
foreach($keys as $key => $value)
|
||||
{
|
||||
$manifestJson = str_replace($key, $value, $manifestJson);
|
||||
}
|
||||
|
||||
return json_decode($manifestJson, true);
|
||||
}
|
||||
|
||||
}
|
@ -2,7 +2,6 @@
|
||||
|
||||
namespace kernel\models;
|
||||
|
||||
use app\helpers\Debug;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
/**
|
||||
|
@ -2,14 +2,12 @@
|
||||
|
||||
namespace kernel\modules\admin_themes\controllers;
|
||||
|
||||
use app\helpers\Debug;
|
||||
use DirectoryIterator;
|
||||
use JetBrains\PhpStorm\NoReturn;
|
||||
use kernel\AdminController;
|
||||
use kernel\Controller;
|
||||
use kernel\helpers\Debug;
|
||||
use kernel\models\Option;
|
||||
use kernel\Request;
|
||||
use kernel\services\AdminThemeService;
|
||||
|
||||
class AdminThemeController extends AdminController
|
||||
{
|
||||
|
@ -3,9 +3,6 @@
|
||||
* @var $json string
|
||||
*/
|
||||
|
||||
use app\helpers\Debug;
|
||||
use Itguild\EloquentTable\EloquentDataProvider;
|
||||
use Itguild\EloquentTable\ListEloquentTable;
|
||||
use kernel\models\Option;
|
||||
|
||||
|
||||
|
@ -2,7 +2,6 @@
|
||||
|
||||
namespace kernel\modules\menu\controllers;
|
||||
|
||||
use app\helpers\Debug;
|
||||
use Exception;
|
||||
use JetBrains\PhpStorm\NoReturn;
|
||||
use kernel\AdminController;
|
||||
|
@ -2,7 +2,6 @@
|
||||
|
||||
namespace kernel\modules\menu\models;
|
||||
|
||||
use app\helpers\Debug;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
/**
|
||||
|
@ -2,9 +2,8 @@
|
||||
|
||||
namespace kernel\modules\user\service;
|
||||
|
||||
use app\helpers\Debug;
|
||||
use kernel\modules\user\models\User;
|
||||
use kernel\FormModel;
|
||||
use kernel\modules\user\models\User;
|
||||
|
||||
class UserService
|
||||
{
|
||||
|
@ -2,6 +2,8 @@
|
||||
|
||||
namespace kernel\services;
|
||||
|
||||
use kernel\helpers\Debug;
|
||||
use kernel\helpers\Manifest;
|
||||
use kernel\models\Option;
|
||||
|
||||
class AdminThemeService
|
||||
@ -45,7 +47,7 @@ class AdminThemeService
|
||||
$info['path'] = $theme;
|
||||
if (file_exists($theme . "/manifest.json")){
|
||||
$manifest = file_get_contents($theme . "/manifest.json");
|
||||
$manifest = json_decode($manifest, true);
|
||||
$manifest = Manifest::getWithVars($manifest);
|
||||
$manifest['preview'] = $manifest['resource'] . "/" . $manifest['preview'];
|
||||
$info = array_merge($info, $manifest);
|
||||
}
|
||||
|
Reference in New Issue
Block a user