Файл: upload/pages/admin/update/update.php
Строк: 163
<?php
require_once ($_SERVER['DOCUMENT_ROOT'] . '/core/core.php');
if ($users_perms['manage_update'] != 1) {
RedirectToPage('/');
exit();
}
function getUpdateInfoFromZip($zipPath) {
if (!file_exists($zipPath)) {
return null;
}
$zip = new ZipArchive;
if ($zip->open($zipPath) === TRUE) {
// Путь к version.php внутри архива
$versionFile = 'upload/core/version.php';
// Проверяем наличие файла
$index = $zip->locateName($versionFile, ZipArchive::FL_NOCASE);
if ($index === false) {
$zip->close();
return null;
}
// Читаем содержимое файла
$content = $zip->getFromIndex($index);
$zip->close();
if (!$content) {
return null;
}
// Изолированное выполнение version.php
$version = null;
try {
$tmp = tmpfile();
fwrite($tmp, $content);
$meta = stream_get_meta_data($tmp);
$tmpPath = $meta['uri'];
// version.php создаёт переменную $version
include $tmpPath;
fclose($tmp);
} catch (Throwable $e) {
return null;
}
return $version ?? null;
}
return null;
}
$dir = $_SERVER['DOCUMENT_ROOT'] . '/install/update/up/';
$files = glob($dir . '*.zip');
$zipPath = null;
$fileName = null;
$info = null;
if (!empty($files)) {
$zipPath = $files[0];
$fileName = basename($zipPath);
$info = getUpdateInfoFromZip($zipPath);
}
echo '<div class="home_us tematic">';
$breadcrumbsArray = [
['/', 'Главная'],
['/admin', 'Админ панель'],
['#', 'Обновление']
];
$breadcrumbs = generateBreadcrumbs($breadcrumbsArray);
echo $breadcrumbs['html'];
echo '<script type="application/ld+json">' . $breadcrumbs['json_ld'] . '</script>';
echo '<div class="head_box section-header">
<div class="box_title">Обновление</div>
</div>';
echo '<div class="side_in_count">';
include ($_SERVER['DOCUMENT_ROOT'] . '/core/elements/sidebars/panel.php');
echo '<div class="info_box arb">';
echo '<div class="node-info_box adm">';
if (empty($files)) {
// Пакета нет → загрузить
echo '<a class="btn button" data-bs-toggle="modal" data-bs-target="#upload-update" style="display: flex;">Загрузить пакет</a>';
} elseif ($info) {
// Пакет есть и корректный → перейти к обновлению
echo '<a class="btn button" href="' . homeLink() . '/install/update" style="display: flex;">Перейти к обновлению</a>';
}
echo '</div>';
echo '<div class="modal fade" id="del-update" tabindex="-1" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Удаление пакета</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal"><i class="fas fa-xmark"></i></button>
</div>
<div class="modal-body">
<span>Вы уверены, что хотите удалить пакет <span id="del-update-text"></span>?</span>
</div>
<div class="modal-footer">
<a id="del-update-btn" class="btn button" href="#" style="float: right; margin-left: 5px;">Удалить</a>
</div>
</div>
</div>
</div>
<div class="modal fade" id="upload-update" tabindex="-1" aria-hidden="true">
<div class="modal-dialog">
<form class="modal-content" action="' . homeLink() . '/admin/update/upload" method="post" enctype="multipart/form-data">
<div class="modal-header">
<h5 class="modal-title">Загрузка пакета</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal"><i class="fas fa-xmark"></i></button>
</div>
<div class="modal-body">
<input type="file" name="update" accept=".zip" required>
</div>
<div class="modal-footer">
<input type="submit" value="Загрузить" style="float: right; margin-left: 5px;">
</div>
</form>
</div>
</div>
';
if (!empty($files)) {
if (!$info) {
echo '
<div class="plug_error">
<div class="err_plugin">Ошибка: version.php пакета ' . chars($fileName) . ' не найден или повреждён</div>
<a class="but_link-plug delete" data-bs-toggle="modal" data-bs-target="#del-update"
data-name="' . chars($fileName) . '">
<i class="fas fa-trash"></i>
</a>
</div>';
} else {
echo '<div class="user_info-work-box box-admin">
<div class="user_in_ava box-adm">
<div class="flex_adm-users">';
echo '<div class="user_name_work box">
<div class="flex_st-name_plugin">
<div class="name_plugin">v' . chars($info['version']) . '</div>
</div>';
echo '<div class="desc_plugin">' . chars($info['stade']) . ' - ' . chars($info['patch']) . '</div>';
echo '</div></div>';
echo '<div class="flex-link-adm">';
echo '<a class="but_link-plug delete" data-bs-toggle="modal" data-bs-target="#del-update"
data-name="' . chars($fileName) . '" data-id="' . chars($fileName) . '">
<i class="fas fa-trash"></i>
</a>';
echo '<a class="but_link-plug edit" href="' . homeLink() . '/admin/update/export-update/' . chars($fileName) . '">
<i class="fas fa-download"></i>
</a>';
echo '</div></div></div>';
}
} else {
echo '<div class="plug_error">Пакет обновления отсутствует</div>';
}
echo '</div>';
echo '</div>';
echo '</div>';
$page_html = ob_get_clean();
require_once ($_SERVER['DOCUMENT_ROOT'] . '/layout.php');
?>
<script>
document.addEventListener('DOMContentLoaded', function() {
const modal = document.getElementById('del-update');
modal.addEventListener('show.bs.modal', function (event) {
const button = event.relatedTarget;
const id = button.getAttribute('data-id');
const name = button.getAttribute('data-name');
document.getElementById('del-update-text').innerHTML =
"" + name + "";
document.getElementById('del-update-btn').href =
"<?= homeLink() ?>/admin/update/delete?id=" + id;
});
});
</script>