87 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace kernel\services;
 | |
| 
 | |
| use kernel\helpers\Debug;
 | |
| use kernel\helpers\Files;
 | |
| use kernel\helpers\Manifest;
 | |
| use kernel\helpers\RESTClient;
 | |
| 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();
 | |
|             foreach ($modules_info as $mod) {
 | |
|                 if ($mod['slug'] === $kernel_info['slug'] && $mod['version'] === $kernel_info['version']) {
 | |
|                     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->copy_folder($tmpKernelDirFull . 'kernel' , ROOT_DIR . "/kernel");
 | |
| 
 | |
|                 foreach ($files as $file) {
 | |
|                     if ($file === 'bootstrap') {
 | |
|                         $this->files->recursiveRemoveDir(ROOT_DIR . '/bootstrap');
 | |
|                         $this->files->copy_folder($tmpKernelDirFull . 'bootstrap' , ROOT_DIR . '/bootstrap');
 | |
|                     }
 | |
|                     copy($tmpKernelDirFull . $file , ROOT_DIR . '/' . $file);
 | |
|                 }
 | |
| 
 | |
|                 $this->files->recursiveRemoveDir($tmpKernelDirFull);
 | |
| 
 | |
|                 return true;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         return false;
 | |
|     }
 | |
| } |