diff --git a/CHANGELOG.md b/CHANGELOG.md index a77fc6af..0f52143b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 2026-05-08 +- **Steam Workshop reliability + UI simplification:** Removed customer CLI/update scripting instructions from Workshop user flow, reduced per-server behavior options to supported modes only, switched remaining Steam Workshop SQL references to prefix helpers (no `OGP_DB_PREFIX` strings), hardened queued-update agent processing (`queued → updating → installed/failed`) with clearer error persistence, and refreshed monitor/support documentation links to open game-specific docs (fallback to docs index) in a new tab. +- **Billing docs routing refresh:** Updated docs browser links/icons to root-relative storefront paths (`/docs.php`, `/docs/...`) and removed stale hardcoded panel host guidance from getting-started documentation. + ## 2026-05-07 - **README + storefront mobile/cart pricing fixes:** Rewrote the root README for GSP positioning, hardened storefront mobile responsiveness (login, order, cart, shared header guardrails), fixed add-to-cart price persistence for low-decimal paid items, aligned cart/free-checkout math to `total_due` values, and refreshed the canonical storefront footer timestamp. - **Billing/cart/storefront stability pass:** Hardened `add_to_cart.php` to build schema-compatible invoice inserts dynamically (including legacy installs missing `period_start`), fixed free-checkout DB close handling so wrapper objects are never passed to `mysqli_close()`, switched cart/free-total decisions to cent-based math so low nonzero prices (e.g. $0.02) never show as FREE, improved canonical game deduplication + OS variant matching in storefront list/order pages, and aligned Steam Workshop behavior labels with the new restart/update wording. diff --git a/docs/COPILOT_TODO.md b/docs/COPILOT_TODO.md index 1b597ccc..6986a0b7 100644 --- a/docs/COPILOT_TODO.md +++ b/docs/COPILOT_TODO.md @@ -7,3 +7,4 @@ - Add a side-by-side before/after diff preview panel to the config_games top-level XML section editor before section saves. - Add an integration smoke test that exercises paid checkout, free checkout, and add-to-cart on installs with/without `period_start` to prevent billing schema drift regressions. - Add a storefront visual-regression check at 375px and 430px breakpoints covering login, order, and cart pages to prevent mobile overflow regressions. +- Complete a full pass over all `modules/billing/docs/*` game guides to standardize OS/Workshop/RCON capability statements against current XML-backed server support. diff --git a/modules/billing/docs.php b/modules/billing/docs.php index cc654ec3..3dc6bbf8 100644 --- a/modules/billing/docs.php +++ b/modules/billing/docs.php @@ -19,6 +19,7 @@ $docsDir = __DIR__ . '/docs'; // Get action and doc parameters $action = $_GET['action'] ?? 'list'; $doc = $_GET['doc'] ?? ''; +$docsPagePath = '/docs.php'; /** * Get all documentation folders with their metadata @@ -63,9 +64,9 @@ function getDocCategories($docsDir) { // Find icon file $icon = ''; if (file_exists($folderPath . '/icon.png')) { - $icon = 'docs/' . $folder . '/icon.png'; + $icon = '/docs/' . $folder . '/icon.png'; } elseif (file_exists($folderPath . '/icon.jpg')) { - $icon = 'docs/' . $folder . '/icon.jpg'; + $icon = '/docs/' . $folder . '/icon.jpg'; } $categories[] = [ @@ -137,7 +138,7 @@ uksort($grouped, function($a, $b) use ($categoryOrder) { -
- Server: = sw_h($home['home_name']) ?> - - Game: = sw_h($home['game_name']) ?> - - Workshop Profile: = sw_h($profile['config_name']) ?> -
++ Server: = sw_h($home['home_name']) ?> + Game: = sw_h($home['game_name']) ?> + Workshop Profile: = sw_h($profile['config_name']) ?> +
++ Queue updates from this page. The server agent applies queued updates automatically. +
++ +
+ + -+ Enabled mods: = count(array_filter($mods, function ($m) { return !empty($m['enabled']); })) ?> + Queued: = $queuedCount ?> + Installed: = $installedCount ?> + Failed: = $failedCount ?> +
++ Last update time: = $latestUpdateAt ? sw_h($latestUpdateAt) : 'Never' ?> +
+ +Last error: = sw_h($latestError) ?>
+ ++ +
+No mods added yet. Use the form above to add Workshop IDs.
- -| # | -Workshop ID | -Mod Name | -Folder Name | -Type | -Enabled | -Status | -Order | -Actions | -||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| = $idx + 1 ?> | - -= sw_h($mod['workshop_id']) ?> | - - -
- |
-
-
- - - | - - -- - - - | - - -
- |
-
-
-
+
+ Installed Mods (= count($mods) ?>)+ +No mods added yet. Use the form above to add Workshop IDs. + +
+
- - - Generated Launch Parameters-- Based on the enabled mods above (sorted by order). Copy these into your server startup command. - - - -No enabled mods – launch parameters will be empty. - - -
- Client mods (
- Server-side mods (
- Combined: - - - Install / Update Mods-
- Clicking Queue Update marks all enabled mods as queued.
- Then run the agent on the game server host (where SteamCMD and the game files are located)
- to download and install the mods. Adjust the path to the panel's
- php /path/to/panel/modules/steam_workshop/agent_update_workshop.php --home-id== $home_id ?>- - - - - Workshop Behavior Settings-- Configure how Workshop mods are installed and updated for this server. - All options default to the safest setting (manual only, no automatic restarts). - - -
- - -= $idx + 1 ?> |
+ = sw_h($mod['workshop_id']) ?> |
+
+ |
+
+ |
+
+
+
+ |
+
+ |
+
+ Installed';
+ } elseif ($s === 'queued') {
+ echo 'Queued';
+ } elseif ($s === 'failed') {
+ echo 'Failed';
+ } elseif ($s === 'updating') {
+ echo 'Updating';
+ } else {
+ echo 'Not installed';
+ }
+ ?>
+ |
+ = !empty($mod['last_updated_at']) ? sw_h($mod['last_updated_at']) : '-' ?> |
+ = $shortError !== '' ? sw_h($shortError) : '-' ?> |
+
+ |
+
+ |
+ |