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) { - <?php echo $action === 'view' ? 'Documentation' : 'Documentation - GameServers.World'; ?> + <?php echo $action === 'view' ? 'Documentation' : 'Documentation - GSP'; ?> -

- Server: -    - Game: -    - Workshop Profile: -

- - -

Add Workshop Mod

-
- - - - - - - - - - - - - - - - - - -
- -
- -
- -
- -
-
- -
- - -

Installed Mods ()

- - -

No mods added yet. Use the form above to add Workshop IDs.

- -
- - - - - - - - - - - - - - - - $mod): ?> - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#Workshop IDMod NameFolder NameTypeEnabledStatusOrderActions
- - - - - - - - - - - - - -
- - - -
-
- Installed'; - } elseif ($s === 'queued') { - echo 'Queued'; - } elseif ($s === 'failed') { - echo 'Failed'; - } elseif ($s === 'updating') { - echo 'Updating'; - } else { - echo 'Not installed'; - } - ?> - -
- - - -
-
- - - -
-
-
- - - -
-
- - - -
- - -

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 (-mod=):
- -

- - -

- Server-side mods (-serverMod=):
- -

- -

- 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 - modules/steam_workshop/agent_update_workshop.php for your server: -

-
php /path/to/panel/modules/steam_workshop/agent_update_workshop.php --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). -

- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SettingValueHelp
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: +   Game: +   Workshop Profile:

- +

+ Queue updates from this page. The server agent applies queued updates automatically. +

+
+ +
+

Add Workshop Mod

+
+ +
+ + + +
+

+ +

+
+
+ +
+

Update Queue & Last Result

+

+ Enabled mods: +   Queued: +   Installed: +   Failed: +

+

+ Last update time: +

+ +

Last error:

+ +
+ + +
+
+ +
+

Workshop Behavior Settings

+
+ +
+ + + +
+

+ +

+
+
+ +
+

Installed Mods ()

+ +

No mods added yet. Use the form above to add Workshop IDs.

+ +
+ + + + + + + + + + + + + + + + + + $mod): ?> + + + + + + + + + + 70 ? (substr($mod['last_error'], 0, 67) . '...') : $mod['last_error']) : ''; ?> + + + + + + +
#Workshop IDMod NameFolder NameTypeEnabledStatusLast UpdateLast ErrorOrderActions
+
+ + + +
+ + + + +
+ + + +
+
+ Installed'; + } elseif ($s === 'queued') { + echo 'Queued'; + } elseif ($s === 'failed') { + echo 'Failed'; + } elseif ($s === 'updating') { + echo 'Updating'; + } else { + echo 'Not installed'; + } + ?> + +
+ + + +
+
+ + + +
+
+
+ + + +
+
+
+ +
'; echo "

".get_lang('support')."

"; + $defaultDocsUrl = '/docs.php'; + if (!empty($server_homes) && is_array($server_homes)) { + foreach ((array)$server_homes as $server_home_row) { + if (!empty($server_home_row['game_key'])) { + $defaultDocsUrl = gsp_support_docs_url_for_game_key($server_home_row['game_key']); + break; + } + } + } + echo "
" + . "Game Documentation" + . "Open setup and troubleshooting docs in a new tab." + . "
"; echo '
@@ -97,7 +122,8 @@ if (!empty($webhook)) { echo get_lang('select_server').":


"; @@ -138,6 +164,15 @@ if (!empty($webhook)) { return false; } } + $(document).ready(function(){ + function updateSupportDocLink(){ + var selected = $('#gameserver option:selected'); + var url = selected.data('doc-url') || '/docs.php'; + $('#support-doc-link').attr('href', url); + } + $('#gameserver').on('change', updateSupportDocLink); + updateSupportDocLink(); + });