99 lines
3.2 KiB
PHP
99 lines
3.2 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace kernel\services;
|
||
|
|
||
|
use kernel\helpers\Debug;
|
||
|
use kernel\helpers\Files;
|
||
|
use kernel\helpers\Manifest;
|
||
|
use kernel\helpers\RESTClient;
|
||
|
use kernel\helpers\Version;
|
||
|
use kernel\Request;
|
||
|
use ZipArchive;
|
||
|
|
||
|
class KernelService
|
||
|
{
|
||
|
protected null|bool $serverAvailable = null;
|
||
|
protected ModuleService $moduleService;
|
||
|
protected Files $files;
|
||
|
|
||
|
public function __construct()
|
||
|
{
|
||
|
$this->moduleService = new ModuleService();
|
||
|
$this->files = new Files();
|
||
|
}
|
||
|
|
||
|
public function getKernelInfo(): false|array|string
|
||
|
{
|
||
|
$info = [];
|
||
|
$info['path'] = KERNEL_DIR;
|
||
|
if (file_exists(KERNEL_DIR . "/manifest.json")) {
|
||
|
$manifest = json_decode(file_get_contents(KERNEL_DIR . "/manifest.json"), true);
|
||
|
$manifest = getConst($manifest);
|
||
|
$info = array_merge($info, $manifest);
|
||
|
}
|
||
|
|
||
|
return $info;
|
||
|
}
|
||
|
|
||
|
public function isLastVersion(): bool
|
||
|
{
|
||
|
if ($this->moduleService->isServerAvailable()) {
|
||
|
$modules_info = RESTClient::request($_ENV['MODULE_SHOP_URL'] . '/api/module_shop/gb_slug');
|
||
|
|
||
|
$modules_info = json_decode($modules_info->getBody()->getContents(), true);
|
||
|
|
||
|
$kernel_info = $this->getKernelInfo();
|
||
|
|
||
|
$kernelVersion = Version::getIntVersionByString($kernel_info['version']);
|
||
|
|
||
|
foreach ($modules_info as $mod) {
|
||
|
$modVersion = Version::getIntVersionByString($mod['version']);
|
||
|
if ($mod['slug'] === $kernel_info['slug'] && $modVersion <= $kernelVersion) {
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
public function updateKernel(string $path): bool
|
||
|
{
|
||
|
$request = new Request();
|
||
|
$files = $request->post('files');
|
||
|
|
||
|
$zip = new ZipArchive;
|
||
|
if (file_exists(ROOT_DIR . $path)) {
|
||
|
$tmpKernelDir = md5(time());
|
||
|
$res = $zip->open(ROOT_DIR . $path);
|
||
|
if ($res === TRUE) {
|
||
|
$tmpKernelDirFull = RESOURCES_DIR . '/tmp/kernel/' . $tmpKernelDir . "/";
|
||
|
$zip->extractTo($tmpKernelDirFull);
|
||
|
$zip->close();
|
||
|
$this->files->recursiveRemoveKernelDir();
|
||
|
$this->files->copyKernelFolder($tmpKernelDirFull . 'kernel' , ROOT_DIR . "/kernel");
|
||
|
|
||
|
foreach ($files as $file) {
|
||
|
if ($file === 'bootstrap.php') {
|
||
|
$this->files->recursiveRemoveDir(ROOT_DIR . '/bootstrap');
|
||
|
$this->files->copyKernelFolder($tmpKernelDirFull . 'bootstrap' , ROOT_DIR . '/bootstrap');
|
||
|
}
|
||
|
if ($file === 'env.example') {
|
||
|
copy($tmpKernelDirFull . $file , ROOT_DIR . '/.' . $file);
|
||
|
chmod(ROOT_DIR . '/.' . $file, 0775);
|
||
|
continue;
|
||
|
}
|
||
|
copy($tmpKernelDirFull . $file , ROOT_DIR . '/' . $file);
|
||
|
chmod(ROOT_DIR . '/' . $file, 0775);
|
||
|
}
|
||
|
|
||
|
$this->files->recursiveRemoveDir($tmpKernelDirFull);
|
||
|
unlink(ROOT_DIR . $path);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
}
|