feat(ota): add 1-click update UI & API with changelog display

This commit is contained in:
sorcier committed 2026-11-04 01:20:38 +01:00
1 parent 2376e7eebb
commit 5d60e66518
3 files changed
+230 -1

No files matched your search

+58
View File
@@ -2231,6 +2231,64 @@ try {
echo json_encode($res);
break;
case 'check_update':
$appDir = dirname(__DIR__);
$localVerJson = file_exists("{$appDir}/version.json")
? json_decode((string)file_get_contents("{$appDir}/version.json"), true)
: ['version' => '1.2.0', 'changelog' => []];
$currentVer = $localVerJson['version'] ?? '1.2.0';
$remoteVer = $currentVer;
$remoteChangelog = [];
$remoteDate = '';
exec("git --git-dir={$appDir}/.git fetch origin main --quiet 2>/dev/null", $output, $code);
$remoteJsonRaw = shell_exec("git --git-dir={$appDir}/.git show origin/main:version.json 2>/dev/null");
if ($remoteJsonRaw) {
$remoteData = json_decode($remoteJsonRaw, true);
if (is_array($remoteData) && !empty($remoteData['version'])) {
$remoteVer = (string)$remoteData['version'];
$remoteChangelog = $remoteData['changelog'] ?? [];
$remoteDate = $remoteData['release_date'] ?? '';
}
}
$hasUpdate = version_compare($remoteVer, $currentVer, '>');
$localHash = trim((string)shell_exec("git --git-dir={$appDir}/.git rev-parse HEAD 2>/dev/null"));
$remoteHash = trim((string)shell_exec("git --git-dir={$appDir}/.git rev-parse origin/main 2>/dev/null"));
if (!$hasUpdate && $localHash !== '' && $remoteHash !== '' && $localHash !== $remoteHash) {
$hasUpdate = true;
}
echo json_encode([
'success' => true,
'current_version' => $currentVer,
'latest_version' => $remoteVer,
'has_update' => $hasUpdate,
'changelog' => $hasUpdate ? $remoteChangelog : ($localVerJson['changelog'] ?? []),
'release_date' => $remoteDate ?: ($localVerJson['release_date'] ?? ''),
]);
break;
case 'run_update':
$output = [];
$code = 0;
exec("sudo /var/www/nexus-pbx/scripts/update.sh 2>&1", $output, $code);
$outputStr = implode("\n", $output);
$appDir = dirname(__DIR__);
$newVerJson = file_exists("{$appDir}/version.json")
? json_decode((string)file_get_contents("{$appDir}/version.json"), true)
: ['version' => '1.3.0'];
echo json_encode([
'success' => ($code === 0),
'new_version' => $newVerJson['version'] ?? '1.3.0',
'output' => $outputStr,
'message' => ($code === 0) ? "Mise à jour réussie !" : "Erreur lors de la mise à jour",
]);
break;
default:
http_response_code(400);
echo json_encode([