- Create 3 new DB tables: workshop_game_profiles, workshop_cache, server_workshop_mods - Add WorkshopRepository (DB access layer for all 3 tables) - Add WorkshopInstaller (rsync/robocopy/custom_script copy logic, SteamCMD download via agent exec) - Add WorkshopUpdater (scheduled cache update functions grouped by agent) - Add WorkshopPreStart (pre-start mod sync helper) - Add WorkshopProfileController (admin CRUD for profiles) - Add WorkshopModController (user install/remove/toggle/load_order/sync) - Add admin views: profiles list + profile_form - Add user views: user_workshop_index + user_workshop_mods - Add cron_update.php CLI entry point (--all/--agent-id/--home-id/--profile-id/--workshop-id) - Add prestart_sync.php CLI helper for XML pre_start hook - Update workshop_admin.php to route to profile management - Update main.php to route to new mod management (legacy fallback preserved) - Update module.php with DB migration SQL and version bump to 2.1 - Update lang/en_US.php with all new strings Agent-Logs-Url: https://github.com/GameServerPanel/GSP/sessions/dbeebd0e-e7a5-469d-8a8c-e63193d1ebb0 Co-authored-by: iaretechnician <2749183+iaretechnician@users.noreply.github.com>
73 lines
4.2 KiB
PHP
73 lines
4.2 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
/** @var array $lang */
|
|
/** @var array[] $profiles */
|
|
?>
|
|
<div class="sw-admin sw-profiles">
|
|
<div class="sw-admin__intro">
|
|
<h3><?php echo htmlspecialchars($lang['profile_heading_list'] ?? 'Workshop Game Profiles'); ?></h3>
|
|
<p><?php echo htmlspecialchars($lang['profile_intro'] ?? 'One profile per supported game. Each profile drives mod install and caching behaviour.'); ?></p>
|
|
<a class="btn primary" href="?m=steam_workshop&p=workshop_admin&sw_action=profile_form">
|
|
<?php echo htmlspecialchars($lang['profile_btn_create'] ?? 'Create Profile'); ?>
|
|
</a>
|
|
</div>
|
|
|
|
<?php if (empty($profiles)): ?>
|
|
<p class="sw-empty"><?php echo htmlspecialchars($lang['profile_list_empty'] ?? 'No Workshop profiles defined yet.'); ?></p>
|
|
<?php else: ?>
|
|
<table class="table sw-profiles__table">
|
|
<thead>
|
|
<tr>
|
|
<th><?php echo htmlspecialchars($lang['profile_col_game'] ?? 'Game'); ?></th>
|
|
<th><?php echo htmlspecialchars($lang['profile_col_key'] ?? 'Game Key'); ?></th>
|
|
<th>App ID</th>
|
|
<th>OS</th>
|
|
<th><?php echo htmlspecialchars($lang['profile_col_method'] ?? 'Copy Method'); ?></th>
|
|
<th><?php echo htmlspecialchars($lang['profile_col_restart'] ?? 'Restart?'); ?></th>
|
|
<th><?php echo htmlspecialchars($lang['profile_col_status'] ?? 'Status'); ?></th>
|
|
<th><?php echo htmlspecialchars($lang['admin_col_actions'] ?? 'Actions'); ?></th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<?php foreach ((array)$profiles as $profile): ?>
|
|
<tr>
|
|
<td><?php echo htmlspecialchars($profile['game_name']); ?></td>
|
|
<td><code><?php echo htmlspecialchars($profile['game_key']); ?></code></td>
|
|
<td><?php echo htmlspecialchars($profile['workshop_app_id']); ?></td>
|
|
<td><?php echo htmlspecialchars($profile['supported_os']); ?></td>
|
|
<td><?php echo htmlspecialchars($profile['copy_method']); ?></td>
|
|
<td><?php echo $profile['requires_restart'] ? '✔' : '✘'; ?></td>
|
|
<td>
|
|
<?php if ($profile['enabled']): ?>
|
|
<span class="sw-badge sw-badge--enabled"><?php echo htmlspecialchars($lang['status_enabled'] ?? 'Enabled'); ?></span>
|
|
<?php else: ?>
|
|
<span class="sw-badge sw-badge--disabled"><?php echo htmlspecialchars($lang['status_disabled'] ?? 'Disabled'); ?></span>
|
|
<?php endif; ?>
|
|
</td>
|
|
<td class="sw-actions">
|
|
<a class="btn secondary"
|
|
href="?m=steam_workshop&p=workshop_admin&sw_action=profile_form&profile_id=<?php echo (int)$profile['id']; ?>">
|
|
<?php echo htmlspecialchars($lang['button_edit'] ?? 'Edit'); ?>
|
|
</a>
|
|
<form method="post" action="?m=steam_workshop&p=workshop_admin" class="sw-inline-delete">
|
|
<input type="hidden" name="sw_action" value="profile_delete">
|
|
<input type="hidden" name="profile_id" value="<?php echo (int)$profile['id']; ?>">
|
|
<button type="submit" class="btn danger"
|
|
onclick="return confirm('<?php echo htmlspecialchars($lang['profile_confirm_delete'] ?? 'Delete this Workshop profile?'); ?>')">
|
|
<?php echo htmlspecialchars($lang['button_delete_adapter'] ?? 'Delete'); ?>
|
|
</button>
|
|
</form>
|
|
</td>
|
|
</tr>
|
|
<?php endforeach; ?>
|
|
</tbody>
|
|
</table>
|
|
<?php endif; ?>
|
|
|
|
<hr>
|
|
<p>
|
|
<a href="?m=steam_workshop&p=workshop_admin">←
|
|
<?php echo htmlspecialchars($lang['profile_back_adapters'] ?? 'Back to adapter management'); ?>
|
|
</a>
|
|
</p>
|
|
</div>
|