# Workshop Phase 1 Implementation Workspace reference: [`GSP-WORKSPACE.md`](../../../GSP-WORKSPACE.md) ## Summary Phase 1 makes the active Server Content Manager Workshop path usable for DayZ/Arma-style Workshop installs without reviving the deprecated standalone `steam_workshop` user workflow. Active workflow: `Game Monitor` -> `Server Content` -> `Steam Workshop Mods` ## Files Changed - `Panel/modules/addonsmanager/server_content_helpers.php` - `Panel/modules/addonsmanager/workshop_action.php` - `Panel/modules/addonsmanager/workshop_content.php` - `Panel/modules/addonsmanager/addons_manager.php` - `Panel/modules/addonsmanager/module.php` - `Panel/modules/addonsmanager/scripts/workshop/generic_steam_workshop_linux.sh` (Panel template for generated jobs) - `Panel/modules/addonsmanager/scripts/workshop/generic_steam_workshop_windows_cygwin.sh` (Panel template for generated jobs) - `Panel/modules/steam_workshop/monitor_buttons.php` ## User Flow 1. Open a server from the Panel. 2. Click `Server Content`. 3. Open the `Steam Workshop Mods` category. 4. Paste one or more Steam Workshop URLs or numeric Workshop IDs. 5. Click `Install / Queue`. 6. The Panel validates input, stores numeric Workshop IDs, writes a manifest, writes a generated per-job script, executes it through the agent's existing `exec` primitive, and shows the result. 7. Installed items can be enabled/disabled, updated, removed, downloaded without immediate install, assigned an update policy, and later used by Scheduler actions. Accepted input examples: - `450814997` - `https://steamcommunity.com/sharedfiles/filedetails/?id=450814997` Invalid text is rejected before reaching the manifest or shell script. ## Admin Flow 1. Create a Server Content template in `addonsmanager`. 2. Set content type to `Steam Workshop Mods`. 3. Configure `Workshop App ID` when the game XML/profile does not provide it. 4. Leave `Default Workshop IDs` blank for normal user-supplied installs. 5. Optionally configure a target path template. The admin template defines capability and policy. The customer supplies only Workshop item IDs or URLs. ## Install Flow 1. `workshop_content.php` receives the form post. 2. `workshop_action.php` parses URLs/IDs and records rows in `server_content_workshop`. 3. The Panel builds a manifest with per-item install details. 4. The manifest is written to: - `{SERVER_HOME}/gsp_server_content/workshop_manifest.json` 5. A generated job script is written to: - `{SERVER_HOME}/gsp_server_content/jobs/workshop/workshop_job__.sh` 6. The agent runs: - `bash