\n";
+echo "\n";
if ($ssl_issue_count > 0) {
echo "
SSL warning: " . intval($ssl_issue_count) . " Apache SSL certificate issue(s) detected. Updates are not blocked by this. See Advanced Diagnostics for details.
\n";
}
@@ -1733,41 +1746,51 @@ echo "
Update preflight errors: " .
if (!empty($preflight_result['warnings'])) {
echo "
Need something beyond the standard server options? Our developers can customize, repair, automate, or extend your game server with mods, scripts, integrations, migrations, and server-specific tools.
'
- . '
Tell us what you want to build or improve, and we will review the request with you.
diff --git a/docs/modules/PANEL_UPDATE.md b/docs/modules/PANEL_UPDATE.md
index 1ea36bf0..5775f302 100644
--- a/docs/modules/PANEL_UPDATE.md
+++ b/docs/modules/PANEL_UPDATE.md
@@ -23,6 +23,22 @@ The update page uses these settings:
- `gsp_update_panel_post_update_command`
- `gsp_update_backup_before`
+The current admin UI shows these directly:
+
+- Repository URL / Path
+- Branch / Channel
+- Repository Root
+- Backup Path
+- Backup Retention
+- Backup Before Update
+
+The current admin UI keeps these derived or advanced:
+
+- Panel Path is derived from Repository Root plus `/Panel`
+- Panel Source Folder is fixed to `Panel`
+- Git Executable is hidden and defaults to `git`
+- Post-update Command remains under Advanced Settings
+
## Defaults
- Repository URL / Path: `http://forge.runlevelsystems.com/dev/GSP.git`
@@ -58,9 +74,15 @@ The backup directory is created recursively if missing.
Retention is enforced after each successful backup.
+Current count labels:
+
+- `Managed Backups Stored` means all managed updater snapshots discovered in the backup base
+- `Rollback Backups Available` means only full timestamped backups that the restore flow can actually restore
+
## Rollback Workflow
- The rollback selector lists managed backups.
+- The restore action only accepts full timestamped backups from `gsp_get_available_backups()`.
- Restoring a backup restores the Panel tree and metadata.
- Missing website archives are ignored because the active backup path is Panel-focused.
- Apache config restore is optional.
diff --git a/docs/modules/UPDATE.md b/docs/modules/UPDATE.md
index 7bd9bfca..ed2547a3 100644
--- a/docs/modules/UPDATE.md
+++ b/docs/modules/UPDATE.md
@@ -20,7 +20,7 @@ The active update page is intentionally narrow:
- shows the installed Panel version
- shows the current git branch and commit when available
-- exposes editable repository settings for the Panel update only
+- exposes a reduced set of commonly changed repository settings for the Panel update only
- can create a Panel backup
- can update the Panel from the configured repository and branch
- can roll back to an existing Panel backup
@@ -43,6 +43,22 @@ The admin page stores these settings in the Panel settings table:
- `gsp_update_panel_post_update_command`
- `gsp_update_backup_before`
+The active UI now exposes these commonly changed settings directly:
+
+- Repository URL / Path
+- Branch / Channel
+- Repository Root
+- Backup Path
+- Backup Retention
+- Backup Before Update
+
+The active UI now treats these as derived or advanced:
+
+- Panel Path is derived as `Repository Root + /Panel`
+- Panel Source Folder is fixed to `Panel`
+- Git Executable is hidden and defaults to `git`
+- Post-update Command remains available under Advanced Settings
+
Defaults:
- Repository URL / Path: `http://forge.runlevelsystems.com/dev/GSP.git`
@@ -66,20 +82,25 @@ Retention is enforced after each successful backup.
If retention is `5`, the newest five managed backups are kept and older managed backups are pruned automatically.
+Current backup counters on the admin page:
+
+- `Managed Backups Stored` counts all managed updater snapshots returned by `gsp_get_managed_backup_entries()`, including full and component-style entries when present
+- `Rollback Backups Available` counts only full timestamped backups returned by `gsp_get_available_backups()` that the restore flow can actually use
+
## Implementation Notes
- `gsp_update_settings()` and `gsp_validate_update_settings()` remain top-level in `Panel/modules/administration/panel_update.php`.
- `gsp_checkout_update_source()` remains a top-level compatibility helper for the configured repository checkout.
-- `gsp_do_configured_git_update()` now applies only the Panel source folder into the configured Panel path.
+- `gsp_do_configured_git_update()` now applies only the fixed `Panel` source folder into the derived Panel path.
- The page no longer depends on website or agent update settings.
## Update Flow
1. Save or submit repository settings.
-2. Validate repository URL, branch, repo root, Panel path, and backup settings.
+2. Validate repository URL, branch, repo root, and backup settings.
3. Create a backup when enabled.
4. Clone the configured repository source and branch into a temporary checkout.
-5. Copy only the configured Panel source folder into the configured Panel path.
+5. Copy only the fixed `Panel` source folder into the derived Panel path.
6. Preserve `Panel/includes/config.inc.php`.
7. Run module updates/post-update hooks.
8. Write version metadata and `LAST_UPDATE.txt`.
diff --git a/docs/modules/dashboard.md b/docs/modules/dashboard.md
index f3265c51..b680ecc7 100644
--- a/docs/modules/dashboard.md
+++ b/docs/modules/dashboard.md
@@ -9,17 +9,16 @@ Main landing dashboard with widgets and quick server overview.
## Current Status
- Functional
-- Uses the existing collapsible widget layout for customer-facing quick actions
+- Uses a fixed four-card customer dashboard layout
## Dependencies
-- Panel dashboard widgets
- user permissions
+- shared Panel URL helpers
## Database Tables
-- `widgets`
-- `widgets_users`
+- none required for the active customer dashboard card layout
## Agent Interaction
@@ -40,12 +39,12 @@ Main landing dashboard with widgets and quick server overview.
## Known Issues
-- some default widget IDs are legacy and limit how far the collapsible layout can be expanded without a schema change
+- legacy widget infrastructure still exists in the module for historical compatibility, but the active customer dashboard no longer depends on it
## Missing Functionality
- richer status and alert surfaces
-- deeper async server-status embedding without adding remote checks to normal dashboard loads
+- deeper account summaries if a future design needs per-user metrics beyond the Game Monitor link
## Suggested Future Improvements
@@ -55,31 +54,41 @@ Main landing dashboard with widgets and quick server overview.
- Keep / Improve
-## Runlevel Systems Project Request Integration
+## Current Dashboard Cards
- Dashboard render file: `Panel/modules/dashboard/dashboard.php`
- Dashboard styles: `Panel/modules/dashboard/dashboard.css`
- Shared Panel project URL helper: `Panel/includes/functions.php`
- Shared Discord invite helper: `Panel/includes/functions.php`
- Shared server-status route helper: `Panel/includes/functions.php`
+- Theme base: active SimpleBootstrap icon set
-Current project request URL:
+Rendered cards:
-- `https://runlevelsystems.com/start-project.php`
+- `Account Overview`
+ - button: `View My Servers`
+ - route: `home.php?m=gamemanager&p=game_monitor`
+- `Custom Server Code`
+ - button: `Request Custom Development`
+ - URL: `https://runlevelsystems.com/start-project.php`
+ - opens in a new tab
+- `Support`
+ - buttons:
+ - `Create Support Ticket`
+ - `Join Discord`
+ - support route: `home.php?m=tickets&p=submitticket`
+ - Discord URL: `https://discord.gg/qt9Hnkj6cv`
+- `Server Status`
+ - button: `View Server Status`
+ - route: `server_status.php`
+ - opens separately so dashboard rendering does not wait on remote checks
-Dashboard behavior:
+Support versus custom development:
-- retained collapsible sections:
- - `Account Overview`
- - `Custom Server Code`
- - `Support`
-- removed duplicate standalone sections:
- - `Custom Server Development`
- - `Support and Troubleshooting`
-- support remains the path for routine troubleshooting, service issues, and existing features
-- the custom-development CTA points users at Runlevel Systems for project work such as custom scripts, mods, integrations, automation, migrations, dashboards, and advanced server tooling
-- the Discord support invite should use:
- - `https://discord.gg/qt9Hnkj6cv`
-- `Custom Server Code` should open the Runlevel project request in a new tab
-- `Support` should keep ticketing and Discord support separate from paid project work
-- `Server Status` stays available from the dashboard, but remote checks are intentionally deferred to the separate status page so normal dashboard loads do not block on agent/network timeouts
+- support is for routine troubleshooting, service issues, and help using included features
+- custom development is for scripts, integrations, automation, migrations, mods, and new tooling
+
+Behavior change:
+
+- collapsible behavior was removed from the active customer dashboard blocks
+- the old blank-space-prone widget columns are no longer used for the four main customer actions
diff --git a/docs/modules/status.md b/docs/modules/status.md
index 2c0ee22b..1d85c75c 100644
--- a/docs/modules/status.md
+++ b/docs/modules/status.md
@@ -56,26 +56,34 @@ Admin status page for server/node state.
## Display Rules
- Removed the old `Hostname` column
+- Removed the repeated per-row `Last Checked` column
+- Keep one overall `Checked:` timestamp above the table
+- Removed Panel-to-server latency from the customer-facing page
- Keep:
- `Server Name`
- `Location / IP`
- `Status`
- - `Agent Status`
- - `Panel-to-server latency`
- - `Last Checked`
-- Latency wording must remain truthful:
- - current label: `Panel-to-server latency`
- - this is a server-side connectivity check from the Panel host
- - it is not customer-browser latency and must not be presented as the player's ping
+- Status values should remain compact and truthful:
+ - `Online`
+ - `Timed out`
+ - `Agent unavailable`
+ - `Unknown`
+
+Latency note:
+
+- Browser ICMP ping is not available from the Panel UI
+- The previous Panel-to-server latency values were removed because they do not represent the customer's connection to the game-server location
+- Do not attempt to ping the customer's IP from the Panel or from a game server
## Theme Notes
- The status page should visually match the active dark Panel theme
- Use responsive table wrapping for mobile widths instead of forcing a wide desktop table into the viewport
+- Keep the page compact and avoid repeated explanatory cards
## Suggested Future Improvements
-- optional browser-side latency testing only if each location has a safe public health endpoint and the implementation can remain honest about what is being measured
+- optional browser-side location latency testing only if each location has a safe public HTTP or HTTPS health endpoint and the implementation remains honest about what is being measured
## Recommendation
diff --git a/docs/modules/update.md b/docs/modules/update.md
index 275e17f3..a3cbd307 100644
--- a/docs/modules/update.md
+++ b/docs/modules/update.md
@@ -46,12 +46,12 @@ Panel update and patch management.
## Missing Functionality
- richer update history and rollback guidance
-- live progress polling for asynchronous remote agent updates
+- clearer operator documentation around backup counts and derived settings
## Suggested Future Improvements
- keep admin-only and document carefully
-- add status polling for `component_update` logs after the agent has restarted
+- add richer update history summaries if the page later needs deeper audit visibility
## Recommendation
@@ -63,9 +63,12 @@ The primary update implementation lives in `Panel/modules/administration/panel_u
Current update targets:
-- Panel files
-- Website files
-- Linux agents
-- Windows/Cygwin agents
+- Panel files only in the active admin UI
-The updater uses a single configured Git repository with component source folders such as `Panel`, `Website`, `Agent_Linux`, and `Agent-Windows`. Remote agents are updated through the encrypted `component_update` XML-RPC method and preserve hosted game data and agent configuration folders.
+Active UI behavior:
+
+- Repository Root is the primary deployment path setting
+- Panel Path is derived internally as `Repository Root + /Panel`
+- Panel Source Folder is fixed to `Panel`
+- Git Executable is hidden and defaults to `git`
+- Post-update Command remains available only as an advanced field