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..8931e24a 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']) ?> -
- - -No mods added yet. Use the form above to add Workshop IDs.
- - - - -- 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 (-mod=):
-
-
- Server-side mods (-serverMod=):
-
-
- Combined:
-
-
- 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
- modules/steam_workshop/agent_update_workshop.php for your server:
-
php /path/to/panel/modules/steam_workshop/agent_update_workshop.php --home-id== $home_id ?>- -
- Configure how Workshop mods are installed and updated for this server. - All options default to the safest setting (manual only, no automatic restarts). -
- -| Setting | -Value | -Help | -
|---|---|---|
| Install / Update Mode | -- - | -
- Manual only – mods are only updated when you click “Queue Update” above. - On next restart – queued updates are applied the next time the server restarts. - Before every start – the update check runs automatically each time the server starts. - Scheduled – the update check runs on the interval set below (requires cron / agent). - |
-
| Restart Behavior | -- - | -
- Controls what happens when new mod updates are found. - Do not restart – updates are staged but the server keeps running (safe default). - If empty – the server is restarted only when there are zero players connected. - Immediate with warning – a countdown warning is broadcast, then the server restarts. - Next manual restart – updates are installed the next time you manually stop/start the server. - |
-
| Hot-Load | -- - | -
- Disabled – no hot-loading; mod changes take effect only after a server restart (safe default). - Attempt – if the game supports live mod reloading (e.g. via RCON), try to hot-load instead of restarting. - |
-
| Warning Countdown | -- minutes - | -
- Minutes of advance warning broadcast to players before an automatic restart. - Only used when Restart Behavior is set to Restart immediately after warning. - Default: 10 minutes. - |
-
| Scheduled Check Interval | -- - | -
- How often the scheduled update check runs. - Only used when Install / Update Mode is set to Scheduled update check. - Requires the Workshop agent to be running via cron on the game server host. - |
-
- +
+ 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 | +Last Update | +Last Error | +Order | +Actions | +
|---|---|---|---|---|---|---|---|---|---|---|
| = $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']) : '-' ?> | + 70 ? (substr($mod['last_error'], 0, 67) . '...') : $mod['last_error']) : ''; ?> += $shortError !== '' ? sw_h($shortError) : '-' ?> | +
+ |
+
+ |
+