"false", "message" => "Error: Demo mode is active"]); exit(); } $remote_update_url = 'updates/version.json'; $local_version_file = 'version.json'; $maintenance_file = 'maintenance.lock'; $update_zip = 'update.zip'; $update_sql_path = 'update.sql'; file_put_contents($maintenance_file, '1'); $remote_data = json_decode(file_get_contents($remote_update_url), true); if (!$remote_data || empty($remote_data['latest_version']) || empty($remote_data['releases'][0]['download_url'])) { unlink($maintenance_file); echo json_encode(["status" => "false", "message" => "Error: Invalid update info"]); exit(); } $local_data = json_decode(file_get_contents($local_version_file), true); $current_version = $local_data['version'] ?? '0.0.0'; $new_version = $remote_data['latest_version']; if (version_compare($new_version, $current_version, '<=')) { unlink($maintenance_file); echo json_encode(["status" => "false", "message" => "Already up to date"]); exit(); } file_put_contents($update_zip, file_get_contents($remote_data['releases'][0]['download_url'])); if (!file_exists($update_zip)) { unlink($maintenance_file); echo json_encode(["status" => "false", "message" => "Download failed"]); exit(); } $zip = new ZipArchive; $tempPath = __DIR__ . '/temp_update_' . time(); mkdir($tempPath); if ($zip->open($update_zip) === TRUE) { $zip->extractTo($tempPath); $zip->close(); unlink($update_zip); // Detect the first folder inside the extracted ZIP (e.g. update-1.0.1) $subdirs = array_filter(glob($tempPath . '/*'), 'is_dir'); $realSource = count($subdirs) === 1 ? $subdirs[0] : $tempPath; // Move files to root $dirIterator = new RecursiveIteratorIterator( new RecursiveDirectoryIterator($realSource, RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::SELF_FIRST ); foreach ($dirIterator as $item) { $destPath = __DIR__ . '/' . $dirIterator->getSubPathName(); if ($item->isDir()) { @mkdir($destPath, 0755, true); } else { copy($item, $destPath); } } // Clean up function deleteDir($dir) { foreach (scandir($dir) as $item) { if ($item == '.' || $item == '..') continue; $path = $dir . DIRECTORY_SEPARATOR . $item; is_dir($path) ? deleteDir($path) : unlink($path); } rmdir($dir); } deleteDir($tempPath); } else { unlink($maintenance_file); echo json_encode(["status" => "false", "message" => "Failed to unzip"]); exit(); } // SQL update if (file_exists($update_sql_path)) { $conn = new mysqli($db_host, $db_user, $db_pass, $db_name); if ($conn->connect_error) { unlink($maintenance_file); echo json_encode(["status" => "false", "message" => "DB connection failed"]); exit(); } $sql = file_get_contents($update_sql_path); if ($db_prefix) { $sql = str_replace('__PREFIX__', $db_prefix, $sql); } if ($conn->multi_query($sql)) { do { if ($result = $conn->store_result()) { $result->free(); } } while ($conn->more_results() && $conn->next_result()); } else { unlink($maintenance_file); echo json_encode(["status" => "false", "message" => "SQL error: " . $conn->error]); exit(); } $conn->close(); unlink($update_sql_path); } // Update version file $localData = file_exists($local_version_file) ? json_decode(file_get_contents($local_version_file), true) : []; $localData['version'] = $new_version; foreach ($remote_data['releases'] as $release) { if ($release['version'] === $new_version) { $localData['release_date'] = $release['release_date'] ?? null; $localData['changelog'] = $release['changelog'] ?? []; break; } } file_put_contents($local_version_file, json_encode($localData, JSON_PRETTY_PRINT)); unlink($maintenance_file); echo json_encode(["status" => "true", "message" => "Update complete: $new_version"]); exit(); } ?> PipraPay - Auto Update

Website Update Available

We're upgrading to a better version with new features and improvements

'; echo '
Current Version
'; echo '
v' . htmlspecialchars($version) . '
'; echo '
    '; foreach ($changelog['details'] as $feature) { echo '
  • ' . htmlspecialchars($feature) . '
  • '; } echo '
'; echo '
'; } else { echo '
'; echo '
Current Version
'; echo '
v' . htmlspecialchars($version) . '
'; echo '

No changelog available.

'; echo '
'; } } else { echo '
'; echo '
Current Version
'; echo '
Unknown
'; echo '

version.json not found.

'; echo '
'; } ?>
')) { // Step 3: Find latest release info $release = null; foreach ($remoteData['releases'] as $r) { if ($r['version'] === $latestVersion) { $release = $r; break; } } // Step 4: Output new version HTML if ($release) { echo '
'; echo '
New Version
'; echo '
v' . htmlspecialchars($release['version']) . '
'; echo '
    '; foreach ($release['changelog'][0]['details'] as $feature) { echo '
  • ' . htmlspecialchars($feature) . '
  • '; } echo '
'; echo '
'; } } else { echo '
'; echo '
New Version
'; echo '
Up-to-date
'; echo '

No new version available.

'; echo '
'; } ?>
The website will be unavailable for approximately 30 minutes during the update process