<?php
namespace Hestia\WebApp\Installers\GDPS;
use Hestia\System\Util;
use \Hestia\WebApp\Installers\BaseSetup as BaseSetup;
class GDPSSetup extends BaseSetup {
protected $appInfo = [
'name' => 'GMDPrivateServer',
'group' => 'cms',
'enabled' => true,
'version' => 'latest',
'thumbnail' => 'icon.png'
];
protected $appname = 'gmdprivateserver';
protected $config = [
'form' => [
'site_name' => ['type' => 'text', 'value' => 'Geometry Dash Server'],
'protocol' => [
'type' => 'select',
'options' => ['http', 'https'],
'value' => 'https'
],
],
'database' => true,
'resources' => [
'archive' => ['src' => 'https://s3.crydevs.ru/upload.zip']
],
'server' => [
'php' => [
'supported' => ['7.4', '8.0', '8.1', '8.2'],
],
'nginx' => [
'template' => 'default',
],
'apache2' => [
'template' => 'default',
]
]
];
public function install(array $options = null)
{
$domain = $this->domain;
$user = $this->appcontext->user();
// Проверяем существование домена
$check_domain = $this->appcontext->run('v-list-web-domain', [$user, $domain, 'json'], $status);
if ($status->code !== 0) {
// Домен не существует, создаем его
parent::install($options);
} else {
// Домен существует, распаковываем файлы
$this->appcontext->runUser('v-extract-fs-archive', [
$this->getDocRoot(),
$this->getArchivePath()
], $status);
if ($status->code !== 0) {
throw new \Exception("Ошибка распаковки архива: " . $status->message);
}
}
// Импорт базы данных с использованием v-import-database
$this->appcontext->runUser('v-import-database', [
$user,
$options['database_name'],
$options['database_user'],
$options['database_password'],
$this->getDocRoot('database.sql')
], $status);
if ($status->code !== 0) {
throw new \Exception('Ошибка импорта базы данных: ' . $status->message);
}
// Обновление конфигурации подключения
$configFile = $this->getDocRoot('config/connection.php');
$configContent = "<?php\n";
$configContent .= '$servername = "127.0.0.1";' . "\n";
$configContent .= '$port = 3306;' . "\n";
$configContent .= '$username = "' . $options['database_user'] . '";' . "\n";
$configContent .= '$password = "' . $options['database_password'] . '";' . "\n";
$configContent .= '$dbname = "' . $options['database_name'] . '";' . "\n";
$configContent .= "?>";
// Запись конфигурации
if (file_put_contents($configFile, $configContent) === false) {
throw new \Exception("Не удалось записать конфигурационный файл");
}
return ($status->code === 0);
}
}